{"version":3,"file":"igniteui-angular.mjs","sources":["../../../projects/igniteui-angular/src/lib/core/navigation/nav.service.ts","../../../projects/igniteui-angular/src/lib/core/navigation/directives.ts","../../../projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.service.ts","../../../projects/igniteui-angular/src/lib/core/setImmediate.ts","../../../projects/igniteui-angular/src/lib/core/utils.ts","../../../projects/igniteui-angular/src/lib/data-operations/paging-state.interface.ts","../../../projects/igniteui-angular/src/lib/services/transaction/transaction.ts","../../../projects/igniteui-angular/src/lib/data-operations/sorting-strategy.ts","../../../projects/igniteui-angular/src/lib/data-operations/operations.ts","../../../projects/igniteui-angular/src/lib/grids/common/strategy.ts","../../../projects/igniteui-angular/src/lib/data-operations/data-clone-strategy.ts","../../../projects/igniteui-angular/src/lib/data-operations/data-util.ts","../../../projects/igniteui-angular/src/lib/services/exporter-common/export-utilities.ts","../../../projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.common.ts","../../../projects/igniteui-angular/src/lib/date-common/util/date-time.util.ts","../../../projects/igniteui-angular/src/lib/data-operations/filtering-condition.ts","../../../projects/igniteui-angular/src/lib/data-operations/expressions-tree-util.ts","../../../projects/igniteui-angular/src/lib/data-operations/filtering-expressions-tree.ts","../../../projects/igniteui-angular/src/lib/data-operations/filtering-expression.interface.ts","../../../projects/igniteui-angular/src/lib/data-operations/filtering-strategy.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.filtering.strategy.ts","../../../projects/igniteui-angular/src/lib/grids/common/enums.ts","../../../projects/igniteui-angular/src/lib/services/exporter-common/base-export-service.ts","../../../projects/igniteui-angular/src/lib/services/csv/char-separated-value-data.ts","../../../projects/igniteui-angular/src/lib/services/exporter-common/exporter-options-base.ts","../../../projects/igniteui-angular/src/lib/services/csv/csv-exporter-options.ts","../../../projects/igniteui-angular/src/lib/services/csv/csv-exporter.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-enums.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-strings.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-files.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-folders.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-elements-factory.ts","../../../projects/igniteui-angular/src/lib/services/excel/worksheet-data-dictionary.ts","../../../projects/igniteui-angular/src/lib/services/excel/worksheet-data.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-exporter.ts","../../../projects/igniteui-angular/src/lib/services/excel/excel-exporter-options.ts","../../../projects/igniteui-angular/src/lib/services/animation/angular-animation-player.ts","../../../projects/igniteui-angular/src/lib/services/animation/angular-animation-service.ts","../../../projects/igniteui-angular/src/lib/services/overlay/utilities.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/connected-positioning-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/base-fit-position-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/auto-position-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/global-position-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/container-position-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/elastic-position-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/scroll/scroll-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/scroll/NoOpScrollStrategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/overlay.ts","../../../projects/igniteui-angular/src/lib/services/overlay/position/index.ts","../../../projects/igniteui-angular/src/lib/services/overlay/scroll/absolute-scroll-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/scroll/block-scroll-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/scroll/close-scroll-strategy.ts","../../../projects/igniteui-angular/src/lib/services/overlay/scroll/index.ts","../../../projects/igniteui-angular/src/lib/services/transaction/base-transaction.ts","../../../projects/igniteui-angular/src/lib/services/transaction/igx-transaction.ts","../../../projects/igniteui-angular/src/lib/services/transaction/igx-hierarchical-transaction.ts","../../../projects/igniteui-angular/src/lib/services/transaction/transaction-factory.service.ts","../../../projects/igniteui-angular/src/lib/services/theme/theme.token.ts","../../../projects/igniteui-angular/src/lib/services/public_api.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down.common.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down.base.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down-navigation.directive.ts","../../../projects/igniteui-angular/src/lib/directives/hint/hint.directive.ts","../../../projects/igniteui-angular/src/lib/input-group/input-group.common.ts","../../../projects/igniteui-angular/src/lib/directives/input/input.directive.ts","../../../projects/igniteui-angular/src/lib/directives/label/label.directive.ts","../../../projects/igniteui-angular/src/lib/directives/prefix/prefix.directive.ts","../../../projects/igniteui-angular/src/lib/directives/suffix/suffix.directive.ts","../../../projects/igniteui-angular/src/lib/core/i18n/input-resources.ts","../../../projects/igniteui-angular/src/lib/directives/button/button-base.ts","../../../projects/igniteui-angular/src/lib/directives/button/button.directive.ts","../../../projects/igniteui-angular/src/lib/input-group/inputGroupType.ts","../../../projects/igniteui-angular/src/lib/icon/icon.references.ts","../../../projects/igniteui-angular/src/lib/icon/icons.indigo.ts","../../../projects/igniteui-angular/src/lib/icon/icon.service.ts","../../../projects/igniteui-angular/src/lib/icon/icon.component.ts","../../../projects/igniteui-angular/src/lib/icon/icon.component.html","../../../projects/igniteui-angular/src/lib/core/i18n/resources.ts","../../../projects/igniteui-angular/src/lib/input-group/input-group.component.ts","../../../projects/igniteui-angular/src/lib/input-group/input-group.component.html","../../../projects/igniteui-angular/src/lib/input-group/public_api.ts","../../../projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.directive.ts","../../../projects/igniteui-angular/src/lib/directives/divider/divider.directive.ts","../../../projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.strategy.ts","../../../projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.directive.ts","../../../projects/igniteui-angular/src/lib/directives/drag-drop/public_api.ts","../../../projects/igniteui-angular/src/lib/directives/filter/filter.directive.ts","../../../projects/igniteui-angular/src/lib/core/edit-provider.ts","../../../projects/igniteui-angular/src/lib/directives/focus/focus.directive.ts","../../../projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.directive.ts","../../../projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.directive.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/display.container.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/base.helper.component.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/horizontal.virtual.helper.component.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/virtual.helper.component.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/for_of.sync.service.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/for_of.directive.ts","../../../projects/igniteui-angular/src/lib/directives/button/icon-button.directive.ts","../../../projects/igniteui-angular/src/lib/directives/layout/layout.directive.ts","../../../projects/igniteui-angular/src/lib/directives/mask/mask-parsing.service.ts","../../../projects/igniteui-angular/src/lib/directives/mask/mask.directive.ts","../../../projects/igniteui-angular/src/lib/directives/ripple/ripple.directive.ts","../../../projects/igniteui-angular/src/lib/checkbox/checkbox-base.directive.ts","../../../projects/igniteui-angular/src/lib/radio/radio.component.ts","../../../projects/igniteui-angular/src/lib/radio/radio.component.html","../../../projects/igniteui-angular/src/lib/services/direction/directionality.ts","../../../projects/igniteui-angular/src/lib/directives/radio/radio-group.directive.ts","../../../projects/igniteui-angular/src/lib/directives/radio/public_api.ts","../../../projects/igniteui-angular/src/lib/directives/size/ig-size.directive.ts","../../../projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.directive.ts","../../../projects/igniteui-angular/src/lib/directives/text-selection/text-selection.directive.ts","../../../projects/igniteui-angular/src/lib/directives/template-outlet/template_outlet.directive.ts","../../../projects/igniteui-angular/src/lib/directives/toggle/toggle.directive.ts","../../../projects/igniteui-angular/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/igniteui-angular/src/lib/directives/tooltip/tooltip.component.ts","../../../projects/igniteui-angular/src/lib/directives/tooltip/tooltip.component.html","../../../projects/igniteui-angular/src/lib/directives/tooltip/tooltip-target.directive.ts","../../../projects/igniteui-angular/src/lib/directives/tooltip/public_api.ts","../../../projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.directive.ts","../../../projects/igniteui-angular/src/lib/directives/form-control/form-control.directive.ts","../../../projects/igniteui-angular/src/lib/data-operations/groupby-record.interface.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.common.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel-body.component.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.directives.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel-header.component.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel-header.component.html","../../../projects/igniteui-angular/src/lib/expansion-panel/toggle-animation-component.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.component.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.component.html","../../../projects/igniteui-angular/src/lib/accordion/accordion.component.ts","../../../projects/igniteui-angular/src/lib/accordion/accordion.component.html","../../../projects/igniteui-angular/src/lib/expansion-panel/public_api.ts","../../../projects/igniteui-angular/src/lib/accordion/public_api.ts","../../../projects/igniteui-angular/src/lib/core/i18n/action-strip-resources.ts","../../../projects/igniteui-angular/src/lib/core/selection.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down-group.component.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down-item.base.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down-item.component.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down-item.component.html","../../../projects/igniteui-angular/src/lib/drop-down/drop-down.component.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down.component.html","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-action-button.component.ts","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-action-button.component.html","../../../projects/igniteui-angular/src/lib/checkbox/checkbox.component.ts","../../../projects/igniteui-angular/src/lib/checkbox/checkbox.component.html","../../../projects/igniteui-angular/src/lib/grids/common/crud.service.ts","../../../projects/igniteui-angular/src/lib/grids/common/grid.interface.ts","../../../projects/igniteui-angular/src/lib/grids/summaries/grid-summary.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-aggregate.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.interface.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-util.ts","../../../projects/igniteui-angular/src/lib/grids/selection/selection.service.ts","../../../projects/igniteui-angular/src/lib/grids/row.directive.ts","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-actions-base.directive.ts","../../../projects/igniteui-angular/src/lib/action-strip/token.ts","../../../projects/igniteui-angular/src/lib/action-strip/action-strip.component.ts","../../../projects/igniteui-angular/src/lib/action-strip/action-strip.component.html","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.ts","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.html","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.ts","../../../projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-pinning-actions.component.html","../../../projects/igniteui-angular/src/lib/action-strip/public_api.ts","../../../projects/igniteui-angular/src/lib/avatar/avatar.component.ts","../../../projects/igniteui-angular/src/lib/avatar/avatar.component.html","../../../projects/igniteui-angular/src/lib/badge/badge.component.ts","../../../projects/igniteui-angular/src/lib/badge/badge.component.html","../../../projects/igniteui-angular/src/lib/banner/banner.directives.ts","../../../projects/igniteui-angular/src/lib/core/i18n/banner-resources.ts","../../../projects/igniteui-angular/src/lib/banner/banner.component.ts","../../../projects/igniteui-angular/src/lib/banner/banner.component.html","../../../projects/igniteui-angular/src/lib/banner/public_api.ts","../../../projects/igniteui-angular/src/lib/buttonGroup/buttonGroup.component.ts","../../../projects/igniteui-angular/src/lib/buttonGroup/buttongroup-content.component.html","../../../projects/igniteui-angular/src/lib/buttonGroup/public_api.ts","../../../projects/igniteui-angular/src/lib/calendar/common/model.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar.directives.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar.ts","../../../projects/igniteui-angular/src/lib/calendar/common/types.ts","../../../projects/igniteui-angular/src/lib/calendar/common/helpers.ts","../../../projects/igniteui-angular/src/lib/core/dates/dateRange.ts","../../../projects/igniteui-angular/src/lib/calendar/common/calendar-view.directive.ts","../../../projects/igniteui-angular/src/lib/calendar/months-view/months-view.component.ts","../../../projects/igniteui-angular/src/lib/calendar/months-view/months-view.component.html","../../../projects/igniteui-angular/src/lib/calendar/years-view/years-view.component.ts","../../../projects/igniteui-angular/src/lib/calendar/years-view/years-view.component.html","../../../projects/igniteui-angular/src/lib/calendar/days-view/day-item.component.ts","../../../projects/igniteui-angular/src/lib/calendar/days-view/day-item.component.html","../../../projects/igniteui-angular/src/lib/core/i18n/calendar-resources.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar.services.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar-base.ts","../../../projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.ts","../../../projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.html","../../../projects/igniteui-angular/src/lib/calendar/months-view.pipe.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar.component.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar.component.html","../../../projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.ts","../../../projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.html","../../../projects/igniteui-angular/src/lib/calendar/public_api.ts","../../../projects/igniteui-angular/src/lib/card/card.component.ts","../../../projects/igniteui-angular/src/lib/card/card-header.component.html","../../../projects/igniteui-angular/src/lib/card/card.component.html","../../../projects/igniteui-angular/src/lib/card/card-actions.component.html","../../../projects/igniteui-angular/src/lib/card/public_api.ts","../../../projects/igniteui-angular/src/lib/core/i18n/carousel-resources.ts","../../../projects/igniteui-angular/src/lib/carousel/enums.ts","../../../projects/igniteui-angular/src/lib/carousel/carousel-base.ts","../../../projects/igniteui-angular/src/lib/carousel/carousel.directives.ts","../../../projects/igniteui-angular/src/lib/carousel/slide.component.ts","../../../projects/igniteui-angular/src/lib/carousel/slide.component.html","../../../projects/igniteui-angular/src/lib/core/touch.ts","../../../projects/igniteui-angular/src/lib/carousel/carousel.component.ts","../../../projects/igniteui-angular/src/lib/carousel/carousel.component.html","../../../projects/igniteui-angular/src/lib/carousel/public_api.ts","../../../projects/igniteui-angular/src/lib/core/i18n/chip-resources.ts","../../../projects/igniteui-angular/src/lib/chips/chip.component.ts","../../../projects/igniteui-angular/src/lib/chips/chip.component.html","../../../projects/igniteui-angular/src/lib/chips/chips-area.component.ts","../../../projects/igniteui-angular/src/lib/chips/chips-area.component.html","../../../projects/igniteui-angular/src/lib/chips/public_api.ts","../../../projects/igniteui-angular/src/lib/combo/combo.api.ts","../../../projects/igniteui-angular/src/lib/combo/combo-item.component.ts","../../../projects/igniteui-angular/src/lib/combo/combo-item.component.html","../../../projects/igniteui-angular/src/lib/combo/combo.directives.ts","../../../projects/igniteui-angular/src/lib/core/i18n/combo-resources.ts","../../../projects/igniteui-angular/src/lib/combo/combo.common.ts","../../../projects/igniteui-angular/src/lib/combo/combo-add-item.component.ts","../../../projects/igniteui-angular/src/lib/combo/combo-dropdown.component.ts","../../../projects/igniteui-angular/src/lib/combo/combo.pipes.ts","../../../projects/igniteui-angular/src/lib/combo/combo.component.ts","../../../projects/igniteui-angular/src/lib/combo/combo.component.html","../../../projects/igniteui-angular/src/lib/combo/public_api.ts","../../../projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.ts","../../../projects/igniteui-angular/src/lib/simple-combo/simple-combo.component.html","../../../projects/igniteui-angular/src/lib/simple-combo/public_api.ts","../../../projects/igniteui-angular/src/lib/date-common/picker-icons.common.ts","../../../projects/igniteui-angular/src/lib/core/i18n/date-picker-resources.ts","../../../projects/igniteui-angular/src/lib/date-common/types.ts","../../../projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.ts","../../../projects/igniteui-angular/src/lib/date-common/calendar-container/calendar-container.component.html","../../../projects/igniteui-angular/src/lib/date-common/picker-base.directive.ts","../../../projects/igniteui-angular/src/lib/date-picker/date-picker.component.ts","../../../projects/igniteui-angular/src/lib/date-picker/date-picker.component.html","../../../projects/igniteui-angular/src/lib/date-picker/public_api.ts","../../../projects/igniteui-angular/src/lib/dialog/dialog.component.ts","../../../projects/igniteui-angular/src/lib/dialog/dialog-content.component.html","../../../projects/igniteui-angular/src/lib/dialog/dialog.directives.ts","../../../projects/igniteui-angular/src/lib/dialog/public_api.ts","../../../projects/igniteui-angular/src/lib/drop-down/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/column-actions/column-actions.component.ts","../../../projects/igniteui-angular/src/lib/grids/column-actions/column-actions.component.html","../../../projects/igniteui-angular/src/lib/grids/column-actions/column-actions-base.directive.ts","../../../projects/igniteui-angular/src/lib/grids/column-actions/column-hiding.directive.ts","../../../projects/igniteui-angular/src/lib/grids/column-actions/column-pinning.directive.ts","../../../projects/igniteui-angular/src/lib/grids/column-actions/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/columns/validators.directive.ts","../../../projects/igniteui-angular/src/lib/grids/watch-changes.ts","../../../projects/igniteui-angular/src/lib/grids/columns/templates.directive.ts","../../../projects/igniteui-angular/src/lib/grids/moving/moving.service.ts","../../../projects/igniteui-angular/src/lib/grids/grid-public-cell.ts","../../../projects/igniteui-angular/src/lib/grids/columns/column.component.ts","../../../projects/igniteui-angular/src/lib/grids/columns/column-group.component.ts","../../../projects/igniteui-angular/src/lib/grids/columns/column-layout.component.ts","../../../projects/igniteui-angular/src/lib/grids/columns/public_api.ts","../../../projects/igniteui-angular/src/lib/core/i18n/query-builder-resources.ts","../../../projects/igniteui-angular/src/lib/select/select-item.component.ts","../../../projects/igniteui-angular/src/lib/select/select-item.component.html","../../../projects/igniteui-angular/src/lib/select/select-positioning-strategy.ts","../../../projects/igniteui-angular/src/lib/select/select-navigation.directive.ts","../../../projects/igniteui-angular/src/lib/select/select.component.ts","../../../projects/igniteui-angular/src/lib/select/select.component.html","../../../projects/igniteui-angular/src/lib/time-picker/time-picker.common.ts","../../../projects/igniteui-angular/src/lib/time-picker/time-picker.directives.ts","../../../projects/igniteui-angular/src/lib/core/i18n/time-picker-resources.ts","../../../projects/igniteui-angular/src/lib/time-picker/time-picker.pipes.ts","../../../projects/igniteui-angular/src/lib/time-picker/time-picker.component.ts","../../../projects/igniteui-angular/src/lib/time-picker/time-picker.component.html","../../../projects/igniteui-angular/src/lib/query-builder/query-builder.common.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder-drag.service.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.html","../../../projects/igniteui-angular/src/lib/query-builder/query-builder.directives.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder.component.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder.component.html","../../../projects/igniteui-angular/src/lib/core/i18n/grid-resources.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder-header.component.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder-header.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/base-filtering.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-clear-filters.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-clear-filters.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-default-expression.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-date-expression.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-date-expression.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/common.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-header.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-header.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-hiding.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-hiding.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-moving.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-moving.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-pinning.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-pinning.component.html","../../../projects/igniteui-angular/src/lib/progressbar/progressbar.common.ts","../../../projects/igniteui-angular/src/lib/progressbar/progressbar.component.ts","../../../projects/igniteui-angular/src/lib/progressbar/templates/linear-bar.component.html","../../../projects/igniteui-angular/src/lib/progressbar/templates/circular-bar.component.html","../../../projects/igniteui-angular/src/lib/core/i18n/tree-resources.ts","../../../projects/igniteui-angular/src/lib/tree/common.ts","../../../projects/igniteui-angular/src/lib/tree/tree.service.ts","../../../projects/igniteui-angular/src/lib/tree/tree-selection.service.ts","../../../projects/igniteui-angular/src/lib/tree/tree-navigation.service.ts","../../../projects/igniteui-angular/src/lib/tree/tree-node/tree-node.component.ts","../../../projects/igniteui-angular/src/lib/tree/tree-node/tree-node.component.html","../../../projects/igniteui-angular/src/lib/tree/tree.component.ts","../../../projects/igniteui-angular/src/lib/tree/tree.component.html","../../../projects/igniteui-angular/src/lib/list/list.common.ts","../../../projects/igniteui-angular/src/lib/list/list-item.component.ts","../../../projects/igniteui-angular/src/lib/list/list-item.component.html","../../../projects/igniteui-angular/src/lib/core/i18n/list-resources.ts","../../../projects/igniteui-angular/src/lib/list/list.component.ts","../../../projects/igniteui-angular/src/lib/list/list.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-search.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-search.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-selecting.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-selecting.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-sorting.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-sorting.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-filtering.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-filtering.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/grid-footer/grid-footer.component.ts","../../../projects/igniteui-angular/src/lib/grids/moving/moving.drag.directive.ts","../../../projects/igniteui-angular/src/lib/grids/grouping/group-by-area.directive.ts","../../../projects/igniteui-angular/src/lib/grids/grid.directives.ts","../../../projects/igniteui-angular/src/lib/grids/headers/pipes.ts","../../../projects/igniteui-angular/src/lib/grids/resizing/resizing.service.ts","../../../projects/igniteui-angular/src/lib/grids/headers/grid-header.component.ts","../../../projects/igniteui-angular/src/lib/grids/headers/grid-header.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-position-strategy.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/grid-filtering.service.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/base/grid-filtering-cell.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/base/grid-filtering-cell.component.html","../../../projects/igniteui-angular/src/lib/grids/resizing/resize-handle.directive.ts","../../../projects/igniteui-angular/src/lib/grids/moving/moving.drop.directive.ts","../../../projects/igniteui-angular/src/lib/grids/headers/grid-header-group.component.ts","../../../projects/igniteui-angular/src/lib/grids/headers/grid-header-group.component.html","../../../projects/igniteui-angular/src/lib/grids/filtering/base/grid-filtering-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/filtering/base/grid-filtering-row.component.html","../../../projects/igniteui-angular/src/lib/grids/grid-public-row.ts","../../../projects/igniteui-angular/src/lib/grids/common/pipes.ts","../../../projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/headers/grid-header-row.component.html","../../../projects/igniteui-angular/src/lib/grids/headers/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/row-drag.directive.ts","../../../projects/igniteui-angular/src/lib/grids/selection/row-selectors.ts","../../../projects/igniteui-angular/src/lib/grids/selection/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/grid.common.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/token.ts","../../../projects/igniteui-angular/src/lib/grids/grid.rowEdit.directive.ts","../../../projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.ts","../../../projects/igniteui-angular/src/lib/grids/summaries/summary-cell.component.html","../../../projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/summaries/summary-row.component.html","../../../projects/igniteui-angular/src/lib/grids/resizing/resizer.directive.ts","../../../projects/igniteui-angular/src/lib/grids/resizing/resizer.component.ts","../../../projects/igniteui-angular/src/lib/grids/resizing/resizer.component.html","../../../projects/igniteui-angular/src/lib/directives/notification/notifications.directive.ts","../../../projects/igniteui-angular/src/lib/snackbar/snackbar.component.ts","../../../projects/igniteui-angular/src/lib/snackbar/snackbar.component.html","../../../projects/igniteui-angular/src/lib/paginator/token.ts","../../../projects/igniteui-angular/src/lib/grids/grouping/grid-group-by-area.component.ts","../../../projects/igniteui-angular/src/lib/grids/grouping/group-by-area.component.html","../../../projects/igniteui-angular/src/lib/grids/common/types.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid-validation.service.ts","../../../projects/igniteui-angular/src/lib/grids/grid-navigation.service.ts","../../../projects/igniteui-angular/src/lib/grids/summaries/grid-summary.service.ts","../../../projects/igniteui-angular/src/lib/grids/grid-base.directive.ts","../../../projects/igniteui-angular/src/lib/grids/api.service.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid-api.service.ts","../../../projects/igniteui-angular/src/lib/grids/grid/groupby-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/grid/groupby-row.component.html","../../../projects/igniteui-angular/src/lib/grids/grid-mrl-navigation.service.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid.details.pipe.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid.summary.pipe.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid.pipes.ts","../../../projects/igniteui-angular/src/lib/grids/summaries/grid-root-summary.pipe.ts","../../../projects/igniteui-angular/src/lib/grids/cell.component.ts","../../../projects/igniteui-angular/src/lib/grids/cell.component.html","../../../projects/igniteui-angular/src/lib/grids/grid/expandable-cell.component.ts","../../../projects/igniteui-angular/src/lib/grids/grid/expandable-cell.component.html","../../../projects/igniteui-angular/src/lib/grids/grid/grid-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid-row.component.html","../../../projects/igniteui-angular/src/lib/grids/selection/drag-select.directive.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid.component.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid.component.html","../../../projects/igniteui-angular/src/lib/grids/resizing/pivot-grid/pivot-resizing.service.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-header.component.ts","../../../projects/igniteui-angular/src/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-header-group.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.html","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-header-row.component.html","../../../projects/igniteui-angular/src/lib/data-operations/pivot-strategy.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-navigation.service.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-filtering.service.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-content.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-content.component.html","../../../projects/igniteui-angular/src/lib/grids/resizing/pivot-grid/pivot-resizer.component.ts","../../../projects/igniteui-angular/src/lib/data-operations/pivot-sort-strategy.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-sort-util.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.directives.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.pipes.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row.component.html","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid-dimensions.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-mrl-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row-dimension-mrl-row.component.html","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.component.html","../../../projects/igniteui-angular/src/lib/grids/state-base.directive.ts","../../../projects/igniteui-angular/src/lib/grids/state.directive.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/common.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.html","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar.component.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar.component.html","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar.base.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-exporter.component.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-exporter.component.html","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-hiding.component.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-hiding.component.html","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-pinning.component.ts","../../../projects/igniteui-angular/src/lib/grids/toolbar/grid-toolbar-pinning.component.html","../../../projects/igniteui-angular/src/lib/grids/toolbar/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/public_api.ts","../../../projects/igniteui-angular/src/lib/paginator/paginator-interfaces.ts","../../../projects/igniteui-angular/src/lib/core/i18n/paginator-resources.ts","../../../projects/igniteui-angular/src/lib/paginator/paginator.component.ts","../../../projects/igniteui-angular/src/lib/paginator/paginator.component.html","../../../projects/igniteui-angular/src/lib/paginator/page-size-selector.component.html","../../../projects/igniteui-angular/src/lib/paginator/pager.component.html","../../../projects/igniteui-angular/src/lib/paginator/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/grid/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.component.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-data-selector.component.html","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-api.service.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.directives.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-selection.service.ts","../../../projects/igniteui-angular/src/lib/grids/grouping/tree-grid-group-by-area.component.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.summary.pipe.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.filtering.pipe.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.pipes.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-cell.component.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-cell.component.html","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-row.component.html","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.component.html","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.grouping.pipe.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/public_api.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-api.service.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/row-island-api.service.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/row-island.component.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.pipes.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-cell.component.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-row.component.html","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/child-grid-row.component.html","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.component.html","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/public_api.ts","../../../projects/igniteui-angular/src/lib/list/public_api.ts","../../../projects/igniteui-angular/src/lib/navbar/navbar.component.ts","../../../projects/igniteui-angular/src/lib/navbar/navbar.component.html","../../../projects/igniteui-angular/src/lib/navbar/public_api.ts","../../../projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.directives.ts","../../../projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.component.ts","../../../projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.component.html","../../../projects/igniteui-angular/src/lib/navigation-drawer/public_api.ts","../../../projects/igniteui-angular/src/lib/progressbar/public_api.ts","../../../projects/igniteui-angular/src/lib/slider/slider.common.ts","../../../projects/igniteui-angular/src/lib/slider/label/thumb-label.component.ts","../../../projects/igniteui-angular/src/lib/slider/label/thumb-label.component.html","../../../projects/igniteui-angular/src/lib/slider/thumb/thumb-slider.component.ts","../../../projects/igniteui-angular/src/lib/slider/thumb/thumb-slider.component.html","../../../projects/igniteui-angular/src/lib/slider/ticks/tick.pipe.ts","../../../projects/igniteui-angular/src/lib/slider/ticks/ticks.component.ts","../../../projects/igniteui-angular/src/lib/slider/ticks/ticks.component.html","../../../projects/igniteui-angular/src/lib/slider/slider.component.ts","../../../projects/igniteui-angular/src/lib/slider/slider.component.html","../../../projects/igniteui-angular/src/lib/slider/public_api.ts","../../../projects/igniteui-angular/src/lib/switch/switch.component.ts","../../../projects/igniteui-angular/src/lib/switch/switch.component.html","../../../projects/igniteui-angular/src/lib/tabs/tabs.base.ts","../../../projects/igniteui-angular/src/lib/tabs/tab-item.directive.ts","../../../projects/igniteui-angular/src/lib/tabs/tab-content.directive.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav-content.component.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav-content.component.html","../../../projects/igniteui-angular/src/lib/tabs/tab-header.directive.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav-header.component.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav-header.component.html","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav-item.component.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav-item.component.html","../../../projects/igniteui-angular/src/lib/tabs/tabs.directive.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.component.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.component.html","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.directives.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/public_api.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/tab-content.component.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/tab-content.component.html","../../../projects/igniteui-angular/src/lib/tabs/tabs/tabs.component.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/tabs.component.html","../../../projects/igniteui-angular/src/lib/tabs/tabs/tab-header.component.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/tab-header.component.html","../../../projects/igniteui-angular/src/lib/tabs/tabs/tab-item.component.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/tab-item.component.html","../../../projects/igniteui-angular/src/lib/tabs/tabs/tabs.directives.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/public_api.ts","../../../projects/igniteui-angular/src/lib/time-picker/public_api.ts","../../../projects/igniteui-angular/src/lib/toast/toast.component.ts","../../../projects/igniteui-angular/src/lib/toast/toast.component.html","../../../projects/igniteui-angular/src/lib/select/select-group.component.ts","../../../projects/igniteui-angular/src/lib/select/public_api.ts","../../../projects/igniteui-angular/src/lib/splitter/splitter-pane/splitter-pane.component.ts","../../../projects/igniteui-angular/src/lib/splitter/splitter-pane/splitter-pane.component.html","../../../projects/igniteui-angular/src/lib/splitter/splitter.component.ts","../../../projects/igniteui-angular/src/lib/splitter/splitter.component.html","../../../projects/igniteui-angular/src/lib/splitter/splitter-bar.component.html","../../../projects/igniteui-angular/src/lib/splitter/public_api.ts","../../../projects/igniteui-angular/src/lib/stepper/stepper.common.ts","../../../projects/igniteui-angular/src/lib/stepper/stepper.service.ts","../../../projects/igniteui-angular/src/lib/stepper/stepper.directive.ts","../../../projects/igniteui-angular/src/lib/stepper/step/step.component.ts","../../../projects/igniteui-angular/src/lib/stepper/step/step.component.html","../../../projects/igniteui-angular/src/lib/stepper/stepper.component.ts","../../../projects/igniteui-angular/src/lib/stepper/stepper.component.html","../../../projects/igniteui-angular/src/lib/stepper/public_api.ts","../../../projects/igniteui-angular/src/lib/date-range-picker/date-range-picker-inputs.common.ts","../../../projects/igniteui-angular/src/lib/core/i18n/date-range-picker-resources.ts","../../../projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.ts","../../../projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.component.html","../../../projects/igniteui-angular/src/lib/date-range-picker/public_api.ts","../../../projects/igniteui-angular/src/lib/tree/public_api.ts","../../../projects/igniteui-angular/src/lib/query-builder/public_api.ts","../../../projects/igniteui-angular/src/lib/accordion/accordion.module.ts","../../../projects/igniteui-angular/src/lib/action-strip/action-strip.module.ts","../../../projects/igniteui-angular/src/lib/avatar/avatar.module.ts","../../../projects/igniteui-angular/src/lib/badge/badge.module.ts","../../../projects/igniteui-angular/src/lib/banner/banner.module.ts","../../../projects/igniteui-angular/src/lib/buttonGroup/buttongroup.module.ts","../../../projects/igniteui-angular/src/lib/calendar/calendar.module.ts","../../../projects/igniteui-angular/src/lib/card/card.module.ts","../../../projects/igniteui-angular/src/lib/carousel/carousel.module.ts","../../../projects/igniteui-angular/src/lib/checkbox/checkbox.module.ts","../../../projects/igniteui-angular/src/lib/chips/chips.module.ts","../../../projects/igniteui-angular/src/lib/combo/combo.module.ts","../../../projects/igniteui-angular/src/lib/date-picker/date-picker.module.ts","../../../projects/igniteui-angular/src/lib/date-range-picker/date-range-picker.module.ts","../../../projects/igniteui-angular/src/lib/dialog/dialog.module.ts","../../../projects/igniteui-angular/src/lib/directives/autocomplete/autocomplete.module.ts","../../../projects/igniteui-angular/src/lib/directives/button/button.module.ts","../../../projects/igniteui-angular/src/lib/directives/date-time-editor/date-time-editor.module.ts","../../../projects/igniteui-angular/src/lib/directives/divider/divider.module.ts","../../../projects/igniteui-angular/src/lib/directives/drag-drop/drag-drop.module.ts","../../../projects/igniteui-angular/src/lib/directives/filter/filter.module.ts","../../../projects/igniteui-angular/src/lib/directives/focus/focus.module.ts","../../../projects/igniteui-angular/src/lib/directives/focus-trap/focus-trap.module.ts","../../../projects/igniteui-angular/src/lib/directives/for-of/for_of.module.ts","../../../projects/igniteui-angular/src/lib/directives/form-control/form-control.module.ts","../../../projects/igniteui-angular/src/lib/directives/layout/layout.module.ts","../../../projects/igniteui-angular/src/lib/directives/mask/mask.module.ts","../../../projects/igniteui-angular/src/lib/directives/radio/radio-group.module.ts","../../../projects/igniteui-angular/src/lib/directives/ripple/ripple.module.ts","../../../projects/igniteui-angular/src/lib/directives/scroll-inertia/scroll_inertia.module.ts","../../../projects/igniteui-angular/src/lib/directives/text-highlight/text-highlight.module.ts","../../../projects/igniteui-angular/src/lib/directives/text-selection/text-selection.module.ts","../../../projects/igniteui-angular/src/lib/directives/toggle/toggle.module.ts","../../../projects/igniteui-angular/src/lib/directives/tooltip/tooltip.module.ts","../../../projects/igniteui-angular/src/lib/drop-down/drop-down.module.ts","../../../projects/igniteui-angular/src/lib/expansion-panel/expansion-panel.module.ts","../../../projects/igniteui-angular/src/lib/grids/grid/grid.module.ts","../../../projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.module.ts","../../../projects/igniteui-angular/src/lib/grids/hierarchical-grid/hierarchical-grid.module.ts","../../../projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.module.ts","../../../projects/igniteui-angular/src/lib/icon/icon.module.ts","../../../projects/igniteui-angular/src/lib/input-group/input-group.module.ts","../../../projects/igniteui-angular/src/lib/list/list.module.ts","../../../projects/igniteui-angular/src/lib/navbar/navbar.module.ts","../../../projects/igniteui-angular/src/lib/navigation-drawer/navigation-drawer.module.ts","../../../projects/igniteui-angular/src/lib/paginator/paginator.module.ts","../../../projects/igniteui-angular/src/lib/progressbar/progressbar.module.ts","../../../projects/igniteui-angular/src/lib/query-builder/query-builder.module.ts","../../../projects/igniteui-angular/src/lib/select/select.module.ts","../../../projects/igniteui-angular/src/lib/simple-combo/simple-combo.module.ts","../../../projects/igniteui-angular/src/lib/slider/slider.module.ts","../../../projects/igniteui-angular/src/lib/snackbar/snackbar.module.ts","../../../projects/igniteui-angular/src/lib/splitter/splitter.module.ts","../../../projects/igniteui-angular/src/lib/stepper/stepper.module.ts","../../../projects/igniteui-angular/src/lib/switch/switch.module.ts","../../../projects/igniteui-angular/src/lib/tabs/bottom-nav/bottom-nav.module.ts","../../../projects/igniteui-angular/src/lib/tabs/tabs/tabs.module.ts","../../../projects/igniteui-angular/src/lib/time-picker/time-picker.module.ts","../../../projects/igniteui-angular/src/lib/toast/toast.module.ts","../../../projects/igniteui-angular/src/lib/tree/tree.module.ts","../../../projects/igniteui-angular/src/public_api.ts","../../../projects/igniteui-angular/src/igniteui-angular.ts"],"sourcesContent":["import { IToggleView } from './IToggleView';\nimport { Injectable } from '@angular/core';\n\n/**\n * Common service to be injected between components where those implementing common\n * ToggleView interface can register and toggle directives can call their methods.\n * TODO: Track currently active? Events?\n */\n@Injectable({ providedIn: 'root' })\nexport class IgxNavigationService {\n    private navs: { [id: string]: IToggleView };\n\n    constructor() {\n        this.navs = {};\n    }\n\n    public add(id: string, navItem: IToggleView) {\n        this.navs[id] = navItem;\n    }\n\n    public remove(id: string) {\n        delete this.navs[id];\n    }\n\n    public get(id: string): IToggleView {\n        if (id) {\n            return this.navs[id];\n        }\n    }\n\n    public toggle(id: string, ...args) {\n        if (this.navs[id]) {\n            return this.navs[id].toggle(...args);\n        }\n    }\n    public open(id: string, ...args) {\n        if (this.navs[id]) {\n            return this.navs[id].open(...args);\n        }\n    }\n    public close(id: string, ...args) {\n        if (this.navs[id]) {\n            return this.navs[id].close(...args);\n        }\n    }\n}\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { IgxNavigationService } from './nav.service';\n\n/**\n * Directive that can toggle targets through provided NavigationService.\n *\n * Usage:\n * ```\n * <button type=\"button\" igxNavToggle=\"ID\">Toggle</button>\n * ```\n * Where the `ID` matches the ID of compatible `IToggleView` component.\n */\n@Directive({\n    selector: '[igxNavToggle]',\n    standalone: true\n})\nexport class IgxNavigationToggleDirective {\n    @Input('igxNavToggle') private target;\n\n    public state: IgxNavigationService;\n\n    constructor(nav: IgxNavigationService) {\n        this.state = nav;\n    }\n\n    @HostListener('click')\n    public toggleNavigationDrawer() {\n        this.state.toggle(this.target, true);\n    }\n}\n\n/**\n * Directive that can close targets through provided NavigationService.\n *\n * Usage:\n * ```\n * <button type=\"button\" igxNavClose=\"ID\">Close</button>\n * ```\n * Where the `ID` matches the ID of compatible `IToggleView` component.\n */\n@Directive({\n    selector: '[igxNavClose]',\n    standalone: true\n})\nexport class IgxNavigationCloseDirective {\n    @Input('igxNavClose') private target;\n\n    public state: IgxNavigationService;\n\n    constructor(nav: IgxNavigationService) {\n        this.state = nav;\n    }\n\n    @HostListener('click')\n    public closeNavigationDrawer() {\n        this.state.close(this.target, true);\n    }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { IActiveHighlightInfo } from './text-highlight.directive';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IgxTextHighlightService {\n    public highlightGroupsMap = new Map<string, IActiveHighlightInfo>();\n    public onActiveElementChanged = new EventEmitter<string>();\n\n    constructor() { }\n\n    /**\n     * Activates the highlight at a given index.\n     * (if such index exists)\n     */\n    public setActiveHighlight(groupName: string, highlight: IActiveHighlightInfo) {\n        this.highlightGroupsMap.set(groupName, highlight);\n        this.onActiveElementChanged.emit(groupName);\n    }\n\n    /**\n     * Clears any existing highlight.\n     */\n    public clearActiveHighlight(groupName) {\n        this.highlightGroupsMap.set(groupName, {\n            index: -1\n        });\n        this.onActiveElementChanged.emit(groupName);\n    }\n\n    /**\n     * Destroys a highlight group.\n     */\n    public destroyGroup(groupName: string) {\n        this.highlightGroupsMap.delete(groupName);\n    }\n}\n","/* Copyright (c) 2014-2020 Denis Pushkarev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE\n */\n\n// Note: Originally copied from core-js-pure package and modified. (https://github.com/zloirock/core-js)\n\nconst queue = {};\nlet counter = 0;\nlet eventListenerAdded = false;\n\ndeclare global {\n    interface Window {\n        setImmediate: any;\n        clearImmediate: any;\n    }\n}\n\nconst run = (id) => {\n    if (queue.hasOwnProperty(id)) {\n        const fn = queue[id];\n        delete queue[id];\n        fn();\n    }\n};\n\nconst listener = (event) => run(event.data);\n\n// Use function instead of arrow function to workaround an issue in codesandbox\nexport function setImmediate(cb: () => void, ...args) {\n    if (window.setImmediate) {\n        return window.setImmediate(cb);\n    }\n\n    if (!eventListenerAdded) {\n        eventListenerAdded = true;\n        window.addEventListener('message', listener, false);\n    }\n\n    queue[++counter] = () => {\n        cb.apply(undefined, args);\n    };\n\n    const windowLocation = window.location;\n    window.postMessage(counter + '', windowLocation.protocol + '//' + windowLocation.host);\n\n    return counter;\n}\n\nexport function clearImmediate(id: any) {\n    if (window.clearImmediate) {\n        return window.clearImmediate(id);\n    }\n\n    delete queue[id];\n}\n","import { CurrencyPipe, formatDate as _formatDate, isPlatformBrowser } from '@angular/common';\nimport { Inject, Injectable, InjectionToken, PLATFORM_ID, inject } from '@angular/core';\nimport { mergeWith } from 'lodash-es';\nimport { NEVER, Observable } from 'rxjs';\nimport { setImmediate } from './setImmediate';\nimport { isDevMode } from '@angular/core';\nimport { IgxTheme } from '../services/theme/theme.token';\n\n/** @hidden @internal */\nexport const ELEMENTS_TOKEN = /*@__PURE__*/new InjectionToken<boolean>('elements environment');\n\n/**\n * @hidden\n */\nexport const showMessage = (message: string, isMessageShown: boolean): boolean => {\n    if (!isMessageShown && isDevMode()) {\n        console.warn(message);\n    }\n\n    return true;\n};\n\nexport const mkenum = <T extends { [index: string]: U }, U extends string>(x: T) => x;\n\n/**\n *\n * @hidden @internal\n */\nexport const getResizeObserver = () => globalThis.window?.ResizeObserver;\n\n/**\n * @hidden\n */\nexport const cloneArray = (array: any[], deep?: boolean) => {\n    const arr = [];\n    if (!array) {\n        return arr;\n    }\n    let i = array.length;\n    while (i--) {\n        arr[i] = deep ? cloneValue(array[i]) : array[i];\n    }\n    return arr;\n};\n\n/**\n * Doesn't clone leaf items\n *\n * @hidden\n */\nexport const cloneHierarchicalArray = (array: any[], childDataKey: any): any[] => {\n    const result: any[] = [];\n    if (!array) {\n        return result;\n    }\n\n    for (const item of array) {\n        const clonedItem = cloneValue(item);\n        if (Array.isArray(item[childDataKey])) {\n            clonedItem[childDataKey] = cloneHierarchicalArray(clonedItem[childDataKey], childDataKey);\n        }\n        result.push(clonedItem);\n    }\n    return result;\n};\n\n/**\n * Creates an object with prototype from provided source and copies\n * all properties descriptors from provided source\n * @param obj Source to copy prototype and descriptors from\n * @returns New object with cloned prototype and property descriptors\n */\nexport const copyDescriptors = (obj) => {\n    if (obj) {\n        return Object.create(\n            Object.getPrototypeOf(obj),\n            Object.getOwnPropertyDescriptors(obj)\n        );\n    }\n}\n\n\n/**\n * Deep clones all first level keys of Obj2 and merges them to Obj1\n *\n * @param obj1 Object to merge into\n * @param obj2 Object to merge from\n * @returns Obj1 with merged cloned keys from Obj2\n * @hidden\n */\nexport const mergeObjects = (obj1: any, obj2: any): any => mergeWith(obj1, obj2, (objValue, srcValue) => {\n    if (Array.isArray(srcValue)) {\n        return objValue = srcValue;\n    }\n});\n\n/**\n * Creates deep clone of provided value.\n * Supports primitive values, dates and objects.\n * If passed value is array returns shallow copy of the array.\n *\n * @param value value to clone\n * @returns Deep copy of provided value\n * @hidden\n */\nexport const cloneValue = (value: any): any => {\n    if (isDate(value)) {\n        return new Date(value.getTime());\n    }\n    if (Array.isArray(value)) {\n        return [...value];\n    }\n\n    if (value instanceof Map || value instanceof Set) {\n        return value;\n    }\n\n    if (isObject(value)) {\n        const result = {};\n\n        for (const key of Object.keys(value)) {\n            if (key === \"externalObject\") {\n                continue;\n            }\n            result[key] = cloneValue(value[key]);\n        }\n        return result;\n    }\n    return value;\n};\n\n/**\n * Creates deep clone of provided value.\n * Supports primitive values, dates and objects.\n * If passed value is array returns shallow copy of the array.\n * For Objects property values and references are cached and reused.\n * This allows for circular references to same objects.\n *\n * @param value value to clone\n * @param cache map of cached values already parsed\n * @returns Deep copy of provided value\n * @hidden\n */\nexport const cloneValueCached = (value: any, cache: Map<any, any>): any => {\n    if (isDate(value)) {\n        return new Date(value.getTime());\n    }\n    if (Array.isArray(value)) {\n        return [...value];\n    }\n\n    if (value instanceof Map || value instanceof Set) {\n        return value;\n    }\n\n    if (isObject(value)) {\n        if (cache.has(value)) {\n            return cache.get(value);\n        }\n\n        const result = {};\n        cache.set(value, result);\n\n        for (const key of Object.keys(value)) {\n            result[key] = cloneValueCached(value[key], cache);\n        }\n        return result;\n    }\n    return value;\n};\n\n/**\n * Parse provided input to Date.\n *\n * @param value input to parse\n * @returns Date if parse succeed or null\n * @hidden\n */\nexport const parseDate = (value: any): Date | null => {\n    // if value is Invalid Date return null\n    if (isDate(value)) {\n        return !isNaN(value.getTime()) ? value : null;\n    }\n    return value ? new Date(value) : null;\n};\n\n/**\n * Returns an array with unique dates only.\n *\n * @param columnValues collection of date values (might be numbers or ISO 8601 strings)\n * @returns collection of unique dates.\n * @hidden\n */\nexport const uniqueDates = (columnValues: any[]) => columnValues.reduce((a, c) => {\n    if (!a.cache[c.label]) {\n        a.result.push(c);\n    }\n    a.cache[c.label] = true;\n    return a;\n}, { result: [], cache: {} }).result;\n\n/**\n * Checks if provided variable is Object\n *\n * @param value Value to check\n * @returns true if provided variable is Object\n * @hidden\n */\nexport const isObject = (value: any): boolean => !!(value && value.toString() === '[object Object]');\n\n/**\n * Checks if provided variable is Date\n *\n * @param value Value to check\n * @returns true if provided variable is Date\n * @hidden\n */\nexport const isDate = (value: any): value is Date => {\n    return Object.prototype.toString.call(value) === \"[object Date]\";\n}\n\n/**\n * Checks if the two passed arguments are equal\n * Currently supports date objects\n *\n * @param obj1\n * @param obj2\n * @returns: `boolean`\n * @hidden\n */\nexport const isEqual = (obj1, obj2): boolean => {\n    if (isDate(obj1) && isDate(obj2)) {\n        return obj1.getTime() === obj2.getTime();\n    }\n    return obj1 === obj2;\n};\n\n/**\n * Utility service taking care of various utility functions such as\n * detecting browser features, general cross browser DOM manipulation, etc.\n *\n * @hidden @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class PlatformUtil {\n    public isBrowser: boolean = isPlatformBrowser(this.platformId);\n    public isIOS = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) && !('MSStream' in window);\n    public isSafari = this.isBrowser && /Safari[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n    public isFirefox = this.isBrowser && /Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n    public isEdge = this.isBrowser && /Edge[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n    public isChromium = this.isBrowser && (/Chrom|e?ium/g.test(navigator.userAgent) ||\n        /Google Inc/g.test(navigator.vendor)) && !/Edge/g.test(navigator.userAgent);\n    public browserVersion = this.isBrowser ? parseFloat(navigator.userAgent.match(/Version\\/([\\d.]+)/)?.at(1)) : 0;\n\n    /** @hidden @internal */\n    public isElements = inject(ELEMENTS_TOKEN, { optional: true });\n\n    public KEYMAP = mkenum({\n        ENTER: 'Enter',\n        SPACE: ' ',\n        ESCAPE: 'Escape',\n        ARROW_DOWN: 'ArrowDown',\n        ARROW_UP: 'ArrowUp',\n        ARROW_LEFT: 'ArrowLeft',\n        ARROW_RIGHT: 'ArrowRight',\n        END: 'End',\n        HOME: 'Home',\n        PAGE_DOWN: 'PageDown',\n        PAGE_UP: 'PageUp',\n        F2: 'F2',\n        TAB: 'Tab',\n        SEMICOLON: ';',\n        // https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values#editing_keys\n        DELETE: 'Delete',\n        BACKSPACE: 'Backspace',\n        CONTROL: 'Control',\n        X: 'x',\n        Y: 'y',\n        Z: 'z'\n    });\n\n    constructor(@Inject(PLATFORM_ID) private platformId: any) { }\n\n    /**\n     * @hidden @internal\n     * Returns the actual size of the node content, using Range\n     * ```typescript\n     * let range = document.createRange();\n     * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n     *\n     * let size = getNodeSizeViaRange(range, column.cells[0].nativeElement);\n     *\n     * @remarks\n     * The last parameter is useful when the size of the element to measure is modified by a\n     * parent element that has explicit size. In such cases the calculated size is never lower\n     * and the function may instead remove the parent size while measuring to get the correct value.\n     * ```\n     */\n    public getNodeSizeViaRange(range: Range, node: HTMLElement, sizeHoldingNode?: HTMLElement) {\n        let overflow = null;\n        let nodeStyles;\n\n        if (!this.isFirefox) {\n            overflow = node.style.overflow;\n            // we need that hack - otherwise content won't be measured correctly in IE/Edge\n            node.style.overflow = 'visible';\n        }\n\n        if (sizeHoldingNode) {\n            const style = sizeHoldingNode.style;\n            nodeStyles = [style.width, style.minWidth, style.flexBasis];\n            style.width = '';\n            style.minWidth = '';\n            style.flexBasis = '';\n        }\n\n        range.selectNodeContents(node);\n        const scale = node.getBoundingClientRect().width / node.offsetWidth;\n        const width = range.getBoundingClientRect().width / scale;\n\n        if (!this.isFirefox) {\n            // we need that hack - otherwise content won't be measured correctly in IE/Edge\n            node.style.overflow = overflow;\n        }\n\n        if (sizeHoldingNode) {\n            sizeHoldingNode.style.width = nodeStyles[0];\n            sizeHoldingNode.style.minWidth = nodeStyles[1];\n            sizeHoldingNode.style.flexBasis = nodeStyles[2];\n        }\n\n        return width;\n    }\n\n\n    /**\n     * Returns true if the current keyboard event is an activation key (Enter/Space bar)\n     *\n     * @hidden\n     * @internal\n     *\n     * @memberof PlatformUtil\n     */\n    public isActivationKey(event: KeyboardEvent) {\n        return event.key === this.KEYMAP.ENTER || event.key === this.KEYMAP.SPACE;\n    }\n\n    /**\n     * Returns true if the current keyboard event is a combination that closes the filtering UI of the grid. (Escape/Ctrl+Shift+L)\n     *\n     * @hidden\n     * @internal\n     * @param event\n     * @memberof PlatformUtil\n     */\n    public isFilteringKeyCombo(event: KeyboardEvent) {\n        return event.key === this.KEYMAP.ESCAPE || (event.ctrlKey && event.shiftKey && event.key.toLowerCase() === 'l');\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isLeftClick(event: PointerEvent | MouseEvent) {\n        return event.button === 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isNavigationKey(key: string) {\n        return [\n            this.KEYMAP.HOME, this.KEYMAP.END, this.KEYMAP.SPACE,\n            this.KEYMAP.ARROW_DOWN, this.KEYMAP.ARROW_LEFT, this.KEYMAP.ARROW_RIGHT, this.KEYMAP.ARROW_UP\n        ].includes(key as any);\n    }\n}\n\n/**\n * @hidden\n */\nexport const flatten = (arr: any[]) => {\n    let result = [];\n\n    arr.forEach(el => {\n        result.push(el);\n        if (el.children) {\n            const children = Array.isArray(el.children) ? el.children : el.children.toArray();\n            result = result.concat(flatten(children));\n        }\n    });\n    return result;\n};\n\nexport interface CancelableEventArgs {\n    /**\n     * Provides the ability to cancel the event.\n     */\n    cancel: boolean;\n}\n\nexport interface IBaseEventArgs {\n    /**\n     * Provides reference to the owner component.\n     */\n    owner?: any;\n}\n\nexport interface CancelableBrowserEventArgs extends CancelableEventArgs {\n    /* blazorSuppress */\n    /** Browser event */\n    event?: Event;\n}\n\nexport interface IBaseCancelableBrowserEventArgs extends CancelableBrowserEventArgs, IBaseEventArgs { }\n\nexport interface IBaseCancelableEventArgs extends CancelableEventArgs, IBaseEventArgs { }\n\nexport const HORIZONTAL_NAV_KEYS = new Set(['arrowleft', 'left', 'arrowright', 'right', 'home', 'end']);\n\nexport const NAVIGATION_KEYS = new Set([\n    'down',\n    'up',\n    'left',\n    'right',\n    'arrowdown',\n    'arrowup',\n    'arrowleft',\n    'arrowright',\n    'home',\n    'end',\n    'space',\n    'spacebar',\n    ' '\n]);\nexport const ACCORDION_NAVIGATION_KEYS = new Set('up down arrowup arrowdown home end'.split(' '));\nexport const ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' '));\nexport const ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' '));\nexport const ROW_ADD_KEYS = new Set(['+', 'add', '≠', '±', '=']);\nexport const SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS),\n...Array.from(ROW_ADD_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup']);\nexport const HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc', 'l',\n    /** This symbol corresponds to the Alt + L combination under MAC. */\n    '¬']);\n\n/**\n * @hidden\n * @internal\n *\n * Creates a new ResizeObserver on `target` and returns it as an Observable.\n * Run the resizeObservable outside angular zone, because it patches the MutationObserver which causes an infinite loop.\n * Related issue: https://github.com/angular/angular/issues/31712\n */\nexport const resizeObservable = (target: HTMLElement): Observable<ResizeObserverEntry[]> => {\n    const resizeObserver = getResizeObserver();\n    // check whether we are on server env or client env\n    if (resizeObserver) {\n        return new Observable((observer) => {\n                const instance = new resizeObserver((entries: ResizeObserverEntry[]) => {\n                    observer.next(entries);\n                });\n                instance.observe(target);\n                const unsubscribe = () => instance.disconnect();\n                return unsubscribe;\n        });\n    } else {\n        // if on a server env return a empty observable that does not complete immediately\n        return NEVER;\n    }\n}\n\n/**\n * @hidden\n * @internal\n *\n * Compares two maps.\n */\nexport const compareMaps = (map1: Map<any, any>, map2: Map<any, any>): boolean => {\n    if (!map2) {\n        return !map1 ? true : false;\n    }\n    if (map1.size !== map2.size) {\n        return false;\n    }\n    let match = true;\n    const keys = Array.from(map2.keys());\n    for (const key of keys) {\n        if (map1.has(key)) {\n            match = map1.get(key) === map2.get(key);\n        } else {\n            match = false;\n        }\n        if (!match) {\n            break;\n        }\n    }\n    return match;\n};\n\n/**\n *\n * Given a property access path in the format `x.y.z` resolves and returns\n * the value of the `z` property in the passed object.\n *\n * @hidden\n * @internal\n */\nexport const resolveNestedPath = (obj: any, path: string) => {\n    const parts = path?.split('.') ?? [];\n    let current = obj[parts.shift()];\n\n    parts.forEach(prop => {\n        if (current) {\n            current = current[prop];\n        }\n    });\n\n    return current;\n};\n\n/**\n *\n * Given a property access path in the format `x.y.z` and a value\n * this functions builds and returns an object following the access path.\n *\n * @example\n * ```typescript\n * console.log('x.y.z.', 42);\n * >> { x: { y: { z: 42 } } }\n * ```\n *\n * @hidden\n * @internal\n */\nexport const reverseMapper = (path: string, value: any) => {\n    const obj = {};\n    const parts = path?.split('.') ?? [];\n\n    let _prop = parts.shift();\n    let mapping: any;\n\n    // Initial binding for first level bindings\n    obj[_prop] = value;\n    mapping = obj;\n\n    parts.forEach(prop => {\n        // Start building the hierarchy\n        mapping[_prop] = {};\n        // Go down a level\n        mapping = mapping[_prop];\n        // Bind the value and move the key\n        mapping[prop] = value;\n        _prop = prop;\n    });\n\n    return obj;\n};\n\nexport const yieldingLoop = (count: number, chunkSize: number, callback: (index: number) => void, done: () => void) => {\n    let i = 0;\n    const chunk = () => {\n        const end = Math.min(i + chunkSize, count);\n        for (; i < end; ++i) {\n            callback(i);\n        }\n        if (i < count) {\n            setImmediate(chunk);\n        } else {\n            done();\n        }\n    };\n    chunk();\n};\n\nexport const isConstructor = (ref: any) => typeof ref === 'function' && Boolean(ref.prototype) && Boolean(ref.prototype.constructor);\n\n/**\n * Similar to Angular's formatDate. However it will not throw on `undefined | null | ''` instead\n * coalescing to an empty string.\n */\nexport const formatDate = (value: string | number | Date, format: string, locale: string, timezone?: string): string => {\n    if (value === null || value === undefined || value === '') {\n        return '';\n    }\n    return _formatDate(value, format, locale, timezone);\n};\n\nexport const formatCurrency = new CurrencyPipe(undefined).transform;\n\n/** Converts pixel values to their rem counterparts for a base value */\nexport const rem = (value: number | string) => {\n    const base = parseFloat(globalThis.window?.getComputedStyle(globalThis.document?.documentElement).getPropertyValue('--ig-base-font-size'))\n    return Number(value) / base;\n}\n\n/** Get the size of the component as derived from the CSS size variable */\nexport function getComponentSize(el: Element) {\n    return globalThis.window?.getComputedStyle(el).getPropertyValue('--component-size');\n}\n\n/** Get the first item in an array */\nexport function first<T>(arr: T[]) {\n    return arr.at(0) as T;\n}\n\n/** Get the last item in an array */\nexport function last<T>(arr: T[]) {\n    return arr.at(-1) as T;\n}\n\n/** Calculates the modulo of two numbers, ensuring a non-negative result. */\nexport function modulo(n: number, d: number) {\n    return ((n % d) + d) % d;\n}\n\n/**\n * Splits an array into chunks of length `size` and returns a generator\n * yielding each chunk.\n * The last chunk may contain less than `size` elements.\n *\n * @example\n * ```typescript\n * const arr = [0,1,2,3,4,5,6,7,8,9];\n *\n * Array.from(chunk(arr, 2)) // [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]\n * Array.from(chunk(arr, 3)) // [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]\n * Array.from(chunk([], 3)) // []\n * Array.from(chunk(arr, -3)) // Error\n * ```\n */\nexport function* intoChunks<T>(arr: T[], size: number) {\n  if (size < 1) {\n    throw new Error('size must be an integer >= 1');\n  }\n  for (let i = 0; i < arr.length; i += size) {\n    yield arr.slice(i, i + size);\n  }\n}\n\n/**\n * @param size\n * @returns string that represents the --component-size default value\n */\nexport function getComponentCssSizeVar(size: string) {\n    switch (size) {\n        case \"1\":\n            return 'var(--ig-size, var(--ig-size-small))';\n        case \"2\":\n            return 'var(--ig-size, var(--ig-size-medium))';\n        case \"3\":\n        default:\n            return 'var(--ig-size, var(--ig-size-large))';\n    }\n}\n\n/**\n * @param path - The URI path to be normalized.\n * @returns string encoded using the encodeURI function.\n */\nexport function normalizeURI(path: string) {\n    return path?.split('/').map(encodeURI).join('/');\n}\n\nexport function getComponentTheme(el: Element) {\n    return globalThis.window\n    ?.getComputedStyle(el)\n    .getPropertyValue('--theme')\n    .trim() as IgxTheme;\n}\n\n/**\n * Collection re-created w/ the built in track by identity will always log\n * warning even for valid cases of recalculating all collection items.\n * See https://github.com/angular/angular/blob/55581b4181639568fb496e91055142a1b489e988/packages/core/src/render3/instructions/control_flow.ts#L393-L409\n * Current solution explicit track function doing the same as suggested in:\n * https://github.com/angular/angular/issues/56471#issuecomment-2180315803\n * This should be used with moderation and when necessary.\n * @internal\n */\nexport function trackByIdentity<T>(item: T): T {\n    return item;\n}\n","export enum PagingError {\n    None,\n    IncorrectPageIndex,\n    IncorrectRecordsPerPage\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\nexport declare interface IPagingState {\n    index: number;\n    recordsPerPage: number;\n    /* blazorSuppress */\n    metadata?: {\n        countPages: number;\n        error: PagingError;\n        countRecords: number;\n    };\n}\n","import { EventEmitter } from '@angular/core';\nimport { IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\n\nexport enum TransactionType {\n    ADD = 'add',\n    DELETE = 'delete',\n    UPDATE = 'update'\n}\n\nexport enum TransactionEventOrigin {\n    UNDO = 'undo',\n    REDO = 'redo',\n    CLEAR = 'clear',\n    ADD = 'add',\n    END = 'endPending'\n}\n\nexport interface Transaction {\n    id: any;\n    type: TransactionType;\n    newValue: any;\n}\n\n/**\n * @experimental\n * @hidden\n */\nexport interface HierarchicalTransaction extends Transaction {\n    path?: any[];\n}\n\nexport interface State {\n    value: any;\n    recordRef: any;\n    type: TransactionType;\n}\n\nexport interface Action<T extends Transaction> {\n    transaction: T;\n    recordRef: any;\n}\n\nexport interface StateUpdateEvent {\n    origin: TransactionEventOrigin;\n    actions: Action<Transaction>[];\n}\n\n/**\n * @experimental\n * @hidden\n */\nexport interface HierarchicalState extends State {\n    path: any[];\n}\n\nexport interface TransactionService<T extends Transaction, S extends State> {\n    /**\n     * Returns whether transaction is enabled for this service\n     */\n    readonly enabled: boolean;\n\n    /**\n     * Gets/Sets the data clone strategy used to clone data\n     */\n    cloneStrategy: IDataCloneStrategy;\n\n    /**\n     * Event fired when transaction state has changed - add transaction, commit all transactions, undo and redo\n     */\n    onStateUpdate?: EventEmitter<StateUpdateEvent>;\n\n    /**\n     * @returns if there are any transactions in the Undo stack\n     */\n    canUndo: boolean;\n\n    /**\n     * @returns if there are any transactions in the Redo stack\n     */\n    canRedo: boolean;\n\n    /**\n     * Adds provided  transaction with recordRef if any\n     *\n     * @param transaction Transaction to be added\n     * @param recordRef Reference to the value of the record in the data source related to the changed item\n     */\n    add(transaction: T, recordRef?: any): void;\n\n    /**\n     * Returns all recorded transactions in chronological order\n     *\n     * @param id Optional record id to get transactions for\n     * @returns All transaction in the service or for the specified record\n     */\n    getTransactionLog(id?: any): T[];\n\n    /**\n     * Remove the last transaction if any\n     */\n    undo(): void;\n\n    /**\n     * Applies the last undone transaction if any\n     */\n    redo(): void;\n\n    /**\n     * Returns aggregated changes from all transactions\n     *\n     * @param mergeChanges If set to true will merge each state's value over relate recordRef\n     * and will record resulting value in the related transaction\n     * @returns Collection of aggregated transactions for each changed record\n     */\n    getAggregatedChanges(mergeChanges: boolean): T[];\n\n    /**\n     * Returns the state of the record with provided id\n     *\n     * @param id The id of the record\n     * @param pending Should get pending state\n     * @returns State of the record if any\n     */\n    getState(id: any, pending?: boolean): S;\n\n    /**\n     * Returns value of the required id including all uncommitted changes\n     *\n     * @param id The id of the record to return value for\n     * @param mergeChanges If set to true will merge state's value over relate recordRef\n     * and will return merged value\n     * @returns Value with changes or **null**\n     */\n    getAggregatedValue(id: any, mergeChanges: boolean): any;\n\n    /**\n     * Applies all transactions over the provided data\n     *\n     * @param data Data source to update\n     * @param id Optional record id to commit transactions for\n     */\n    commit(data: any[], id?: any): void;\n\n    /**\n     * Clears all transactions\n     *\n     * @param id Optional record id to clear transactions for\n     */\n    clear(id?: any): void;\n\n    /**\n     * Starts pending transactions. All transactions passed after call to startPending\n     * will not be added to transaction log\n     */\n    startPending(): void;\n\n    /**\n     * Clears all pending transactions and aggregated pending state. If commit is set to true\n     * commits pending states as single transaction\n     *\n     * @param commit Should commit the pending states\n     */\n    endPending(commit: boolean): void;\n}\n","import type { KeyOfOrString } from '../core/types';\nimport { IBaseEventArgs } from '../core/utils';\nimport { GridType } from '../grids/common/grid.interface';\n\n/* mustCoerceToInt */\nexport enum SortingDirection {\n    None = 0,\n    Asc = 1,\n    Desc = 2\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\nexport interface ISortingExpression<T = any> extends IBaseEventArgs {\n    fieldName: KeyOfOrString<T> & string;\n    /* mustCoerceToInt */\n    dir: SortingDirection;\n    ignoreCase?: boolean;\n    strategy?: ISortingStrategy;\n}\n\nexport interface ISortingStrategy {\n    /* blazorSuppress */\n    sort: (\n        data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean,\n        grid?: GridType\n    ) => any[];\n}\n\nexport class DefaultSortingStrategy implements ISortingStrategy {\n    protected static _instance: DefaultSortingStrategy = null;\n\n    protected constructor() { }\n\n    public static instance(): DefaultSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    /* blazorSuppress */\n    public sort(\n        data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean\n    ) {\n        const key = fieldName;\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n        const cmpFunc = (obj1: any, obj2: any) => this.compareObjects(obj1, obj2, key, reverse, ignoreCase, valueResolver, isDate, isTime);\n        return this.arraySort(data, cmpFunc);\n    }\n\n    public compareValues(a: any, b: any): number {\n        const an = (a === null || a === undefined);\n        const bn = (b === null || b === undefined);\n        if (an) {\n            if (bn) {\n                return 0;\n            }\n            return -1;\n        } else if (bn) {\n            return 1;\n        }\n        return a > b ? 1 : a < b ? -1 : 0;\n    }\n\n    protected compareObjects(\n        obj1: any,\n        obj2: any,\n        key: string,\n        reverse: number,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean, isTime?: boolean) => any,\n        isDate: boolean,\n        isTime: boolean\n    ) {\n        let a = valueResolver.call(this, obj1, key, isDate, isTime);\n        let b = valueResolver.call(this, obj2, key, isDate, isTime);\n        if (ignoreCase) {\n            a = a && a.toLowerCase ? a.toLowerCase() : a;\n            b = b && b.toLowerCase ? b.toLowerCase() : b;\n        }\n        return reverse * this.compareValues(a, b);\n    }\n\n    protected arraySort(data: any[], compareFn?: (arg0: any, arg1: any) => number): any[] {\n        return data.sort(compareFn);\n    }\n}\n\nexport class GroupMemberCountSortingStrategy implements ISortingStrategy {\n    protected static _instance: GroupMemberCountSortingStrategy = null;\n\n    protected constructor() { }\n\n    public static instance(): GroupMemberCountSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    public sort(data: any[], fieldName: string, dir: SortingDirection) {\n        const groupedArray = this.groupBy(data, fieldName);\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n\n        const cmpFunc = (a, b) => {\n            return this.compareObjects(a, b, groupedArray, fieldName, reverse);\n        };\n\n        return data\n            .sort((a, b) => a[fieldName].localeCompare(b[fieldName]))\n            .sort(cmpFunc);\n    }\n\n    public groupBy(data, key) {\n        return data.reduce((acc, curr) => {\n            (acc[curr[key]] = acc[curr[key]] || []).push(curr);\n            return acc;\n        }, {})\n    }\n\n    protected compareObjects(obj1: any, obj2: any, data: any[], fieldName: string, reverse: number) {\n        const firstItemValuesLength = data[obj1[fieldName]].length;\n        const secondItemValuesLength = data[obj2[fieldName]].length;\n\n        return reverse * (firstItemValuesLength - secondItemValuesLength);\n    }\n}\n\nexport class FormattedValuesSortingStrategy extends DefaultSortingStrategy {\n    protected static override _instance: FormattedValuesSortingStrategy = null;\n\n    constructor() {\n        super();\n    }\n\n    public static override instance(): FormattedValuesSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n\n    public override sort(\n        data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean,\n        grid?: GridType\n    ) {\n        const key = fieldName;\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n        const cmpFunc = (obj1: any, obj2: any) => this.compareObjects(obj1, obj2, key, reverse, ignoreCase, valueResolver, isDate, isTime, grid);\n        return this.arraySort(data, cmpFunc);\n    }\n\n    protected override compareObjects(\n        obj1: any,\n        obj2: any,\n        key: string,\n        reverse: number,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean, isTime?: boolean) => any,\n        isDate: boolean,\n        isTime: boolean,\n        grid?: GridType\n    ) {\n        let a = valueResolver.call(this, obj1, key, isDate, isTime);\n        let b = valueResolver.call(this, obj2, key, isDate, isTime);\n\n        if (grid) {\n            const col = grid.getColumnByName(key);\n            if (col && col.formatter) {\n                a = col.formatter(a);\n                b = col.formatter(b);\n            }\n        }\n\n        if (ignoreCase) {\n            a = a && a.toLowerCase ? a.toLowerCase() : a;\n            b = b && b.toLowerCase ? b.toLowerCase() : b;\n        }\n        return reverse * this.compareValues(a, b);\n    }\n}\n","import { IGroupByKey } from './groupby-expand-state.interface';\nimport { IGroupByRecord } from './groupby-record.interface';\nimport { IGroupingExpression } from './grouping-expression.interface';\nimport { DefaultSortingStrategy } from './sorting-strategy';\n\nexport const isHierarchyMatch = (h1: Array<IGroupByKey>, h2: Array<IGroupByKey>, expressions: IGroupingExpression[]): boolean => {\n    if (h1.length !== h2.length) {\n        return false;\n    }\n    return h1.every((level, index): boolean => {\n        const expr = expressions.find(e => e.fieldName === level.fieldName);\n        const comparer = expr.groupingComparer || DefaultSortingStrategy.instance().compareValues;\n        return level.fieldName === h2[index].fieldName && comparer(level.value, h2[index].value) === 0;\n    });\n};\n\nexport const getHierarchy = (gRow: IGroupByRecord): Array<IGroupByKey> => {\n    const hierarchy: Array<IGroupByKey> = [];\n    if (gRow !== undefined && gRow.expression) {\n        hierarchy.push({ fieldName: gRow.expression.fieldName, value: gRow.value });\n        while (gRow.groupParent) {\n            gRow = gRow.groupParent;\n            hierarchy.unshift({ fieldName: gRow.expression.fieldName, value: gRow.value });\n        }\n    }\n    return hierarchy;\n};\n","import { cloneArray, parseDate, resolveNestedPath } from '../../core/utils';\nimport { IGroupByExpandState } from '../../data-operations/groupby-expand-state.interface';\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { IGroupingState } from '../../data-operations/groupby-state.interface';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { IGroupByResult } from '../../data-operations/grouping-result.interface';\nimport { getHierarchy, isHierarchyMatch } from '../../data-operations/operations';\nimport { DefaultSortingStrategy, ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { GridType } from './grid.interface';\n\nconst DATE_TYPE = 'date';\nconst TIME_TYPE = 'time';\nconst DATE_TIME_TYPE = 'dateTime';\nconst STRING_TYPE = 'string';\n\n/**\n * Represents a sorting strategy for the grid data\n * Contains a single method sort that sorts the provided data based on the given sorting expressions\n */\nexport interface IGridSortingStrategy {\n    /* blazorCSSuppress */\n   /**\n   * `data`: The array of data to be sorted. Could be of any type.\n   * `expressions`: An array of sorting expressions that define the sorting rules. The expression contains information like file name, whether the letter case should be taken into account, etc.\n   * `grid`: (Optional) The instance of the grid where the sorting is applied.\n   * Returns a new array with the data sorted according to the sorting expressions.\n   */\n    sort(data: any[], expressions: ISortingExpression[], grid?: GridType): any[];\n}\n\n/**\n * Represents a grouping strategy for the grid data, extending the Sorting Strategy interface (contains a sorting method).\n */\nexport interface IGridGroupingStrategy extends IGridSortingStrategy {\n    /* blazorCSSuppress */\n  /**\n   * The method groups the provided data based on the given grouping state and returns the result.\n   * `data`: The array of data to be grouped. Could be of any type.\n   * `state`: The grouping state that defines the grouping settings and expressions.\n   * `grid`: (Optional) The instance of the grid where the grouping is applied.\n   * `groupsRecords`: (Optional) An array that holds the records for each group.\n   * `fullResult`: (Optional) The complete result of grouping including groups and summary data.\n   * Returns an object containing the result of the grouping operation.\n   */\n    groupBy(data: any[], state: IGroupingState, grid?: any, groupsRecords?: any[], fullResult?: IGroupByResult): IGroupByResult;\n}\n\n/**\n * Represents a class implementing the IGridSortingStrategy interface.\n * It provides sorting functionality for grid data based on sorting expressions.\n */\nexport class IgxSorting implements IGridSortingStrategy {\n    /* blazorSuppress */\n    /**\n   * Sorts the provided data based on the given sorting expressions.\n   * `data`: The array of data to be sorted.\n   * `expressions`: An array of sorting expressions that define the sorting rules. The expression contains information like file name, whether the letter case should be taken into account, etc.\n   * `grid`: (Optional) The instance of the grid where the sorting is applied.\n   * Returns a new array with the data sorted according to the sorting expressions.\n   */\n    public sort(data: any[], expressions: ISortingExpression[], grid?: GridType): any[] {\n        return this.sortDataRecursive(data, expressions, 0, grid);\n    }\n\n    /**\n   * Recursively groups the provided data based on the given grouping state and returns the grouped result.\n   * Returns an array containing the grouped result.\n   * @internal\n   */\n    protected groupDataRecursive(\n        data: any[],\n        state: IGroupingState,\n        level: number,\n        parent: IGroupByRecord,\n        metadata: IGroupByRecord[],\n        grid: GridType = null,\n        groupsRecords: any[] = [],\n        fullResult: IGroupByResult = { data: [], metadata: [] }\n    ): any[] {\n        const expressions = state.expressions;\n        const expansion = state.expansion;\n        let i = 0;\n        let result = [];\n        while (i < data.length) {\n            const column = grid ? grid.getColumnByName(expressions[level].fieldName) : null;\n            const isDate = column?.dataType === DATE_TYPE || column?.dataType === DATE_TIME_TYPE;\n            const isTime = column?.dataType === TIME_TYPE || column?.dataType === DATE_TIME_TYPE;\n            const isString = column?.dataType === STRING_TYPE;\n            const group = this.groupedRecordsByExpression(data, i, expressions[level], isDate, isTime, isString);\n            const groupRow: IGroupByRecord = {\n                expression: expressions[level],\n                level,\n                records: cloneArray(group),\n                value: this.getFieldValue(group[0], expressions[level].fieldName, isDate, isTime),\n                groupParent: parent,\n                groups: [],\n                height: grid ? grid.renderedRowHeight : null,\n                column\n            };\n            if (parent) {\n                parent.groups.push(groupRow);\n            } else {\n                groupsRecords.push(groupRow);\n            }\n            const hierarchy = getHierarchy(groupRow);\n            const expandState: IGroupByExpandState = expansion.find((s) =>\n                isHierarchyMatch(\n                    s.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }],\n                    hierarchy,\n                    expressions\n                ));\n            const expanded = expandState ? expandState.expanded : state.defaultExpanded;\n            let recursiveResult;\n            result.push(groupRow);\n            metadata.push(null);\n            fullResult.data.push(groupRow);\n            fullResult.metadata.push(null);\n            if (level < expressions.length - 1) {\n                recursiveResult = this.groupDataRecursive(group, state, level + 1, groupRow,\n                    expanded ? metadata : [], grid, groupsRecords, fullResult);\n                if (expanded) {\n                    result = result.concat(recursiveResult);\n                }\n            } else {\n                for (const groupItem of group) {\n                    fullResult.metadata.push(groupRow);\n                    fullResult.data.push(groupItem);\n                }\n                if (expanded) {\n                    metadata.push(...fullResult.metadata.slice(fullResult.metadata.length - group.length));\n                    result.push(...fullResult.data.slice(fullResult.data.length - group.length));\n                }\n            }\n            i += group.length;\n        }\n        return result;\n    }\n\n    /**\n   * Retrieves the value of the specified field from the given object, considering date and time data types.\n   * `key`: The key of the field to retrieve.\n   * `isDate`: (Optional) Indicates if the field is of type Date.\n   * `isTime`: (Optional) Indicates if the field is of type Time.\n   * Returns the value of the specified field in the data object.\n   * @internal\n   */\n    protected getFieldValue<T>(obj: T, key: string, isDate = false, isTime = false) {\n        let resolvedValue = resolveNestedPath(obj, key);\n        const date = parseDate(resolvedValue);\n        if (date && isDate && isTime) {\n            resolvedValue = date;\n        } else if (date && isDate && !isTime) {\n            resolvedValue = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n        } else if (date && isTime && !isDate) {\n            resolvedValue = new Date(new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n        }\n        return resolvedValue;\n    }\n\n    /**\n   * Groups the records in the provided data array based on the given grouping expression.\n   * `groupingComparer`: (Optional) A custom grouping comparator to determine the members of the group.\n   * Returns an array containing the records that belong to the group.\n   * @internal\n   */\n    private groupedRecordsByExpression<T>(\n        data: T[],\n        index: number,\n        expression: IGroupingExpression,\n        isDate = false,\n        isTime = false,\n        isString: boolean,\n        groupingComparer?: (a: any, b: any, currRec: any, groupRec: any) => number\n    ): T[] {\n        const res = [];\n        const key = expression.fieldName;\n        const len = data.length;\n        const groupRecord = data[index];\n        let groupval = this.getFieldValue(groupRecord, key, isDate, isTime);\n        res.push(groupRecord);\n        index++;\n        const comparer = expression.groupingComparer || groupingComparer || DefaultSortingStrategy.instance().compareValues;\n        for (let i = index; i < len; i++) {\n            const currRec = data[i];\n            let fieldValue = this.getFieldValue(currRec, key, isDate, isTime);\n            if (expression.ignoreCase && isString) {\n                // when column's dataType is string but the value is number\n                fieldValue = fieldValue?.toString().toLowerCase();\n                groupval = groupval?.toString().toLowerCase();\n            }\n            if (comparer(fieldValue, groupval, currRec, groupRecord) === 0) {\n                res.push(currRec);\n            } else {\n                break;\n            }\n        }\n        return res;\n    }\n\n    /**\n   * Sorts the provided data array based on the given sorting expressions.\n   * The method can be used when multiple sorting is performed, going through each one\n   * Returns a new array with the data sorted according to the sorting expressions.\n   * @internal\n   */\n    private sortDataRecursive<T>(\n        data: T[],\n        expressions: ISortingExpression[],\n        expressionIndex = 0,\n        grid: GridType\n    ): T[] {\n        let i: number;\n        let j: number;\n        let gbData: T[];\n        let gbDataLen: number;\n        const exprsLen = expressions.length;\n        const dataLen = data.length;\n\n        expressionIndex = expressionIndex || 0;\n        if (expressionIndex >= exprsLen || dataLen <= 1) {\n            return data;\n        }\n        const expr = expressions[expressionIndex];\n        if (!expr.strategy) {\n            expr.strategy = DefaultSortingStrategy.instance() as any;\n        }\n        const column = grid?.getColumnByName(expr.fieldName);\n        const isDate = column?.dataType === DATE_TYPE || column?.dataType === DATE_TIME_TYPE;\n        const isTime = column?.dataType === TIME_TYPE || column?.dataType === DATE_TIME_TYPE;\n        const isString = column?.dataType === STRING_TYPE;\n        data = expr.strategy.sort(data, expr.fieldName, expr.dir, expr.ignoreCase, this.getFieldValue, isDate, isTime, grid);\n        if (expressionIndex === exprsLen - 1) {\n            return data;\n        }\n        // in case of multiple sorting\n        for (i = 0; i < dataLen; i++) {\n            gbData = this.groupedRecordsByExpression(data, i, expr, isDate, isTime, isString, column?.groupingComparer);\n            gbDataLen = gbData.length;\n            if (gbDataLen > 1) {\n                gbData = this.sortDataRecursive(gbData, expressions, expressionIndex + 1, grid);\n            }\n            for (j = 0; j < gbDataLen; j++) {\n                data[i + j] = gbData[j];\n            }\n            i += gbDataLen - 1;\n        }\n        return data;\n    }\n}\n\n/**\n * Represents a class implementing the IGridGroupingStrategy interface and extending the IgxSorting class.\n * It provides a method to group data based on the given grouping state.\n */\nexport class IgxGrouping extends IgxSorting implements IGridGroupingStrategy {\n    /* blazorSuppress */\n  /**\n   * Groups the provided data based on the given grouping state.\n   * Returns an object containing the result of the grouping operation.\n   */\n    public groupBy(data: any[], state: IGroupingState, grid?: any,\n        groupsRecords?: any[], fullResult: IGroupByResult = { data: [], metadata: [] }): IGroupByResult {\n        const metadata: IGroupByRecord[] = [];\n        const grouping = this.groupDataRecursive(data, state, 0, null, metadata, grid, groupsRecords, fullResult);\n        grid?.groupingPerformedSubject.next();\n        return {\n            data: grouping,\n            metadata\n        };\n    }\n}\n\n/* csSuppress */\n/**\n * Represents a class implementing the IGridSortingStrategy interface with a no-operation sorting strategy.\n * It performs no sorting and returns the data as it is.\n */\nexport class NoopSortingStrategy implements IGridSortingStrategy {\n    private static _instance: NoopSortingStrategy = null;\n\n    private constructor() { }\n\n    public static instance(): NoopSortingStrategy {\n        return this._instance || (this._instance = new NoopSortingStrategy());\n    }\n\n    /* csSuppress */\n    public sort(data: any[]): any[] {\n        return data;\n    }\n}\n\n/**\n * Represents a class extending the IgxSorting class\n * Provides custom data record sorting.\n */\nexport class IgxDataRecordSorting extends IgxSorting {\n   /**\n   * Overrides the base method to retrieve the field value from the data object instead of the record object.\n   * Returns the value of the specified field in the data object.\n   */\n    protected override getFieldValue(obj: any, key: string, isDate = false, isTime = false): any {\n        return super.getFieldValue(obj.data, key, isDate, isTime);\n    }\n}\n","import { cloneValue, cloneValueCached } from \"../core/utils\";\n\nexport interface IDataCloneStrategy {\n    /**\n     * Clones provided data\n     * @param data primitive value, date and object to be cloned\n     * @returns deep copy of provided value\n     */\n    clone(data: any): any;\n}\n\n/**\n * Simplified data clone strategy that deep clones primitive values, dates and objects.\n * Does not support circular references in objects.\n */\nexport class DefaultDataCloneStrategy implements IDataCloneStrategy {\n    public clone(data: any): any {\n        return cloneValue(data);\n    }\n}\n\n/**\n * Data clone strategy that is uses cache to deep clone primitive values, dates and objects.\n * It allows using circular references inside object.\n */\nexport class CachedDataCloneStrategy implements IDataCloneStrategy {\n    public clone(data: any): any {\n        return cloneValueCached(data, new Map<any, any>);\n    }\n}\n","import { IGroupByResult } from './grouping-result.interface';\n\nimport { IPagingState, PagingError } from './paging-state.interface';\n\nimport { IGroupByKey } from './groupby-expand-state.interface';\nimport { IGroupByRecord } from './groupby-record.interface';\nimport { IGroupingState } from './groupby-state.interface';\nimport { mergeObjects, mkenum } from '../core/utils';\nimport { Transaction, TransactionType, HierarchicalTransaction } from '../services/transaction/transaction';\nimport { getHierarchy, isHierarchyMatch } from './operations';\nimport { GridType } from '../grids/common/grid.interface';\nimport { ITreeGridRecord } from '../grids/tree-grid/tree-grid.interfaces';\nimport { ISortingExpression } from './sorting-strategy';\nimport {\n    IGridSortingStrategy,\n    IGridGroupingStrategy,\n    IgxDataRecordSorting,\n    IgxSorting,\n    IgxGrouping\n} from '../grids/common/strategy';\nimport { DefaultDataCloneStrategy, IDataCloneStrategy } from '../data-operations/data-clone-strategy';\nimport { IGroupingExpression } from './grouping-expression.interface';\n\n/**\n * @hidden\n */\n export const DataType = /*@__PURE__*/mkenum({\n    String: 'string',\n    Number: 'number',\n    Boolean: 'boolean',\n    Date: 'date',\n    DateTime: 'dateTime',\n    Time: 'time',\n    Currency: 'currency',\n    Percent: 'percent',\n    Image: 'image'\n});\nexport type DataType = (typeof DataType)[keyof typeof DataType];\n\n/**\n * @hidden\n */\nexport const GridColumnDataType = DataType;\nexport type GridColumnDataType = (typeof GridColumnDataType)[keyof typeof GridColumnDataType];\n\n/**\n * @hidden\n */\nexport class DataUtil {\n    public static sort<T>(data: T[], expressions: ISortingExpression[], sorting: IGridSortingStrategy = new IgxSorting(),\n        grid?: GridType): T[] {\n        return sorting.sort(data, expressions, grid);\n    }\n\n    public static treeGridSort(hierarchicalData: ITreeGridRecord[],\n        expressions: ISortingExpression[],\n        sorting: IGridSortingStrategy = new IgxDataRecordSorting(),\n        parent?: ITreeGridRecord,\n        grid?: GridType): ITreeGridRecord[] {\n        let res: ITreeGridRecord[] = [];\n        hierarchicalData.forEach((hr: ITreeGridRecord) => {\n            const rec: ITreeGridRecord = DataUtil.cloneTreeGridRecord(hr);\n            rec.parent = parent;\n            if (rec.children) {\n                rec.children = DataUtil.treeGridSort(rec.children, expressions, sorting, rec, grid);\n            }\n            res.push(rec);\n        });\n\n        res = DataUtil.sort(res, expressions, sorting, grid);\n\n        return res;\n    }\n\n    public static cloneTreeGridRecord(hierarchicalRecord: ITreeGridRecord) {\n        const rec: ITreeGridRecord = {\n            key: hierarchicalRecord.key,\n            data: hierarchicalRecord.data,\n            children: hierarchicalRecord.children,\n            isFilteredOutParent: hierarchicalRecord.isFilteredOutParent,\n            level: hierarchicalRecord.level,\n            expanded: hierarchicalRecord.expanded\n        };\n        return rec;\n    }\n\n    public static group<T>(data: T[], state: IGroupingState, grouping: IGridGroupingStrategy = new IgxGrouping(), grid: GridType = null,\n        groupsRecords: any[] = [], fullResult: IGroupByResult = { data: [], metadata: [] }): IGroupByResult {\n        groupsRecords.splice(0, groupsRecords.length);\n        return grouping.groupBy(data, state, grid, groupsRecords, fullResult);\n    }\n\n    public static page<T>(data: T[], state: IPagingState, dataLength?: number): T[] {\n        if (!state) {\n            return data;\n        }\n        const len = dataLength !== undefined ? dataLength : data.length;\n        const index = state.index;\n        const res = [];\n        const recordsPerPage = dataLength !== undefined && state.recordsPerPage > dataLength ? dataLength : state.recordsPerPage;\n        state.metadata = {\n            countPages: 0,\n            countRecords: len,\n            error: PagingError.None\n        };\n        if (index < 0 || isNaN(index)) {\n            state.metadata.error = PagingError.IncorrectPageIndex;\n            return res;\n        }\n        if (recordsPerPage <= 0 || isNaN(recordsPerPage)) {\n            state.metadata.error = PagingError.IncorrectRecordsPerPage;\n            return res;\n        }\n        state.metadata.countPages = Math.ceil(len / recordsPerPage);\n        if (!len) {\n            return data;\n        }\n        if (index >= state.metadata.countPages) {\n            state.metadata.error = PagingError.IncorrectPageIndex;\n            return res;\n        }\n        return data.slice(index * recordsPerPage, (index + 1) * recordsPerPage);\n    }\n\n    public static correctPagingState(state: IPagingState, length: number) {\n        const maxPage = Math.ceil(length / state.recordsPerPage) - 1;\n        if (!isNaN(maxPage) && state.index > maxPage) {\n            state.index = maxPage;\n        }\n    }\n\n    public static getHierarchy(gRow: IGroupByRecord): Array<IGroupByKey> {\n        return getHierarchy(gRow);\n    }\n\n    public static isHierarchyMatch(h1: Array<IGroupByKey>, h2: Array<IGroupByKey>, expressions: IGroupingExpression[]): boolean {\n        return isHierarchyMatch(h1, h2, expressions);\n    }\n\n    /**\n     * Merges all changes from provided transactions into provided data collection\n     *\n     * @param data Collection to merge\n     * @param transactions Transactions to merge into data\n     * @param primaryKey Primary key of the collection, if any\n     * @param deleteRows Should delete rows with DELETE transaction type from data\n     * @returns Provided data collections updated with all provided transactions\n     */\n    public static mergeTransactions<T>(data: T[], transactions: Transaction[], primaryKey?: any, cloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy(), deleteRows = false): T[] {\n        data.forEach((item: any, index: number) => {\n            const rowId = primaryKey ? item[primaryKey] : item;\n            const transaction = transactions.find(t => t.id === rowId);\n            if (transaction && transaction.type === TransactionType.UPDATE) {\n                data[index] = mergeObjects(cloneStrategy.clone(data[index]), transaction.newValue);\n            }\n        });\n\n        if (deleteRows) {\n            transactions\n                .filter(t => t.type === TransactionType.DELETE)\n                .forEach(t => {\n                    const index = primaryKey ? data.findIndex(d => d[primaryKey] === t.id) : data.findIndex(d => d === t.id);\n                    if (0 <= index && index < data.length) {\n                        data.splice(index, 1);\n                    }\n                });\n        }\n\n        data.push(...transactions\n            .filter(t => t.type === TransactionType.ADD)\n            .map(t => t.newValue));\n\n        return data;\n    }\n\n    /**\n     * Merges all changes from provided transactions into provided hierarchical data collection\n     *\n     * @param data Collection to merge\n     * @param transactions Transactions to merge into data\n     * @param childDataKey Data key of child collections\n     * @param primaryKey Primary key of the collection, if any\n     * @param deleteRows Should delete rows with DELETE transaction type from data\n     * @returns Provided data collections updated with all provided transactions\n     */\n    public static mergeHierarchicalTransactions(\n        data: any[],\n        transactions: HierarchicalTransaction[],\n        childDataKey: any,\n        primaryKey?: any,\n        cloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy(),\n        deleteRows = false): any[] {\n        for (const transaction of transactions) {\n            if (transaction.path) {\n                const parent = this.findParentFromPath(data, primaryKey, childDataKey, transaction.path);\n                let collection: any[] = parent ? parent[childDataKey] : data;\n                switch (transaction.type) {\n                    case TransactionType.ADD:\n                        //  if there is no parent this is ADD row at root level\n                        if (parent && !parent[childDataKey]) {\n                            parent[childDataKey] = collection = [];\n                        }\n                        collection.push(transaction.newValue);\n                        break;\n                    case TransactionType.UPDATE:\n                        const updateIndex = collection.findIndex(x => x[primaryKey] === transaction.id);\n                        if (updateIndex !== -1) {\n                            collection[updateIndex] = mergeObjects(cloneStrategy.clone(collection[updateIndex]), transaction.newValue);\n                        }\n                        break;\n                    case TransactionType.DELETE:\n                        if (deleteRows) {\n                            const deleteIndex = collection.findIndex(r => r[primaryKey] === transaction.id);\n                            if (deleteIndex !== -1) {\n                                collection.splice(deleteIndex, 1);\n                            }\n                        }\n                        break;\n                }\n            } else {\n                //  if there is no path this is ADD row in root. Push the newValue to data\n                data.push(transaction.newValue);\n            }\n        }\n        return data;\n    }\n\n    public static parseValue(dataType: GridColumnDataType, value: any): any {\n        if (dataType === GridColumnDataType.Number || dataType === GridColumnDataType.Currency || dataType === GridColumnDataType.Percent) {\n            value = parseFloat(value);\n        }\n\n        return value;\n    }\n\n    private static findParentFromPath(data: any[], primaryKey: any, childDataKey: any, path: any[]): any {\n        let collection: any[] = data;\n        let result: any;\n\n        for (const id of path) {\n            result = collection && collection.find(x => x[primaryKey] === id);\n            if (!result) {\n                break;\n            }\n\n            collection = result[childDataKey];\n        }\n\n        return result;\n    }\n}\n","/**\n * @hidden\n */\nexport class ExportUtilities {\n    public static getKeysFromData(data: any[]) {\n        const length = data.length;\n        if (length === 0) {\n            return [];\n        }\n\n        const dataEntry = data[0];\n        const dataEntryMiddle = data[Math.floor(length / 2)];\n        const dataEntryLast = data[length - 1];\n\n        const keys1 = Object.keys(dataEntry);\n        const keys2 = Object.keys(dataEntryMiddle);\n        const keys3 = Object.keys(dataEntryLast);\n\n        const keys = new Set(keys1.concat(keys2).concat(keys3));\n\n        return !ExportUtilities.isSpecialData(dataEntry) ? Array.from(keys) : ['Column 1'];\n    }\n\n    public static saveBlobToFile(blob: Blob, fileName) {\n        const doc = globalThis.document;\n        const a = doc.createElement('a');\n        const url = window.URL.createObjectURL(blob);\n        a.download = fileName;\n\n        a.href = url;\n        doc.body.appendChild(a);\n        a.click();\n        doc.body.removeChild(a);\n        window.URL.revokeObjectURL(url);\n    }\n\n    public static stringToArrayBuffer(s: string): ArrayBuffer {\n        const buf = new ArrayBuffer(s.length);\n        const view = new Uint8Array(buf);\n        for (let i = 0; i !== s.length; ++i) {\n            view[i] = s.charCodeAt(i) & 0xFF;\n        }\n        return buf;\n    }\n\n    public static isSpecialData(data: any): boolean {\n        return (typeof data === 'string' ||\n            typeof data === 'number' ||\n            data instanceof Date);\n    }\n\n    public static hasValue(value: any): boolean {\n        return value !== undefined && value !== null;\n    }\n\n    public static isNullOrWhitespaces(value: string): boolean {\n        return value === undefined || value === null || !value.trim();\n    }\n\n    public static sanitizeValue(value: any): string {\n        if (!this.hasValue(value)) {\n            return '';\n        } else {\n            const stringValue = String(value);\n            return stringValue.replace(/&/g, '&amp;')\n                              .replace(/</g, '&lt;')\n                              .replace(/>/g, '&gt;')\n                              .replace(/\"/g, '&quot;')\n                              .replace(/'/g, '&apos;')\n                              // Bug #14944 - Remove the not supported null character (\\u0000, \\x00)\n                              .replace(/\\x00/g, '');\n        }\n    }\n}\n","export interface IgxDateTimeEditorEventArgs {\n    readonly oldValue?: Date;\n    newValue?: Date;\n    readonly userInput: string;\n}\n\n/**\n * Specify a particular date, time or AmPm part.\n */\nexport enum DatePart {\n    Date = 'date',\n    Month = 'month',\n    Year = 'year',\n    Hours = 'hours',\n    Minutes = 'minutes',\n    Seconds = 'seconds',\n    FractionalSeconds = 'fractionalSeconds',\n    AmPm = 'ampm',\n    Literal = 'literal'\n}\n\n/** @hidden @internal */\nexport interface DatePartInfo {\n    type: DatePart;\n    start: number;\n    end: number;\n    format: string;\n}\n\n/** Delta values used for spin actions. */\nexport interface DatePartDeltas {\n    date?: number;\n    month?: number;\n    year?: number;\n    hours?: number;\n    minutes?: number;\n    seconds?: number;\n    fractionalSeconds?: number;\n}\n","import { DatePart, DatePartInfo } from '../../directives/date-time-editor/date-time-editor.common';\nimport { formatDate, FormatWidth, getLocaleDateFormat } from '@angular/common';\nimport { ValidationErrors } from '@angular/forms';\nimport { isDate } from '../../core/utils';\nimport { DataType } from '../../data-operations/data-util';\n\n/** @hidden */\nconst enum FormatDesc {\n    Numeric = 'numeric',\n    TwoDigits = '2-digit'\n}\n\nconst TIME_CHARS = ['h', 'H', 'm', 's', 'S', 't', 'T', 'a'];\nconst DATE_CHARS = ['d', 'D', 'M', 'y', 'Y'];\n\n/** @hidden */\nconst enum AmPmValues {\n    AM = 'AM',\n    A = 'a',\n    PM = 'PM',\n    P = 'p'\n}\n\n/** @hidden */\nconst enum DateParts {\n    Day = 'day',\n    Month = 'month',\n    Year = 'year',\n    Hour = 'hour',\n    Minute = 'minute',\n    Second = 'second',\n    AmPm = 'dayPeriod'\n}\n\n/** Maps of the pre-defined date-time format options supported by the Angular DatePipe\n * - predefinedNumericFormats resolve to numeric parts only (and period) for the default 'en' culture\n * - predefinedNonNumericFormats usually contain non-numeric date/time parts, which cannot be\n *   handled for editing by the date/time editors\n *  Ref: https://angular.dev/api/common/DatePipe?tab=usage-notes\n * @hidden\n */\nconst predefinedNumericFormats = new Map<string, DateParts[]>([\n    ['short', [DateParts.Month, DateParts.Day, DateParts.Year, DateParts.Hour, DateParts.Minute]],\n    ['shortDate', [DateParts.Month, DateParts.Day, DateParts.Year]],\n    ['shortTime', [DateParts.Hour, DateParts.Minute]],\n    ['mediumTime', [DateParts.Hour, DateParts.Minute, DateParts.Second]],\n]);\n\nconst predefinedNonNumericFormats = new Set<string>([\n    'medium', 'long', 'full', 'mediumDate', 'longDate', 'fullDate', 'longTime', 'fullTime',\n])\n\n/** @hidden */\nexport abstract class DateTimeUtil {\n    public static readonly DEFAULT_INPUT_FORMAT = 'MM/dd/yyyy';\n    public static readonly DEFAULT_TIME_INPUT_FORMAT = 'hh:mm tt';\n    private static readonly SEPARATOR = 'literal';\n    private static readonly DEFAULT_LOCALE = 'en';\n\n    /**\n     * Parse a Date value from masked string input based on determined date parts\n     *\n     * @param inputData masked value to parse\n     * @param dateTimeParts Date parts array for the mask\n     */\n    public static parseValueFromMask(inputData: string, dateTimeParts: DatePartInfo[], promptChar?: string): Date | null {\n        const parts: { [key in DatePart]: number } = {} as any;\n        dateTimeParts.forEach(dp => {\n            let value = parseInt(DateTimeUtil.getCleanVal(inputData, dp, promptChar), 10);\n            if (!value) {\n                value = dp.type === DatePart.Date || dp.type === DatePart.Month ? 1 : 0;\n            }\n            parts[dp.type] = value;\n        });\n        parts[DatePart.Month] -= 1;\n\n        if (parts[DatePart.Month] < 0 || 11 < parts[DatePart.Month]) {\n            return null;\n        }\n\n        // TODO: Century threshold\n        if (parts[DatePart.Year] < 50) {\n            parts[DatePart.Year] += 2000;\n        }\n\n        if (parts[DatePart.Date] > DateTimeUtil.daysInMonth(parts[DatePart.Year], parts[DatePart.Month])) {\n            return null;\n        }\n\n        if (parts[DatePart.Hours] > 23 || parts[DatePart.Minutes] > 59\n            || parts[DatePart.Seconds] > 59 || parts[DatePart.FractionalSeconds] > 999) {\n            return null;\n        }\n\n        const amPm = dateTimeParts.find(p => p.type === DatePart.AmPm);\n        if (amPm) {\n            parts[DatePart.Hours] %= 12;\n        }\n\n        if (amPm) {\n            const cleanVal = DateTimeUtil.getCleanVal(inputData, amPm, promptChar);\n            if (DateTimeUtil.isPm(cleanVal)) {\n                parts[DatePart.Hours] += 12;\n            }\n        }\n\n        return new Date(\n            parts[DatePart.Year] || 2000,\n            parts[DatePart.Month] || 0,\n            parts[DatePart.Date] || 1,\n            parts[DatePart.Hours] || 0,\n            parts[DatePart.Minutes] || 0,\n            parts[DatePart.Seconds] || 0,\n            parts[DatePart.FractionalSeconds] || 0\n        );\n    }\n\n    /** Parse the mask into date/time and literal parts */\n    public static parseDateTimeFormat(mask: string, locale?: string): DatePartInfo[] {\n        const format = mask || DateTimeUtil.getDefaultInputFormat(locale);\n        const dateTimeParts: DatePartInfo[] = [];\n        const formatArray = Array.from(format);\n        let currentPart: DatePartInfo = null;\n        let position = 0;\n        let lastPartAdded = false;\n        for (let i = 0; i < formatArray.length; i++, position++) {\n            const type = DateTimeUtil.determineDatePart(formatArray[i]);\n            if (currentPart) {\n                if (currentPart.type === type) {\n                    currentPart.format += formatArray[i];\n                    if (i < formatArray.length - 1) {\n                        continue;\n                    }\n                }\n\n                if (currentPart.type === DatePart.AmPm && currentPart.format.indexOf('a') !== -1) {\n                    currentPart = DateTimeUtil.simplifyAmPmFormat(currentPart);\n                }\n                DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);\n                lastPartAdded = true;\n                position = currentPart.end;\n                if(i === formatArray.length - 1 && currentPart.type !== type) {\n                    lastPartAdded = false;\n                }\n            }\n\n            currentPart = {\n                start: position,\n                end: position + formatArray[i].length,\n                type,\n                format: formatArray[i]\n            };\n        }\n\n        // make sure the last member of a format like H:m:s is not omitted\n        if (!lastPartAdded) {\n            if (currentPart.type === DatePart.AmPm) {\n                currentPart = DateTimeUtil.simplifyAmPmFormat(currentPart);\n            }\n            DateTimeUtil.addCurrentPart(currentPart, dateTimeParts);\n        }\n        // formats like \"y\" or \"yyy\" are treated like \"yyyy\" while editing\n        const yearPart = dateTimeParts.filter(p => p.type === DatePart.Year)[0];\n        if (yearPart && yearPart.format !== 'yy') {\n            yearPart.end += 4 - yearPart.format.length;\n            yearPart.format = 'yyyy';\n        }\n\n        return dateTimeParts;\n    }\n\n    /** Simplifies the AmPm part to as many chars as will be displayed */\n    private static simplifyAmPmFormat(currentPart: DatePartInfo){\n            currentPart.format = currentPart.format.length === 5 ? 'a' : 'aa';\n            currentPart.end = currentPart.start +  currentPart.format.length;\n            return { ...currentPart };\n    }\n\n    public static getPartValue(value: Date, datePartInfo: DatePartInfo, partLength: number): string {\n        let maskedValue;\n        const datePart = datePartInfo.type;\n        switch (datePart) {\n            case DatePart.Date:\n                maskedValue = value.getDate();\n                break;\n            case DatePart.Month:\n                // months are zero based\n                maskedValue = value.getMonth() + 1;\n                break;\n            case DatePart.Year:\n                if (partLength === 2) {\n                    maskedValue = this.prependValue(\n                        parseInt(value.getFullYear().toString().slice(-2), 10), partLength, '0');\n                } else {\n                    maskedValue = value.getFullYear();\n                }\n                break;\n            case DatePart.Hours:\n                if (datePartInfo.format.indexOf('h') !== -1) {\n                    maskedValue = this.prependValue(\n                        this.toTwelveHourFormat(value.getHours().toString()), partLength, '0');\n                } else {\n                    maskedValue = value.getHours();\n                }\n                break;\n            case DatePart.Minutes:\n                maskedValue = value.getMinutes();\n                break;\n            case DatePart.Seconds:\n                maskedValue = value.getSeconds();\n                break;\n            case DatePart.FractionalSeconds:\n                maskedValue = value.getMilliseconds();\n                break;\n            case DatePart.AmPm:\n                maskedValue = DateTimeUtil.getAmPmValue(partLength, value.getHours() < 12);\n                break;\n        }\n\n        if (datePartInfo.type !== DatePart.AmPm && datePartInfo.type !== DatePart.Literal) {\n            return this.prependValue(maskedValue, partLength, '0');\n        }\n\n        return maskedValue;\n    }\n\n    /** Returns the AmPm part value depending on the part length and a\n     * conditional expression indicating whether the value is AM or PM.\n     */\n    public static getAmPmValue(partLength: number, isAm: boolean) {\n        if (isAm) {\n            return partLength === 1 ? AmPmValues.A : AmPmValues.AM;\n        } else {\n            return partLength === 1 ? AmPmValues.P : AmPmValues.PM;\n        }\n    }\n\n    /** Returns true if a string value indicates an AM period */\n    public static isAm(value: string) {\n        value = value.toLowerCase();\n        return (value === AmPmValues.AM.toLowerCase() || value === AmPmValues.A.toLowerCase());\n    }\n\n    /** Returns true if a string value indicates a PM period */\n    public static isPm(value: string) {\n        value = value.toLowerCase();\n        return (value === AmPmValues.PM.toLowerCase() || value === AmPmValues.P.toLowerCase());\n    }\n\n    /** Builds a date-time editor's default input format based on provided locale settings and data type. */\n    public static getDefaultInputFormat(locale: string, dataType: DataType = DataType.Date): string {\n        locale = locale || DateTimeUtil.DEFAULT_LOCALE;\n        if (!Intl || !Intl.DateTimeFormat || !Intl.DateTimeFormat.prototype.formatToParts) {\n            // TODO: fallback with Intl.format for IE?\n            return DateTimeUtil.DEFAULT_INPUT_FORMAT;\n        }\n        const parts = DateTimeUtil.getDefaultLocaleMask(locale, dataType);\n        parts.forEach(p => {\n            if (p.type !== DatePart.Year && p.type !== DateTimeUtil.SEPARATOR && p.type !== DatePart.AmPm) {\n                p.formatType = FormatDesc.TwoDigits;\n            }\n        });\n\n        return DateTimeUtil.getMask(parts);\n    }\n\n    /** Tries to format a date using Angular's DatePipe. Fallbacks to `Intl` if no locale settings have been loaded. */\n    public static formatDate(value: number | Date, format: string, locale: string, timezone?: string): string {\n        let formattedDate: string;\n        try {\n            formattedDate = formatDate(value, format, locale, timezone);\n        } catch {\n            DateTimeUtil.logMissingLocaleSettings(locale);\n            const formatter = new Intl.DateTimeFormat(locale);\n            formattedDate = formatter.format(value);\n        }\n\n        return formattedDate;\n    }\n\n    /**\n     * Returns the date format based on a provided locale.\n     * Supports Angular's DatePipe format options such as `shortDate`, `longDate`.\n     */\n    public static getLocaleDateFormat(locale: string, displayFormat?: string): string {\n        const formatKeys = Object.keys(FormatWidth) as (keyof FormatWidth)[];\n        const targetKey = formatKeys.find(k => k.toLowerCase() === displayFormat?.toLowerCase().replace('date', ''));\n        if (!targetKey) {\n            // if displayFormat is not shortDate, longDate, etc.\n            // or if it is not set by the user\n            return displayFormat;\n        }\n        let format: string;\n        try {\n            format = getLocaleDateFormat(locale, FormatWidth[targetKey]);\n        } catch {\n            DateTimeUtil.logMissingLocaleSettings(locale);\n            format = DateTimeUtil.getDefaultInputFormat(locale);\n        }\n\n        return format;\n    }\n\n    /** Determines if a given character is `d/M/y` or `h/m/s`. */\n    public static isDateOrTimeChar(char: string): boolean {\n        return DATE_CHARS.indexOf(char) !== -1 || TIME_CHARS.indexOf(char) !== -1;\n    }\n\n    /** Spins the date portion in a date-time editor. */\n    public static spinDate(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear(), newDate.getMonth());\n        let date = newDate.getDate() + delta;\n        if (date > maxDate) {\n            date = spinLoop ? date % maxDate : maxDate;\n        } else if (date < 1) {\n            date = spinLoop ? maxDate + (date % maxDate) : 1;\n        }\n\n        newDate.setDate(date);\n    }\n\n    /** Spins the month portion in a date-time editor. */\n    public static spinMonth(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear(), newDate.getMonth() + delta);\n        if (newDate.getDate() > maxDate) {\n            newDate.setDate(maxDate);\n        }\n\n        const maxMonth = 11;\n        const minMonth = 0;\n        let month = newDate.getMonth() + delta;\n        if (month > maxMonth) {\n            month = spinLoop ? (month % maxMonth) - 1 : maxMonth;\n        } else if (month < minMonth) {\n            month = spinLoop ? maxMonth + (month % maxMonth) + 1 : minMonth;\n        }\n\n        newDate.setMonth(month);\n    }\n\n    /** Spins the year portion in a date-time editor. */\n    public static spinYear(delta: number, newDate: Date): void {\n        const maxDate = DateTimeUtil.daysInMonth(newDate.getFullYear() + delta, newDate.getMonth());\n        if (newDate.getDate() > maxDate) {\n            // clip to max to avoid leap year change shifting the entire value\n            newDate.setDate(maxDate);\n        }\n        newDate.setFullYear(newDate.getFullYear() + delta);\n    }\n\n    /** Spins the hours portion in a date-time editor. */\n    public static spinHours(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxHour = 23;\n        const minHour = 0;\n        let hours = newDate.getHours() + delta;\n        if (hours > maxHour) {\n            hours = spinLoop ? hours % maxHour - 1 : maxHour;\n        } else if (hours < minHour) {\n            hours = spinLoop ? maxHour + (hours % maxHour) + 1 : minHour;\n        }\n\n        newDate.setHours(hours);\n    }\n\n    /** Spins the minutes portion in a date-time editor. */\n    public static spinMinutes(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxMinutes = 59;\n        const minMinutes = 0;\n        let minutes = newDate.getMinutes() + delta;\n        if (minutes > maxMinutes) {\n            minutes = spinLoop ? minutes % maxMinutes - 1 : maxMinutes;\n        } else if (minutes < minMinutes) {\n            minutes = spinLoop ? maxMinutes + (minutes % maxMinutes) + 1 : minMinutes;\n        }\n\n        newDate.setMinutes(minutes);\n    }\n\n    /** Spins the seconds portion in a date-time editor. */\n    public static spinSeconds(delta: number, newDate: Date, spinLoop: boolean): void {\n        const maxSeconds = 59;\n        const minSeconds = 0;\n        let seconds = newDate.getSeconds() + delta;\n        if (seconds > maxSeconds) {\n            seconds = spinLoop ? seconds % maxSeconds - 1 : maxSeconds;\n        } else if (seconds < minSeconds) {\n            seconds = spinLoop ? maxSeconds + (seconds % maxSeconds) + 1 : minSeconds;\n        }\n\n        newDate.setSeconds(seconds);\n    }\n\n     /** Spins the fractional seconds (milliseconds) portion in a date-time editor. */\n    public static spinFractionalSeconds(delta: number, newDate: Date, spinLoop: boolean) {\n        const maxMs = 999;\n        const minMs = 0;\n        let ms = newDate.getMilliseconds() + delta;\n        if (ms > maxMs) {\n            ms = spinLoop ? ms % maxMs - 1 : maxMs;\n        } else if (ms < minMs) {\n            ms = spinLoop ? maxMs + (ms % maxMs) + 1 : minMs;\n        }\n\n        newDate.setMilliseconds(ms);\n    }\n\n    /** Spins the AM/PM portion in a date-time editor. */\n    public static spinAmPm(newDate: Date, currentDate: Date, amPmFromMask: string): Date {\n        if(DateTimeUtil.isAm(amPmFromMask)) {\n            newDate = new Date(newDate.setHours(newDate.getHours() + 12));\n        } else if(DateTimeUtil.isPm(amPmFromMask)) {\n            newDate = new Date(newDate.setHours(newDate.getHours() - 12));\n        }\n\n        if (newDate.getDate() !== currentDate.getDate()) {\n            return currentDate;\n        }\n\n        return newDate;\n    }\n\n    /**\n     * Determines whether the provided value is greater than the provided max value.\n     *\n     * @param includeTime set to false if you want to exclude time portion of the two dates\n     * @param includeDate set to false if you want to exclude the date portion of the two dates\n     * @returns true if provided value is greater than provided maxValue\n     */\n    public static greaterThanMaxValue(value: Date, maxValue: Date, includeTime = true, includeDate = true): boolean {\n        if (includeTime && includeDate) {\n            return value.getTime() > maxValue.getTime();\n        }\n\n        const _value = new Date(value.getTime());\n        const _maxValue = new Date(maxValue.getTime());\n        if (!includeTime) {\n            _value.setHours(0, 0, 0, 0);\n            _maxValue.setHours(0, 0, 0, 0);\n        }\n        if (!includeDate) {\n            _value.setFullYear(0, 0, 0);\n            _maxValue.setFullYear(0, 0, 0);\n        }\n\n        return _value.getTime() > _maxValue.getTime();\n    }\n\n    /**\n     * Determines whether the provided value is less than the provided min value.\n     *\n     * @param includeTime set to false if you want to exclude time portion of the two dates\n     * @param includeDate set to false if you want to exclude the date portion of the two dates\n     * @returns true if provided value is less than provided minValue\n     */\n    public static lessThanMinValue(value: Date, minValue: Date, includeTime = true, includeDate = true): boolean {\n        if (includeTime && includeDate) {\n            return value.getTime() < minValue.getTime();\n        }\n\n        const _value = new Date(value.getTime());\n        const _minValue = new Date(minValue.getTime());\n        if (!includeTime) {\n            _value.setHours(0, 0, 0, 0);\n            _minValue.setHours(0, 0, 0, 0);\n        }\n        if (!includeDate) {\n            _value.setFullYear(0, 0, 0);\n            _minValue.setFullYear(0, 0, 0);\n        }\n\n        return _value.getTime() < _minValue.getTime();\n    }\n\n    /**\n     * Validates a value within a given min and max value range.\n     *\n     * @param value The value to validate\n     * @param minValue The lowest possible value that `value` can take\n     * @param maxValue The largest possible value that `value` can take\n     */\n    public static validateMinMax(value: Date, minValue: Date | string, maxValue: Date | string,\n        includeTime = true, includeDate = true): ValidationErrors {\n        if (!value) {\n            return null;\n        }\n        const errors = {};\n        const min = DateTimeUtil.isValidDate(minValue) ? minValue : DateTimeUtil.parseIsoDate(minValue);\n        const max = DateTimeUtil.isValidDate(maxValue) ? maxValue : DateTimeUtil.parseIsoDate(maxValue);\n        if (min && value && DateTimeUtil.lessThanMinValue(value, min, includeTime, includeDate)) {\n            Object.assign(errors, { minValue: true });\n        }\n        if (max && value && DateTimeUtil.greaterThanMaxValue(value, max, includeTime, includeDate)) {\n            Object.assign(errors, { maxValue: true });\n        }\n\n        return errors;\n    }\n\n    /** Parse an ISO string to a Date */\n    public static parseIsoDate(value: string): Date | null {\n        let regex = /^\\d{4}/g;\n        const timeLiteral = 'T';\n        if (regex.test(value)) {\n            return new Date(value + `${value.indexOf(timeLiteral) === -1 ? 'T00:00:00' : ''}`);\n        }\n\n        regex = /^\\d{2}/g;\n        if (regex.test(value)) {\n            const dateNow = new Date().toISOString();\n            // eslint-disable-next-line prefer-const\n            let [datePart, _timePart] = dateNow.split(timeLiteral);\n            return new Date(`${datePart}T${value}`);\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns whether the input is valid date\n     *\n     * @param value input to check\n     * @returns true if provided input is a valid date\n     */\n    public static isValidDate(value: any): value is Date {\n        if (isDate(value)) {\n            return !isNaN(value.getTime());\n        }\n\n        return false;\n    }\n\n    public static isFormatNumeric(locale: string, inputFormat: string): boolean {\n        const dateParts = DateTimeUtil.parseDateTimeFormat(inputFormat);\n        if (predefinedNonNumericFormats.has(inputFormat) || dateParts.every(p => p.type === DatePart.Literal)) {\n            return false;\n        }\n        for (let i = 0; i < dateParts.length; i++) {\n            if (dateParts[i].type === DatePart.AmPm || dateParts[i].type === DatePart.Literal) {\n                continue;\n            }\n            const transformedValue = formatDate(new Date(), dateParts[i].format, locale);\n            // check if the transformed date/time part contains any kind of letter from any language\n            if (/\\p{L}+/gu.test(transformedValue)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Returns an input format that can be used by the date-time editors, as\n     * - if the format is already numeric, return it as is\n     * - if it is among the predefined numeric ones, return it as the equivalent locale-based format\n     *   for the corresponding numeric date parts\n     * - otherwise, return an empty string\n     */\n    public static getNumericInputFormat(locale: string, format: string): string {\n        let resultFormat = '';\n        if (!format) {\n            return resultFormat;\n        }\n        if (predefinedNumericFormats.has(format)) {\n            resultFormat = DateTimeUtil.getLocaleInputFormatFromParts(locale, predefinedNumericFormats.get(format));\n\n        } else if (DateTimeUtil.isFormatNumeric(locale, format)) {\n            resultFormat = format;\n        }\n        return resultFormat;\n    }\n\n    /** Gets the locale-based format from an array of date parts */\n    private static getLocaleInputFormatFromParts(locale: string, dateParts: DateParts[]): string {\n        const options = {};\n        dateParts.forEach(p => {\n            if (p === DateParts.Year) {\n                options[p] = FormatDesc.Numeric;\n            } else if (p !== DateParts.AmPm) {\n                options[p] = FormatDesc.TwoDigits;\n            }\n        });\n        const formatter = new Intl.DateTimeFormat(locale, options);\n        const dateStruct = DateTimeUtil.getDateStructFromParts(formatter.formatToParts(new Date()), formatter);\n        DateTimeUtil.fillDatePartsPositions(dateStruct);\n        return DateTimeUtil.getMask(dateStruct);\n    }\n\n    private static addCurrentPart(currentPart: DatePartInfo, dateTimeParts: DatePartInfo[]): void {\n        DateTimeUtil.ensureLeadingZero(currentPart);\n        currentPart.end = currentPart.start + currentPart.format.length;\n        dateTimeParts.push(currentPart);\n    }\n\n    private static daysInMonth(fullYear: number, month: number): number {\n        return new Date(fullYear, month + 1, 0).getDate();\n    }\n\n    private static trimEmptyPlaceholders(value: string, promptChar?: string): string {\n        const result = value.replace(new RegExp(promptChar || '_', 'g'), '');\n        return result;\n    }\n\n    private static getMask(dateStruct: any[]): string {\n        const mask = [];\n        for (const part of dateStruct) {\n            if (part.formatType === FormatDesc.Numeric) {\n                switch (part.type) {\n                    case DateParts.Day:\n                        mask.push('d');\n                        break;\n                    case DateParts.Month:\n                        mask.push('M');\n                        break;\n                    case DateParts.Year:\n                        mask.push('yyyy');\n                        break;\n                    case DateParts.Hour:\n                        mask.push(part.hour12 ? 'h' : 'H');\n                        break;\n                    case DateParts.Minute:\n                        mask.push('m');\n                        break;\n                    case DateParts.Second:\n                        mask.push('s');\n                        break;\n                }\n            } else if (part.formatType === FormatDesc.TwoDigits) {\n                switch (part.type) {\n                    case DateParts.Day:\n                        mask.push('dd');\n                        break;\n                    case DateParts.Month:\n                        mask.push('MM');\n                        break;\n                    case DateParts.Year:\n                        mask.push('yy');\n                        break;\n                    case DateParts.Hour:\n                        mask.push(part.hour12 ? 'hh' : 'HH');\n                        break;\n                    case DateParts.Minute:\n                        mask.push('mm');\n                        break;\n                    case DateParts.Second:\n                        mask.push('ss');\n                        break;\n                }\n            }\n\n            if (part.type === DateParts.AmPm) {\n                mask.push('tt');\n            }\n\n            if (part.type === DateTimeUtil.SEPARATOR) {\n                mask.push(part.value);\n            }\n        }\n\n        return mask.join('');\n    }\n\n    private static logMissingLocaleSettings(locale: string): void {\n        console.warn(`Missing locale data for the locale ${locale}. Please refer to https://angular.io/guide/i18n#i18n-pipes`);\n        console.warn('Using default browser locale settings.');\n    }\n\n    private static prependValue(value: number, partLength: number, prependChar: string): string {\n        return (prependChar + value.toString()).slice(-partLength);\n    }\n\n    private static toTwelveHourFormat(value: string, promptChar = '_'): number {\n        let hour = parseInt(value.replace(new RegExp(promptChar, 'g'), '0'), 10);\n        if (hour > 12) {\n            hour -= 12;\n        } else if (hour === 0) {\n            hour = 12;\n        }\n\n        return hour;\n    }\n\n    private static ensureLeadingZero(part: DatePartInfo) {\n        switch (part.type) {\n            case DatePart.Date:\n            case DatePart.Month:\n            case DatePart.Hours:\n            case DatePart.Minutes:\n            case DatePart.Seconds:\n                if (part.format.length === 1) {\n                    part.format = part.format.repeat(2);\n                }\n                break;\n            case DatePart.FractionalSeconds:\n                part.format = part.format[0].repeat(3);\n                break;\n        }\n    }\n\n    private static getCleanVal(inputData: string, datePart: DatePartInfo, promptChar?: string): string {\n        return DateTimeUtil.trimEmptyPlaceholders(inputData.substring(datePart.start, datePart.end), promptChar);\n    }\n\n    private static determineDatePart(char: string): DatePart {\n        switch (char) {\n            case 'd':\n            case 'D':\n                return DatePart.Date;\n            case 'M':\n                return DatePart.Month;\n            case 'y':\n            case 'Y':\n                return DatePart.Year;\n            case 'h':\n            case 'H':\n                return DatePart.Hours;\n            case 'm':\n                return DatePart.Minutes;\n            case 's':\n                return DatePart.Seconds;\n            case 'S':\n                return DatePart.FractionalSeconds;\n            case 'a':\n            case 't':\n            case 'T':\n                return DatePart.AmPm;\n            default:\n                return DatePart.Literal;\n        }\n    }\n\n    private static getFormatOptions(dataType: DataType) {\n        const dateOptions = {\n            day: FormatDesc.TwoDigits,\n            month: FormatDesc.TwoDigits,\n            year: FormatDesc.Numeric\n        };\n        const timeOptions = {\n            hour: FormatDesc.TwoDigits,\n            minute: FormatDesc.TwoDigits\n        };\n        switch (dataType) {\n            case DataType.Date:\n                return dateOptions;\n            case DataType.Time:\n                return timeOptions;\n            case DataType.DateTime:\n                return {\n                    ...dateOptions,\n                    ...timeOptions,\n                    second: FormatDesc.TwoDigits\n                };\n            default:\n                return { };\n        }\n    }\n\n    private static getDefaultLocaleMask(locale: string, dataType: DataType = DataType.Date) {\n        const options = DateTimeUtil.getFormatOptions(dataType);\n        const formatter = new Intl.DateTimeFormat(locale, options);\n        const formatToParts = formatter.formatToParts(new Date());\n        const dateStruct = DateTimeUtil.getDateStructFromParts(formatToParts, formatter);\n        DateTimeUtil.fillDatePartsPositions(dateStruct);\n        return dateStruct;\n    }\n\n    private static getDateStructFromParts(parts: Intl.DateTimeFormatPart[], formatter: Intl.DateTimeFormat): any[] {\n        const dateStruct = [];\n        for (const part of parts) {\n            if (part.type === DateTimeUtil.SEPARATOR) {\n                dateStruct.push({\n                    type: DateTimeUtil.SEPARATOR,\n                    value: part.value\n                });\n            } else {\n                dateStruct.push({\n                    type: part.type\n                });\n            }\n        }\n        const formatterOptions = formatter.resolvedOptions();\n        for (const part of dateStruct) {\n            switch (part.type) {\n                case DateParts.Day: {\n                    part.formatType = formatterOptions.day;\n                    break;\n                }\n                case DateParts.Month: {\n                    part.formatType = formatterOptions.month;\n                    break;\n                }\n                case DateParts.Year: {\n                    part.formatType = formatterOptions.year;\n                    break;\n                }\n                case DateParts.Hour: {\n                    part.formatType = formatterOptions.hour;\n                    if (formatterOptions.hour12) {\n                        part.hour12 = true;\n                    }\n                    break;\n                }\n                case DateParts.Minute: {\n                    part.formatType = formatterOptions.minute;\n                    break;\n                }\n                case DateParts.Second: {\n                    part.formatType = formatterOptions.second;\n                    break;\n                }\n                case DateParts.AmPm: {\n                    part.formatType = formatterOptions.dayPeriod;\n                    break;\n                }\n            }\n        }\n        return dateStruct;\n    }\n\n    private static fillDatePartsPositions(dateArray: any[]): void {\n        let currentPos = 0;\n\n        for (const part of dateArray) {\n            // Day|Month|Hour|Minute|Second|AmPm part positions\n            if (part.type === DateParts.Day || part.type === DateParts.Month ||\n                part.type === DateParts.Hour || part.type === DateParts.Minute || part.type === DateParts.Second ||\n                part.type === DateParts.AmPm\n            ) {\n                // Offset 2 positions for number\n                part.position = [currentPos, currentPos + 2];\n                currentPos += 2;\n            } else if (part.type === DateParts.Year) {\n                // Year part positions\n                switch (part.formatType) {\n                    case FormatDesc.Numeric: {\n                        // Offset 4 positions for full year\n                        part.position = [currentPos, currentPos + 4];\n                        currentPos += 4;\n                        break;\n                    }\n                    case FormatDesc.TwoDigits: {\n                        // Offset 2 positions for short year\n                        part.position = [currentPos, currentPos + 2];\n                        currentPos += 2;\n                        break;\n                    }\n                }\n            } else if (part.type === DateTimeUtil.SEPARATOR) {\n                // Separator positions\n                part.position = [currentPos, currentPos + 1];\n                currentPos++;\n            }\n        }\n    }\n}\n","/**\n * Provides base filtering operations\n * Implementations should be Singleton\n *\n * @export\n */\nexport class IgxFilteringOperand {\n    protected static _instance: IgxFilteringOperand = null;\n    public operations: IFilteringOperation[];\n\n    constructor() {\n        this.operations = [{\n            name: 'null',\n            isUnary: true,\n            iconName: 'filter_null',\n            logic: (target: any) => target === null\n        }, {\n            name: 'notNull',\n            isUnary: true,\n            iconName: 'filter_not_null',\n            logic: (target: any) => target !== null\n        }, {\n            name: 'in',\n            isUnary: false,\n            iconName: 'filter_in',\n            hidden: true,\n            logic: (target: any, searchVal: Set<any>) => this.findValueInSet(target, searchVal)\n        }, {\n            name: 'inQuery',\n            isUnary: false,\n            isNestedQuery: true,\n            iconName: 'in',\n            logic: (target: any, searchVal: Set<any>) => this.findValueInSet(target, searchVal)\n        }, {\n            name: 'notInQuery',\n            isUnary: false,\n            isNestedQuery: true,\n            iconName: 'not-in',\n            logic: (target: any, searchVal: Set<any>) => !this.findValueInSet(target, searchVal)\n        }];\n    }\n\n    public static instance(): IgxFilteringOperand {\n        return this._instance || (this._instance = new this());\n    }\n\n    /**\n     * Returns an array of names of the conditions which are visible in the filtering UI\n     */\n    public conditionList(): string[] {\n        return this.operations.filter(f => !f.hidden && !f.isNestedQuery).map((element) => element.name);\n    }\n\n    /**\n     * Returns an array of names of the conditions which are visible in the UI, including \"In\" and \"Not In\", allowing the creation of sub-queries.\n     * @hidden @internal\n     */\n    public extendedConditionList(): string[] {\n        return this.operations.filter(f => !f.hidden).map((element) => element.name);\n    }\n\n    /**\n     * Returns an instance of the condition with the specified name.\n     *\n     * @param name The name of the condition.\n     */\n    public condition(name: string): IFilteringOperation {\n        return this.operations.find((element) => element.name === name);\n    }\n\n    /**\n     * Adds a new condition to the filtering operations.\n     *\n     * @param operation The filtering operation.\n     */\n    public append(operation: IFilteringOperation) {\n        this.operations.push(operation);\n    }\n\n    protected findValueInSet(target: any, searchVal: Set<any>) {\n        return searchVal.has(target);\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for booleans\n *\n * @export\n */\nexport class IgxBooleanFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'all',\n            isUnary: true,\n            iconName: 'filter_all',\n            logic: (_target: boolean) => true\n        }, {\n            name: 'true',\n            isUnary: true,\n            iconName: 'filter_true',\n            logic: (target: boolean) => !!(target && target !== null && target !== undefined)\n        }, {\n            name: 'false',\n            isUnary: true,\n            iconName: 'filter_false',\n            logic: (target: boolean) => !target && target !== null && target !== undefined\n        }, {\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: boolean) => target === null || target === undefined\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: boolean) => target !== null && target !== undefined\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * @internal\n * @hidden\n */\nclass IgxBaseDateTimeFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: Date) => target === null || target === undefined\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: Date) => target !== null && target !== undefined\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    /**\n     * Splits a Date object into parts\n     *\n     * @memberof IgxDateFilteringOperand\n     */\n    public static getDateParts(date: Date, dateFormat?: string): IDateParts {\n        const res = {\n            day: null,\n            hours: null,\n            milliseconds: null,\n            minutes: null,\n            month: null,\n            seconds: null,\n            year: null\n        };\n        if (!date || !dateFormat) {\n            return res;\n        }\n        if (dateFormat.indexOf('y') >= 0) {\n            res.year = date.getFullYear();\n        }\n        if (dateFormat.indexOf('M') >= 0) {\n            res.month = date.getMonth();\n        }\n        if (dateFormat.indexOf('d') >= 0) {\n            res.day = date.getDate();\n        }\n        if (dateFormat.indexOf('h') >= 0) {\n            res.hours = date.getHours();\n        }\n        if (dateFormat.indexOf('m') >= 0) {\n            res.minutes = date.getMinutes();\n        }\n        if (dateFormat.indexOf('s') >= 0) {\n            res.seconds = date.getSeconds();\n        }\n        if (dateFormat.indexOf('f') >= 0) {\n            res.milliseconds = date.getMilliseconds();\n        }\n        return res;\n    }\n\n    protected override findValueInSet(target: any, searchVal: Set<any>) {\n        if (!target) {\n            return false;\n        }\n        return searchVal.has((target instanceof Date) ? target.toISOString() : target);\n    }\n\n    protected validateInputData(target: Date) {\n        if (!(target instanceof Date)) {\n            throw new Error('Could not perform filtering on \\'date\\' column because the datasource object type is not \\'Date\\'.');\n        }\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for Dates\n *\n * @export\n */\nexport class IgxDateFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');\n                return targetp.year === searchp.year &&\n                    targetp.month === searchp.month &&\n                    targetp.day === searchp.day;\n            }\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return true;\n                }\n\n                this.validateInputData(target);\n\n                const targetp = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const searchp = IgxDateFilteringOperand.getDateParts(searchVal, 'yMd');\n                return targetp.year !== searchp.year ||\n                    targetp.month !== searchp.month ||\n                    targetp.day !== searchp.day;\n            }\n        }, {\n            name: 'before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target < searchVal;\n            }\n        }, {\n            name: 'after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target > searchVal;\n            }\n        }, {\n            name: 'today',\n            isUnary: true,\n            iconName: 'filter_today',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yMd');\n                return d.year === now.year &&\n                    d.month === now.month &&\n                    d.day === now.day;\n            }\n        }, {\n            name: 'yesterday',\n            isUnary: true,\n            iconName: 'filter_yesterday',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const td = IgxDateFilteringOperand.getDateParts(target, 'yMd');\n                const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());\n                const yesterday = IgxDateFilteringOperand.getDateParts(y, 'yMd');\n                return td.year === yesterday.year &&\n                    td.month === yesterday.month &&\n                    td.day === yesterday.day;\n            }\n        }, {\n            name: 'thisMonth',\n            isUnary: true,\n            iconName: 'filter_this_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'lastMonth',\n            isUnary: true,\n            iconName: 'filter_last_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n                if (!now.month) {\n                    now.month = 11;\n                    now.year -= 1;\n                } else {\n                    now.month--;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'nextMonth',\n            isUnary: true,\n            iconName: 'filter_next_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'yM');\n                if (now.month === 11) {\n                    now.month = 0;\n                    now.year += 1;\n                } else {\n                    now.month++;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'thisYear',\n            isUnary: true,\n            iconName: 'filter_this_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year;\n            }\n        }, {\n            name: 'lastYear',\n            isUnary: true,\n            iconName: 'filter_last_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year - 1;\n            }\n        }, {\n            name: 'nextYear',\n            isUnary: true,\n            iconName: 'filter_next_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year + 1;\n            }\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    protected override findValueInSet(target: any, searchVal: Set<any>) {\n        if (!target) {\n            return false;\n        }\n\n        target = target.toDateString();\n        return searchVal.has(target);\n    }\n}\n\n/* blazorCSSuppress */\nexport class IgxDateTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n                this.validateInputData(target);\n                const targetp = IgxDateTimeFilteringOperand.getDateParts(target, 'yMdhms');\n                const searchp = IgxDateTimeFilteringOperand.getDateParts(searchVal, 'yMdhms');\n                return targetp.year === searchp.year &&\n                    targetp.month === searchp.month &&\n                    targetp.day === searchp.day &&\n                    targetp.hours === searchp.hours &&\n                    targetp.minutes === searchp.minutes &&\n                    targetp.seconds === searchp.seconds;\n            }\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return true;\n                }\n                this.validateInputData(target);\n                const targetp = IgxDateTimeFilteringOperand.getDateParts(target, 'yMdhms');\n                const searchp = IgxDateTimeFilteringOperand.getDateParts(searchVal, 'yMdhms');\n                return targetp.year !== searchp.year ||\n                    targetp.month !== searchp.month ||\n                    targetp.day !== searchp.day ||\n                    targetp.hours !== searchp.hours ||\n                    targetp.minutes !== searchp.minutes ||\n                    targetp.seconds !== searchp.seconds;\n            }\n        }, {\n            name: 'before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target < searchVal;\n            }\n        }, {\n            name: 'after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                return target > searchVal;\n            }\n        }, {\n            name: 'today',\n            isUnary: true,\n            iconName: 'filter_today',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yMd');\n                return d.year === now.year &&\n                    d.month === now.month &&\n                    d.day === now.day;\n            }\n        }, {\n            name: 'yesterday',\n            isUnary: true,\n            iconName: 'filter_yesterday',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const td = IgxDateTimeFilteringOperand.getDateParts(target, 'yMd');\n                const y = ((d) => new Date(d.setDate(d.getDate() - 1)))(new Date());\n                const yesterday = IgxDateTimeFilteringOperand.getDateParts(y, 'yMd');\n                return td.year === yesterday.year &&\n                    td.month === yesterday.month &&\n                    td.day === yesterday.day;\n            }\n        }, {\n            name: 'thisMonth',\n            isUnary: true,\n            iconName: 'filter_this_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'lastMonth',\n            isUnary: true,\n            iconName: 'filter_last_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n                if (!now.month) {\n                    now.month = 11;\n                    now.year -= 1;\n                } else {\n                    now.month--;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'nextMonth',\n            isUnary: true,\n            iconName: 'filter_next_month',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'yM');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'yM');\n                if (now.month === 11) {\n                    now.month = 0;\n                    now.year += 1;\n                } else {\n                    now.month++;\n                }\n                return d.year === now.year &&\n                    d.month === now.month;\n            }\n        }, {\n            name: 'thisYear',\n            isUnary: true,\n            iconName: 'filter_this_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year;\n            }\n        }, {\n            name: 'lastYear',\n            isUnary: true,\n            iconName: 'filter_last_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year - 1;\n            }\n        }, {\n            name: 'nextYear',\n            isUnary: true,\n            iconName: 'filter_next_year',\n            logic: (target: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n\n                const d = IgxDateTimeFilteringOperand.getDateParts(target, 'y');\n                const now = IgxDateTimeFilteringOperand.getDateParts(new Date(), 'y');\n                return d.year === now.year + 1;\n            }\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n}\n\n/* blazorCSSuppress */\nexport class IgxTimeFilteringOperand extends IgxBaseDateTimeFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'at',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n                this.validateInputData(target);\n                const targetp = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const searchp = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return targetp.hours === searchp.hours &&\n                    targetp.minutes === searchp.minutes &&\n                    targetp.seconds === searchp.seconds;\n            }\n        }, {\n            name: 'not_at',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return true;\n                }\n                this.validateInputData(target);\n                const targetp = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const searchp = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return targetp.hours !== searchp.hours ||\n                    targetp.minutes !== searchp.minutes ||\n                    targetp.seconds !== searchp.seconds;\n            }\n        }, {\n            name: 'before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n\n                return targetn.hours < search.hours ? true : targetn.hours === search.hours && targetn.minutes < search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds < search.seconds;\n            }\n        }, {\n            name: 'after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n\n                return targetn.hours > search.hours ? true : targetn.hours === search.hours && targetn.minutes > search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds > search.seconds;\n            }\n        }, {\n            name: 'at_before',\n            isUnary: false,\n            iconName: 'filter_before',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return (targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds === search.seconds) ||\n                targetn.hours < search.hours ? true : targetn.hours === search.hours && targetn.minutes < search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds < search.seconds;\n            }\n        }, {\n            name: 'at_after',\n            isUnary: false,\n            iconName: 'filter_after',\n            logic: (target: Date, searchVal: Date) => {\n                if (!target) {\n                    return false;\n                }\n\n                this.validateInputData(target);\n                const targetn = IgxTimeFilteringOperand.getDateParts(target, 'hms');\n                const search = IgxTimeFilteringOperand.getDateParts(searchVal, 'hms');\n                return (targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds === search.seconds) ||\n                    targetn.hours > search.hours ? true : targetn.hours === search.hours && targetn.minutes > search.minutes ?\n                    true : targetn.hours === search.hours && targetn.minutes === search.minutes && targetn.seconds > search.seconds;\n            }\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    protected override findValueInSet(target: any, searchVal: Set<any>) {\n        if (!target) {\n            return false;\n        }\n        return searchVal.has(target.toLocaleTimeString());\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for numbers\n *\n * @export\n */\nexport class IgxNumberFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: number, searchVal: number) => target === searchVal\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: number, searchVal: number) => target !== searchVal\n        }, {\n            name: 'greaterThan',\n            isUnary: false,\n            iconName: 'filter_greater_than',\n            logic: (target: number, searchVal: number) => target > searchVal\n        }, {\n            name: 'lessThan',\n            isUnary: false,\n            iconName: 'filter_less_than',\n            logic: (target: number, searchVal: number) => target < searchVal\n        }, {\n            name: 'greaterThanOrEqualTo',\n            isUnary: false,\n            iconName: 'filter_greater_than_or_equal',\n            logic: (target: number, searchVal: number) => target >= searchVal\n        }, {\n            name: 'lessThanOrEqualTo',\n            isUnary: false,\n            iconName: 'filter_less_than_or_equal',\n            logic: (target: number, searchVal: number) => target <= searchVal\n        }, {\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: number) => target === null || target === undefined || isNaN(target)\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: number) => target !== null && target !== undefined && !isNaN(target)\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n}\n\n/* blazorCSSuppress */\n/**\n * Provides filtering operations for strings\n *\n * @export\n */\nexport class IgxStringFilteringOperand extends IgxFilteringOperand {\n    protected constructor() {\n        super();\n        const newOperations: IFilteringOperation[] = [{\n            name: 'contains',\n            isUnary: false,\n            iconName: 'filter_contains',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.indexOf(search) !== -1;\n            }\n        }, {\n            name: 'doesNotContain',\n            isUnary: false,\n            iconName: 'filter_does_not_contain',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.indexOf(search) === -1;\n            }\n        }, {\n            name: 'startsWith',\n            isUnary: false,\n            iconName: 'filter_starts_with',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.startsWith(search);\n            }\n        }, {\n            name: 'endsWith',\n            isUnary: false,\n            iconName: 'filter_ends_with',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target.endsWith(search);\n            }\n        }, {\n            name: 'equals',\n            isUnary: false,\n            iconName: 'filter_equal',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target === search;\n            }\n        }, {\n            name: 'doesNotEqual',\n            isUnary: false,\n            iconName: 'filter_not_equal',\n            logic: (target: string, searchVal: string, ignoreCase?: boolean) => {\n                const search = IgxStringFilteringOperand.applyIgnoreCase(searchVal, ignoreCase);\n                target = IgxStringFilteringOperand.applyIgnoreCase(target, ignoreCase);\n                return target !== search;\n            }\n        }, {\n            name: 'empty',\n            isUnary: true,\n            iconName: 'filter_empty',\n            logic: (target: string) => target === null || target === undefined || target.length === 0\n        }, {\n            name: 'notEmpty',\n            isUnary: true,\n            iconName: 'filter_not_empty',\n            logic: (target: string) => target !== null && target !== undefined && target.length > 0\n        }];\n\n        this.operations = newOperations.concat(this.operations);\n    }\n\n    /**\n     * Applies case sensitivity on strings if provided\n     *\n     * @memberof IgxStringFilteringOperand\n     */\n    public static applyIgnoreCase(a: string, ignoreCase: boolean): string {\n        a = a ?? '';\n        // bulletproof\n        return ignoreCase ? ('' + a).toLowerCase() : a;\n    }\n}\n\n/* tsPlainInterface */\n/* marshalByValue */\n/**\n * Interface describing filtering operations\n *\n * @export\n */\nexport interface IFilteringOperation {\n    name: string;\n    isUnary: boolean;\n    isNestedQuery?: boolean;\n    iconName: string;\n    hidden?: boolean;\n    /* blazorCSSuppress */\n    /* blazorAlternateType: FilteringOperationLogicHandler */\n    logic?: null | ((value: any, searchVal?: any, ignoreCase?: boolean) => boolean);\n}\n\n/**\n * Interface describing Date object in parts\n *\n * @export\n */\nexport interface IDateParts {\n    year: number;\n    month: number;\n    day: number;\n    hours: number;\n    minutes: number;\n    seconds: number;\n    milliseconds: number;\n}\n","import { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { EntityType, FieldType } from '../grids/common/grid.interface';\nimport { GridColumnDataType } from './data-util';\nimport { IFilteringOperation, IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand, IgxTimeFilteringOperand } from './filtering-condition';\nimport { IFilteringExpression } from './filtering-expression.interface';\nimport { IExpressionTree, IFilteringExpressionsTree } from './filtering-expressions-tree';\n\nexport class ExpressionsTreeUtil {\n    /**\n     * Returns the filtering expression for a column with the provided tree and fieldName.\n     * ```typescript\n     * let filteringExpression = ExpressionsTreeUtil.find(gridExpressionTree, 'Column Field');\n     * ```\n     */\n    public static find(tree: IFilteringExpressionsTree, fieldName: string): IFilteringExpressionsTree | IFilteringExpression {\n        const index = this.findIndex(tree, fieldName);\n\n        if (index > -1) {\n            return tree.filteringOperands[index];\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns the index of the filtering expression for a column with the provided tree and fieldName.\n     * ```typescript\n     * let filteringExpressionIndex = ExpressionsTreeUtil.findIndex(gridExpressionTree, 'Column Field');\n     * ```\n     */\n    public static findIndex(tree: IFilteringExpressionsTree, fieldName: string): number {\n        for (let i = 0; i < tree.filteringOperands.length; i++) {\n            const expr = tree.filteringOperands[i];\n            if ((expr as IFilteringExpressionsTree).operator !== undefined) {\n                if (this.isFilteringExpressionsTreeForColumn(expr as IFilteringExpressionsTree, fieldName)) {\n                    return i;\n                }\n            } else if ((expr as IFilteringExpression).fieldName === fieldName) {\n                return i;\n            }\n        }\n\n        return -1;\n    }\n\n    protected static isFilteringExpressionsTreeForColumn(expressionsTree: IFilteringExpressionsTree, fieldName: string): boolean {\n        if (expressionsTree.fieldName === fieldName) {\n            return true;\n        }\n\n        for (const expr of expressionsTree.filteringOperands) {\n            if ((expr as IFilteringExpressionsTree).operator !== undefined) {\n                return this.isFilteringExpressionsTreeForColumn(expr as IFilteringExpressionsTree, fieldName);\n            } else if ((expr as IFilteringExpression).fieldName === fieldName) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\n\n/**\n * Recreates the search value for a given expression.\n * @param searchValue The search value to recreate.\n * @param dataType The data type of the field.\n * @returns The recreated search value.\n */\nfunction recreateSearchValue(searchValue: any, dataType: string): any {\n    if (!dataType && !Array.isArray(searchValue)) {\n        return searchValue;\n    }\n    // In ESF, values are stored as a Set.\n    // Those values are converted to an array before returning string in the stringifyCallback\n    // now we need to convert those back to Set\n    if (Array.isArray(searchValue)) {\n        return new Set(searchValue);\n    } else if ((dataType.toLowerCase().includes('date') || dataType.toLowerCase().includes('time')) && !(searchValue instanceof Date)) {\n        return DateTimeUtil.parseIsoDate(searchValue) ?? searchValue;\n    }\n\n    return searchValue;\n}\n\n/**\n * Returns the filtering logic function for a given dataType and condition (contains, greaterThan, etc.)\n * @param dataType The data type of the field.\n * @param name The name of the filtering condition.\n * @returns The filtering logic function.\n */\nfunction getFilteringCondition(dataType: string, name: string): IFilteringOperation {\n    let filters: IgxFilteringOperand;\n    switch (dataType) {\n        case GridColumnDataType.Boolean:\n            filters = IgxBooleanFilteringOperand.instance();\n            break;\n        case GridColumnDataType.Number:\n        case GridColumnDataType.Currency:\n        case GridColumnDataType.Percent:\n            filters = IgxNumberFilteringOperand.instance();\n            break;\n        case GridColumnDataType.Date:\n            filters = IgxDateFilteringOperand.instance();\n            break;\n        case GridColumnDataType.Time:\n            filters = IgxTimeFilteringOperand.instance();\n            break;\n        case GridColumnDataType.DateTime:\n            filters = IgxDateTimeFilteringOperand.instance();\n            break;\n        case GridColumnDataType.String:\n        default:\n            filters = IgxStringFilteringOperand.instance();\n            break;\n    }\n    return filters.condition(name);\n}\n\n/**\n * Recreates the IFilteringOperation for a given expression.\n * If the `logic` is already populated - it will return the original IFilteringOperation\n * of the expression.\n * @param expression The expression for which to resolve the IFilteringOperation.\n * @param dataType The data type of the field.\n * @returns The IFilteringOperation for the given expression.\n */\nfunction recreateOperatorFromDataType(expression: IFilteringExpression, dataType: string): IFilteringOperation {\n    if (!expression.condition?.logic) {\n        return getFilteringCondition(dataType, expression.conditionName || expression.condition?.name);\n    }\n\n    return expression.condition;\n}\n\n/**\n * Recreates an expression from the given fields by applying the correct operands\n * and adjusting the search value to be the correct type.\n * @param expression The expression to recreate.\n * @param fields An array of fields to use for recreating the expression.\n * @returns The recreated expression.\n */\nfunction recreateExpression(expression: IFilteringExpression, fields: FieldType[]): IFilteringExpression {\n    const field = fields?.find(f => f.field === expression.fieldName);\n\n    if (field && !expression.condition?.logic) {\n        if (!field.filters) {\n            expression.condition = recreateOperatorFromDataType(expression, field.dataType);\n        } else {\n            expression.condition = field.filters.condition(expression.conditionName || expression.condition?.name);\n        }\n    }\n\n    if (!expression.condition && expression.conditionName) {\n        throw Error('Wrong `conditionName`, `condition` or `field` provided! It is possible that there is a type mismatch between the condition type and field type.');\n    }\n\n    if (!expression.conditionName) {\n        expression.conditionName = expression.condition?.name;\n    }\n\n    expression.searchVal = recreateSearchValue(expression.searchVal, field?.dataType);\n\n    return expression;\n}\n\n/**\n * Checks if the given entry is an IExpressionTree.\n * @param entry The entry to check.\n * @returns True if the entry is an IExpressionTree, false otherwise.\n */\nexport function isTree(entry: IExpressionTree | IFilteringExpression): entry is IExpressionTree {\n    return 'operator' in entry;\n}\n\n/**\n * Recreates the tree from a given array of entities by applying the correct operands\n * for each expression and adjusting the search values to be the correct type.\n * @param tree The expression tree to recreate.\n * @param entities An array of entities to use for recreating the tree.\n * @returns The recreated expression tree.\n */\nexport function recreateTree(tree: IExpressionTree, entities: EntityType[]): IExpressionTree {\n    const entity = entities.find(e => e.name === tree.entity);\n\n    for (let i = 0; i < tree.filteringOperands.length; i++) {\n        const operand = tree.filteringOperands[i];\n        if (isTree(operand)) {\n            tree.filteringOperands[i] = recreateTree(operand, entities);\n        } else {\n            if (operand.searchTree) {\n                operand.searchTree = recreateTree(operand.searchTree, entities);\n            }\n            tree.filteringOperands[i] = recreateExpression(operand, entity?.fields);\n        }\n    }\n\n    return tree;\n}\n\n/**\n * Recreates the tree from a given array of fields by applying the correct operands.\n * It is recommended to use `recreateTree` if there will be multiple entities in the tree\n * with potentially colliding field names.\n * @param tree The expression tree to recreate.\n * @param fields An array of fields to use for recreating the tree.\n */\nexport function recreateTreeFromFields(tree: IExpressionTree, fields: FieldType[]): IExpressionTree {\n    for (let i = 0; i < tree.filteringOperands.length; i++) {\n        const operand = tree.filteringOperands[i];\n        if (isTree(operand)) {\n            tree.filteringOperands[i] = recreateTreeFromFields(operand, fields);\n        } else {\n            if (operand.searchTree) {\n                operand.searchTree = recreateTreeFromFields(operand.searchTree, fields);\n            }\n            tree.filteringOperands[i] = recreateExpression(operand, fields);\n        }\n    }\n\n    return tree;\n}\n","import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface';\nimport { IBaseEventArgs } from '../core/utils';\nimport { ExpressionsTreeUtil } from './expressions-tree-util';\n\n/* mustCoerceToInt */\nexport enum FilteringExpressionsTreeType {\n    Regular,\n    Advanced\n}\n\nexport declare interface IExpressionTree {\n    filteringOperands: (IExpressionTree | IFilteringExpression)[];\n    operator: FilteringLogic;\n    fieldName?: string | null;\n    entity?: string | null;\n    returnFields?: string[] | null;\n}\n\n/* alternateBaseType: ExpressionTree */\n/* marshalByValue */\nexport declare interface IFilteringExpressionsTree extends IBaseEventArgs, IExpressionTree {\n    filteringOperands: (IFilteringExpressionsTree | IFilteringExpression)[];\n    /* alternateName: treeType */\n    type?: FilteringExpressionsTreeType;\n\n    /* blazorSuppress */\n    /**\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.find` instead.\n     */\n    find?: (fieldName: string) => IFilteringExpressionsTree | IFilteringExpression;\n\n    /* blazorSuppress */\n    /**\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.findIndex` instead.\n     */\n    findIndex?: (fieldName: string) => number;\n}\n\n/* marshalByValue */\n/* jsonAPIPlainObject */\nexport class FilteringExpressionsTree implements IFilteringExpressionsTree {\n\n    /**\n     * Sets/gets the filtering operands.\n     * ```typescript\n     * const gridExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n     * const expression = [\n     * {\n     *   condition: IgxStringFilteringOperand.instance().condition('contains'),\n     *   fieldName: 'Column Field',\n     *   searchVal: 'Value',\n     *   ignoreCase: false\n     * }];\n     * gridExpressionsTree.filteringOperands.push(expression);\n     * this.grid.filteringExpressionsTree = gridExpressionsTree;\n     * ```\n     * ```typescript\n     * let filteringOperands = gridExpressionsTree.filteringOperands;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public filteringOperands: (IFilteringExpressionsTree | IFilteringExpression)[] = [];\n\n    /**\n     * Sets/gets the operator.\n     * ```typescript\n     * gridExpressionsTree.operator = FilteringLogic.And;\n     * ```\n     * ```typescript\n     * let operator = gridExpressionsTree.operator;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public operator: FilteringLogic;\n\n    /**\n     * Sets/gets the field name of the column where the filtering expression is placed.\n     * ```typescript\n     * gridExpressionTree.fieldName = 'Column Field';\n     * ```\n     * ```typescript\n     * let columnField = expressionTree.fieldName;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public fieldName?: string;\n\n    /* alternateName: treeType */\n    /**\n     * Sets/gets the type of the filtering expressions tree.\n     * ```typescript\n     * gridExpressionTree.type = FilteringExpressionsTree.Advanced;\n     * ```\n     * ```typescript\n     * let type = expressionTree.type;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public type?: FilteringExpressionsTreeType;\n\n    /**\n     * Sets/gets the entity.\n     * ```typescript\n     * gridExpressionsTree.entity = 'Entity A';\n     * ```\n     * ```typescript\n     * let entity = gridExpressionsTree.entity;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public entity?: string;\n\n    /**\n     * Sets/gets the return fields.\n     * ```typescript\n     * gridExpressionsTree.returnFields = ['Column Field 1', 'Column Field 2'];\n     * ```\n     * ```typescript\n     * let returnFields = gridExpressionsTree.returnFields;\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     */\n    public returnFields?: string[];\n\n    constructor(operator: FilteringLogic, fieldName?: string, entity?: string, returnFields?: string[]) {\n        this.operator = operator;\n        this.entity = entity;\n        this.returnFields = returnFields;\n        this.fieldName = fieldName;\n    }\n\n    /**\n     * Checks if filtering expressions tree is empty.\n     *\n     * @param expressionTree filtering expressions tree.\n     */\n    public static empty(expressionTree: IFilteringExpressionsTree): boolean {\n        return !expressionTree || !expressionTree.filteringOperands || !expressionTree.filteringOperands.length;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Returns the filtering expression for a column with the provided fieldName.\n     * ```typescript\n     * let filteringExpression = gridExpressionTree.find('Column Field');\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.find` instead.\n     */\n    public find(fieldName: string): IFilteringExpressionsTree | IFilteringExpression {\n        return ExpressionsTreeUtil.find(this, fieldName);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Returns the index of the filtering expression for a column with the provided fieldName.\n     * ```typescript\n     * let filteringExpressionIndex = gridExpressionTree.findIndex('Column Field');\n     * ```\n     *\n     * @memberof FilteringExpressionsTree\n     * @deprecated in version 18.2.0. Use `ExpressionsTreeUtil.findIndex` instead.\n     */\n    public findIndex(fieldName: string): number {\n        return ExpressionsTreeUtil.findIndex(this, fieldName);\n    }\n}\n","import { IFilteringOperation } from './filtering-condition';\nimport { IExpressionTree } from './filtering-expressions-tree';\n\n/* mustCoerceToInt */\nexport enum FilteringLogic {\n    And,\n    Or\n}\n\n/* marshalByValue */\n/**\n * Represents filtering expressions.\n */\nexport declare interface IFilteringExpression {\n    fieldName: string;\n    condition?: IFilteringOperation | null;\n    conditionName?: string | null;\n    searchVal?: any;\n    searchTree?: IExpressionTree | null;\n    ignoreCase?: boolean;\n}\n","import { FilteringLogic, IFilteringExpression } from './filtering-expression.interface';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from './filtering-expressions-tree';\nimport { resolveNestedPath, parseDate, formatDate, formatCurrency } from '../core/utils';\nimport { ColumnType, GridType } from '../grids/common/grid.interface';\nimport { GridColumnDataType } from './data-util';\nimport { SortingDirection } from './sorting-strategy';\nimport { formatNumber, formatPercent, getLocaleCurrencyCode } from '@angular/common';\nimport { IFilteringState } from './filtering-state.interface';\nimport { isTree } from './expressions-tree-util';\n\nconst DateType = 'date';\nconst DateTimeType = 'dateTime';\nconst TimeType = 'time';\n\nexport class FilterUtil {\n    public static filter<T>(data: T[], state: IFilteringState, grid?: GridType): T[] {\n        if (!state.strategy) {\n            state.strategy = new FilteringStrategy();\n        }\n        return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n    }\n}\n\nexport interface IFilteringStrategy {\n    filter(data: any[], expressionsTree: IFilteringExpressionsTree, advancedExpressionsTree?: IFilteringExpressionsTree,\n        grid?: GridType): any[];\n    /* csSuppress */\n    getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree) : Promise<IgxFilterItem[]>;\n}\n\n/* csSuppress */\nexport interface IgxFilterItem {\n    value: any;\n    label?: string;\n    children?: IgxFilterItem[];\n}\n\n/* csSuppress */\nexport abstract class BaseFilteringStrategy implements IFilteringStrategy  {\n    // protected\n    public findMatchByExpression(rec: any, expr: IFilteringExpression, isDate?: boolean, isTime?: boolean, grid?: GridType): boolean {\n        const val = this.getFieldValue(rec, expr.fieldName, isDate, isTime, grid);\n        if (expr.condition?.logic) {\n            return expr.condition.logic(val, expr.searchVal, expr.ignoreCase);\n        }\n    }\n\n    // protected\n    public matchRecord(rec: any, expressions: IFilteringExpressionsTree | IFilteringExpression, grid?: GridType): boolean {\n        if (expressions) {\n            if (isTree(expressions)) {\n                const expressionsTree = expressions;\n                const operator = expressionsTree.operator as FilteringLogic;\n                let matchOperand;\n\n                if (expressionsTree.filteringOperands && expressionsTree.filteringOperands.length) {\n                    for (const operand of expressionsTree.filteringOperands) {\n                        matchOperand = this.matchRecord(rec, operand, grid);\n\n                        // Return false if at least one operand does not match and the filtering logic is And\n                        if (!matchOperand && operator === FilteringLogic.And) {\n                            return false;\n                        }\n\n                        // Return true if at least one operand matches and the filtering logic is Or\n                        if (matchOperand && operator === FilteringLogic.Or) {\n                            return true;\n                        }\n                    }\n\n                    return matchOperand;\n                }\n\n                return true;\n            } else {\n                const expression = expressions;\n                const column = grid && grid.getColumnByName(expression.fieldName);\n                const isDate = column ? column.dataType === DateType || column.dataType === DateTimeType : false;\n                const isTime = column ? column.dataType === TimeType : false;\n                return this.findMatchByExpression(rec, expression, isDate, isTime, grid);\n            }\n        }\n\n        return true;\n    }\n\n    public getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {\n\n        let data = column.grid.gridAPI.filterDataByExpressions(tree);\n        data = column.grid.gridAPI.sortDataByExpressions(data,\n            [{ fieldName: column.field, dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }]);\n\n        const columnField = column.field;\n        let filterItems: IgxFilterItem[] = data.map(record => {\n            let value = resolveNestedPath(record, columnField);\n            const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);\n\n            value = applyFormatter ?\n                column.formatter(value, record) :\n                value;\n\n            return {\n                value,\n                label: this.getFilterItemLabel(column, value, !applyFormatter, record)\n            };\n        });\n        filterItems = this.getUniqueFilterItems(column, filterItems);\n\n        return Promise.resolve(filterItems);\n    }\n\n    protected getFilterItemLabel(column: ColumnType, value: any, applyFormatter: boolean, data: any) {\n        if (column.formatter) {\n            if (applyFormatter) {\n                return column.formatter(value, data);\n            }\n            return value;\n        }\n\n        const { display, format, digitsInfo, currencyCode, timezone } = column.pipeArgs;\n        const locale = column.grid.locale;\n\n        switch (column.dataType) {\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return formatDate(value, format, locale, timezone);\n            case GridColumnDataType.Currency:\n                return formatCurrency(value, currencyCode || getLocaleCurrencyCode(locale), display, digitsInfo, locale);\n            case GridColumnDataType.Number:\n                return formatNumber(value, locale, digitsInfo);\n            case GridColumnDataType.Percent:\n                return formatPercent(value, locale, digitsInfo);\n            default:\n                return value;\n        }\n    }\n\n    protected getUniqueFilterItems(column: ColumnType, filterItems: IgxFilterItem[]) {\n        const filteredUniqueValues = filterItems.reduce((map, item) => {\n            let key = item.value;\n\n            if (column.dataType === GridColumnDataType.String && column.filteringIgnoreCase) {\n                key = key?.toString().toLowerCase();\n            } else if (column.dataType === GridColumnDataType.DateTime) {\n                key = item.value?.toString();\n                item.value = key ? new Date(key) : key;\n            } else if (column.dataType === GridColumnDataType.Time) {\n                const date = key ? new Date(key) : key;\n                key = date ? new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds()) : key;\n                item.value = key ? new Date(key) : key;\n            } else if (column.dataType === GridColumnDataType.Date) {\n                const date = key ? new Date(key) : key;\n                key = date ? new Date(date.getFullYear(), date.getMonth(), date.getDate()).toISOString() : key;\n                item.value = date;\n            }\n\n            return map.has(key) ? map : map.set(key, item)\n        }, new Map());\n        const uniqueValues = Array.from(filteredUniqueValues.values());\n\n        return uniqueValues;\n    }\n\n    protected shouldFormatFilterValues(_column: ColumnType): boolean {\n        return false;\n    }\n\n    public abstract filter(data: any[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree?: IFilteringExpressionsTree, grid?: GridType): any[];\n\n    protected abstract getFieldValue(rec: any, fieldName: string, isDate?: boolean, isTime?: boolean, grid?: GridType): any;\n}\n\n/* csSuppress */\nexport class NoopFilteringStrategy extends BaseFilteringStrategy {\n    protected getFieldValue(rec: any, _fieldName: string) {\n        return rec;\n    }\n    private static _instance: NoopFilteringStrategy = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new NoopFilteringStrategy());\n    }\n\n    public filter(data: any[], _: IFilteringExpressionsTree, __?: IFilteringExpressionsTree): any[] {\n        return data;\n    }\n}\n\n\nexport class FilteringStrategy extends BaseFilteringStrategy {\n    private static _instance: FilteringStrategy = null;\n\n    constructor() {\n        super();\n    }\n\n    public static instance() {\n        return this._instance || (this._instance = new this());\n    }\n\n    public filter<T>(data: T[], expressionsTree: IFilteringExpressionsTree, advancedExpressionsTree: IFilteringExpressionsTree,\n        grid: GridType): T[] {\n        let i;\n        let rec;\n        const len = data.length;\n        const res: T[] = [];\n\n        if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n            return data;\n        }\n        for (i = 0; i < len; i++) {\n            rec = data[i];\n            if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n                res.push(rec);\n            }\n        }\n        return res;\n    }\n\n    protected getFieldValue(rec: any, fieldName: string, isDate = false, isTime = false, grid?: GridType): any {\n        const column = grid?.getColumnByName(fieldName);\n        let value = resolveNestedPath(rec, fieldName);\n\n        value = column?.formatter && this.shouldFormatFilterValues(column) ?\n            column.formatter(value, rec) :\n            value && (isDate || isTime) ? parseDate(value) : value;\n\n        return value;\n    }\n}\nexport class FormattedValuesFilteringStrategy extends FilteringStrategy {\n    /**\n     * Creates a new instance of FormattedValuesFilteringStrategy.\n     *\n     * @param fields An array of column field names that should be formatted.\n     * If omitted the values of all columns which has formatter will be formatted.\n     */\n    constructor(private fields?: string[]) {\n        super();\n    }\n\n    protected override shouldFormatFilterValues(column: ColumnType): boolean {\n        return !this.fields || this.fields.length === 0 || this.fields.some(f => f === column.field);\n    }\n}\n","import { parseDate, resolveNestedPath } from '../../core/utils';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { BaseFilteringStrategy, IgxFilterItem } from '../../data-operations/filtering-strategy';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\nimport { ColumnType, GridType } from '../common/grid.interface';\nimport { IgxTreeGridAPIService } from './tree-grid-api.service';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\n\nexport class TreeGridFilteringStrategy extends BaseFilteringStrategy {\n\n    constructor(public hierarchicalFilterFields?: string[]) {\n        super();\n    }\n\n    public filter(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree?: IFilteringExpressionsTree, grid?: GridType): ITreeGridRecord[] {\n        return this.filterImpl(data, expressionsTree, advancedExpressionsTree, undefined, grid);\n    }\n\n    protected getFieldValue(rec: any, fieldName: string, isDate = false, isTime = false, grid?: GridType): any {\n        const column = grid?.getColumnByName(fieldName);\n        const hierarchicalRecord = rec as ITreeGridRecord;\n        let value = this.isHierarchicalFilterField(fieldName) ?\n            this.getHierarchicalFieldValue(hierarchicalRecord, fieldName) :\n            resolveNestedPath(hierarchicalRecord.data, fieldName);\n\n        value = column?.formatter && this.shouldFormatFilterValues(column) ?\n            column.formatter(value, rec.data) :\n            value && (isDate || isTime) ? parseDate(value) : value;\n\n        return value;\n    }\n\n    private getHierarchicalFieldValue(record: ITreeGridRecord, field: string) {\n        const value = resolveNestedPath(record.data, field);\n\n        return record.parent ?\n            `${this.getHierarchicalFieldValue(record.parent, field)}${value ? `.[${value}]` : ''}` :\n            `[${value}]`;\n    }\n\n    private filterImpl(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree: IFilteringExpressionsTree, parent: ITreeGridRecord, grid?: GridType): ITreeGridRecord[] {\n        let i: number;\n        let rec: ITreeGridRecord;\n        const len = data.length;\n        const res: ITreeGridRecord[] = [];\n        if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n            return data;\n        }\n        for (i = 0; i < len; i++) {\n            rec = DataUtil.cloneTreeGridRecord(data[i]);\n            rec.parent = parent;\n            if (rec.children) {\n                const filteredChildren = this.filterImpl(rec.children, expressionsTree, advancedExpressionsTree, rec, grid);\n                rec.children = filteredChildren.length > 0 ? filteredChildren : null;\n            }\n\n            if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n                res.push(rec);\n            } else if (rec.children && rec.children.length > 0) {\n                rec.isFilteredOutParent = true;\n                res.push(rec);\n            }\n        }\n        return res;\n    }\n\n    private isHierarchicalFilterField(field: string) {\n        return this.hierarchicalFilterFields && this.hierarchicalFilterFields.indexOf(field) !== -1;\n    }\n\n    public override getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {\n        if (!this.isHierarchicalFilterField(column.field)) {\n            return super.getFilterItems(column, tree);\n        }\n\n        let data = (column.grid.gridAPI as IgxTreeGridAPIService).filterTreeDataByExpressions(tree);\n        data = DataUtil.treeGridSort(\n            data,\n            [{ fieldName: column.field, dir: SortingDirection.Asc, ignoreCase: column.sortingIgnoreCase }],\n            column.grid.sortStrategy,\n            null,\n            column.grid);\n\n        const items = this.getHierarchicalFilterItems(data, column);\n\n\n        return Promise.resolve(items);\n    }\n\n    private getHierarchicalFilterItems(records: ITreeGridRecord[], column: ColumnType, parent?: IgxFilterItem): IgxFilterItem[] {\n        return records?.map(record => {\n            let value = resolveNestedPath(record.data, column.field);\n            const applyFormatter = column.formatter && this.shouldFormatFilterValues(column);\n\n            value = applyFormatter ?\n                column.formatter(value, record.data) :\n                value;\n\n            const hierarchicalValue = parent ?\n                (value || value === 0) ? `${parent.value}.[${value}]` : value :\n                `[${value}]`;\n\n            const filterItem: IgxFilterItem = { value: hierarchicalValue };\n            filterItem.label = this.getFilterItemLabel(column, value, !applyFormatter, record.data);\n            filterItem.children = this.getHierarchicalFilterItems(record.children, column, filterItem);\n            return filterItem;\n        });\n    }\n}\n\nexport class TreeGridFormattedValuesFilteringStrategy extends TreeGridFilteringStrategy {\n    /**\n     * Creates a new instance of FormattedValuesFilteringStrategy.\n     *\n     * @param fields An array of column field names that should be formatted.\n     * If omitted the values of all columns which has formatter will be formatted.\n     */\n    constructor(private fields?: string[]) {\n        super();\n    }\n\n    protected override shouldFormatFilterValues(column: ColumnType): boolean {\n        return !this.fields || this.fields.length === 0 || this.fields.some(f => f === column.field);\n    }\n}\n\nexport class TreeGridMatchingRecordsOnlyFilteringStrategy extends TreeGridFilteringStrategy {\n    public override filter(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree?: IFilteringExpressionsTree, grid?: GridType): ITreeGridRecord[] {\n        return this.filterImplementation(data, expressionsTree, advancedExpressionsTree, undefined, grid);\n    }\n\n    private filterImplementation(data: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        advancedExpressionsTree: IFilteringExpressionsTree, parent: ITreeGridRecord, grid?: GridType): ITreeGridRecord[] {\n        let i: number;\n        let rec: ITreeGridRecord;\n        const len = data.length;\n        const res: ITreeGridRecord[] = [];\n        if ((FilteringExpressionsTree.empty(expressionsTree) && FilteringExpressionsTree.empty(advancedExpressionsTree)) || !len) {\n            return data;\n        }\n        for (i = 0; i < len; i++) {\n            rec = DataUtil.cloneTreeGridRecord(data[i]);\n            rec.parent = parent;\n            if (rec.children) {\n                const filteredChildren = this.filterImplementation(rec.children, expressionsTree, advancedExpressionsTree, rec, grid);\n                rec.children = filteredChildren.length > 0 ? filteredChildren : null;\n            }\n            if (this.matchRecord(rec, expressionsTree, grid) && this.matchRecord(rec, advancedExpressionsTree, grid)) {\n                res.push(rec);\n            } else if (rec.children && rec.children.length > 0) {\n                rec = this.setCorrectLevelToFilteredRecords(rec);\n                res.push(...rec.children);\n            }\n        }\n        return res;\n    }\n\n    private setCorrectLevelToFilteredRecords(rec: ITreeGridRecord): ITreeGridRecord {\n        if (rec.children && rec.children.length > 0) {\n            rec.children.map(child => {\n                child.level = child.level - 1;\n                return this.setCorrectLevelToFilteredRecords(child);\n            });\n        }\n        return rec;\n    }\n}\n","\nimport { mkenum } from '../../core/utils';\n/**\n * Enumeration representing different filter modes for grid filtering.\n * - quickFilter: Default mode with a filter row UI between the column headers and the first row of records.\n * - excelStyleFilter: Filter mode where an Excel-style filter is used.\n */\nexport const FilterMode = /*@__PURE__*/mkenum({\n    quickFilter: 'quickFilter',\n    excelStyleFilter: 'excelStyleFilter'\n});\nexport type FilterMode = (typeof FilterMode)[keyof typeof FilterMode];\n\n/**\n * Enumeration representing the position of grid summary rows.\n * - top: Default value; Summary rows are displayed at the top of the grid.\n * - bottom: Summary rows are displayed at the bottom of the grid.\n */\nexport const GridSummaryPosition = /*@__PURE__*/mkenum({\n    top: 'top',\n    bottom: 'bottom'\n});\nexport type GridSummaryPosition = (typeof GridSummaryPosition)[keyof typeof GridSummaryPosition];\n\n/**\n * Enumeration representing different calculation modes for grid summaries.\n * - rootLevelOnly: Summaries are calculated only for the root level.\n * - childLevelsOnly: Summaries are calculated only for child levels.\n * - rootAndChildLevels: Default value; Summaries are calculated for both root and child levels.\n */\nexport const GridSummaryCalculationMode = /*@__PURE__*/mkenum({\n    rootLevelOnly: 'rootLevelOnly',\n    childLevelsOnly: 'childLevelsOnly',\n    rootAndChildLevels: 'rootAndChildLevels'\n});\nexport type GridSummaryCalculationMode = (typeof GridSummaryCalculationMode)[keyof typeof GridSummaryCalculationMode];\n\n/**\n * Type representing the triggers for grid cell validation.\n * - 'change': Validation is triggered when the cell value changes.\n * - 'blur': Validation is triggered when the cell loses focus.\n */\nexport type GridValidationTrigger = 'change' | 'blur' ;\n\n/**\n * Type representing the type of the target object (elements of the grid) for keydown (fired when a key is pressed) events in the grid.\n * - 'dataCell': Represents a data cell within the grid. It contains and displays individual data values\n * - 'summaryCell': Summary cells display aggregated/summarized data at the bottom of the grid. They provide insights like total record count, min/max values, etc.\n * - 'groupRow': Group row within the grid. Group rows are used to group related data rows by columns. Contains the related group expression, level, sub-records and group value.\n * - 'hierarchicalRow': Hierarchical rows are similar to group rows, but represent a more complex hierarchical structure, allowing for nested grouping\n * - 'headerCell': Represents a header cell within the grid. Header cells are used to display column headers, providing context and labels for the columns.\n * - 'masterDetailRow': Represents a grid row that can be expanded in order to show additional information\n */\nexport type GridKeydownTargetType =\n    'dataCell' |\n    'summaryCell' |\n    'groupRow' |\n    'hierarchicalRow' |\n    'headerCell' |\n    'masterDetailRow';\n\n/**\n * Enumeration representing different selection modes for the grid elements if can be selected.\n * - 'none': No selection is allowed. Default row and column selection mode.\n * - 'single': Only one element can be selected at a time. Selecting a new one will deselect the previously selected one.\n * - 'multiple': Default cell selection mode. More than one element can be selected at a time.\n * - 'multipleCascade': Similar to multiple selection. It is used in hierarchical or tree grids. Allows selection not only to an individual item but also all its related or nested items in a single action\n */\nexport const GridSelectionMode = /*@__PURE__*/mkenum({\n    none: 'none',\n    single: 'single',\n    multiple: 'multiple',\n    multipleCascade: 'multipleCascade'\n});\nexport type GridSelectionMode = (typeof GridSelectionMode)[keyof typeof GridSelectionMode];\n\n/** Enumeration representing different column display order options. */\nexport const ColumnDisplayOrder = /*@__PURE__*/mkenum({\n    Alphabetical: 'Alphabetical',\n    DisplayOrder: 'DisplayOrder'\n});\nexport type ColumnDisplayOrder = (typeof ColumnDisplayOrder)[keyof typeof ColumnDisplayOrder];\n\n/* mustCoerceToInt */\n/**\n * Enumeration representing the possible positions for pinning columns.\n * - Start: Columns are pinned to the start of the grid.\n * - End: Columns are pinned to the end of the grid.\n */\nexport enum ColumnPinningPosition {\n    Start,\n    End\n}\n\n/* mustCoerceToInt */\n/**\n * Enumeration representing the possible positions for pinning rows.\n * - Top: Rows are pinned to the top of the grid.\n * - Bottom: Rows are pinned to the bottom of the grid.\n */\nexport enum RowPinningPosition {\n    Top,\n    Bottom\n}\n\n/* mustCoerceToInt */\n/**\n * Enumeration representing different paging modes for the grid.\n * - Local: The grid will use local data to extract pages during paging.\n * - Remote: The grid will expect pages to be delivered from a remote location and will only raise events during paging interactions.\n */\nexport enum GridPagingMode {\n    Local,\n    Remote\n}\n\n/**\n * @hidden @internal\n *\n * Enumeration representing the possible predefined size options of the grid.\n * - Small: This is the smallest size with 32px row height. Left and Right paddings are 12px. Minimal column width is 56px.\n * - Medium: This is the middle size with 40px row height. Left and Right paddings are 16px. Minimal column width is 64px.\n * - Large:  this is the default Grid size with the lowest intense and row height equal to 50px. Left and Right paddings are 24px. Minimal column width is 80px.\n */\nexport const Size = /*@__PURE__*/mkenum({\n    Small: '1',\n    Medium: '2',\n    Large: '3'\n});\nexport type Size = (typeof Size)[keyof typeof Size];\n","import { EventEmitter } from '@angular/core';\nimport { cloneArray, cloneValue, IBaseEventArgs, resolveNestedPath, yieldingLoop } from '../../core/utils';\nimport { GridColumnDataType, DataUtil } from '../../data-operations/data-util';\nimport { ExportUtilities } from './export-utilities';\nimport { IgxExporterOptionsBase } from './exporter-options-base';\nimport { ITreeGridRecord } from '../../grids/tree-grid/tree-grid.interfaces';\nimport { TreeGridFilteringStrategy } from '../../grids/tree-grid/tree-grid.filtering.strategy';\nimport { IGroupingState } from '../../data-operations/groupby-state.interface';\nimport { getHierarchy, isHierarchyMatch } from '../../data-operations/operations';\nimport { IGroupByExpandState } from '../../data-operations/groupby-expand-state.interface';\nimport { IFilteringState } from '../../data-operations/filtering-state.interface';\nimport { DatePipe, FormatWidth, getLocaleCurrencyCode, getLocaleDateFormat, getLocaleDateTimeFormat } from '@angular/common';\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { ColumnType, GridType, IPathSegment } from '../../grids/common/grid.interface';\nimport { FilterUtil } from '../../data-operations/filtering-strategy';\nimport { IgxSummaryResult } from '../../grids/summaries/grid-summary';\nimport { GridSummaryCalculationMode } from '../../grids/common/enums';\n\nexport enum ExportRecordType {\n    GroupedRecord = 'GroupedRecord',\n    TreeGridRecord = 'TreeGridRecord',\n    DataRecord = 'DataRecord',\n    HierarchicalGridRecord = 'HierarchicalGridRecord',\n    HeaderRecord = 'HeaderRecord',\n    SummaryRecord = 'SummaryRecord',\n    PivotGridRecord = 'PivotGridRecord'\n}\n\nexport enum ExportHeaderType {\n    RowHeader = 'RowHeader',\n    ColumnHeader = 'ColumnHeader',\n    MultiRowHeader = 'MultiRowHeader',\n    MultiColumnHeader = 'MultiColumnHeader',\n    PivotRowHeader = 'PivotRowHeader',\n    PivotMergedHeader = 'PivotMergedHeader',\n}\n\nexport interface IExportRecord {\n    data: any;\n    level: number;\n    type: ExportRecordType;\n    owner?: string | GridType;\n    hidden?: boolean;\n    summaryKey?: string;\n    hierarchicalOwner?: string;\n    references?: IColumnInfo[];\n}\n\nexport interface IColumnList {\n    columns: IColumnInfo[];\n    columnWidths: number[];\n    indexOfLastPinnedColumn: number;\n    maxLevel?: number;\n    maxRowLevel?: number;\n}\n\nexport interface IColumnInfo {\n    header: string;\n    field: string;\n    skip: boolean;\n    dataType?: GridColumnDataType;\n    skipFormatter?: boolean;\n    formatter?: any;\n    headerType?: ExportHeaderType;\n    startIndex?: number;\n    columnSpan?: number;\n    rowSpan?: number;\n    level?: number;\n    exportIndex?: number;\n    pinnedIndex?: number;\n    columnGroupParent?: ColumnType | string;\n    columnGroup?: ColumnType | string;\n    currencyCode?: string;\n    displayFormat?: string;\n    dateFormat?: string;\n    digitsInfo?: string;\n}\n/**\n * rowExporting event arguments\n * this.exporterService.rowExporting.subscribe((args: IRowExportingEventArgs) => {\n * // set args properties here\n * })\n */\nexport interface IRowExportingEventArgs extends IBaseEventArgs {\n    /**\n     * Contains the exporting row data\n     */\n    rowData: any;\n\n    /**\n     * Contains the exporting row index\n     */\n    rowIndex: number;\n\n    /**\n     * Skip the exporting row when set to true\n     */\n    cancel: boolean;\n}\n\n/**\n * columnExporting event arguments\n * ```typescript\n * this.exporterService.columnExporting.subscribe((args: IColumnExportingEventArgs) => {\n * // set args properties here\n * });\n * ```\n */\nexport interface IColumnExportingEventArgs extends IBaseEventArgs {\n    /**\n     * Contains the exporting column header\n     */\n    header: string;\n\n    /**\n     * Contains the exporting column field name\n     */\n    field: string;\n\n    /**\n     * Contains the exporting column index\n     */\n    columnIndex: number;\n\n    /**\n     * Skip the exporting column when set to true\n     */\n    cancel: boolean;\n\n    /**\n     * Export the column's data without applying its formatter, when set to true\n     */\n    skipFormatter: boolean;\n\n    /**\n     * A reference to the grid owner.\n     */\n    grid?: GridType;\n}\n\n/**hidden\n * A helper class used to identify whether the user has set a specific columnIndex\n * during columnExporting, so we can honor it at the exported file.\n*/\nclass IgxColumnExportingEventArgs implements IColumnExportingEventArgs {\n    public header: string;\n    public field: string;\n    public cancel: boolean;\n    public skipFormatter: boolean;\n    public grid?: GridType;\n    public owner?: any;\n    public userSetIndex? = false;\n\n    private _columnIndex?: number;\n\n    public get columnIndex(): number {\n        return this._columnIndex;\n    }\n\n    public set columnIndex(value: number) {\n        this._columnIndex = value;\n        this.userSetIndex = true;\n    }\n\n    constructor(original: IColumnExportingEventArgs) {\n        this.header = original.header;\n        this.field = original.field;\n        this.cancel = original.cancel;\n        this.skipFormatter = original.skipFormatter;\n        this.grid = original.grid;\n        this.owner = original.owner;\n        this._columnIndex = original.columnIndex;\n    }\n}\n\nexport const DEFAULT_OWNER = 'default';\nexport const GRID_ROOT_SUMMARY = 'igxGridRootSummary';\nexport const GRID_PARENT = 'grid-parent';\nexport const GRID_LEVEL_COL = 'GRID_LEVEL_COL';\nconst DEFAULT_COLUMN_WIDTH = 8.43;\nconst GRID_CHILD = 'grid-child-';\n\nexport abstract class IgxBaseExporter {\n\n    public exportEnded = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * This event is emitted when a row is exported.\n     * ```typescript\n     * this.exporterService.rowExporting.subscribe((args: IRowExportingEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public rowExporting = new EventEmitter<IRowExportingEventArgs>();\n\n    /**\n     * This event is emitted when a column is exported.\n     * ```typescript\n     * this.exporterService.columnExporting.subscribe((args: IColumnExportingEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public columnExporting = new EventEmitter<IColumnExportingEventArgs>();\n\n    protected _sort = null;\n    protected pivotGridFilterFieldsCount: number;\n    protected _ownersMap: Map<any, IColumnList> = new Map<any, IColumnList>();\n\n    private locale: string\n    private _setChildSummaries = false\n    private isPivotGridExport: boolean;\n    private options: IgxExporterOptionsBase;\n    private summaries: Map<string, Map<string, any[]>> = new Map<string, Map<string, IgxSummaryResult[]>>();\n    private rowIslandCounter = -1;\n    private flatRecords: IExportRecord[] = [];\n    private pivotGridColumns: IColumnInfo[] = []\n    private pivotGridRowDimensionsMap: Map<string, string>;\n    private pivotGridKeyValueMap = new Map<string, string>();\n    private ownerGrid: any;\n\n    /* alternateName: exportGrid */\n    /**\n     * Method for exporting IgxGrid component's data.\n     * ```typescript\n     * this.exporterService.export(this.igxGridForExport, this.exportOptions);\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public export(grid: any, options: IgxExporterOptionsBase): void {\n        if (options === undefined || options === null) {\n            throw Error('No options provided!');\n        }\n\n        this.options = options;\n        this.locale = grid.locale;\n        this.ownerGrid = grid;\n        let columns = grid.columns;\n\n        if (this.options.ignoreMultiColumnHeaders) {\n            columns = columns.filter(col => col.children === undefined);\n        }\n\n        const columnList = this.getColumns(columns);\n\n        if (grid.type === 'hierarchical') {\n            this._ownersMap.set(grid, columnList);\n\n            const childLayoutList = grid.childLayoutList;\n\n            for (const island of childLayoutList) {\n                this.mapHierarchicalGridColumns(island, grid.data[0]);\n            }\n        } else if (grid.type === 'pivot') {\n            this.pivotGridColumns = [];\n            this.isPivotGridExport = true;\n            this.pivotGridKeyValueMap = new Map<string, string>();\n            this.pivotGridRowDimensionsMap = new Map<string, string>();\n\n            grid.visibleRowDimensions.filter(r => r.enabled).forEach(rowDimension => {\n                this.addToRowDimensionsMap(rowDimension, rowDimension.memberName);\n            });\n\n            this._ownersMap.set(DEFAULT_OWNER, columnList);\n        } else {\n            this._ownersMap.set(DEFAULT_OWNER, columnList);\n        }\n\n        this.summaries = this.prepareSummaries(grid);\n        this._setChildSummaries =  this.summaries.size > 1 && grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly;\n\n        this.addLevelColumns();\n        this.prepareData(grid);\n        this.addLevelData();\n        this.addPivotGridColumns(grid);\n        this.addPivotRowHeaders(grid);\n        this.exportGridRecordsData(this.flatRecords, grid);\n    }\n\n    /**\n     * Method for exporting any kind of array data.\n     * ```typescript\n     * this.exporterService.exportData(this.arrayForExport, this.exportOptions);\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public exportData(data: any[], options: IgxExporterOptionsBase): void {\n        if (options === undefined || options === null) {\n            throw Error('No options provided!');\n        }\n\n        this.options = options;\n\n        const records = data.map(d => {\n            const record: IExportRecord = {\n                data: d,\n                type: ExportRecordType.DataRecord,\n                level: 0\n            };\n\n            return record;\n        });\n\n        this.exportGridRecordsData(records);\n    }\n\n    private addToRowDimensionsMap(rowDimension: any, rootParentName: string) {\n        this.pivotGridRowDimensionsMap[rowDimension.memberName] = rootParentName;\n        if (rowDimension.childLevel) {\n            this.addToRowDimensionsMap(rowDimension.childLevel, rootParentName)\n        }\n    }\n\n    private exportGridRecordsData(records: IExportRecord[], grid?: GridType) {\n        if (this._ownersMap.size === 0) {\n            const recordsData = records.filter(r => r.type !== ExportRecordType.SummaryRecord).map(r => r.data);\n            const keys = ExportUtilities.getKeysFromData(recordsData);\n            const columns = keys.map((k) =>\n                ({ header: k, field: k, skip: false, headerType: ExportHeaderType.ColumnHeader, level: 0, columnSpan: 1 }));\n            const columnWidths = new Array<number>(keys.length).fill(DEFAULT_COLUMN_WIDTH);\n\n            const mapRecord: IColumnList = {\n                columns,\n                columnWidths,\n                indexOfLastPinnedColumn: -1,\n                maxLevel: 0\n            };\n\n            this._ownersMap.set(DEFAULT_OWNER, mapRecord);\n        }\n\n        let shouldReorderColumns = false;\n        for (const [key, mapRecord] of this._ownersMap) {\n            let skippedPinnedColumnsCount = 0;\n            let columnsWithoutHeaderCount = 1;\n            let indexOfLastPinnedColumn = mapRecord.indexOfLastPinnedColumn;\n\n            mapRecord.columns.forEach((column, index) => {\n                if (!column.skip) {\n                    const columnExportArgs: IColumnExportingEventArgs = {\n                        header: !ExportUtilities.isNullOrWhitespaces(column.header) ?\n                            column.header :\n                            'Column' + columnsWithoutHeaderCount++,\n                        field: column.field,\n                        columnIndex: index,\n                        cancel: false,\n                        skipFormatter: false,\n                        grid: key === DEFAULT_OWNER ? grid : key\n                    };\n\n                    const newColumnExportArgs = new IgxColumnExportingEventArgs(columnExportArgs);\n                    this.columnExporting.emit(newColumnExportArgs);\n\n                    column.header = newColumnExportArgs.header;\n                    column.skip = newColumnExportArgs.cancel;\n                    column.skipFormatter = newColumnExportArgs.skipFormatter;\n\n                    if (newColumnExportArgs.userSetIndex) {\n                        column.exportIndex = newColumnExportArgs.columnIndex;\n                        shouldReorderColumns = true;\n                    }\n\n                    if (column.skip) {\n                        if (index <= indexOfLastPinnedColumn) {\n                            skippedPinnedColumnsCount++;\n                        }\n\n                        this.calculateColumnSpans(column, mapRecord, column.columnSpan);\n\n                        const nonSkippedColumns = mapRecord.columns.filter(c => !c.skip);\n\n                        if (nonSkippedColumns.length > 0) {\n                            this._ownersMap.get(key).maxLevel = nonSkippedColumns.sort((a, b) => b.level - a.level)[0].level;\n                        }\n                    }\n\n                    if (this._sort && this._sort.fieldName === column.field) {\n                        if (column.skip) {\n                            this._sort = null;\n                        } else {\n                            this._sort.fieldName = column.header;\n                        }\n                    }\n                }\n            });\n\n            indexOfLastPinnedColumn -= skippedPinnedColumnsCount;\n\n            // Reorder columns only if a column has been assigned a specific columnIndex during columnExporting event\n            if (shouldReorderColumns) {\n                mapRecord.columns = this.reorderColumns(mapRecord.columns);\n            }\n        }\n\n        const dataToExport = new Array<IExportRecord>();\n        const actualData = records[0]?.data;\n        const isSpecialData = ExportUtilities.isSpecialData(actualData);\n\n        yieldingLoop(records.length, 100, (i) => {\n            const row = records[i];\n            this.exportRow(dataToExport, row, i, isSpecialData);\n        }, () => {\n            this.exportDataImplementation(dataToExport, this.options, () => {\n                this.resetDefaults();\n            });\n        });\n    }\n\n    private calculateColumnSpans(column: IColumnInfo, mapRecord: IColumnList, span: number) {\n        if (column.headerType === ExportHeaderType.MultiColumnHeader && column.skip) {\n            const columnGroupChildren = mapRecord.columns.filter(c => c.columnGroupParent === column.columnGroup);\n\n            columnGroupChildren.forEach(cgc => {\n                if (cgc.headerType === ExportHeaderType.MultiColumnHeader) {\n                    cgc.columnSpan = 0;\n                    cgc.columnGroupParent = null;\n                    cgc.skip = true;\n\n                    this.calculateColumnSpans(cgc, mapRecord, cgc.columnSpan);\n                } else {\n                    cgc.skip = true;\n                }\n            });\n        }\n\n        const targetCol = mapRecord.columns.filter(c => column.columnGroupParent !== null && column.columnGroupParent !== undefined && c.columnGroup === column.columnGroupParent)[0];\n        if (targetCol !== undefined) {\n            targetCol.columnSpan -= span;\n\n            if (targetCol.columnGroupParent !== null) {\n                this.calculateColumnSpans(targetCol, mapRecord, span);\n            }\n\n            if (targetCol.columnSpan === 0) {\n                targetCol.skip = true;\n            }\n        }\n    }\n\n    private exportRow(data: IExportRecord[], record: IExportRecord, index: number, isSpecialData: boolean) {\n        if (!isSpecialData) {\n            const owner = record.owner === undefined ? DEFAULT_OWNER : record.owner;\n            const ownerCols = this._ownersMap.get(owner).columns;\n\n            if (record.type !== ExportRecordType.HeaderRecord) {\n                const columns = ownerCols\n                    .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)\n                    .sort((a, b) => a.startIndex - b.startIndex)\n                    .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n\n                record.data = columns.reduce((a, e) => {\n                    if (!e.skip) {\n                        let rawValue = resolveNestedPath(record.data, e.field);\n\n                        const shouldApplyFormatter = e.formatter && !e.skipFormatter && record.type !== ExportRecordType.GroupedRecord;\n                        const isOfDateType = e.dataType === 'date' || e.dataType === 'dateTime' || e.dataType === 'time';\n\n                        if (isOfDateType &&\n                            record.type !== ExportRecordType.SummaryRecord &&\n                            record.type !== ExportRecordType.GroupedRecord &&\n                            !(rawValue instanceof Date) &&\n                            !shouldApplyFormatter &&\n                            rawValue !== undefined &&\n                            rawValue !== null) {\n                            rawValue = new Date(rawValue);\n                        } else if (e.dataType === 'string' && rawValue instanceof Date) {\n                            rawValue = rawValue.toString();\n                        }\n\n                        let formattedValue = shouldApplyFormatter ? e.formatter(rawValue, record.data) : rawValue;\n\n                        if (this.isPivotGridExport && !isNaN(parseFloat(formattedValue))) {\n                            formattedValue = parseFloat(formattedValue);\n                        }\n\n                        a[e.field] = formattedValue;\n                    }\n                    return a;\n                }, {});\n            } else {\n                record.data = record.data.filter((_, i) => !record.references[i].skip)\n            }\n        }\n\n        const rowArgs = {\n            rowData: record.data,\n            rowIndex: index,\n            cancel: false,\n            owner: record.owner ?? this.ownerGrid\n        };\n\n        this.rowExporting.emit(rowArgs);\n\n        if (!rowArgs.cancel) {\n            data.push(record);\n        }\n    }\n\n    private reorderColumns(columns: IColumnInfo[]): IColumnInfo[] {\n        const filteredColumns = columns.filter(c => !c.skip);\n        const length = filteredColumns.length;\n        const specificIndicesColumns = filteredColumns.filter((col) => !isNaN(col.exportIndex))\n                                                      .sort((a,b) => a.exportIndex - b.exportIndex);\n        const indices = specificIndicesColumns.map(col => col.exportIndex);\n\n        specificIndicesColumns.forEach(col => {\n            filteredColumns.splice(filteredColumns.indexOf(col), 1);\n        });\n\n        const reorderedColumns = new Array(length);\n\n        if (specificIndicesColumns.length > Math.max(...indices)) {\n            return specificIndicesColumns.concat(filteredColumns);\n        } else {\n            indices.forEach((i, index) => {\n                if (i < 0 || i >= length) {\n                    filteredColumns.push(specificIndicesColumns[index]);\n                } else {\n                    let k = i;\n                    while (k < length && reorderedColumns[k] !== undefined) {\n                        ++k;\n                    }\n                    reorderedColumns[k] = specificIndicesColumns[index];\n                }\n            });\n\n            for (let i = 0; i < length; i++) {\n                if (reorderedColumns[i] === undefined) {\n                    reorderedColumns[i] = filteredColumns.splice(0, 1)[0];\n                }\n            }\n\n        }\n        return reorderedColumns;\n    }\n\n    private prepareData(grid: GridType) {\n        this.flatRecords = [];\n        const hasFiltering = (grid.filteringExpressionsTree && grid.filteringExpressionsTree.filteringOperands.length > 0) ||\n            (grid.advancedFilteringExpressionsTree && grid.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n        const expressions = grid.groupingExpressions ? grid.groupingExpressions.concat(grid.sortingExpressions || []) : grid.sortingExpressions;\n        const hasSorting = expressions && expressions.length > 0;\n        let setSummaryOwner = false;\n\n        switch (grid.type) {\n            case 'pivot': {\n                this.preparePivotGridData(grid);\n                break;\n            }\n            case 'hierarchical': {\n                this.prepareHierarchicalGridData(grid, hasFiltering, hasSorting);\n                setSummaryOwner = true;\n                break;\n            }\n            case 'tree': {\n                this.prepareTreeGridData(grid, hasFiltering, hasSorting);\n                break;\n            }\n            default: {\n                this.prepareGridData(grid, hasFiltering, hasSorting);\n                break;\n            }\n        }\n\n        if (this.summaries.size > 0 && grid.summaryCalculationMode !== GridSummaryCalculationMode.childLevelsOnly) {\n            setSummaryOwner ?\n                this.setSummaries(GRID_ROOT_SUMMARY, 0, false, grid) :\n                this.setSummaries(GRID_ROOT_SUMMARY);\n        }\n    }\n\n    private preparePivotGridData(grid: GridType) {\n        for (const record of grid.filteredSortedData) {\n            const recordData = Object.fromEntries(record.aggregationValues);\n            record.dimensionValues.forEach((value, key) => {\n                const actualKey = this.pivotGridRowDimensionsMap[key];\n                recordData[actualKey] = value;\n            });\n\n            const pivotGridRecord: IExportRecord = {\n                data: recordData,\n                level: record.level,\n                type: ExportRecordType.PivotGridRecord\n            };\n\n            this.flatRecords.push(pivotGridRecord);\n        }\n    }\n\n    private prepareHierarchicalGridData(grid: GridType, hasFiltering: boolean, hasSorting: boolean) {\n\n        const skipOperations =\n            (!hasFiltering || !this.options.ignoreFiltering) &&\n            (!hasSorting || !this.options.ignoreSorting);\n\n        if (skipOperations) {\n            const data = grid.filteredSortedData;\n            this.addHierarchicalGridData(grid, data);\n        } else {\n            let data = grid.data;\n\n            if (hasFiltering && !this.options.ignoreFiltering) {\n                const filteringState: IFilteringState = {\n                    expressionsTree: grid.filteringExpressionsTree,\n                    advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n                    strategy: grid.filterStrategy\n                };\n\n                data = FilterUtil.filter(data, filteringState, grid);\n            }\n\n            if (hasSorting && !this.options.ignoreSorting) {\n                this._sort = cloneValue(grid.sortingExpressions[0]);\n\n                data = DataUtil.sort(data, grid.sortingExpressions, grid.sortStrategy, grid);\n            }\n\n            this.addHierarchicalGridData(grid, data);\n        }\n    }\n\n    private addHierarchicalGridData(grid: GridType, records: any[]) {\n        const childLayoutList = grid.childLayoutList;\n        const columnFields = this._ownersMap.get(grid).columns.map(col => col.field);\n\n        for (const entry of records) {\n            const expansionStateVal = grid.expansionStates.has(entry) ? grid.expansionStates.get(entry) : false;\n\n            const dataWithoutChildren = Object.keys(entry)\n                .filter(k => columnFields.includes(k))\n                .reduce((obj, key) => {\n                    obj[key] = entry[key];\n                    return obj;\n                }, {});\n\n            const hierarchicalGridRecord: IExportRecord = {\n                data: dataWithoutChildren,\n                level: 0,\n                type: ExportRecordType.HierarchicalGridRecord,\n                owner: grid,\n                hierarchicalOwner: GRID_PARENT\n            };\n\n            this.flatRecords.push(hierarchicalGridRecord);\n\n            for (const island of childLayoutList) {\n                const path: IPathSegment = {\n                    rowID: island.primaryKey ? entry[island.primaryKey] : entry,\n                    rowKey: island.primaryKey ? entry[island.primaryKey] : entry,\n                    rowIslandKey: island.key\n                };\n\n                const islandGrid = grid?.gridAPI.getChildGrid([path]);\n                const keyRecordData = this.prepareIslandData(island, islandGrid, entry[island.key]) || [];\n\n                this.getAllChildColumnsAndData(island, keyRecordData, expansionStateVal, islandGrid);\n            }\n        }\n    }\n\n    private prepareSummaries(grid: any): Map<string, Map<string, IgxSummaryResult[]>> {\n        let summaries = new Map<string, Map<string, IgxSummaryResult[]>>();\n\n        if (this.options.exportSummaries && grid.summaryService.summaryCacheMap.size > 0) {\n            const summaryCacheMap = grid.summaryService.summaryCacheMap;\n\n            switch(grid.summaryCalculationMode) {\n                case GridSummaryCalculationMode.childLevelsOnly:\n                    summaryCacheMap.delete(GRID_ROOT_SUMMARY);\n                    break;\n                case GridSummaryCalculationMode.rootLevelOnly:\n                    for (const k of summaryCacheMap.keys()) {\n                        if (k !== GRID_ROOT_SUMMARY) {\n                            summaryCacheMap.delete(k);\n                        }\n                    }\n                    break;\n            }\n\n            summaries = summaryCacheMap;\n        }\n\n        return summaries;\n    }\n\n    private prepareIslandData(island: any, islandGrid: GridType, data: any[]): any[] {\n        if (islandGrid !== undefined) {\n            const hasFiltering = (islandGrid.filteringExpressionsTree &&\n                islandGrid.filteringExpressionsTree.filteringOperands.length > 0) ||\n                (islandGrid.advancedFilteringExpressionsTree &&\n                    islandGrid.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n\n            const hasSorting = islandGrid.sortingExpressions &&\n                islandGrid.sortingExpressions.length > 0;\n\n            const skipOperations =\n                (!hasFiltering || !this.options.ignoreFiltering) &&\n                (!hasSorting || !this.options.ignoreSorting);\n\n            if (skipOperations) {\n                data = islandGrid.filteredSortedData;\n            } else {\n                if (hasFiltering && !this.options.ignoreFiltering) {\n                    const filteringState: IFilteringState = {\n                        expressionsTree: islandGrid.filteringExpressionsTree,\n                        advancedExpressionsTree: islandGrid.advancedFilteringExpressionsTree,\n                        strategy: islandGrid.filterStrategy\n                    };\n\n                    data = FilterUtil.filter(data, filteringState, islandGrid);\n                }\n\n                if (hasSorting && !this.options.ignoreSorting) {\n                    this._sort = cloneValue(islandGrid.sortingExpressions[0]);\n\n                    data = DataUtil.sort(data, islandGrid.sortingExpressions, islandGrid.sortStrategy, islandGrid);\n                }\n            }\n        } else {\n            const hasFiltering = (island.filteringExpressionsTree &&\n                island.filteringExpressionsTree.filteringOperands.length > 0) ||\n                (island.advancedFilteringExpressionsTree &&\n                    island.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n\n            const hasSorting = island.sortingExpressions &&\n                island.sortingExpressions.length > 0;\n\n            const skipOperations =\n                (!hasFiltering || this.options.ignoreFiltering) &&\n                (!hasSorting || this.options.ignoreSorting);\n\n            if (!skipOperations) {\n                if (hasFiltering && !this.options.ignoreFiltering) {\n                    const filteringState: IFilteringState = {\n                        expressionsTree: island.filteringExpressionsTree,\n                        advancedExpressionsTree: island.advancedFilteringExpressionsTree,\n                        strategy: island.filterStrategy\n                    };\n\n                    data = FilterUtil.filter(data, filteringState, island);\n                }\n\n                if (hasSorting && !this.options.ignoreSorting) {\n                    this._sort = cloneValue(island.sortingExpressions[0]);\n\n                    data = DataUtil.sort(data, island.sortingExpressions, island.sortStrategy, island);\n                }\n            }\n        }\n\n        return data;\n    }\n\n    private getAllChildColumnsAndData(island: any,\n        childData: any[], expansionStateVal: boolean, grid: GridType) {\n        const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`;\n        const columnList = this._ownersMap.get(island).columns;\n        const columnHeaders = columnList.filter(col => col.headerType === ExportHeaderType.ColumnHeader);\n        const columnHeader = columnHeaders.map(col => col.header ? col.header : col.field);\n\n        const headerRecord: IExportRecord = {\n            data: columnHeader,\n            level: island.level,\n            type: ExportRecordType.HeaderRecord,\n            owner: island,\n            hidden: !expansionStateVal,\n            references: columnHeaders,\n            hierarchicalOwner\n        };\n\n        if (childData && childData.length > 0) {\n            this.flatRecords.push(headerRecord);\n\n            for (const rec of childData) {\n                const exportRecord: IExportRecord = {\n                    data: rec,\n                    level: island.level,\n                    type: ExportRecordType.HierarchicalGridRecord,\n                    owner: island,\n                    hidden: !expansionStateVal,\n                    hierarchicalOwner\n                };\n\n                exportRecord.summaryKey = island.key;\n                this.flatRecords.push(exportRecord);\n\n                if (island.children.length > 0) {\n                    const islandExpansionStateVal = grid === undefined ?\n                        false :\n                        grid.expansionStates.has(rec) ?\n                            grid.expansionStates.get(rec) :\n                            false;\n\n                    for (const childIsland of island.children) {\n                        const path: IPathSegment = {\n                            rowID: childIsland.primaryKey ? rec[childIsland.primaryKey] : rec,\n                            rowKey: childIsland.primaryKey ? rec[childIsland.primaryKey] : rec,\n                            rowIslandKey: childIsland.key\n                        };\n\n                        // only defined when row is expanded in UI\n                        const childIslandGrid = grid?.gridAPI.getChildGrid([path]);\n                        const keyRecordData = this.prepareIslandData(island, childIslandGrid, rec[childIsland.key]) || [];\n\n                        this.getAllChildColumnsAndData(childIsland, keyRecordData, islandExpansionStateVal, childIslandGrid);\n                    }\n                }\n            }\n\n            if (grid) {\n                const summaries = this.prepareSummaries(grid);\n                for (const k of summaries.keys()) {\n                    const summary = summaries.get(k);\n                    this.setSummaries(island.key, island.level, !expansionStateVal, island, summary, hierarchicalOwner)\n                }\n            }\n        }\n    }\n\n    private prepareGridData(grid: GridType, hasFiltering: boolean, hasSorting: boolean) {\n        const groupedGridGroupingState: IGroupingState = {\n            expressions: grid.groupingExpressions,\n            expansion: grid.groupingExpansionState,\n            defaultExpanded: grid.groupsExpanded,\n        };\n\n        const hasGrouping = grid.groupingExpressions &&\n            grid.groupingExpressions.length > 0;\n\n        const skipOperations =\n            (!hasFiltering || !this.options.ignoreFiltering) &&\n            (!hasSorting || !this.options.ignoreSorting) &&\n            (!hasGrouping || !this.options.ignoreGrouping);\n\n        if (skipOperations) {\n            if (hasGrouping) {\n                this.addGroupedData(grid, grid.groupsRecords, groupedGridGroupingState, true);\n            } else {\n                this.addFlatData(grid.filteredSortedData);\n            }\n        } else {\n            let gridData = grid.data;\n\n            if (hasFiltering && !this.options.ignoreFiltering) {\n                const filteringState: IFilteringState = {\n                    expressionsTree: grid.filteringExpressionsTree,\n                    advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n                    strategy: grid.filterStrategy\n                };\n\n                gridData = FilterUtil.filter(gridData, filteringState, grid);\n            }\n\n            if (hasSorting && !this.options.ignoreSorting) {\n                // TODO: We should drop support for this since in a grouped grid it doesn't make sense\n                // this._sort = !isGroupedGrid ?\n                //     cloneValue(grid.sortingExpressions[0]) :\n                //     grid.sortingExpressions.length > 1 ?\n                //         cloneValue(grid.sortingExpressions[1]) :\n                //         cloneValue(grid.sortingExpressions[0]);\n                const expressions = grid.groupingExpressions ? grid.groupingExpressions.concat(grid.sortingExpressions || []) : grid.sortingExpressions;\n                gridData = DataUtil.sort(gridData, expressions, grid.sortStrategy, grid);\n            }\n\n            if (hasGrouping && !this.options.ignoreGrouping) {\n                const groupsRecords = [];\n                DataUtil.group(cloneArray(gridData), groupedGridGroupingState, grid.groupStrategy, grid, groupsRecords);\n                gridData = groupsRecords;\n            }\n\n            if (hasGrouping && !this.options.ignoreGrouping) {\n                this.addGroupedData(grid, gridData, groupedGridGroupingState, true);\n            } else {\n                this.addFlatData(gridData);\n            }\n        }\n    }\n\n    private prepareTreeGridData(grid: GridType, hasFiltering: boolean, hasSorting: boolean) {\n        const skipOperations =\n            (!hasFiltering || !this.options.ignoreFiltering) &&\n            (!hasSorting || !this.options.ignoreSorting);\n\n        if (skipOperations) {\n            this.addTreeGridData(grid.processedRootRecords);\n        } else {\n            let gridData = grid.rootRecords;\n\n            if (hasFiltering && !this.options.ignoreFiltering) {\n                const filteringState: IFilteringState = {\n                    expressionsTree: grid.filteringExpressionsTree,\n                    advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n                    strategy: (grid.filterStrategy) ? grid.filterStrategy : new TreeGridFilteringStrategy()\n                };\n\n                gridData = filteringState.strategy\n                    .filter(gridData, filteringState.expressionsTree, filteringState.advancedExpressionsTree);\n            }\n\n            if (hasSorting && !this.options.ignoreSorting) {\n                this._sort = cloneValue(grid.sortingExpressions[0]);\n\n                gridData = DataUtil.treeGridSort(gridData, grid.sortingExpressions, grid.sortStrategy);\n            }\n\n            this.addTreeGridData(gridData);\n        }\n    }\n\n    private addTreeGridData(records: ITreeGridRecord[], parentExpanded = true, hierarchicalOwner?: string) {\n        if (!records) {\n            return;\n        }\n\n        for (const record of records) {\n            const treeGridRecord: IExportRecord = {\n                data: record.data,\n                level: record.level,\n                hidden: !parentExpanded,\n                type: ExportRecordType.TreeGridRecord,\n                summaryKey: record.key,\n                hierarchicalOwner: record.level === 0 ? GRID_PARENT : hierarchicalOwner\n            };\n\n            this.flatRecords.push(treeGridRecord);\n\n            if (record.children) {\n                this.getTreeGridChildData(record.children, record.key, record.level, record.expanded && parentExpanded)\n            }\n        }\n    }\n\n    private getTreeGridChildData(recordChildren: ITreeGridRecord[], key: string, level:number, parentExpanded = true) {\n        const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`\n        let summaryLevel = level;\n        let summaryHidden = !parentExpanded;\n\n        for (const rc of recordChildren) {\n            if (rc.children && rc.children.length > 0) {\n                this.addTreeGridData([rc], parentExpanded, hierarchicalOwner);\n                summaryLevel = rc.level;\n            } else {\n\n                const currentRecord: IExportRecord = {\n                    data: rc.data,\n                    level: rc.level,\n                    hidden: !parentExpanded,\n                    type: ExportRecordType.DataRecord,\n                    hierarchicalOwner\n                };\n\n                if (this._setChildSummaries) {\n                    currentRecord.summaryKey = key;\n                }\n\n                this.flatRecords.push(currentRecord);\n                summaryLevel = rc.level;\n                summaryHidden = !parentExpanded\n            }\n        }\n\n        if (this._setChildSummaries) {\n            this.setSummaries(key, summaryLevel, summaryHidden, null, null, hierarchicalOwner);\n        }\n    }\n\n    private addFlatData(records: any) {\n        if (!records) {\n            return;\n        }\n        for (const record of records) {\n            const data: IExportRecord = {\n                data: record,\n                type: ExportRecordType.DataRecord,\n                level: 0\n            };\n\n            this.flatRecords.push(data);\n        }\n    }\n\n    private setSummaries(summaryKey: string, level = 0, hidden = false, owner?: any, summary?: Map<string, IgxSummaryResult[]>, hierarchicalOwner?: string) {\n        const rootSummary = summary ?? this.summaries.get(summaryKey);\n\n        if (rootSummary) {\n            const values = [...rootSummary.values()];\n            const biggest = values.sort((a, b) => b.length - a.length)[0];\n\n            for (let i = 0; i < biggest.length; i++) {\n                const obj = {}\n\n                for (const [key, value] of rootSummary) {\n                    const summaries = value.map(s => ({label: s.label, value: s.summaryResult}))\n                    obj[key] = summaries[i];\n                }\n\n                const summaryRecord: IExportRecord = {\n                    data: obj,\n                    type: ExportRecordType.SummaryRecord,\n                    level,\n                    hidden,\n                    summaryKey,\n                    hierarchicalOwner\n                };\n\n                if (owner) {\n                    summaryRecord.owner = owner;\n                }\n\n                this.flatRecords.push(summaryRecord);\n            }\n        }\n    }\n\n    private addGroupedData(grid: GridType, records: IGroupByRecord[], groupingState: IGroupingState, setGridParent: boolean, parentExpanded = true, summaryKeysArr: string[] = []) {\n        if (!records) {\n            return;\n        }\n\n        let previousKey = ''\n        const firstCol = this._ownersMap.get(DEFAULT_OWNER).columns\n            .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)\n            .sort((a, b) => a.startIndex - b.startIndex)\n            .sort((a, b) => a.pinnedIndex - b.pinnedIndex)[0].field;\n\n        for (const record of records) {\n            let recordVal = record.value;\n            const hierarchicalOwner = setGridParent ? GRID_PARENT : `${GRID_CHILD}${++this.rowIslandCounter}`;\n            const hierarchy = getHierarchy(record);\n            const expandState: IGroupByExpandState = groupingState.expansion.find((s) =>\n                isHierarchyMatch(s.hierarchy || [{ fieldName: record.expression.fieldName, value: recordVal }],\n                hierarchy,\n                grid.groupingExpressions));\n            const expanded = expandState ? expandState.expanded : groupingState.defaultExpanded;\n\n            const isDate = recordVal instanceof Date;\n\n            if (isDate) {\n                const timeZoneOffset = recordVal.getTimezoneOffset() * 60000;\n                const isoString = (new Date(recordVal - timeZoneOffset)).toISOString();\n                const pipe = new DatePipe(grid.locale);\n                recordVal = pipe.transform(isoString);\n            }\n\n            const groupExpressionName = record.column && record.column.header ?\n                record.column.header :\n                record.expression.fieldName;\n\n            recordVal = recordVal !== null ? recordVal : '';\n\n            const groupExpression: IExportRecord = {\n                data: { [firstCol]: `${groupExpressionName}: ${recordVal ?? '(Blank)'} (${record.records.length})` },\n                level: record.level,\n                hidden: !parentExpanded,\n                type: ExportRecordType.GroupedRecord,\n                hierarchicalOwner\n            };\n\n            this.flatRecords.push(groupExpression);\n\n            let currKey = '';\n            let summaryKey = '';\n\n            if (this._setChildSummaries) {\n                currKey = `'${record.expression.fieldName}': '${recordVal}'`;\n                summaryKeysArr = summaryKeysArr.filter(a => a !== previousKey);\n                previousKey = currKey;\n                summaryKeysArr.push(currKey);\n                summaryKey = `{ ${summaryKeysArr.join(', ')} }`;\n                groupExpression.summaryKey = summaryKey;\n            }\n\n            if (record.groups.length > 0) {\n                this.addGroupedData(grid, record.groups, groupingState, false, expanded && parentExpanded, summaryKeysArr);\n            } else {\n                const rowRecords = record.records;\n\n                for (const rowRecord of rowRecords) {\n                    const currentRecord: IExportRecord = {\n                        data: rowRecord,\n                        level: record.level + 1,\n                        hidden: !(expanded && parentExpanded),\n                        type: ExportRecordType.DataRecord,\n                        hierarchicalOwner\n                    };\n\n                    if (summaryKey) {\n                        currentRecord.summaryKey = summaryKey;\n                    }\n\n                    this.flatRecords.push(currentRecord);\n                }\n            }\n\n            if (this._setChildSummaries) {\n                this.setSummaries(summaryKey, record.level + 1, !(expanded && parentExpanded), null, null, hierarchicalOwner);\n                summaryKeysArr.pop();\n            }\n        }\n    }\n\n    private getColumns(columns: ColumnType[]): IColumnList {\n        const colList = [];\n        const colWidthList = [];\n        const hiddenColumns = [];\n        let indexOfLastPinnedColumn = -1;\n        let lastVisibleColumnIndex = -1;\n        let maxLevel = 0;\n\n        columns.forEach((column) => {\n            const columnHeader = !ExportUtilities.isNullOrWhitespaces(column.header) ? column.header : column.field;\n            const exportColumn = !column.hidden || this.options.ignoreColumnsVisibility;\n            const index = this.options.ignoreColumnsOrder || this.options.ignoreColumnsVisibility ? column.index : column.visibleIndex;\n            const columnWidth = Number(column.width?.slice(0, -2)) || DEFAULT_COLUMN_WIDTH;\n            const columnLevel = !this.options.ignoreMultiColumnHeaders ? column.level : 0;\n\n            const isMultiColHeader = column.columnGroup;\n            const colSpan = isMultiColHeader ?\n                column.allChildren\n                    .filter(ch => !(ch.columnGroup) && (!this.options.ignoreColumnsVisibility ? !ch.hidden : true))\n                    .length :\n                1;\n\n            const columnInfo: IColumnInfo = {\n                header: ExportUtilities.sanitizeValue(columnHeader),\n                dataType: column.dataType,\n                field: column.field,\n                skip: !exportColumn,\n                formatter: column.formatter,\n                skipFormatter: false,\n\n                headerType: isMultiColHeader ? ExportHeaderType.MultiColumnHeader : ExportHeaderType.ColumnHeader,\n                columnSpan: colSpan,\n                level: columnLevel,\n                startIndex: index,\n                pinnedIndex: !column.pinned ?\n                    Number.MAX_VALUE :\n                    !column.hidden ?\n                        column.grid.pinnedColumns.indexOf(column)\n                        : NaN,\n                columnGroupParent: column.parent ? column.parent : null,\n                columnGroup: isMultiColHeader ? column : null\n            };\n\n            if (column.dataType === 'currency') {\n                columnInfo.currencyCode = column.pipeArgs.currencyCode\n                    ? column.pipeArgs.currencyCode\n                    : getLocaleCurrencyCode(this.locale);\n\n                columnInfo.displayFormat = column.pipeArgs.display\n                    ? column.pipeArgs.display\n                    : 'symbol';\n\n                columnInfo.digitsInfo = column.pipeArgs.digitsInfo\n                    ? column.pipeArgs.digitsInfo\n                    : '1.0-2';\n            }\n\n            if (column.dataType === 'date') {\n                columnInfo.dateFormat = getLocaleDateFormat(this.locale, FormatWidth.Medium);\n            }\n\n            if (column.dataType === 'dateTime') {\n                columnInfo.dateFormat = getLocaleDateTimeFormat(this.locale, FormatWidth.Medium);\n            }\n\n            if (this.options.ignoreColumnsOrder) {\n                if (columnInfo.startIndex !== columnInfo.pinnedIndex) {\n                    columnInfo.pinnedIndex = Number.MAX_VALUE;\n                }\n            }\n\n            if (column.level > maxLevel && !this.options.ignoreMultiColumnHeaders) {\n                maxLevel = column.level;\n            }\n\n            if (index !== -1) {\n                colList.push(columnInfo);\n                colWidthList.push(columnWidth);\n                lastVisibleColumnIndex = Math.max(lastVisibleColumnIndex, colList.indexOf(columnInfo));\n            } else {\n                hiddenColumns.push(columnInfo);\n            }\n\n            if (column.pinned && exportColumn && columnInfo.headerType === ExportHeaderType.ColumnHeader) {\n                indexOfLastPinnedColumn++;\n            }\n\n        });\n\n        //Append the hidden columns to the end of the list\n        hiddenColumns.forEach((hiddenColumn) => {\n            colList[++lastVisibleColumnIndex] = hiddenColumn;\n        });\n\n        const result: IColumnList = {\n            columns: colList,\n            columnWidths: colWidthList,\n            indexOfLastPinnedColumn,\n            maxLevel\n        };\n\n        return result;\n    }\n\n    private mapHierarchicalGridColumns(island: any, gridData: any) {\n        let columnList: IColumnList;\n        let keyData;\n\n        if (island.autoGenerate) {\n            keyData = gridData[island.key];\n            const islandKeys = island.children.map(i => i.key);\n\n            const islandData = keyData.map(i => {\n                const newItem = {};\n\n                Object.keys(i).map(k => {\n                    if (!islandKeys.includes(k)) {\n                        newItem[k] = i[k];\n                    }\n                });\n\n                return newItem;\n            });\n\n            columnList = this.getAutoGeneratedColumns(islandData);\n        } else {\n            const islandColumnList = island.columns;\n            columnList = this.getColumns(islandColumnList);\n        }\n\n        this._ownersMap.set(island, columnList);\n\n        if (island.children.length > 0) {\n            for (const childIsland of island.children) {\n                const islandKeyData = keyData !== undefined ? keyData[0] : {};\n                this.mapHierarchicalGridColumns(childIsland, islandKeyData);\n            }\n        }\n    }\n\n    private getAutoGeneratedColumns(data: any[]) {\n        const colList = [];\n        const colWidthList = [];\n        const keys = Object.keys(data[0]);\n\n        keys.forEach((colKey, i) => {\n            const columnInfo: IColumnInfo = {\n                header: colKey,\n                field: colKey,\n                dataType: 'string',\n                skip: false,\n                headerType: ExportHeaderType.ColumnHeader,\n                columnSpan: 1,\n                level: 0,\n                startIndex: i,\n                pinnedIndex: Number.MAX_VALUE\n            };\n\n            colList.push(columnInfo);\n            colWidthList.push(DEFAULT_COLUMN_WIDTH);\n        });\n\n        const result: IColumnList = {\n            columns: colList,\n            columnWidths: colWidthList,\n            indexOfLastPinnedColumn: -1,\n            maxLevel: 0,\n        };\n\n        return result;\n    }\n\n    private addPivotRowHeaders(grid: any) {\n        if (grid?.pivotUI?.showRowHeaders) {\n            const headersList = this._ownersMap.get(DEFAULT_OWNER);\n            const enabledRows = grid.visibleRowDimensions.filter(r => r.enabled).map((r, index) => ({ name: r.displayName || r.memberName, level: index }));\n            let startIndex = 0;\n            enabledRows.forEach(x => {\n                headersList.columns.unshift({\n                    rowSpan: headersList.maxLevel + 1,\n                    field: x.name,\n                    header: x.name,\n                    startIndex: startIndex,\n                    skip: false,\n                    pinnedIndex: 0,\n                    level: x.level,\n                    dataType: 'string',\n                    headerType: ExportHeaderType.PivotRowHeader\n                });\n                startIndex += 1;\n            });\n            headersList.columnWidths.unshift(...Array(enabledRows.length).fill(200));\n        }\n    }\n\n    private addPivotGridColumns(grid: any) {\n        if (grid.type !== 'pivot') {\n            return;\n        }\n\n        const enabledRows = grid.visibleRowDimensions.map((r, i) => ({ name: r.memberName, level: i }));\n\n        this.preparePivotGridColumns(enabledRows);\n        this.pivotGridFilterFieldsCount = enabledRows.length;\n\n        const columnList = this._ownersMap.get(DEFAULT_OWNER);\n        columnList.columns.unshift(...this.pivotGridColumns);\n        columnList.columnWidths.unshift(...Array(this.pivotGridColumns.length).fill(200));\n        columnList.indexOfLastPinnedColumn = enabledRows.length - 1;\n        columnList.maxRowLevel = enabledRows.length;\n        this._ownersMap.set(DEFAULT_OWNER, columnList);\n    }\n\n    private preparePivotGridColumns(keys: any, columnGroupParent?: string): any {\n        if (keys.length === 0) {\n            return;\n        }\n\n        let startIndex = 0;\n        const key = keys[0];\n        const records = this.flatRecords.map(r => r.data);\n        const groupedRecords = {};\n        records.forEach(obj => {\n            const keyValue = obj[key.name];\n            if (!groupedRecords[keyValue]) {\n                groupedRecords[keyValue] = [];\n            }\n            groupedRecords[keyValue].push(obj);\n        });\n\n        if (columnGroupParent) {\n            const mapKeys = [...this.pivotGridKeyValueMap.keys()];\n            const mapValues = [...this.pivotGridKeyValueMap.values()];\n\n            for (const k of Object.keys(groupedRecords)) {\n                groupedRecords[k] = groupedRecords[k].filter(row => mapKeys.every(mk => Object.keys(row).includes(mk))\n                    && mapValues.every(mv => Object.values(row).includes(mv)));\n\n                if (groupedRecords[k].length === 0) {\n                    delete groupedRecords[k];\n                }\n            }\n        }\n\n        for (const k of Object.keys(groupedRecords)) {\n            let groupKey = k;\n            const rowSpan = groupedRecords[k].length;\n\n\n            const rowDimensionColumn: IColumnInfo = {\n                columnSpan: 1,\n                rowSpan,\n                field: groupKey,\n                header: groupKey,\n                startIndex,\n                skip: false,\n                pinnedIndex: 0,\n                level: key.level,\n                dataType: 'string',\n                headerType: groupedRecords[groupKey].length > 1 ? ExportHeaderType.MultiRowHeader : ExportHeaderType.RowHeader,\n            };\n            if (groupKey === 'undefined') {\n                this.pivotGridColumns[this.pivotGridColumns.length - 1].columnSpan += 1;\n                rowDimensionColumn.headerType = ExportHeaderType.PivotMergedHeader;\n                groupKey = columnGroupParent;\n            }\n            if (columnGroupParent) {\n                rowDimensionColumn.columnGroupParent = columnGroupParent;\n            } else {\n                rowDimensionColumn.columnGroup = groupKey;\n            }\n\n            this.pivotGridColumns.push(rowDimensionColumn);\n\n            if (keys.length > 1) {\n                if (groupKey !== columnGroupParent) {\n                    this.pivotGridKeyValueMap.set(key.name, groupKey);\n                }\n                const newKeys = keys.filter(kdd => kdd !== key);\n                this.preparePivotGridColumns(newKeys, groupKey)\n                this.pivotGridKeyValueMap.delete(key.name);\n            }\n\n            startIndex += rowSpan;\n        }\n    }\n\n    private addLevelColumns() {\n        if (this.options.exportSummaries && this.summaries.size > 0) {\n            this._ownersMap.forEach(om => {\n                const levelCol: IColumnInfo = {\n                    header: GRID_LEVEL_COL,\n                    dataType: 'number',\n                    field: GRID_LEVEL_COL,\n                    skip: false,\n                    skipFormatter: false,\n                    headerType: ExportHeaderType.ColumnHeader,\n                    columnSpan: 1,\n                    level: 0,\n                };\n\n                om.columns.push(levelCol);\n                om.columnWidths.push(20);\n            })\n        }\n    }\n\n    private addLevelData() {\n        if (this.options.exportSummaries && this.summaries.size > 0) {\n            for(const r of this.flatRecords){\n                if (r.type === ExportRecordType.DataRecord || r.type === ExportRecordType.TreeGridRecord || r.type === ExportRecordType.HierarchicalGridRecord) {\n                    r.data[GRID_LEVEL_COL] = r.level;\n                }\n            }\n        }\n    }\n\n    private resetDefaults() {\n        this._sort = null;\n        this.flatRecords = [];\n        this.options = {} as IgxExporterOptionsBase;\n        this._ownersMap.clear();\n        this.rowIslandCounter = 0;\n    }\n\n    protected abstract exportDataImplementation(data: any[], options: IgxExporterOptionsBase, done: () => void): void;\n}\n","import { ExportUtilities } from '../exporter-common/export-utilities';\nimport { yieldingLoop } from '../../core/utils';\nimport { IColumnInfo } from '../exporter-common/base-export-service';\n\n/**\n * @hidden\n */\nexport class CharSeparatedValueData {\n    private _headerRecord = '';\n    private _dataRecords = '';\n    private _eor = '\\r\\n';\n    private _delimiter;\n    private _escapeCharacters = ['\\r', '\\n', '\\r\\n'];\n    private _delimiterLength = 1;\n    private _isSpecialData = false;\n\n    constructor(private _data: any[], valueDelimiter: string, private columns: IColumnInfo[] = [])  {\n        this.setDelimiter(valueDelimiter);\n    }\n\n    public prepareData(key?: any[]) {\n        if (!this._data || this._data.length === 0) {\n            return '';\n        }\n        let keys = [];\n        if (key){\n            keys = key;\n        }else {\n            keys = ExportUtilities.getKeysFromData(this._data);\n        }\n\n        if (keys.length === 0) {\n            return '';\n        }\n\n        this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);\n        this._escapeCharacters.push(this._delimiter);\n\n        this._headerRecord = this.processHeaderRecord(keys, this._data.length);\n        this._dataRecords = this.processDataRecords(this._data, keys);\n\n        return this._headerRecord + this._dataRecords;\n    }\n\n    public prepareDataAsync(done: (result: string) => void) {\n        const columns = this.columns?.filter(c => !c.skip)\n                        .sort((a, b) => a.startIndex - b.startIndex)\n                        .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n        const keys = columns && columns.length ? columns.map(c => c.field) : ExportUtilities.getKeysFromData(this._data);\n\n        this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);\n        this._escapeCharacters.push(this._delimiter);\n\n        const headers = columns && columns.length ?\n                        columns.map(c => c.header ?? c.field) :\n                        keys;\n\n        this._headerRecord = this.processHeaderRecord(headers, this._data.length);\n        if (keys.length === 0 || ((!this._data || this._data.length === 0) && keys.length === 0)) {\n            done('');\n        } else {\n            this.processDataRecordsAsync(this._data, keys, (dr) => {\n                done(this._headerRecord + dr);\n            });\n        }\n    }\n\n    private processField(value, escapeChars): string {\n        let safeValue = ExportUtilities.hasValue(value) ? String(value) : '';\n        if (escapeChars.some((v) => safeValue.includes(v))) {\n            safeValue = `\"${safeValue}\"`;\n        }\n        return safeValue + this._delimiter;\n    }\n\n    private processHeaderRecord(keys, dataLength): string {\n        let recordData = '';\n        for (const keyName of keys) {\n            recordData += this.processField(keyName, this._escapeCharacters);\n        }\n\n        const result = recordData.slice(0, -this._delimiterLength);\n\n        return dataLength > 0 ? result + this._eor : result;\n    }\n\n    private processRecord(record, keys): string {\n        const recordData = new Array(keys.length);\n        for (let index = 0; index < keys.length; index++) {\n            const value = (record[keys[index]] !== undefined) ? record[keys[index]] : this._isSpecialData ? record : '';\n            recordData[index] = this.processField(value, this._escapeCharacters);\n        }\n\n        return recordData.join('').slice(0, -this._delimiterLength) + this._eor;\n    }\n\n    private processDataRecords(currentData, keys) {\n        const dataRecords = new Array(currentData.length);\n\n        for (let i = 0; i < currentData.length; i++) {\n            const row = currentData[i];\n            dataRecords[i] = this.processRecord(row, keys);\n        }\n\n        return dataRecords.join('');\n    }\n\n    private processDataRecordsAsync(currentData, keys, done: (result: string) => void) {\n        const dataRecords = new Array(currentData.length);\n\n        yieldingLoop(currentData.length, 1000,\n            (i) => {\n                const row = currentData[i];\n                dataRecords[i] = this.processRecord(row, keys);\n            },\n            () => {\n                done(dataRecords.join(''));\n            });\n    }\n\n    private setDelimiter(value) {\n        this._delimiter = value;\n        this._delimiterLength = value.length;\n    }\n}\n","export abstract class IgxExporterOptionsBase {\n    /**\n     * Specifies whether hidden columns should be exported.\n     * ```typescript\n     * let ignoreColumnsVisibility = this.exportOptions.ignoreColumnsVisibility;\n     * this.exportOptions.ignoreColumnsVisibility = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreColumnsVisibility = false;\n\n    /**\n     * Specifies whether filtered out rows should be exported.\n     * ```typescript\n     * let ignoreFiltering = this.exportOptions.ignoreFiltering;\n     * this.exportOptions.ignoreFiltering = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreFiltering = false;\n\n    /**\n     * Specifies if the exporter should ignore the current column order in the IgxGrid.\n     * ```typescript\n     * let ignoreColumnsOrder = this.exportOptions.ignoreColumnsOrder;\n     * this.exportOptions.ignoreColumnsOrder = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreColumnsOrder = false;\n\n    /**\n     * Specifies whether the exported data should be sorted as in the provided IgxGrid.\n     * When you export grouped data, setting ignoreSorting to true will cause\n     * the grouping to fail because it relies on the sorting of the records.\n     * ```typescript\n     * let ignoreSorting = this.exportOptions.ignoreSorting;\n     * this.exportOptions.ignoreSorting = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreSorting = false;\n\n    /**\n     * Specifies whether the exported data should be grouped as in the provided IgxGrid.\n     * ```typescript\n     * let ignoreGrouping = this.exportOptions.ignoreGrouping;\n     * this.exportOptions.ignoreGrouping = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreGrouping = false;\n\n    /**\n     * Specifies whether the exported data should include multi column headers as in the provided IgxGrid.\n     * ```typescript\n     * let ignoreMultiColumnHeaders = this.exportOptions.ignoreMultiColumnHeaders;\n     * this.exportOptions.ignoreMultiColumnHeaders = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreMultiColumnHeaders = false;\n\n    /**\n     * Specifies whether the exported data should include column summaries.\n     * ```typescript\n     * let exportSummaries = this.exportOptions.exportSummaries;\n     * this.exportOptions.exportSummaries = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public exportSummaries = true;\n\n    /**\n     * Specifies whether the exported data should have frozen headers.\n     * ```typescript\n     * let freezeHeaders = this.exportOptions.freezeHeaders;\n     * this.exportOptions.freezeHeaders = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public freezeHeaders = false;\n\n    /**\n     * Specifies whether the headers should be exported if there is no data.\n     * ```typescript\n     * let alwaysExportHeaders = this.exportOptions.alwaysExportHeaders;\n     * this.exportOptions.alwaysExportHeaders = false;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n     public alwaysExportHeaders = true;\n\n    private _fileName: string;\n\n    constructor(fileName: string, protected _fileExtension: string) {\n        this.setFileName(fileName);\n    }\n\n    private setFileName(fileName: string): void {\n        this._fileName = fileName + (fileName.endsWith(this._fileExtension) === false ? this._fileExtension : '');\n    }\n\n    /**\n     * Gets the file name which will be used for the exporting operation.\n     * ```typescript\n     * let fileName = this.exportOptions.fileName;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public get fileName() {\n        return this._fileName;\n    }\n\n    /**\n     * Sets the file name which will be used for the exporting operation.\n     * ```typescript\n     * this.exportOptions.fileName = 'exportedData01';\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public set fileName(value) {\n        this.setFileName(value);\n    }\n\n}\n","import { IgxExporterOptionsBase } from '../exporter-common/exporter-options-base';\n\n/**\n * Objects of this class are used to configure the CSV exporting process.\n */\nexport class IgxCsvExporterOptions extends IgxExporterOptionsBase {\n\n    private _valueDelimiter;\n    private _fileType;\n\n    constructor(fileName: string, fileType: CsvFileTypes) {\n        super(fileName, IgxCsvExporterOptions.getExtensionFromFileType(fileType));\n        this.setFileType(fileType);\n        this.setDelimiter();\n    }\n\n    private static getExtensionFromFileType(fType: CsvFileTypes) {\n        let extension = '';\n        switch (fType) {\n            case CsvFileTypes.CSV:\n                extension = '.csv';\n                break;\n            case CsvFileTypes.TSV:\n                extension = '.tsv';\n                break;\n            case CsvFileTypes.TAB:\n                extension = '.tab';\n                break;\n            default:\n                throw Error('Unsupported CSV file type!');\n        }\n        return extension;\n    }\n\n    /**\n     * Gets the value delimiter which will be used for the exporting operation.\n     * ```typescript\n     * let delimiter = this.exportOptions.valueDelimiter;\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public get valueDelimiter() {\n        return this._valueDelimiter;\n    }\n\n    /**\n     * Sets a value delimiter which will overwrite the default delimiter of the selected export format.\n     * ```typescript\n     * this.exportOptions.valueDelimiter = '|';\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public set valueDelimiter(value) {\n        this.setDelimiter(value);\n    }\n\n    /**\n     * Gets the CSV export format.\n     * ```typescript\n     * let filetype = this.exportOptions.fileType;\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public get fileType() {\n        return this._fileType;\n    }\n\n    /**\n     * Sets the CSV export format.\n     * ```typescript\n     * this.exportOptions.fileType = CsvFileTypes.TAB;\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public set fileType(value) {\n        this.setFileType(value);\n    }\n\n    private setFileType(value) {\n        if (value !== undefined && value !== null && value !== this._fileType) {\n            this._fileType = value;\n            const extension = IgxCsvExporterOptions.getExtensionFromFileType(value);\n            if (!this.fileName.endsWith(extension)) {\n                const oldExt = '.' + this.fileName.split('.').pop();\n                const newName = this.fileName.replace(oldExt, extension);\n                this._fileExtension = extension;\n                this.fileName = newName;\n            }\n        }\n    }\n\n    private setDelimiter(value?) {\n        if (value !== undefined && value !== '' && value !== null) {\n            this._valueDelimiter = value;\n        } else {\n            switch (this.fileType) {\n                case CsvFileTypes.CSV:\n                    this._valueDelimiter = ',';\n                    break;\n                case CsvFileTypes.TSV:\n                case CsvFileTypes.TAB:\n                    this._valueDelimiter = '\\t';\n                    break;\n            }\n        }\n    }\n}\n\n/**\n * This enumeration is used to configure the default value separator\n * as well as the default file extension used when performing CSV exporting.\n */\nexport enum CsvFileTypes {\n    /**\n     * Character Separated Values, default separator is \"comma\", default file extension is .csv\n     */\n    CSV,\n    /**\n     * Tab Separated Values, default separator is tab, default file extension is .tsv\n     */\n    TSV,\n    /**\n     * Tab Separated Values, default separator is tab, default file extension is .tab\n     */\n    TAB\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { DEFAULT_OWNER, IExportRecord, IgxBaseExporter } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { CharSeparatedValueData } from './char-separated-value-data';\nimport { CsvFileTypes, IgxCsvExporterOptions } from './csv-exporter-options';\nimport { IBaseEventArgs } from '../../core/utils';\n\nexport interface ICsvExportEndedEventArgs extends IBaseEventArgs {\n    csvData?: string;\n}\n\n/**\n * **Ignite UI for Angular CSV Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter-csv)\n *\n * The Ignite UI for Angular CSV Exporter service can export data in a Character Separated Values format from\n * both raw data (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n *   { Name: \"Eric Ridley\", Age: \"26\" },\n *   { Name: \"Alanis Brook\", Age: \"22\" },\n *   { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private csvExportService: IgxCsvExporterService) {\n * }\n *\n * const opt: IgxCsvExporterOptions = new IgxCsvExporterOptions(\"FileName\", CsvFileTypes.CSV);\n * this.csvExportService.exportData(this.localData, opt);\n * ```\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxCsvExporterService extends IgxBaseExporter {\n    /**\n     * This event is emitted when the export process finishes.\n     * ```typescript\n     * this.exporterService.exportEnded.subscribe((args: ICsvExportEndedEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxCsvExporterService\n     */\n    public override exportEnded = new EventEmitter<ICsvExportEndedEventArgs>();\n\n    private _stringData: string;\n\n    protected exportDataImplementation(data: IExportRecord[], options: IgxCsvExporterOptions, done: () => void) {\n        data = data.map((item) => item.data);\n        const columnList = this._ownersMap.get(DEFAULT_OWNER);\n\n        const csvData = new CharSeparatedValueData(data, options.valueDelimiter, columnList?.columns);\n        csvData.prepareDataAsync((r) => {\n            this._stringData = r;\n            this.saveFile(options);\n            this.exportEnded.emit({ csvData: this._stringData });\n            done();\n        });\n    }\n\n    private saveFile(options: IgxCsvExporterOptions) {\n        switch (options.fileType) {\n            case CsvFileTypes.CSV:\n                this.exportFile(this._stringData, options.fileName, 'text/csv;charset=utf-8;');\n                break;\n            case CsvFileTypes.TSV:\n            case CsvFileTypes.TAB:\n                this.exportFile(this._stringData, options.fileName, 'text/tab-separated-values;charset=utf-8;');\n                break;\n        }\n    }\n\n    private exportFile(data: string, fileName: string, fileType: string): void {\n        const blob = new Blob([data ? '\\ufeff' : '', data], { type: fileType });\n        ExportUtilities.saveBlobToFile(blob, fileName);\n    }\n}\n","/**\n * @hidden\n */\nexport enum ExcelFolderTypes {\n    RootExcelFolder,\n    RootRelsExcelFolder,\n    DocPropsExcelFolder,\n    XLExcelFolder,\n    XLRelsExcelFolder,\n    ThemeExcelFolder,\n    WorksheetsExcelFolder,\n    WorksheetsRelsExcelFolder,\n    TablesExcelFolder\n}\n/**\n * @hidden\n */\nexport enum ExcelFileTypes {\n    RootRelsFile,\n    AppFile,\n    CoreFile,\n    WorkbookRelsFile,\n    ThemeFile,\n    WorksheetFile,\n    StyleFile,\n    WorkbookFile,\n    ContentTypesFile,\n    SharedStringsFile,\n    WorksheetRelsFile,\n    TablesFile\n}\n","/** @hidden */\nexport class ExcelStrings {\n    private static XML_STRING = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\r\\n';\n    private static SHARED_STRING_RELATIONSHIP = '<Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\" />';\n\n    public static getRels(): string {\n        return ExcelStrings.XML_STRING + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/></Relationships>';\n    }\n\n    public static getApp(worksheetName: string): string {\n        return ExcelStrings.XML_STRING + `<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size=\"2\" baseType=\"variant\"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size=\"1\" baseType=\"lpstr\"><vt:lpstr>${worksheetName}</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion></Properties>`;\n    }\n\n    public static getCore(): string {\n        return ExcelStrings.XML_STRING + '<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dc:creator></dc:creator><cp:lastModifiedBy></cp:lastModifiedBy><dcterms:created xsi:type=\"dcterms:W3CDTF\">2015-06-05T18:17:20Z</dcterms:created><dcterms:modified xsi:type=\"dcterms:W3CDTF\">2015-06-05T18:17:26Z</dcterms:modified></cp:coreProperties>';\n    }\n\n    public static getTheme(): string {\n        return ExcelStrings.XML_STRING + '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"5B9BD5\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"4472C4\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"游ゴシック Light\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"等线 Light\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Times New Roman\"/><a:font script=\"Hebr\" typeface=\"Times New Roman\"/><a:font script=\"Thai\" typeface=\"Tahoma\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"MoolBoran\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Times New Roman\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"游ゴシック\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"等线\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Arial\"/><a:font script=\"Hebr\" typeface=\"Arial\"/><a:font script=\"Thai\" typeface=\"Tahoma\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"DaunPenh\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Arial\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:satMod val=\"103000\"/><a:lumMod val=\"102000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"110000\"/><a:lumMod val=\"100000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" algn=\"ctr\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"93000\"/><a:satMod val=\"150000\"/><a:shade val=\"98000\"/><a:lumMod val=\"102000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:tint val=\"98000\"/><a:satMod val=\"130000\"/><a:shade val=\"90000\"/><a:lumMod val=\"103000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"63000\"/><a:satMod val=\"120000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri=\"{05A4C25C-085E-4340-85A3-A5531E510DB2}\"><thm15:themeFamily xmlns:thm15=\"http://schemas.microsoft.com/office/thememl/2012/main\" name=\"Office Theme\" id=\"{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}\" vid=\"{4A3C46E8-61CC-4603-A589-7422A47A8E4A}\"/></a:ext></a:extLst></a:theme>';\n    }\n\n    public static getStyles(): string {\n        return ExcelStrings.XML_STRING +\n        '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac x16r2\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" xmlns:x16r2=\"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\"><numFmts count=\"5\"><numFmt numFmtId=\"164\" formatCode=\"&quot;$&quot;#,##0.00\"/><numFmt numFmtId=\"165\" formatCode=\"[$£-809]#,##0.00\"/><numFmt numFmtId=\"166\" formatCode=\"[$¥-804]#,##0.00\"/><numFmt numFmtId=\"167\" formatCode=\"#,##0.00\\ [$€-1]\"/><numFmt numFmtId=\"168\" formatCode=\"[$¥-411]#,##0.00\"/></numFmts><fonts count=\"2\" x14ac:knownFonts=\"1\"><font><sz val=\"11\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font><font><b/><sz val=\"11\"/><color theme=\"0\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts><fills count=\"3\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill><fill><patternFill patternType=\"solid\"><fgColor theme=\"4\"/><bgColor indexed=\"64\"/></patternFill></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"13\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"14\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"0\" xfId=\"0\"/><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyAlignment=\"1\"><alignment horizontal=\"center\" vertical=\"center\"/></xf><xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"165\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"166\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"167\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"168\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"21\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"22\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"10\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/></cellXfs><cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles><dxfs count=\"0\"/><tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\"/><extLst><ext uri=\"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}\" xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"><x14:slicerStyles defaultSlicerStyle=\"SlicerStyleLight1\"/></ext><ext uri=\"{9260A510-F301-46a8-8635-F512D64BE5F5}\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"><x15:timelineStyles defaultTimelineStyle=\"TimeSlicerStyleLight1\"/></ext></extLst></styleSheet>';\n    }\n\n    public static getWorkbook(worksheetName: string): string {\n        return ExcelStrings.XML_STRING + `<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x15\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"><fileVersion appName=\"xl\" lastEdited=\"6\" lowestEdited=\"6\" rupBuild=\"14420\"/><workbookPr filterPrivacy=\"1\" defaultThemeVersion=\"164011\"/><bookViews><workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"22260\" windowHeight=\"12645\"/></bookViews><sheets><sheet name=\"${worksheetName}\" sheetId=\"1\" r:id=\"rId1\"/></sheets><calcPr calcId=\"162913\"/><extLst><ext uri=\"{140A7094-0E35-4892-8432-C4D2E57EDEB5}\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"><x15:workbookPr chartTrackingRefBase=\"1\"/></ext></extLst></workbook>`;\n    }\n\n    public static getWorksheetRels(): string {\n        return ExcelStrings.XML_STRING + `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\" Target=\"../tables/table1.xml\"/></Relationships>`;\n    }\n\n    public static getWorkbookRels(hasSharedStrings): string {\n        let retVal = ExcelStrings.XML_STRING + `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>`;\n\n        if (hasSharedStrings) {\n            retVal += ExcelStrings.SHARED_STRING_RELATIONSHIP;\n        }\n\n        retVal += '</Relationships>';\n\n        return retVal;\n    }\n\n    public static getSheetXML(dimension: string, freezePane: string, cols: string, sheetData: string, hasTable: boolean, outlineLevel = 0, isHierarchical: boolean): string {\n        const hasOutline = outlineLevel > 0;\n        const tableParts = hasTable ? '<tableParts count=\"1\"><tablePart r:id=\"rId1\"/></tableParts>' : '';\n        const sheetOutlineProp = hasOutline ? '<sheetPr><outlinePr summaryBelow=\"0\"/></sheetPr>' : '';\n        const sOutlineLevel =  hasOutline ? `outlineLevelRow=\"${outlineLevel}\"` : '';\n        const dimensions = isHierarchical ? '' : `<dimension ref=\"${dimension}\"/>`;\n\n        // return ExcelStrings.XML_STRING +\n        //     '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\"><dimension ref=\"' + dimension + '\"/><sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">' + freezePane + '</sheetView></sheetViews><sheetFormatPr defaultRowHeight=\"15\" x14ac:dyDescent=\"0.25\"/>' + cols + sheetData + '<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>' + tableParts + '</worksheet>';\n\n        return `${ExcelStrings.XML_STRING}\n<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">\n${sheetOutlineProp}\n${dimensions}\n<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">${freezePane}</sheetView></sheetViews>\n<sheetFormatPr defaultRowHeight=\"15\" ${sOutlineLevel} x14ac:dyDescent=\"0.25\"/>\n${cols}\n${sheetData}\n<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>\n${tableParts}</worksheet>`;\n\n    }\n\n    public static getSharedStringXML(count: number, uniqueCount: number, table: string): string {\n        return ExcelStrings.XML_STRING + '<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"' + count + '\" uniqueCount=\"' + uniqueCount + '\">' + table + '</sst>';\n    }\n\n    public static getContentTypesXML(hasSharedStrings: boolean, hasTable: boolean): string {\n        let contentTypes = ExcelStrings.XML_STRING +\n        `<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\\\">\n            <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n            <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n            <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n            <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\n            <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\n            <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\n            <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n            <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>`;\n\n        contentTypes += hasSharedStrings ?\n        `\t<Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>` : '';\n\n        contentTypes += hasTable ?\n            `<Override PartName=\"/xl/tables/table1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/>` : '';\n        contentTypes += `</Types>`;\n\n        return contentTypes;\n    }\n\n    public static getTablesXML(autoFilterDimension: string, tableDimension: string, tableColumns: string, sort: string): string {\n        return `${ExcelStrings.XML_STRING}<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"${tableDimension}\" totalsRowShown=\"0\">\n    <autoFilter ref=\"${autoFilterDimension}\"/>${sort}${tableColumns}<tableStyleInfo name=\"TableStyleMedium2\" showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"1\" showColumnStripes=\"0\"/>\n</table>`;\n    }\n\n\n    public static getExcelColumn(index: number): string {\n        // Returns the excel column name for given 0-based index\n        // For example 27 should return \"AB\"\n        let returnString = '';\n        while (index >= 0) {\n            const char = index % 26;\n            returnString = String.fromCharCode(65 + char) + returnString;\n            index = Math.floor(index / 26) - 1;\n        }\n        return returnString;\n    }\n}\n","import { IExcelFile } from './excel-interfaces';\nimport { ExcelStrings } from './excel-strings';\nimport { WorksheetData } from './worksheet-data';\n\nimport { strToU8 } from 'fflate';\nimport { yieldingLoop } from '../../core/utils';\nimport { ExportHeaderType, ExportRecordType, IExportRecord, IColumnList, IColumnInfo, GRID_ROOT_SUMMARY, GRID_PARENT, GRID_LEVEL_COL } from '../exporter-common/base-export-service';\n\n/**\n * @hidden\n */\nexport class RootRelsFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['.rels'] = strToU8(ExcelStrings.getRels());\n    }\n}\n\n/**\n * @hidden\n */\nexport class AppFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        folder['app.xml'] = strToU8(ExcelStrings.getApp(worksheetData.options.worksheetName));\n    }\n}\n\n/**\n * @hidden\n */\nexport class CoreFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['core.xml'] = strToU8(ExcelStrings.getCore());\n    }\n}\n\n/**\n * @hidden\n */\nexport class WorkbookRelsFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const hasSharedStrings = !worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders;\n        folder['workbook.xml.rels'] = strToU8(ExcelStrings.getWorkbookRels(hasSharedStrings));\n    }\n}\n\n/**\n * @hidden\n */\nexport class ThemeFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['theme1.xml'] = strToU8(ExcelStrings.getTheme());\n    }\n}\n\ninterface Dimensions {\n    startCoordinate: string\n    endCoordinate: string\n}\n\ninterface CurrencyInfo {\n    styleXf: number\n    symbol: string\n}\n\n/**\n * @hidden\n */\nexport class WorksheetFile implements IExcelFile {\n    private static MIN_WIDTH = 8.43;\n    private maxOutlineLevel = 0;\n    private sheetData = '';\n    private dimension = '';\n    private freezePane = '';\n    private rowHeight = '';\n\n    private mergeCellStr = '';\n    private mergeCellsCounter = 0;\n    private rowIndex = 0;\n    private pivotGridRowHeadersMap = new Map<number, string>();\n\n    private dimensionMap: Map<string, Dimensions> = new Map<string, Dimensions>();\n    private hierarchicalDimensionMap: Map<any,  Map<string, Dimensions>> = new Map<any,  Map<string, Dimensions>>();\n    private currentSummaryOwner = '';\n    private currentHierarchicalOwner = '';\n    private firstColumn = Number.MAX_VALUE;\n    private firstDataRow = Number.MAX_VALUE;\n    private isValidGrid: boolean;\n    private lastValidRow: string;\n\n    private currencyStyleMap = new Map<string, CurrencyInfo>([\n        ['USD', {styleXf: 5, symbol: '$'}],\n        ['GBP', {styleXf: 6, symbol: '£'}],\n        ['CNY', {styleXf: 7, symbol: '¥'}],\n        ['EUR', {styleXf: 8, symbol: '€'}],\n        ['JPY', {styleXf: 9, symbol: '¥'}],\n    ]);\n\n    public writeElement() {}\n\n    public async writeElementAsync(folder: Object, worksheetData: WorksheetData) {\n        return new Promise<void>(resolve => {\n            this.prepareDataAsync(worksheetData, (cols, rows) => {\n                const hasTable = (!worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders)\n                    && worksheetData.options.exportAsTable;\n\n                folder['sheet1.xml'] = strToU8(ExcelStrings.getSheetXML(\n                    this.dimension, this.freezePane, cols, rows, hasTable, this.maxOutlineLevel, worksheetData.isHierarchical));\n                resolve();\n            });\n        });\n    }\n\n    private prepareDataAsync(worksheetData: WorksheetData, done: (cols: string, sheetData: string) => void) {\n        this.sheetData = '';\n        let cols = '';\n        const dictionary = worksheetData.dataDictionary;\n        this.rowIndex = 0;\n\n        if (worksheetData.isEmpty && (!worksheetData.options.alwaysExportHeaders || worksheetData.owner.columns.length === 0)) {\n            this.sheetData += '<sheetData/>';\n            this.dimension = 'A1';\n            done('', this.sheetData);\n        } else {\n            const owner = worksheetData.owner;\n            const isHierarchicalGrid = worksheetData.isHierarchical;\n            const hasMultiColumnHeader = worksheetData.hasMultiColumnHeader;\n            const hasMultiRowHeader = worksheetData.hasMultiRowHeader;\n\n            const hasUserSetIndex = owner.columns.some(col => col.exportIndex !== undefined);\n\n            const height =  worksheetData.options.rowHeight;\n\n            this.isValidGrid = worksheetData.isHierarchical || worksheetData.isTreeGrid || worksheetData.isGroupedGrid;\n            this.rowHeight = height ? ` ht=\"${height}\" customHeight=\"1\"` : '';\n            this.sheetData += `<sheetData>`;\n\n            let headersForLevel: IColumnInfo[] = [];\n\n            for(let i = 0; i <= owner.maxRowLevel; i++) {\n                headersForLevel =  owner.columns.filter(c => c.level === i && c.rowSpan > 0 && !c.skip)\n\n                this.printHeaders(worksheetData, headersForLevel, i, true);\n\n                this.rowIndex++;\n            }\n\n            this.rowIndex = 0;\n\n            for (let i = 0; i <= owner.maxLevel; i++) {\n                this.rowIndex++;\n                const pivotGridColumns = this.pivotGridRowHeadersMap.get(this.rowIndex) ?? \"\";\n                this.sheetData += `<row r=\"${this.rowIndex}\"${this.rowHeight}>${pivotGridColumns}`;\n\n                const allowedColumns = owner.columns.filter(c => c.headerType !== ExportHeaderType.RowHeader &&\n                     c.headerType !== ExportHeaderType.MultiRowHeader &&\n                     c.headerType !== ExportHeaderType.PivotRowHeader &&\n                     c.headerType !== ExportHeaderType.PivotMergedHeader);\n\n                headersForLevel = hasMultiColumnHeader ?\n                    allowedColumns\n                        .filter(c => (c.level < i &&\n                            c.headerType !== ExportHeaderType.MultiColumnHeader || c.level === i) && c.columnSpan > 0 && !c.skip)\n                        .sort((a, b) => a.startIndex - b.startIndex)\n                        .sort((a, b) => a.pinnedIndex - b.pinnedIndex) :\n                    hasUserSetIndex ?\n                        allowedColumns.filter(c => !c.skip) :\n                        allowedColumns.filter(c => !c.skip)\n                            .sort((a, b) => a.startIndex - b.startIndex)\n                            .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n\n                this.printHeaders(worksheetData, headersForLevel, i, false);\n\n                this.sheetData += `</row>`;\n            }\n\n            const multiColumnHeaderLevel = worksheetData.options.ignoreMultiColumnHeaders ? 0 : owner.maxLevel;\n            const freezeHeaders = worksheetData.options.freezeHeaders ? 2 + multiColumnHeaderLevel : 1;\n\n            if (!isHierarchicalGrid) {\n                const col = worksheetData.hasSummaries ? worksheetData.columnCount + 1 : worksheetData.columnCount - 1\n                this.dimension = 'A1:' + ExcelStrings.getExcelColumn(col) + (worksheetData.rowCount);\n\n                cols += '<cols>';\n\n                if (!hasMultiColumnHeader) {\n                    for (let j = 0; j < worksheetData.columnCount; j++) {\n                        const width = dictionary.columnWidths[j];\n                        // Use the width provided in the options if it exists\n                        let widthInTwips = worksheetData.options.columnWidth !== undefined ?\n                                                worksheetData.options.columnWidth :\n                                                Math.max(((width / 96) * 14.4), WorksheetFile.MIN_WIDTH);\n                        if (!(widthInTwips > 0)) {\n                            widthInTwips = WorksheetFile.MIN_WIDTH;\n                        }\n\n                        cols += `<col min=\"${(j + 1)}\" max=\"${(j + 1)}\" width=\"${widthInTwips}\" customWidth=\"1\"/>`;\n                    }\n                } else {\n                    cols += `<col min=\"1\" max=\"${worksheetData.columnCount}\" width=\"15\" customWidth=\"1\"/>`;\n                }\n\n                const indexOfLastPinnedColumn = worksheetData.indexOfLastPinnedColumn;\n                const frozenColumnCount = indexOfLastPinnedColumn + 1;\n                let firstCell = ExcelStrings.getExcelColumn(frozenColumnCount) + freezeHeaders;\n                if (indexOfLastPinnedColumn !== undefined && indexOfLastPinnedColumn !== -1 &&\n                    !worksheetData.options.ignorePinning &&\n                    !worksheetData.options.ignoreColumnsOrder) {\n                    this.freezePane =\n                        `<pane xSplit=\"${frozenColumnCount}\" ySplit=\"${freezeHeaders - 1}\"\n                         topLeftCell=\"${firstCell}\" activePane=\"topRight\" state=\"frozen\"/>`;\n                } else if (worksheetData.options.freezeHeaders) {\n                    firstCell = ExcelStrings.getExcelColumn(0) + freezeHeaders;\n                    this.freezePane =\n                        `<pane xSplit=\"0\" ySplit=\"${freezeHeaders - 1}\"\n                         topLeftCell=\"${firstCell}\" activePane=\"topRight\" state=\"frozen\"/>`;\n                }\n            } else {\n                const columnWidth = worksheetData.options.columnWidth ? worksheetData.options.columnWidth : 20;\n                cols += `<cols><col min=\"1\" max=\"${worksheetData.columnCount}\" width=\"${columnWidth}\" customWidth=\"1\"/>`;\n\n                if (worksheetData.options.freezeHeaders) {\n                    const firstCell = ExcelStrings.getExcelColumn(0) + freezeHeaders;\n                    this.freezePane =\n                        `<pane xSplit=\"0\" ySplit=\"${freezeHeaders - 1}\"\n                         topLeftCell=\"${firstCell}\" activePane=\"topRight\" state=\"frozen\"/>`;\n                }\n            }\n\n            if (worksheetData.hasSummaries) {\n                cols += `<col min=\"${worksheetData.columnCount + 2}\" max=\"${worksheetData.columnCount + 2}\" hidden=\"1\"/>`;\n            }\n\n            cols += '</cols>';\n\n            this.processDataRecordsAsync(worksheetData, (rows) => {\n                this.sheetData += rows;\n                this.sheetData += '</sheetData>';\n\n                if ((hasMultiColumnHeader || hasMultiRowHeader) && this.mergeCellsCounter > 0) {\n                    this.sheetData += `<mergeCells count=\"${this.mergeCellsCounter}\">${this.mergeCellStr}</mergeCells>`;\n                }\n\n                done(cols, this.sheetData);\n            });\n        }\n    }\n\n    private processDataRecordsAsync(worksheetData: WorksheetData, done: (rows: string) => void) {\n        const rowDataArr = [];\n        const height =  worksheetData.options.rowHeight;\n        this.rowHeight = height ? ' ht=\"' + height + '\" customHeight=\"1\"' : '';\n\n        const isHierarchicalGrid = worksheetData.isHierarchical;\n        const hasUserSetIndex = worksheetData.owner.columns.some(c => c.exportIndex !== undefined);\n\n        let recordHeaders = [];\n\n        yieldingLoop(worksheetData.rowCount - worksheetData.multiColumnHeaderRows - 1, 1000,\n            (i) => {\n                if (!worksheetData.isEmpty){\n                    if (!isHierarchicalGrid) {\n                        if (hasUserSetIndex) {\n                            recordHeaders = worksheetData.rootKeys;\n                        } else {\n                            recordHeaders = worksheetData.owner.columns\n                                .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)\n                                .sort((a, b) => a.startIndex-b.startIndex)\n                                .sort((a, b) => a.pinnedIndex-b.pinnedIndex)\n                                .map(c => c.field);\n                        }\n                    } else {\n                        const record = worksheetData.data[i];\n\n                        if (record.type === ExportRecordType.HeaderRecord) {\n                            const recordOwner = worksheetData.owners.get(record.owner);\n                            const hasMultiColumnHeaders = recordOwner.columns.some(c => !c.skip && c.headerType === ExportHeaderType.MultiColumnHeader);\n\n                            if (hasMultiColumnHeaders) {\n                                this.hGridPrintMultiColHeaders(worksheetData, rowDataArr, record, recordOwner);\n                            }\n                        }\n\n                        recordHeaders = Object.keys(worksheetData.data[i].data);\n                    }\n\n                    rowDataArr.push(this.processRow(worksheetData, i, recordHeaders, isHierarchicalGrid));\n                }\n            },\n            () => {\n                done(rowDataArr.join(''));\n        });\n    }\n\n    private hGridPrintMultiColHeaders(worksheetData: WorksheetData, rowDataArr: any[], record: IExportRecord,\n        owner: IColumnList) {\n        for (let j = 0; j < owner.maxLevel; j++) {\n            const recordLevel = record.level;\n            const outlineLevel = recordLevel > 0 ? ` outlineLevel=\"${recordLevel}\"` : '';\n            this.maxOutlineLevel = this.maxOutlineLevel < recordLevel ? recordLevel : this.maxOutlineLevel;\n            const sHidden = record.hidden ? ` hidden=\"1\"` : '';\n\n            this.rowIndex++;\n            let row = `<row r=\"${this.rowIndex}\"${this.rowHeight}${outlineLevel}${sHidden}>`;\n\n            const headersForLevel = owner.columns\n                .filter(c => (c.level < j &&\n                    c.headerType !== ExportHeaderType.MultiColumnHeader || c.level === j) && c.columnSpan > 0 && !c.skip)\n                .sort((a, b) => a.startIndex - b.startIndex)\n                .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n\n            let startValue = 0 + record.level;\n\n            for (const currentCol of headersForLevel) {\n                if (currentCol.level === j) {\n                    let columnCoordinate;\n                    columnCoordinate =\n                        ExcelStrings.getExcelColumn(startValue) + this.rowIndex;\n\n                    const columnValue = worksheetData.dataDictionary.saveValue(currentCol.header, true);\n                    row += `<c r=\"${columnCoordinate}\" s=\"3\" t=\"s\"><v>${columnValue}</v></c>`;\n\n                    if (j !== owner.maxLevel) {\n                        this.mergeCellsCounter++;\n                        this.mergeCellStr += ` <mergeCell ref=\"${columnCoordinate}:`;\n\n                        if (currentCol.headerType === ExportHeaderType.ColumnHeader) {\n                            columnCoordinate = ExcelStrings.getExcelColumn(startValue) +\n                                (this.rowIndex + owner.maxLevel - currentCol.level);\n                        } else {\n                            for (let k = 1; k < currentCol.columnSpan; k++) {\n                                columnCoordinate = ExcelStrings.getExcelColumn(startValue + k) + this.rowIndex;\n                                row += `<c r=\"${columnCoordinate}\" s=\"3\" />`;\n                            }\n                        }\n\n                        this.mergeCellStr += `${columnCoordinate}\" />`;\n                    }\n                }\n\n                startValue += currentCol.columnSpan;\n            }\n            row += `</row>`;\n            rowDataArr.push(row);\n        }\n    }\n\n    private processRow(worksheetData: WorksheetData, i: number, headersForLevel: any[], isHierarchicalGrid: boolean) {\n        const record = worksheetData.data[i];\n\n        const rowData = new Array(worksheetData.columnCount + 2);\n\n        const rowLevel = record.level;\n        const outlineLevel = rowLevel > 0 ? ` outlineLevel=\"${rowLevel}\"` : '';\n        this.maxOutlineLevel = this.maxOutlineLevel < rowLevel ? rowLevel : this.maxOutlineLevel;\n\n        const sHidden = record.hidden ? ` hidden=\"1\"` : '';\n\n        this.rowIndex++;\n        const pivotGridColumns = this.pivotGridRowHeadersMap.get(this.rowIndex) ?? \"\";\n\n        rowData[0] = `<row r=\"${this.rowIndex}\"${this.rowHeight}${outlineLevel}${sHidden}>${pivotGridColumns}`;\n        const keys = worksheetData.isSpecialData ? [record.data] : headersForLevel;\n        const isDataRecord = record.type === ExportRecordType.HierarchicalGridRecord\n            || record.type === ExportRecordType.DataRecord\n            || record.type === ExportRecordType.GroupedRecord\n            || record.type === ExportRecordType.TreeGridRecord;\n\n        const isValidRecordType = isDataRecord || record.type === ExportRecordType.SummaryRecord;\n\n        if (isValidRecordType && worksheetData.hasSummaries) {\n            this.resolveSummaryDimensions(record, isDataRecord, worksheetData.isGroupedGrid)\n        }\n\n        for (let j = 0; j < keys.length; j++) {\n            const col = j + (isHierarchicalGrid ? rowLevel : worksheetData.isPivotGrid ? worksheetData.owner.maxRowLevel : 0);\n\n            const cellData = this.getCellData(worksheetData, i, col, keys[j]);\n\n            rowData[j + 1] = cellData;\n        }\n\n        rowData[keys.length + 1] = '</row>';\n\n        return rowData.join('');\n    }\n\n    private getCellData(worksheetData: WorksheetData, row: number, column: number, key: string): string {\n        const dictionary = worksheetData.dataDictionary;\n        let columnName = ExcelStrings.getExcelColumn(column) + (this.rowIndex);\n        const fullRow = worksheetData.data[row];\n        const isHeaderRecord = fullRow.type === ExportRecordType.HeaderRecord;\n        const isSummaryRecord = fullRow.type === ExportRecordType.SummaryRecord;\n        const isValidRecordType = fullRow.type === ExportRecordType.GroupedRecord\n            || fullRow.type === ExportRecordType.DataRecord\n            || fullRow.type === ExportRecordType.HierarchicalGridRecord\n            || fullRow.type === ExportRecordType.TreeGridRecord;\n\n        this.firstDataRow = this.firstDataRow > this.rowIndex ? this.rowIndex : this.firstDataRow;\n\n        const cellValue = worksheetData.isSpecialData ?\n            fullRow.data :\n            fullRow.data[key];\n\n        if (cellValue === GRID_LEVEL_COL || key === GRID_LEVEL_COL) {\n            columnName = ExcelStrings.getExcelColumn(worksheetData.columnCount + 1) + (this.rowIndex);\n        }\n\n        if (worksheetData.hasSummaries && (isValidRecordType || (worksheetData.isGroupedGrid && isSummaryRecord))) {\n            this.setSummaryCoordinates(columnName, key, fullRow.hierarchicalOwner, worksheetData.isGroupedGrid && isSummaryRecord)\n        }\n\n        if (fullRow.summaryKey && fullRow.summaryKey === GRID_ROOT_SUMMARY && key !== GRID_LEVEL_COL && worksheetData.isGroupedGrid) {\n            this.setRootSummaryStartCoordinate(column, key);\n\n            if (this.firstColumn > column) {\n                this.setRootSummaryStartCoordinate(worksheetData.columnCount + 1, GRID_LEVEL_COL);\n                this.firstColumn = column;\n            }\n        }\n\n        const targetColArr = Array.from(worksheetData.owners.values()).map(arr => arr.columns).find(product => product.some(item => item.field === key));\n        const targetCol = targetColArr ? targetColArr.find(col => col.field === key) : undefined;\n\n        if ((cellValue === undefined || cellValue === null) && !worksheetData.hasSummaries) {\n            return `<c r=\"${columnName}\" s=\"1\"/>`;\n        } else if ((worksheetData.hasSummaries && (isValidRecordType || isHeaderRecord)) || !worksheetData.hasSummaries) {\n            const savedValue = dictionary.saveValue(cellValue, isHeaderRecord);\n            const isSavedAsString = savedValue !== -1;\n\n            const isSavedAsDate = !isSavedAsString && cellValue instanceof Date;\n\n            let value = isSavedAsString ? savedValue : cellValue;\n\n            if (isSavedAsDate) {\n                const timeZoneOffset = value.getTimezoneOffset() * 60000;\n                const isoString = (new Date(value - timeZoneOffset)).toISOString();\n                value = isoString.substring(0, isoString.indexOf('.'));\n            }\n\n            const type = isSavedAsString ? ` t=\"s\"` : isSavedAsDate ? ` t=\"d\"` : '';\n\n            const isTime = targetCol?.dataType === 'time';\n            const isDateTime = targetCol?.dataType === 'dateTime';\n            const isPercentage = targetCol?.dataType === 'percent';\n            const isColumnCurrencyType = targetCol?.dataType === 'currency';\n\n            const format = isPercentage ? ` s=\"12\"` : isDateTime ? ` s=\"11\"` : isTime ? ` s=\"10\"` : isHeaderRecord ? ` s=\"3\"` : isSavedAsString ? '' : isSavedAsDate ? ` s=\"2\"` : isColumnCurrencyType ? ` s=\"${this.currencyStyleMap.get(targetCol.currencyCode)?.styleXf || 0}\"` : ` s=\"1\"`;\n\n            return `<c r=\"${columnName}\"${type}${format}><v>${value}</v></c>`;\n        } else {\n            let summaryFunc = `\"${cellValue ?? \"\"}\"`;\n\n            if (isSummaryRecord && cellValue) {\n                const dimensionMapKey = this.isValidGrid ? fullRow.hierarchicalOwner ?? GRID_PARENT : null;\n                const level = worksheetData.isGroupedGrid ? worksheetData.maxLevel : fullRow.level;\n\n                summaryFunc = this.getSummaryFunction(cellValue.label, key, dimensionMapKey, level, targetCol);\n\n                if (!summaryFunc) {\n                    let summaryValue;\n                    const label = cellValue.label?.toString();\n                    const value = cellValue.value?.toString();\n\n                    if (label && value) {\n                        summaryValue = `${cellValue.label}: ${cellValue.value}`;\n                    } else if (label) {\n                        summaryValue = cellValue.label;\n                    } else if (value) {\n                        summaryValue = cellValue.value;\n                    }\n\n                    const savedValue = dictionary.saveValue(summaryValue, false);\n                    const isSavedAsString = savedValue !== -1;\n                    const isSavedAsDate = !isSavedAsString && summaryValue instanceof Date;\n\n                    if (isSavedAsDate) {\n                        const timeZoneOffset = summaryValue.getTimezoneOffset() * 60000;\n                        const isoString = (new Date(summaryValue - timeZoneOffset)).toISOString();\n                        summaryValue = isoString.substring(0, isoString.indexOf('.'));\n                    }\n\n                    const resolvedValue = isSavedAsString ? savedValue : summaryValue;\n                    const type = isSavedAsString ? `t=\"s\"` : isSavedAsDate ? `t=\"d\"` : '';\n                    const style = isSavedAsDate ? `s=\"2\"` : `s=\"1\"`;\n\n                    return `<c r=\"${columnName}\" ${type} ${style}><v>${resolvedValue}</v></c>`;\n                }\n\n                return `<c r=\"${columnName}\"><f t=\"array\" ref=\"${columnName}\">${summaryFunc}</f></c>`;\n            }\n\n            return `<c r=\"${columnName}\" s=\"1\"><f>${summaryFunc}</f></c>`;\n        }\n    }\n\n    private resolveSummaryDimensions(record: IExportRecord, isDataRecord: boolean, isGroupedGrid: boolean) {\n        if (this.isValidGrid &&\n            this.currentHierarchicalOwner !== '' &&\n            this.currentHierarchicalOwner !== record.owner &&\n            !this.hierarchicalDimensionMap.get(this.currentHierarchicalOwner)) {\n            this.hierarchicalDimensionMap.set(this.currentHierarchicalOwner, new Map(this.dimensionMap))\n        }\n\n        if (isDataRecord) {\n            if (this.currentSummaryOwner !== record.summaryKey || this.currentHierarchicalOwner !== record.hierarchicalOwner) {\n                this.dimensionMap.clear();\n            }\n\n            this.currentSummaryOwner = record.summaryKey;\n\n            // For grouped grid we need to reset the parent map\n            // so we can change the startCoordinate for each record\n            if (isGroupedGrid && this.currentHierarchicalOwner !== '' && record.hierarchicalOwner === GRID_PARENT) {\n                this.hierarchicalDimensionMap.delete(GRID_PARENT)\n            }\n\n            this.currentHierarchicalOwner = record.hierarchicalOwner;\n        }\n    }\n\n    private setSummaryCoordinates(columnName: string, key: string, hierarchicalOwner: string, useLastValidEndCoordinate: boolean) {\n        const targetDimensionMap = this.hierarchicalDimensionMap.get(hierarchicalOwner) ?? this.dimensionMap;\n\n        if (!targetDimensionMap.get(key)) {\n            const initialDimensions: Dimensions = {\n                startCoordinate: columnName,\n                endCoordinate: columnName\n            };\n\n            targetDimensionMap.set(key, initialDimensions)\n        } else {\n            if (useLastValidEndCoordinate) {\n                this.setEndCoordinates(targetDimensionMap, true);\n            } else {\n                targetDimensionMap.get(key).endCoordinate = columnName;\n                this.lastValidRow = targetDimensionMap.get(key).endCoordinate.match(/[a-z]+|[^a-z]+/gi)[1]\n            }\n        }\n\n        if (this.isValidGrid && !useLastValidEndCoordinate && hierarchicalOwner !== GRID_PARENT) {\n            const parentMap = this.hierarchicalDimensionMap.get(GRID_PARENT);\n            this.setEndCoordinates(parentMap);\n        }\n    }\n\n    private setEndCoordinates(map: Map<string, Dimensions>, useLastValidEndCoordinate = false) {\n        for (const a of map.values()) {\n            const colName = a.endCoordinate.match(/[a-z]+|[^a-z]+/gi)[0];\n            a.endCoordinate = `${colName}${useLastValidEndCoordinate ? this.lastValidRow : this.rowIndex}`;\n         }\n    }\n\n    private getSummaryFunction(type: string, key: string, dimensionMapKey: any, recordLevel: number, col: IColumnInfo): string {\n        const dimensionMap = dimensionMapKey ? this.hierarchicalDimensionMap.get(dimensionMapKey) : this.dimensionMap;\n        const dimensions = dimensionMap.get(key);\n        const levelDimensions = dimensionMap.get(GRID_LEVEL_COL);\n\n        let func = '';\n        let funcType = '';\n        let result = '';\n        const currencyInfo = this.currencyStyleMap.get(col.currencyCode);\n\n        switch(type?.toString().toLowerCase()) {\n            case \"count\":\n                return `\"Count: \"&amp;_xlfn.COUNTIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel})`\n            case \"min\":\n                func = `_xlfn.MIN(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate}))`\n                funcType = `\"Min: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"max\":\n                func = `_xlfn.MAX(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate}))`\n                funcType = `\"Max: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"sum\":\n                func =  `_xlfn.SUMIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})`\n                funcType = `\"Sum: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"avg\":\n                func = `_xlfn.AVERAGEIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})`\n                funcType = `\"Avg: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"earliest\":\n                // TODO: get date format from locale\n                return `\"Earliest: \"&amp;_xlfn.TEXT(_xlfn.MIN(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})), \"m/d/yyyy\")`\n            case \"latest\":\n                // TODO: get date format from locale\n                return `\"Latest: \"&amp;_xlfn.TEXT(_xlfn.MAX(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})), \"m/d/yyyy\")`\n        }\n    }\n\n    private setRootSummaryStartCoordinate(column: number, key: string) {\n        const firstDataRecordColName = ExcelStrings.getExcelColumn(column) + (this.firstDataRow);\n        const targetMap = this.hierarchicalDimensionMap.get(GRID_PARENT);\n\n        if (targetMap.get(key).startCoordinate !== firstDataRecordColName) {\n            targetMap.get(key).startCoordinate = firstDataRecordColName;\n        }\n    }\n\n    private printHeaders(worksheetData: WorksheetData, headersForLevel: IColumnInfo[], i: number, isVertical: boolean) {\n        let startValue = 0;\n        let str = '';\n\n        const isHierarchicalGrid = worksheetData.isHierarchical;\n        let rowStyle = isHierarchicalGrid ? ' s=\"3\"' : '';\n        const dictionary = worksheetData.dataDictionary;\n        const owner = worksheetData.owner;\n        const maxLevel = isVertical\n            ? owner.maxRowLevel\n            : owner.maxLevel;\n\n        for (const currentCol of headersForLevel) {\n            const spanLength = isVertical ? currentCol.rowSpan : currentCol.columnSpan;\n\n            if (currentCol.level === i && currentCol.headerType !== ExportHeaderType.PivotMergedHeader) {\n                let columnCoordinate;\n                const column = isVertical\n                    ? this.rowIndex\n                    : startValue + (owner.maxRowLevel ?? 0)\n\n                let rowCoordinate = isVertical\n                    ? startValue + owner.maxLevel + 2\n                    : this.rowIndex\n                if (currentCol.headerType === ExportHeaderType.PivotRowHeader) {\n                    rowCoordinate = startValue + 1;\n                }\n                const columnValue = dictionary.saveValue(currentCol.header, true, false);\n\n                columnCoordinate = (currentCol.field === GRID_LEVEL_COL\n                    ? ExcelStrings.getExcelColumn(worksheetData.columnCount + 1)\n                    : ExcelStrings.getExcelColumn(column)) + rowCoordinate;\n\n                rowStyle = isVertical && currentCol.rowSpan > 1 ? ' s=\"4\"' : rowStyle;\n                str = `<c r=\"${columnCoordinate}\"${rowStyle} t=\"s\"><v>${columnValue}</v></c>`;\n\n                if (isVertical) {\n                    if (this.pivotGridRowHeadersMap.has(rowCoordinate)) {\n                        this.pivotGridRowHeadersMap.set(rowCoordinate, this.pivotGridRowHeadersMap.get(rowCoordinate) + str)\n                    } else {\n                        this.pivotGridRowHeadersMap.set(rowCoordinate, str)\n                    }\n                } else {\n                    this.sheetData += str;\n                }\n\n                if (i !== maxLevel) {\n                    this.mergeCellsCounter++;\n                    this.mergeCellStr += ` <mergeCell ref=\"${columnCoordinate}:`;\n\n                    if (currentCol.headerType === ExportHeaderType.ColumnHeader) {\n                        const col = isVertical\n                            ? maxLevel\n                            : startValue + (owner.maxRowLevel ?? 0);\n\n                        const row = isVertical\n                            ? rowCoordinate\n                            : owner.maxLevel + 1;\n\n                        columnCoordinate = ExcelStrings.getExcelColumn(col) + row;\n                    } else {\n                        for (let k = 1; k < spanLength; k++) {\n                            const col = isVertical\n                                ? column\n                                : column + k;\n\n                            const row = isVertical\n                                ? rowCoordinate + k\n                                : this.rowIndex;\n\n                            columnCoordinate = ExcelStrings.getExcelColumn(col) + row;\n                            str = `<c r=\"${columnCoordinate}\"${rowStyle} />`;\n\n                            isVertical\n                                ? this.pivotGridRowHeadersMap.set(row, str)\n                                : this.sheetData += str\n                        }\n                    }\n                    if ((currentCol.headerType === ExportHeaderType.RowHeader || currentCol.headerType === ExportHeaderType.MultiRowHeader) &&\n                        currentCol.columnSpan && currentCol.columnSpan > 1 ) {\n                        columnCoordinate = ExcelStrings.getExcelColumn(column + currentCol.columnSpan - 1) + (rowCoordinate + spanLength - 1);\n                    }\n\n                    this.mergeCellStr += `${columnCoordinate}\" />`;\n                }\n            }\n            if (currentCol.headerType !== ExportHeaderType.PivotRowHeader) {\n                startValue += spanLength;\n            }\n        }\n    }\n}\n\n/**\n * @hidden\n */\nexport class StyleFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['styles.xml'] = strToU8(ExcelStrings.getStyles());\n    }\n}\n\n/**\n * @hidden\n */\nexport class WorkbookFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        folder['workbook.xml'] = strToU8(ExcelStrings.getWorkbook(worksheetData.options.worksheetName));\n    }\n}\n\n/**\n * @hidden\n */\nexport class ContentTypesFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const hasSharedStrings = !worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders;\n        folder['[Content_Types].xml'] = strToU8(ExcelStrings.getContentTypesXML(hasSharedStrings, worksheetData.options.exportAsTable));\n    }\n}\n\n/**\n * @hidden\n */\nexport class SharedStringsFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const dict = worksheetData.dataDictionary;\n        const sortedValues = dict.getKeys();\n        const sharedStrings = new Array<string>(sortedValues.length);\n\n        for (const value of sortedValues) {\n            sharedStrings[dict.getSanitizedValue(value)] = '<si><t>' + value + '</t></si>';\n        }\n\n        folder['sharedStrings.xml'] = strToU8(ExcelStrings.getSharedStringXML(\n                        dict.stringsCount,\n                        sortedValues.length,\n                        sharedStrings.join(''))\n                    );\n    }\n}\n\n/**\n * @hidden\n */\nexport class TablesFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const columnCount = worksheetData.columnCount;\n        const lastColumn = ExcelStrings.getExcelColumn(columnCount - 1) + worksheetData.rowCount;\n        const autoFilterDimension = 'A1:' + lastColumn;\n        const tableDimension = worksheetData.isEmpty\n            ? 'A1:' + ExcelStrings.getExcelColumn(columnCount - 1) + (worksheetData.rowCount + 1)\n            : autoFilterDimension;\n        const hasUserSetIndex = worksheetData.owner.columns.some(c => c.exportIndex !== undefined);\n        const values = hasUserSetIndex\n            ? worksheetData.rootKeys\n            : worksheetData.owner.columns\n                .filter(c => !c.skip)\n                .sort((a, b) => a.startIndex - b.startIndex)\n                .sort((a, b) => a.pinnedIndex - b.pinnedIndex)\n                .map(c => c.header);\n\n        let sortString = '';\n\n        let tableColumns = '<tableColumns count=\"' + columnCount + '\">';\n        for (let i = 0; i < columnCount; i++) {\n            const value =  values[i];\n            tableColumns += '<tableColumn id=\"' + (i + 1) + '\" name=\"' + value + '\"/>';\n        }\n\n        tableColumns += '</tableColumns>';\n\n        if (worksheetData.sort) {\n            const sortingExpression = worksheetData.sort;\n            const sc = ExcelStrings.getExcelColumn(values.indexOf(sortingExpression.fieldName));\n            const dir = sortingExpression.dir - 1;\n            sortString = `<sortState ref=\"A2:${lastColumn}\"><sortCondition descending=\"${dir}\" ref=\"${sc}1:${sc}15\"/></sortState>`;\n        }\n\n        folder['table1.xml'] = strToU8(ExcelStrings.getTablesXML(autoFilterDimension, tableDimension, tableColumns, sortString));\n    }\n}\n\n/**\n * @hidden\n */\nexport class WorksheetRelsFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['sheet1.xml.rels'] = strToU8(ExcelStrings.getWorksheetRels());\n    }\n}\n","import {\n    ExcelFileTypes,\n    ExcelFolderTypes\n} from './excel-enums';\n\nimport { IExcelFolder } from './excel-interfaces';\nimport { WorksheetData } from './worksheet-data';\n\n/** @hidden */\nexport class RootExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  '';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.ContentTypesFile];\n    }\n\n    public childFolders() {\n        return [\n            ExcelFolderTypes.RootRelsExcelFolder,\n            ExcelFolderTypes.DocPropsExcelFolder,\n            ExcelFolderTypes.XLExcelFolder\n        ];\n    }\n}\n\n/** @hidden */\nexport class RootRelsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  '_rels';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.RootRelsFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class DocPropsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'docProps';\n    }\n\n    public childFiles() {\n        return [\n            ExcelFileTypes.AppFile,\n            ExcelFileTypes.CoreFile\n        ];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class XLExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'xl';\n    }\n\n    public childFiles(data: WorksheetData) {\n        const retVal = [\n            ExcelFileTypes.StyleFile,\n            ExcelFileTypes.WorkbookFile\n        ];\n\n        if (!data.isEmpty || data.options.alwaysExportHeaders) {\n            retVal.push(ExcelFileTypes.SharedStringsFile);\n        }\n\n        return retVal;\n    }\n\n    public childFolders(data: WorksheetData) {\n        const retVal = [\n            ExcelFolderTypes.XLRelsExcelFolder,\n            ExcelFolderTypes.ThemeExcelFolder,\n            ExcelFolderTypes.WorksheetsExcelFolder\n        ];\n\n        if ((!data.isEmpty || data.options.alwaysExportHeaders) && data.options.exportAsTable) {\n            retVal.push(ExcelFolderTypes.TablesExcelFolder);\n        }\n\n        return retVal;\n    }\n}\n\n/** @hidden */\nexport class XLRelsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  '_rels';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.WorkbookRelsFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class ThemeExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'theme';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.ThemeFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class WorksheetsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'worksheets';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.WorksheetFile];\n    }\n\n    public childFolders(data: WorksheetData) {\n        return (data.isEmpty && !data.options.alwaysExportHeaders) || !data.options.exportAsTable ? [] : [ExcelFolderTypes.WorksheetsRelsExcelFolder];\n    }\n}\n\n/** @hidden */\nexport class TablesExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return 'tables';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.TablesFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class WorksheetsRelsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return '_rels';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.WorksheetRelsFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n","import {\n    ExcelFileTypes,\n    ExcelFolderTypes\n} from './excel-enums';\n\nimport {\n    AppFile,\n    ContentTypesFile,\n    CoreFile,\n    RootRelsFile,\n    SharedStringsFile,\n    StyleFile,\n    TablesFile,\n    ThemeFile,\n    WorkbookFile,\n    WorkbookRelsFile,\n    WorksheetFile,\n    WorksheetRelsFile\n} from './excel-files';\n\nimport {\n    DocPropsExcelFolder,\n    RootExcelFolder,\n    RootRelsExcelFolder,\n    TablesExcelFolder,\n    ThemeExcelFolder,\n    WorksheetsExcelFolder,\n    WorksheetsRelsExcelFolder,\n    XLExcelFolder,\n    XLRelsExcelFolder\n} from './excel-folders';\n\nimport {\n    IExcelFile,\n    IExcelFolder\n} from './excel-interfaces';\n\n/** @hidden */\nexport class ExcelElementsFactory {\n\n    public static getExcelFolder(type: ExcelFolderTypes): IExcelFolder {\n        switch (type) {\n            case ExcelFolderTypes.RootExcelFolder:\n                return new RootExcelFolder();\n            case ExcelFolderTypes.RootRelsExcelFolder:\n                return new RootRelsExcelFolder();\n            case ExcelFolderTypes.DocPropsExcelFolder:\n                return new DocPropsExcelFolder();\n            case ExcelFolderTypes.XLExcelFolder:\n                return new XLExcelFolder();\n            case ExcelFolderTypes.XLRelsExcelFolder:\n                return new XLRelsExcelFolder();\n            case ExcelFolderTypes.ThemeExcelFolder:\n                return new ThemeExcelFolder();\n            case ExcelFolderTypes.WorksheetsExcelFolder:\n                return  new WorksheetsExcelFolder();\n            case ExcelFolderTypes.WorksheetsRelsExcelFolder:\n                return new WorksheetsRelsExcelFolder();\n            case ExcelFolderTypes.TablesExcelFolder:\n                return new TablesExcelFolder();\n            default:\n                throw new Error('Unknown excel folder type!');\n        }\n    }\n\n    public static getExcelFile(type: ExcelFileTypes): IExcelFile {\n        switch (type) {\n            case ExcelFileTypes.RootRelsFile:\n                return  new RootRelsFile();\n            case ExcelFileTypes.AppFile:\n                return  new AppFile();\n            case ExcelFileTypes.CoreFile:\n                return new CoreFile();\n            case ExcelFileTypes.WorkbookRelsFile:\n                return new WorkbookRelsFile();\n            case ExcelFileTypes.ThemeFile:\n                return new ThemeFile();\n            case ExcelFileTypes.WorksheetFile:\n                return new WorksheetFile();\n            case ExcelFileTypes.StyleFile:\n                return new StyleFile();\n            case ExcelFileTypes.WorkbookFile:\n                return new WorkbookFile();\n            case ExcelFileTypes.ContentTypesFile:\n                return new ContentTypesFile();\n            case ExcelFileTypes.SharedStringsFile:\n                return new SharedStringsFile();\n            case ExcelFileTypes.WorksheetRelsFile:\n                return new WorksheetRelsFile();\n            case ExcelFileTypes.TablesFile:\n                return new TablesFile();\n            default:\n                throw Error('Unknown excel file type!');\n        }\n    }\n}\n","import { ExportUtilities } from '../exporter-common/export-utilities';\n\n/** @hidden */\nexport class WorksheetDataDictionary {\n    private static DEFAULT_FONT = '11pt Calibri';\n    private static TEXT_PADDING = 5;\n\n    public hasNumberValues = false;\n    public hasDateValues = false;\n\n    public stringsCount: number;\n\n    private _dictionary: any;\n    private _widthsDictionary: any;\n\n    private _keys: string[];\n    private _keysAreValid: boolean;\n\n    private _counter: number;\n    private _columnWidths: number[];\n    private _context: any;\n\n    constructor(columnCount: number, columnWidth: number, columnWidthsList: number[]) {\n        this._dictionary = {};\n        this._widthsDictionary = {};\n        this._counter = 0;\n        this.dirtyKeyCollections();\n\n        this._columnWidths = new Array<number>(columnCount);\n\n        if (columnWidth) {\n            this._columnWidths.fill(columnWidth);\n        } else {\n            this._columnWidths = columnWidthsList;\n        }\n\n        this.stringsCount = 0;\n    }\n\n    public get columnWidths() {\n        return this._columnWidths;\n    }\n\n    public saveValue(value: any, isHeader: boolean, shouldSanitizeValue = true): number {\n        let sanitizedValue = '';\n        const isDate = value instanceof Date;\n        const isSavedAsString = isHeader || (typeof value !== 'number' && value !== Number(value) && !Number.isFinite(value) && !isDate);\n\n        if (isSavedAsString) {\n            sanitizedValue = shouldSanitizeValue ? ExportUtilities.sanitizeValue(value) : value;\n\n            if (this._dictionary[sanitizedValue] === undefined) {\n                this._dictionary[sanitizedValue] = this._counter++;\n                this.dirtyKeyCollections();\n            }\n\n            this.stringsCount ++;\n        } else if (isDate) {\n            this.hasDateValues = true;\n        } else {\n            this.hasNumberValues = true;\n        }\n\n        return isSavedAsString ? this.getSanitizedValue(sanitizedValue) : -1;\n    }\n\n    public getValue(value: string): number {\n        return this.getSanitizedValue(ExportUtilities.sanitizeValue(value));\n    }\n\n    public getSanitizedValue(sanitizedValue: string): number {\n        return this._dictionary[sanitizedValue];\n    }\n\n    public getKeys(): string[] {\n        if (!this._keysAreValid) {\n            this._keys = Object.keys(this._dictionary);\n            this._keysAreValid = true;\n        }\n\n        return this._keys;\n    }\n\n    private getTextWidth(value: any): number {\n        if (this._widthsDictionary[value] === undefined) {\n            const context = this.getContext();\n            const metrics = context.measureText(value);\n            this._widthsDictionary[value] = metrics.width + WorksheetDataDictionary.TEXT_PADDING;\n        }\n\n        return this._widthsDictionary[value];\n    }\n\n    private getContext(): any {\n        if (!this._context) {\n            const canvas = globalThis.document?.createElement('canvas');\n            this._context = canvas.getContext('2d');\n            this._context.font = WorksheetDataDictionary.DEFAULT_FONT;\n        }\n\n        return this._context;\n    }\n\n    private dirtyKeyCollections(): void {\n        this._keysAreValid = false;\n    }\n}\n","import { ExportHeaderType, ExportRecordType, IColumnList, IExportRecord } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { IgxExcelExporterOptions } from './excel-exporter-options';\nimport { WorksheetDataDictionary } from './worksheet-data-dictionary';\n\n/** @hidden */\nexport class WorksheetData {\n    private _rowCount: number;\n    private _dataDictionary: WorksheetDataDictionary;\n    private _isSpecialData: boolean;\n    private _hasMultiColumnHeader: boolean;\n    private _hasMultiRowHeader: boolean;\n    private _isHierarchical: boolean;\n    private _hasSummaries: boolean;\n    private _isPivotGrid: boolean;\n    private _isTreeGrid: boolean;\n    private _isGroupedGrid: boolean;\n\n    constructor(private _data: IExportRecord[],\n                public options: IgxExcelExporterOptions,\n                public sort: any,\n                public columnCount: number,\n                public rootKeys: string[],\n                public indexOfLastPinnedColumn: number,\n                public columnWidths: number[],\n                public owner: IColumnList,\n                public owners: Map<any, IColumnList>) {\n            this.initializeData();\n    }\n\n    public get data(): IExportRecord[] {\n        return this._data;\n    }\n\n    public get rowCount(): number {\n        return this._rowCount;\n    }\n\n    public get isEmpty(): boolean {\n        return !this.rowCount\n            || this.rowCount === this.owner.maxLevel + 1\n            || !this.columnCount\n            || this.owner.columns.every(c => c.skip);\n    }\n\n    public get isSpecialData(): boolean {\n        return this._isSpecialData;\n    }\n\n    public get dataDictionary(): WorksheetDataDictionary {\n        return this._dataDictionary;\n    }\n\n    public get hasMultiColumnHeader(): boolean {\n        return this._hasMultiColumnHeader;\n    }\n\n    public get hasSummaries(): boolean {\n        return this._hasSummaries;\n    }\n\n    public get hasMultiRowHeader(): boolean {\n        return this._hasMultiRowHeader;\n    }\n\n    public get isHierarchical(): boolean {\n        return this._isHierarchical;\n    }\n\n    public get isTreeGrid(): boolean {\n        return this._isTreeGrid;\n    }\n\n    public get isPivotGrid(): boolean {\n        return this._isPivotGrid;\n    }\n\n    public get isGroupedGrid(): boolean {\n        return this._data.some(d => d.type === ExportRecordType.GroupedRecord);\n    }\n\n    public get maxLevel(): number {\n        return [...new Set(this._data.map(item => item.level))].sort((a,b) => (a > b ? -1 : 1))[0];\n    }\n\n    public get multiColumnHeaderRows(): number {\n        return !this.options.ignoreMultiColumnHeaders ? Array.from(this.owners.values()).map(c => c.maxLevel).reduce((a,b) => a + b) : 0;\n    }\n\n    private initializeData() {\n        this._dataDictionary = new WorksheetDataDictionary(this.columnCount, this.options.columnWidth, this.columnWidths);\n\n        this._hasMultiColumnHeader = Array.from(this.owners.values())\n            .some(o => o.columns.some(col => !col.skip && col.headerType === ExportHeaderType.MultiColumnHeader));\n\n        this._hasMultiRowHeader = Array.from(this.owners.values())\n            .some(o => o.columns.some(col => !col.skip && col.headerType === ExportHeaderType.MultiRowHeader));\n\n        this._isHierarchical = this.data[0]?.type === ExportRecordType.HierarchicalGridRecord\n            || !(typeof(Array.from(this.owners.keys())[0]) === 'string');\n\n        this._hasSummaries = this._data.filter(d => d.type === ExportRecordType.SummaryRecord).length > 0;\n\n        this._isTreeGrid = this._data.filter(d => d.type === ExportRecordType.TreeGridRecord).length > 0;\n\n        this._isPivotGrid = this.data[0]?.type === ExportRecordType.PivotGridRecord;\n\n        const exportMultiColumnHeaders = this._hasMultiColumnHeader && !this.options.ignoreMultiColumnHeaders;\n\n        if (this._isHierarchical || exportMultiColumnHeaders || this._isPivotGrid) {\n            this.options.exportAsTable = false;\n        }\n\n        if (!this._data || this._data.length === 0) {\n            if (!this._isHierarchical) {\n                this._rowCount = this.owner.maxLevel + 1;\n            }\n\n            return;\n        }\n\n        this._isSpecialData = ExportUtilities.isSpecialData(this._data[0].data);\n        this._rowCount = this._data.length + this.multiColumnHeaderRows + 1;\n    }\n}\n","import { zip } from 'fflate';\n\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { ExcelElementsFactory } from './excel-elements-factory';\nimport { ExcelFolderTypes } from './excel-enums';\nimport { IgxExcelExporterOptions } from './excel-exporter-options';\nimport { IExcelFolder } from './excel-interfaces';\nimport { ExportRecordType, IExportRecord, IgxBaseExporter, DEFAULT_OWNER, ExportHeaderType, GRID_LEVEL_COL } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { WorksheetData } from './worksheet-data';\nimport { IBaseEventArgs } from '../../core/utils';\nimport { WorksheetFile } from './excel-files';\n\nexport interface IExcelExportEndedEventArgs extends IBaseEventArgs {\n    xlsx?: Object\n}\n\nconst EXCEL_MAX_ROWS = 1048576;\nconst EXCEL_MAX_COLS = 16384;\n\n/**\n * **Ignite UI for Angular Excel Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter_excel.html)\n *\n * The Ignite UI for Angular Excel Exporter service can export data in Microsoft® Excel® format from both raw data\n * (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n *   { Name: \"Eric Ridley\", Age: \"26\" },\n *   { Name: \"Alanis Brook\", Age: \"22\" },\n *   { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private excelExportService: IgxExcelExporterService) {\n * }\n *\n * this.excelExportService.exportData(this.localData, new IgxExcelExporterOptions(\"FileName\"));\n * ```\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxExcelExporterService extends IgxBaseExporter {\n\n    /**\n     * This event is emitted when the export process finishes.\n     * ```typescript\n     * this.exporterService.exportEnded.subscribe((args: IExcelExportEndedEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxExcelExporterService\n     */\n    public override exportEnded = new EventEmitter<IExcelExportEndedEventArgs>();\n\n    private static async populateZipFileConfig(fileStructure: Object, folder: IExcelFolder, worksheetData: WorksheetData) {\n        for (const childFolder of folder.childFolders(worksheetData)) {\n            const folderInstance = ExcelElementsFactory.getExcelFolder(childFolder);\n            const childStructure = fileStructure[folderInstance.folderName] = {};\n            await IgxExcelExporterService.populateZipFileConfig(childStructure, folderInstance, worksheetData);\n        }\n\n        for (const childFile of folder.childFiles(worksheetData)) {\n            const fileInstance = ExcelElementsFactory.getExcelFile(childFile);\n            if (fileInstance instanceof WorksheetFile) {\n                await (fileInstance as WorksheetFile).writeElementAsync(fileStructure, worksheetData);\n            } else {\n                fileInstance.writeElement(fileStructure, worksheetData);\n            }\n        }\n    }\n\n    protected exportDataImplementation(data: IExportRecord[], options: IgxExcelExporterOptions, done: () => void): void {\n        const firstDataElement = data[0];\n        const isHierarchicalGrid = firstDataElement?.type === ExportRecordType.HierarchicalGridRecord;\n        const isPivotGrid = firstDataElement?.type === ExportRecordType.PivotGridRecord;\n\n        let rootKeys;\n        let columnCount;\n        let columnWidths;\n        let indexOfLastPinnedColumn;\n        let defaultOwner;\n\n        const columnsExceedLimit = typeof firstDataElement !== 'undefined' ?\n            isHierarchicalGrid ?\n                data.some(d => Object.keys(d.data).length > EXCEL_MAX_COLS) :\n                Object.keys(firstDataElement.data).length > EXCEL_MAX_COLS :\n            false;\n\n        if (data.length > EXCEL_MAX_ROWS || columnsExceedLimit) {\n            throw Error('The Excel file can contain up to 1,048,576 rows and 16,384 columns.');\n        }\n\n        if (typeof firstDataElement !== 'undefined') {\n            let maxLevel = 0;\n\n            data.forEach((r) => {\n                maxLevel = Math.max(maxLevel, r.level);\n            });\n\n            if (maxLevel > 7) {\n                throw Error('Can create an outline of up to eight levels!');\n            }\n\n            if (isHierarchicalGrid) {\n                columnCount = data\n                    .map(a => this._ownersMap.get(a.owner).columns.filter(c => !c.skip).length + a.level)\n                    .sort((a, b) => b - a)[0];\n\n                rootKeys = this._ownersMap.get(firstDataElement.owner).columns.filter(c => !c.skip).map(c => c.field);\n                defaultOwner = this._ownersMap.get(firstDataElement.owner);\n            } else {\n                defaultOwner = this._ownersMap.get(DEFAULT_OWNER);\n                const columns = defaultOwner.columns.filter(col => col.field !== GRID_LEVEL_COL && !col.skip && col.headerType === ExportHeaderType.ColumnHeader);\n\n                columnWidths = defaultOwner.columnWidths;\n                indexOfLastPinnedColumn = defaultOwner.indexOfLastPinnedColumn;\n                columnCount = isPivotGrid ? columns.length + this.pivotGridFilterFieldsCount : columns.length;\n                rootKeys = columns.map(c => c.field);\n            }\n        } else {\n            const ownersKeys = Array.from(this._ownersMap.keys());\n\n            defaultOwner = this._ownersMap.get(ownersKeys[0]);\n            columnWidths = defaultOwner.columnWidths;\n            columnCount = defaultOwner.columns.filter(col => col.field !== GRID_LEVEL_COL && !col.skip && col.headerType === ExportHeaderType.ColumnHeader).length;\n        }\n\n        const worksheetData =\n            new WorksheetData(data, options, this._sort, columnCount, rootKeys, indexOfLastPinnedColumn,\n                columnWidths, defaultOwner, this._ownersMap);\n\n        const rootFolder = ExcelElementsFactory.getExcelFolder(ExcelFolderTypes.RootExcelFolder);\n        const fileData = {};\n        IgxExcelExporterService.populateZipFileConfig(fileData, rootFolder, worksheetData)\n            .then(() => {\n                zip(fileData, (_, result) => {\n                    this.saveFile(result, options.fileName);\n                    this.exportEnded.emit({ xlsx: fileData });\n                    done();\n                });\n            });\n    }\n\n    private saveFile(data: Uint8Array, fileName: string): void {\n        const blob = new Blob([data], {\n            type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n        });\n\n        ExportUtilities.saveBlobToFile(blob, fileName);\n    }\n}\n","import { IgxExporterOptionsBase } from '../exporter-common/exporter-options-base';\n\n/**\n * Objects of this class are used to configure the Excel exporting process.\n */\nexport class IgxExcelExporterOptions extends IgxExporterOptionsBase {\n    /**\n     * Specifies if column pinning should be ignored. If ignoreColumnsOrder is set to true,\n     * this option will always be considered as set to true.\n     * ```typescript\n     * let ignorePinning = this.exportOptions.ignorePinning;\n     * this.exportOptions.ignorePinning = true;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public ignorePinning = false;\n\n    /**\n     * Specifies whether the exported data should be formatted as Excel table. (True by default)\n     * ```typescript\n     * let exportAsTable = this.exportOptions.exportAsTable;\n     * this.exportOptions.exportAsTable = false;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public exportAsTable = true;\n\n    private _columnWidth: number;\n    private _rowHeight: number;\n    private _worksheetName: string;\n\n    constructor(fileName: string) {\n        super(fileName, '.xlsx');\n    }\n\n    /**\n     * Gets the width of the columns in the exported excel file.\n     * ```typescript\n     * let width = this.exportOptions.columnWidth;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public get columnWidth(): number {\n        return this._columnWidth;\n    }\n\n    /**\n     * Sets the width of the columns in the exported excel file. If left unspecified,\n     * the width of the column or the default width of the excel columns will be used.\n     * ```typescript\n     * this.exportOptions.columnWidth = 55;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public set columnWidth(value: number) {\n        if (value < 0) {\n            throw Error('Invalid value for column width!');\n        }\n\n        this._columnWidth = value;\n    }\n\n    /**\n     * Gets the height of the rows in the exported excel file.\n     * ```typescript\n     * let height = this.exportOptions.rowHeight;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public get rowHeight(): number {\n        return this._rowHeight;\n    }\n\n    /**\n     * Sets the height of the rows in the exported excel file. If left unspecified or 0,\n     * the default height of the excel rows will be used.\n     * ```typescript\n     * this.exportOptions.rowHeight = 25;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public set rowHeight(value: number) {\n        if (value < 0) {\n            throw Error('Invalid value for row height!');\n        }\n\n        this._rowHeight = value;\n    }\n\n    /**\n     * Gets the name of the worksheet in the exported excel file.\n     * ```typescript\n     * let worksheetName = this.exportOptions.worksheetName;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public get worksheetName(): string {\n        if (this._worksheetName === undefined || this._worksheetName === null) {\n            return 'Sheet1';\n        }\n\n        return this._worksheetName;\n    }\n\n    /**\n     * Sets the name of the worksheet in the exported excel file.\n     * ```typescript\n     * this.exportOptions.worksheetName = \"Worksheet\";\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public set worksheetName(value: string) {\n        this._worksheetName = value;\n    }\n}\n","import { AnimationPlayer as AngularAnimationPlayer } from '@angular/animations';\nimport { EventEmitter } from '@angular/core';\nimport { IBaseEventArgs } from '../../core/utils';\nimport { AnimationPlayer } from './animation';\n\nexport class IgxAngularAnimationPlayer implements AnimationPlayer {\n    private _innerPlayer: AngularAnimationPlayer;\n    public animationStart: EventEmitter<IBaseEventArgs> = new EventEmitter<IBaseEventArgs>();\n    public animationEnd: EventEmitter<IBaseEventArgs> = new EventEmitter<IBaseEventArgs>();\n\n    public get position(): number {\n        return this._innerPlayer.getPosition();\n    }\n\n    public set position(value: number) {\n        this.internalPlayer.setPosition(value);\n    }\n\n    constructor(private internalPlayer: AngularAnimationPlayer) {\n        this.internalPlayer.onDone(() => this.onDone());\n        const innerRenderer = (this.internalPlayer as any)._renderer;\n        //  We need inner player as Angular.AnimationPlayer.getPosition returns always 0.\n        // To workaround this we are getting the positions from the inner player.\n        //  This is logged in Angular here - https://github.com/angular/angular/issues/18891\n        //  As soon as this is resolved we can remove this hack\n        const rendererEngine = innerRenderer.engine || innerRenderer.delegate.engine;\n        // A workaround because of Angular SSR is using some delegation.\n        this._innerPlayer = rendererEngine.players[rendererEngine.players.length - 1];\n    }\n\n    public init(): void {\n        this.internalPlayer.init();\n    }\n\n    public play(): void {\n        this.animationStart.emit({ owner: this });\n        this.internalPlayer.play();\n    }\n\n    public finish(): void {\n        this.internalPlayer.finish();\n        // TODO: when animation finish angular deletes all onDone handlers. Add handlers again if needed\n    }\n\n    public reset(): void {\n        this.internalPlayer.reset();\n        // calling reset does not change hasStarted to false. This is why we are doing it here via internal field\n        (this.internalPlayer as any)._started = false;\n    }\n\n    public destroy(): void {\n        this.internalPlayer.destroy();\n    }\n\n    public hasStarted(): boolean {\n        return this.internalPlayer.hasStarted();\n    }\n\n    private onDone(): void {\n        this.animationEnd.emit({ owner: this });\n    }\n}\n","import { AnimationBuilder, AnimationReferenceMetadata } from '@angular/animations';\nimport { Injectable } from '@angular/core';\nimport { IgxAngularAnimationPlayer } from './angular-animation-player';\nimport { AnimationService, AnimationPlayer } from './animation';\n\n@Injectable({providedIn: 'root'})\nexport class IgxAngularAnimationService implements AnimationService {\n    constructor(private builder: AnimationBuilder) { }\n    public buildAnimation(animationMetaData: AnimationReferenceMetadata, element: HTMLElement): AnimationPlayer {\n        if (!animationMetaData) {\n            return null;\n        }\n        const animationBuilder = this.builder.build(animationMetaData);\n        const player = new IgxAngularAnimationPlayer(animationBuilder.create(element));\n        return player;\n    }\n}\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { ComponentRef, ElementRef, Injector, NgZone } from '@angular/core';\nimport { CancelableBrowserEventArgs, CancelableEventArgs, cloneValue, IBaseEventArgs } from '../../core/utils';\nimport { IgxOverlayOutletDirective } from '../../directives/toggle/toggle.directive';\nimport { AnimationPlayer } from '../animation/animation';\nimport { IPositionStrategy } from './position/IPositionStrategy';\nimport { IScrollStrategy } from './scroll';\n\n/* blazorAlternateName: GridHorizontalAlignment */\nexport enum HorizontalAlignment {\n    Left = -1,\n    Center = -0.5,\n    Right = 0\n}\n\n/* blazorAlternateName: GridVerticalAlignment */\nexport enum VerticalAlignment {\n    Top = -1,\n    Middle = -0.5,\n    Bottom = 0\n}\n\n/**\n * Defines the possible values of the overlays' position strategy.\n */\nexport enum RelativePositionStrategy {\n    Connected = 'connected',\n    Auto = 'auto',\n    Elastic = 'elastic'\n}\n\n/**\n * Defines the possible positions for the relative overlay settings presets.\n */\nexport enum RelativePosition {\n    Above = 'above',\n    Below = 'below',\n    Before = 'before',\n    After = 'after',\n    Default = 'default'\n}\n\n/**\n * Defines the possible positions for the absolute overlay settings presets.\n */\nexport enum AbsolutePosition {\n    Bottom = 'bottom',\n    Top = 'top',\n    Center = 'center'\n}\n\n/**\n * Determines whether to add or set the offset values.\n */\nexport enum OffsetMode {\n    Add,\n    Set\n}\n\n// TODO: make this interface\nexport class Point {\n    constructor(public x: number, public y: number) { }\n}\n\n/** @hidden */\nexport interface OutOfViewPort {\n    /** Out of view port at Top or Left */\n    back: number;\n    /** Out of view port at Bottom or Right */\n    forward: number;\n}\n\nexport interface PositionSettings {\n    /** Direction in which the component should show */\n    horizontalDirection?: HorizontalAlignment;\n    /** Direction in which the component should show */\n    verticalDirection?: VerticalAlignment;\n    /** Target's starting point */\n    horizontalStartPoint?: HorizontalAlignment;\n    /** Target's starting point */\n    verticalStartPoint?: VerticalAlignment;\n    /* blazorSuppress */\n    /** Animation applied while overlay opens */\n    openAnimation?: AnimationReferenceMetadata;\n    /* blazorSuppress */\n    /** Animation applied while overlay closes */\n    closeAnimation?: AnimationReferenceMetadata;\n    /** The size up to which element may shrink when shown in elastic position strategy */\n    minSize?: Size;\n}\n\nexport interface OverlaySettings {\n    /** Attaching target for the component to show */\n    target?: Point | HTMLElement;\n    /** Position strategy to use with these settings */\n    positionStrategy?: IPositionStrategy;\n    /** Scroll strategy to use with these settings */\n    scrollStrategy?: IScrollStrategy;\n    /** Set if the overlay should be in modal mode */\n    modal?: boolean;\n    /** Set if the overlay should close on outside click */\n    closeOnOutsideClick?: boolean;\n    /** Set if the overlay should close when `Esc` key is pressed */\n    closeOnEscape?: boolean;\n    /* blazorSuppress */\n    /** Set the outlet container to attach the overlay to */\n    outlet?: IgxOverlayOutletDirective | ElementRef;\n    /**\n     * @hidden @internal\n     * Elements to be excluded for closeOnOutsideClick.\n     * Clicking on the elements in this collection will not close the overlay when closeOnOutsideClick = true.\n     */\n    excludeFromOutsideClick?: HTMLElement[];\n}\n\nexport interface OverlayEventArgs extends IBaseEventArgs {\n    /** Id of the overlay generated with `attach()` method */\n    id: string;\n    /** Available when `Type<T>` is provided to the `attach()` method and allows access to the created Component instance */\n    componentRef?: ComponentRef<any>;\n    /** Will provide the elementRef of the markup that will be displayed in the overlay */\n    elementRef?: ElementRef<any>;\n    /** Will provide the overlay settings which will be used when the component is attached */\n    settings?: OverlaySettings;\n    /** Will provide the original keyboard event if closed from ESC or click */\n    event?: Event;\n}\n\nexport interface OverlayCancelableEventArgs extends OverlayEventArgs, CancelableEventArgs {\n}\n\nexport interface OverlayClosingEventArgs extends OverlayEventArgs, CancelableBrowserEventArgs {\n}\n\nexport interface OverlayAnimationEventArgs extends IBaseEventArgs {\n    /** Id of the overlay generated with `attach()` method */\n    id: string;\n    /** Animation player that will play the animation */\n    animationPlayer: AnimationPlayer;\n    /** Type of animation to be played. It should be either 'open' or 'close' */\n    animationType: 'open' | 'close';\n}\n\nexport interface Size {\n    /** Gets or sets the horizontal component of Size */\n    width: number;\n\n    /** Gets or sets the vertical component of Size */\n    height: number;\n}\n\n/** @hidden */\nexport interface OverlayInfo {\n    id?: string;\n    visible?: boolean;\n    detached?: boolean;\n    elementRef?: ElementRef;\n    componentRef?: ComponentRef<any>;\n    settings?: OverlaySettings;\n    initialSize?: Size;\n    hook?: HTMLElement;\n    openAnimationPlayer?: AnimationPlayer;\n    // calling animation.destroy in detach fires animation.done. This should not happen\n    // this is why we should trace if animation ever started\n    openAnimationDetaching?: boolean;\n    closeAnimationPlayer?: AnimationPlayer;\n    // calling animation.destroy in detach fires animation.done. This should not happen\n    // this is why we should trace if animation ever started\n    closeAnimationDetaching?: boolean;\n    ngZone: NgZone;\n    transformX?: number;\n    transformY?: number;\n    event?: Event;\n    wrapperElement?: HTMLElement;\n    size?: string\n}\n\n/** @hidden */\nexport interface ConnectedFit {\n    contentElementRect?: Partial<DOMRect>;\n    targetRect?: Partial<DOMRect>;\n    viewPortRect?: Partial<DOMRect>;\n    fitHorizontal?: OutOfViewPort;\n    fitVertical?: OutOfViewPort;\n    left?: number;\n    right?: number;\n    top?: number;\n    bottom?: number;\n    horizontalOffset?: number;\n    verticalOffset?: number;\n}\n\nexport interface OverlayCreateSettings extends OverlaySettings {\n    /**\n     * An `Injector` instance to add in the created component ref's injectors tree.\n     */\n    injector?: Injector\n}\n\n/** @hidden @internal */\nexport class Util {\n    /**\n     * Calculates the rectangle of target for provided overlay settings. Defaults to 0,0,0,0,0,0 rectangle\n     * if no target is provided\n     *\n     * @param settings Overlay settings for which to calculate target rectangle\n     */\n    public static getTargetRect(target?: Point | HTMLElement): Partial<DOMRect> {\n        let targetRect: Partial<DOMRect> = {\n            bottom: 0,\n            height: 0,\n            left: 0,\n            right: 0,\n            top: 0,\n            width: 0\n        };\n        if (target instanceof HTMLElement) {\n            targetRect = (target as HTMLElement).getBoundingClientRect();\n        } else if (target instanceof Point) {\n            const targetPoint = target as Point;\n            targetRect = {\n                bottom: targetPoint.y,\n                height: 0,\n                left: targetPoint.x,\n                right: targetPoint.x,\n                top: targetPoint.y,\n                width: 0\n            };\n        }\n        return targetRect;\n    }\n\n    public static getViewportRect(document: Document): Partial<DOMRect> {\n        const width = document.documentElement.clientWidth;\n        const height = document.documentElement.clientHeight;\n        const scrollPosition = Util.getViewportScrollPosition(document);\n\n        return {\n            top: scrollPosition.y,\n            left: scrollPosition.x,\n            right: scrollPosition.x + width,\n            bottom: scrollPosition.y + height,\n            width,\n            height,\n        };\n    }\n\n    public static getViewportScrollPosition(document: Document): Point {\n        const documentElement = document.documentElement;\n        const documentRect = documentElement.getBoundingClientRect();\n\n        const horizontalScrollPosition =\n            -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0;\n        const verticalScrollPosition = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0;\n\n        return new Point(horizontalScrollPosition, verticalScrollPosition);\n    }\n\n    public static cloneInstance(object) {\n        const clonedObj = Object.assign(Object.create(Object.getPrototypeOf(object)), object);\n        clonedObj.settings = cloneValue(clonedObj.settings);\n        return clonedObj;\n    }\n}\n","import { scaleInVerTop, scaleOutVerTop } from 'igniteui-angular/animations';\nimport { ConnectedFit } from '../utilities';\nimport {\n  HorizontalAlignment,\n  Point,\n  PositionSettings,\n  Size,\n  Util,\n  VerticalAlignment\n} from './../utilities';\nimport { IPositionStrategy } from './IPositionStrategy';\n\n/**\n * Positions the element based on the directions and start point passed in trough PositionSettings.\n * It is possible to either pass a start point or an HTMLElement as a positioning base.\n */\nexport class ConnectedPositioningStrategy implements IPositionStrategy {\n  /**\n   * PositionSettings to use when position the component in the overlay\n   */\n  public settings: PositionSettings;\n\n  private _defaultSettings: PositionSettings = {\n    horizontalDirection: HorizontalAlignment.Right,\n    verticalDirection: VerticalAlignment.Bottom,\n    horizontalStartPoint: HorizontalAlignment.Left,\n    verticalStartPoint: VerticalAlignment.Bottom,\n    openAnimation: scaleInVerTop,\n    closeAnimation: scaleOutVerTop,\n    minSize: { width: 0, height: 0 }\n  };\n\n  constructor(settings?: PositionSettings) {\n    this.settings = Object.assign({}, this._defaultSettings, settings);\n  }\n\n  /**\n   * Position the element based on the PositionStrategy implementing this interface.\n   *\n   * @param contentElement The HTML element to be positioned\n   * @param size Size of the element\n   * @param document reference to the Document object\n   * @param initialCall should be true if this is the initial call to the method\n   * @param target attaching target for the component to show\n   * ```typescript\n   * settings.positionStrategy.position(content, size, document, true);\n   * ```\n   */\n  public position(contentElement: HTMLElement, size: Size, document?: Document, initialCall?: boolean, target?: Point | HTMLElement): void {\n    const rects = this.calculateElementRectangles(contentElement, target);\n    this.setStyle(contentElement, rects.targetRect, rects.elementRect, {});\n  }\n\n  /**\n   * Creates clone of this position strategy\n   * @returns clone of this position strategy\n   */\n  public clone(): IPositionStrategy {\n    return Util.cloneInstance(this);\n  }\n\n  /**\n   * Obtains the DomRect objects for the required elements - target and element to position\n   *\n   * @returns target and element DomRect objects\n   */\n   protected calculateElementRectangles(contentElement, target: Point | HTMLElement):\n   { targetRect: Partial<DOMRect>; elementRect: Partial<DOMRect> } {\n    return {\n      targetRect: Util.getTargetRect(target),\n      elementRect: contentElement.getBoundingClientRect() as DOMRect\n    };\n  }\n\n  /**\n   * Sets element's style which effectively positions provided element according\n   * to provided position settings\n   *\n   * @param element Element to position\n   * @param targetRect Bounding rectangle of strategy target\n   * @param elementRect Bounding rectangle of the element\n   */\n  protected setStyle(element: HTMLElement, targetRect: Partial<DOMRect>, elementRect: Partial<DOMRect>, connectedFit: ConnectedFit) {\n    const horizontalOffset = connectedFit.horizontalOffset ? connectedFit.horizontalOffset : 0;\n    const verticalOffset = connectedFit.verticalOffset ? connectedFit.verticalOffset : 0;\n    const startPoint: Point = {\n      x: targetRect.right + targetRect.width * this.settings.horizontalStartPoint + horizontalOffset,\n      y: targetRect.bottom + targetRect.height * this.settings.verticalStartPoint + verticalOffset\n    };\n    const wrapperRect: ClientRect = element.parentElement.getBoundingClientRect();\n\n    //  clean up styles - if auto position strategy is chosen we may pass here several times\n    element.style.right = '';\n    element.style.left = '';\n    element.style.bottom = '';\n    element.style.top = '';\n\n    switch (this.settings.horizontalDirection) {\n      case HorizontalAlignment.Left:\n        element.style.right = `${Math.round(wrapperRect.right - startPoint.x)}px`;\n        break;\n      case HorizontalAlignment.Center:\n        element.style.left = `${Math.round(startPoint.x - wrapperRect.left - elementRect.width / 2)}px`;\n        break;\n      case HorizontalAlignment.Right:\n        element.style.left = `${Math.round(startPoint.x - wrapperRect.left)}px`;\n        break;\n    }\n\n    switch (this.settings.verticalDirection) {\n      case VerticalAlignment.Top:\n        element.style.bottom = `${Math.round(wrapperRect.bottom - startPoint.y)}px`;\n        break;\n      case VerticalAlignment.Middle:\n        element.style.top = `${Math.round(startPoint.y - wrapperRect.top - elementRect.height / 2)}px`;\n        break;\n      case VerticalAlignment.Bottom:\n        element.style.top = `${Math.round(startPoint.y - wrapperRect.top)}px`;\n        break;\n    }\n  }\n}\n","import { ConnectedFit, HorizontalAlignment, Point, PositionSettings, Size, Util, VerticalAlignment } from '../utilities';\nimport { ConnectedPositioningStrategy } from './connected-positioning-strategy';\n\nexport abstract class BaseFitPositionStrategy extends ConnectedPositioningStrategy {\n    protected _initialSize: Size;\n    protected _initialSettings: PositionSettings;\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     *\n     * @param contentElement The HTML element to be positioned\n     * @param size Size of the element\n     * @param document reference to the Document object\n     * @param initialCall should be true if this is the initial call to the method\n     * @param target attaching target for the component to show\n     * ```typescript\n     * settings.positionStrategy.position(content, size, document, true);\n     * ```\n     */\n    public override position(\n        contentElement: HTMLElement, size: Size, document?: Document, initialCall?: boolean, target?: Point | HTMLElement): void {\n        const rects = super.calculateElementRectangles(contentElement, target);\n        const connectedFit: ConnectedFit = {};\n        if (initialCall) {\n            connectedFit.targetRect = rects.targetRect;\n            connectedFit.contentElementRect = rects.elementRect;\n            this._initialSettings = this._initialSettings || Object.assign({}, this.settings);\n            this.settings = Object.assign({}, this._initialSettings);\n            connectedFit.viewPortRect = Util.getViewportRect(document);\n            this.updateViewPortFit(connectedFit);\n            if (this.shouldFitInViewPort(connectedFit)) {\n                this.fitInViewport(contentElement, connectedFit);\n            }\n        }\n        this.setStyle(contentElement, rects.targetRect, rects.elementRect, connectedFit);\n    }\n\n    /**\n     * Checks if element can fit in viewport and updates provided connectedFit\n     * with the result\n     *\n     * @param connectedFit connectedFit to update\n     */\n    protected updateViewPortFit(connectedFit: ConnectedFit) {\n        connectedFit.left = this.calculateLeft(\n            connectedFit.targetRect,\n            connectedFit.contentElementRect,\n            this.settings.horizontalStartPoint,\n            this.settings.horizontalDirection,\n            connectedFit.horizontalOffset ? connectedFit.horizontalOffset : 0);\n        connectedFit.right = connectedFit.left + connectedFit.contentElementRect.width;\n        connectedFit.fitHorizontal = {\n            back: Math.round(connectedFit.left),\n            forward: Math.round(connectedFit.viewPortRect.width - connectedFit.right)\n        };\n\n        connectedFit.top = this.calculateTop(\n            connectedFit.targetRect,\n            connectedFit.contentElementRect,\n            this.settings.verticalStartPoint,\n            this.settings.verticalDirection,\n            connectedFit.verticalOffset ? connectedFit.verticalOffset : 0);\n        connectedFit.bottom = connectedFit.top + connectedFit.contentElementRect.height;\n        connectedFit.fitVertical = {\n            back: Math.round(connectedFit.top),\n            forward: Math.round(connectedFit.viewPortRect.height - connectedFit.bottom)\n        };\n    }\n\n    /**\n     * Calculates the position of the left border of the element if it gets positioned\n     * with provided start point and direction\n     *\n     * @param targetRect Rectangle of the target where element is attached\n     * @param elementRect Rectangle of the element\n     * @param startPoint Start point of the target\n     * @param direction Direction in which to show the element\n     */\n    protected calculateLeft(\n        targetRect: Partial<DOMRect>,\n        elementRect: Partial<DOMRect>,\n        startPoint: HorizontalAlignment,\n        direction: HorizontalAlignment,\n        offset?: number): number {\n        return targetRect.right + targetRect.width * startPoint + elementRect.width * direction + offset;\n    }\n\n    /**\n     * Calculates the position of the top border of the element if it gets positioned\n     * with provided position settings related to the target\n     *\n     * @param targetRect Rectangle of the target where element is attached\n     * @param elementRect Rectangle of the element\n     * @param startPoint Start point of the target\n     * @param direction Direction in which to show the element\n     */\n    protected calculateTop(\n        targetRect: Partial<DOMRect>,\n        elementRect: Partial<DOMRect>,\n        startPoint: VerticalAlignment,\n        direction: VerticalAlignment,\n        offset?: number): number {\n        return targetRect.bottom + targetRect.height * startPoint + elementRect.height * direction + offset;\n    }\n\n    /**\n     * Returns whether the element should fit in viewport\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected shouldFitInViewPort(connectedFit: ConnectedFit) {\n        return connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0 ||\n            connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0;\n    }\n\n    /**\n     * Fits the element into viewport according to the position settings\n     *\n     * @param element element to fit in viewport\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected abstract fitInViewport(\n        element: HTMLElement,\n        connectedFit: ConnectedFit);\n}\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { ConnectedFit, HorizontalAlignment, VerticalAlignment } from './../utilities';\nimport { BaseFitPositionStrategy } from './base-fit-position-strategy';\nimport { AnimationUtil } from 'igniteui-angular/animations';\n\n/**\n * Positions the element as in **Connected** positioning strategy and re-positions the element in\n * the view port (calculating a different start point) in case the element is partially getting out of view\n */\nexport class AutoPositionStrategy extends BaseFitPositionStrategy {\n\n    /**\n     * Fits the element into viewport according to the position settings\n     *\n     * @param element element to fit in viewport\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected fitInViewport(element: HTMLElement, connectedFit: ConnectedFit) {\n        const transformString: string[] = [];\n        if (connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0) {\n            if (this.canFlipHorizontal(connectedFit)) {\n                this.flipHorizontal();\n                this.flipAnimation(FlipDirection.Horizontal);\n            } else {\n                const horizontalPush = this.horizontalPush(connectedFit);\n                transformString.push(`translateX(${horizontalPush}px)`);\n            }\n        }\n\n        if (connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0) {\n            if (this.canFlipVertical(connectedFit)) {\n                this.flipVertical();\n                this.flipAnimation(FlipDirection.Vertical);\n            } else {\n                const verticalPush = this.verticalPush(connectedFit);\n                transformString.push(`translateY(${verticalPush}px)`);\n            }\n        }\n\n        element.style.transform = transformString.join(' ').trim();\n    }\n\n    /**\n     * Checks if element can be flipped without get off the viewport\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns true if element can be flipped and stain in viewport\n     */\n    private canFlipHorizontal(connectedFit: ConnectedFit): boolean {\n        //  HorizontalAlignment can be Left = -1; Center = -0.5 or Right = 0.\n        //  To virtually flip direction and start point (both are HorizontalAlignment) we can do this:\n        //  flippedAlignment = (-1) * (HorizontalAlignment + 1)\n        //  this way:\n        //  (-1) * (Left + 1) = 0 = Right\n        //  (-1) * (Center + 1) = -0.5 = Center\n        //  (-1) * (Right + 1) = -1 = Left\n        const flippedStartPoint = (-1) * (this.settings.horizontalStartPoint + 1);\n        const flippedDirection = (-1) * (this.settings.horizontalDirection + 1);\n\n        const leftBorder = this.calculateLeft(\n            connectedFit.targetRect, connectedFit.contentElementRect, flippedStartPoint, flippedDirection, 0);\n        const rightBorder = leftBorder + connectedFit.contentElementRect.width;\n        return 0 < leftBorder && rightBorder < connectedFit.viewPortRect.width;\n    }\n\n    /**\n     * Checks if element can be flipped without get off the viewport\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns true if element can be flipped and stain in viewport\n     */\n    private canFlipVertical(connectedFit: ConnectedFit): boolean {\n        const flippedStartPoint = (-1) * (this.settings.verticalStartPoint + 1);\n        const flippedDirection = (-1) * (this.settings.verticalDirection + 1);\n\n        const topBorder = this.calculateTop(\n            connectedFit.targetRect, connectedFit.contentElementRect, flippedStartPoint, flippedDirection, 0);\n        const bottomBorder = topBorder + connectedFit.contentElementRect.height;\n        return 0 < topBorder && bottomBorder < connectedFit.viewPortRect.height;\n    }\n\n    /**\n     * Flips direction and start point of the position settings\n     */\n    private flipHorizontal() {\n        switch (this.settings.horizontalDirection) {\n            case HorizontalAlignment.Left:\n                this.settings.horizontalDirection = HorizontalAlignment.Right;\n                break;\n            case HorizontalAlignment.Right:\n                this.settings.horizontalDirection = HorizontalAlignment.Left;\n                break;\n        }\n        switch (this.settings.horizontalStartPoint) {\n            case HorizontalAlignment.Left:\n                this.settings.horizontalStartPoint = HorizontalAlignment.Right;\n                break;\n            case HorizontalAlignment.Right:\n                this.settings.horizontalStartPoint = HorizontalAlignment.Left;\n                break;\n        }\n    }\n\n    /**\n     * Flips direction and start point of the position settings\n     */\n    private flipVertical() {\n        switch (this.settings.verticalDirection) {\n            case VerticalAlignment.Top:\n                this.settings.verticalDirection = VerticalAlignment.Bottom;\n                break;\n            case VerticalAlignment.Bottom:\n                this.settings.verticalDirection = VerticalAlignment.Top;\n                break;\n        }\n        switch (this.settings.verticalStartPoint) {\n            case VerticalAlignment.Top:\n                this.settings.verticalStartPoint = VerticalAlignment.Bottom;\n                break;\n            case VerticalAlignment.Bottom:\n                this.settings.verticalStartPoint = VerticalAlignment.Top;\n                break;\n        }\n    }\n\n    /**\n     * Calculates necessary horizontal push according to provided connectedFit\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns amount of necessary translation which will push the element into viewport\n     */\n    private horizontalPush(connectedFit: ConnectedFit): number {\n        const leftExtend = connectedFit.left;\n        const rightExtend = connectedFit.right - connectedFit.viewPortRect.width;\n        //  if leftExtend < 0 overlay goes beyond left end of the screen. We should push it back with exactly\n        //  as much as it is beyond the screen.\n        //  if rightExtend > 0 overlay goes beyond right end of the screen. We should push it back with the\n        //  extend but with amount not bigger than what left between left border of screen and left border of\n        //  overlay, e.g. leftExtend\n        if (leftExtend < 0) {\n            return Math.abs(leftExtend);\n        } else if (rightExtend > 0) {\n            return - Math.min(rightExtend, leftExtend);\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Calculates necessary vertical push according to provided connectedFit\n     *\n     * @param connectedFit connectedFit object containing all necessary parameters\n     * @returns amount of necessary translation which will push the element into viewport\n     */\n    private verticalPush(connectedFit: ConnectedFit): number {\n        const topExtend = connectedFit.top;\n        const bottomExtend = connectedFit.bottom - connectedFit.viewPortRect.height;\n        if (topExtend < 0) {\n            return Math.abs(topExtend);\n        } else if (bottomExtend > 0) {\n            return - Math.min(bottomExtend, topExtend);\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Changes open and close animation with reverse animation if one exists\n     *\n     * @param flipDirection direction for which to change the animations\n     */\n    private flipAnimation(flipDirection: FlipDirection): void {\n        if (this.settings.openAnimation) {\n            this.settings.openAnimation = this.updateAnimation(this.settings.openAnimation, flipDirection);\n        }\n        if (this.settings.closeAnimation) {\n            this.settings.closeAnimation = this.updateAnimation(this.settings.closeAnimation, flipDirection);\n        }\n    }\n\n    /**\n     * Tries to find the reverse animation according to provided direction\n     *\n     * @param animation animation to update\n     * @param direction required animation direction\n     * @returns reverse animation in given direction if one exists\n     */\n    private updateAnimation(animation: AnimationReferenceMetadata, direction: FlipDirection): AnimationReferenceMetadata {\n        switch (direction) {\n            case FlipDirection.Horizontal:\n                if (AnimationUtil.instance().isHorizontalAnimation(animation)) {\n                    return AnimationUtil.instance().reverseAnimationResolver(animation);\n                }\n                break;\n            case FlipDirection.Vertical:\n                if (AnimationUtil.instance().isVerticalAnimation(animation)) {\n                    return AnimationUtil.instance().reverseAnimationResolver(animation);\n                }\n                break;\n        }\n\n        return animation;\n    }\n}\n\nenum FlipDirection {\n    Horizontal,\n    Vertical\n}\n","import { fadeIn, fadeOut } from 'igniteui-angular/animations';\nimport { HorizontalAlignment, PositionSettings, Util, VerticalAlignment } from './../utilities';\nimport { IPositionStrategy } from './IPositionStrategy';\n\n/**\n * Positions the element based on the directions passed in trough PositionSettings.\n * These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection\n */\nexport class GlobalPositionStrategy implements IPositionStrategy {\n    /**\n     * PositionSettings to use when position the component in the overlay\n     */\n    public settings: PositionSettings;\n\n    protected _defaultSettings: PositionSettings = {\n        horizontalDirection: HorizontalAlignment.Center,\n        verticalDirection: VerticalAlignment.Middle,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalStartPoint: VerticalAlignment.Middle,\n        openAnimation: fadeIn,\n        closeAnimation: fadeOut,\n        minSize: { width: 0, height: 0 }\n    };\n\n    constructor(settings?: PositionSettings) {\n        this.settings = Object.assign({}, this._defaultSettings, settings);\n    }\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     *\n     * @param contentElement The HTML element to be positioned\n     * @param size Size of the element\n     * @param document reference to the Document object\n     * @param initialCall should be true if this is the initial call to the method\n     * @param target attaching target for the component to show\n     * ```typescript\n     * settings.positionStrategy.position(content, size, document, true);\n     * ```\n     */\n    public position(contentElement: HTMLElement): void {\n        contentElement.classList.add('igx-overlay__content--relative');\n        contentElement.parentElement.classList.add('igx-overlay__wrapper--flex');\n        this.setPosition(contentElement);\n    }\n\n    /**\n     * Clone the strategy instance.\n     * ```typescript\n     * settings.positionStrategy.clone();\n     * ```\n     */\n    public clone(): IPositionStrategy {\n        return Util.cloneInstance(this);\n    }\n\n    protected setPosition(contentElement: HTMLElement) {\n        switch (this.settings.horizontalDirection) {\n            case HorizontalAlignment.Left:\n                contentElement.parentElement.style.justifyContent = 'flex-start';\n                break;\n            case HorizontalAlignment.Center:\n                contentElement.parentElement.style.justifyContent = 'center';\n                break;\n            case HorizontalAlignment.Right:\n                contentElement.parentElement.style.justifyContent = 'flex-end';\n                break;\n            default:\n                break;\n        }\n\n        switch (this.settings.verticalDirection) {\n            case VerticalAlignment.Top:\n                contentElement.parentElement.style.alignItems = 'flex-start';\n                break;\n            case VerticalAlignment.Middle:\n                contentElement.parentElement.style.alignItems = 'center';\n                break;\n            case VerticalAlignment.Bottom:\n                contentElement.parentElement.style.alignItems = 'flex-end';\n                break;\n            default:\n                break;\n        }\n    }\n}\n\n","import { PositionSettings } from '../utilities';\nimport { GlobalPositionStrategy } from './global-position-strategy';\n\n/**\n * Positions the element inside the containing outlet based on the directions passed in trough PositionSettings.\n * These are Top/Middle/Bottom for verticalDirection and Left/Center/Right for horizontalDirection\n */\nexport class ContainerPositionStrategy extends GlobalPositionStrategy {\n    constructor(settings?: PositionSettings) {\n        super(settings);\n    }\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     */\n    public override position(contentElement: HTMLElement): void {\n        contentElement.classList.add('igx-overlay__content--relative');\n        contentElement.parentElement.classList.add('igx-overlay__wrapper--flex-container');\n        this.setPosition(contentElement);\n    }\n}\n\n","import { ConnectedFit, HorizontalAlignment, VerticalAlignment } from '../utilities';\nimport { BaseFitPositionStrategy } from './base-fit-position-strategy';\n\n/**\n * Positions the element as in **Connected** positioning strategy and resize the element\n * to fit in the view port in case the element is partially getting out of view\n */\nexport class ElasticPositionStrategy extends BaseFitPositionStrategy {\n    /**\n     * Fits the element into viewport according to the position settings\n     *\n     * @param element element to fit in viewport\n     * @param connectedFit connectedFit object containing all necessary parameters\n     */\n    protected fitInViewport(element: HTMLElement, connectedFit: ConnectedFit) {\n        element.classList.add('igx-overlay__content--elastic');\n        const transformString: string[] = [];\n        if (connectedFit.fitHorizontal.back < 0 || connectedFit.fitHorizontal.forward < 0) {\n            const maxReduction = Math.max(0, connectedFit.contentElementRect.width - this.settings.minSize.width);\n            const leftExtend = Math.max(0, -connectedFit.fitHorizontal.back);\n            const rightExtend = Math.max(0, -connectedFit.fitHorizontal.forward);\n            const reduction = Math.min(maxReduction, leftExtend + rightExtend);\n            element.style.width = `${connectedFit.contentElementRect.width - reduction}px`;\n\n            //  if direction is center and element goes off the screen in left direction we should push the\n            //  element to the right. Prevents left still going out of view when normally positioned\n            if (this.settings.horizontalDirection === HorizontalAlignment.Center) {\n                //  the amount of translation depends on whether element goes off the screen to the left,\n                //  to the right or in both directions, as well as how much it goes of the screen and finally\n                //  on the minSize. The translation should be proportional between left and right extend\n                //  taken from the reduction\n                const translation = leftExtend * reduction / (leftExtend + rightExtend);\n                if (translation > 0) {\n                    transformString.push(`translateX(${translation}px)`);\n                }\n            }\n        }\n\n        if (connectedFit.fitVertical.back < 0 || connectedFit.fitVertical.forward < 0) {\n            const maxReduction = Math.max(0, connectedFit.contentElementRect.height - this.settings.minSize.height);\n            const topExtend = Math.max(0, -connectedFit.fitVertical.back);\n            const bottomExtend = Math.max(0, -connectedFit.fitVertical.forward);\n            const reduction = Math.min(maxReduction, topExtend + bottomExtend);\n            element.style.height = `${connectedFit.contentElementRect.height - reduction}px`;\n\n            //  if direction is middle and element goes off the screen in top direction we should push the\n            //  element to the bottom. Prevents top still going out of view when normally positioned\n            if (this.settings.verticalDirection === VerticalAlignment.Middle) {\n                //  the amount of translation depends on whether element goes off the screen to the top,\n                //  to the bottom or in both directions, as well as how much it goes of the screen and finally\n                //  on the minSize. The translation should be proportional between top and bottom extend\n                //  taken from the reduction\n                const translation = topExtend * reduction / (topExtend + bottomExtend);\n                if (translation > 0) {\n                    transformString.push(`translateY(${translation}px)`);\n                }\n            }\n        }\n        element.style.transform = transformString.join(' ').trim();\n    }\n}\n","import { IScrollStrategy } from './IScrollStrategy';\nimport { IgxOverlayService } from '../overlay';\n\nexport abstract class ScrollStrategy implements IScrollStrategy {\n    constructor() { }\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     * @param document reference to Document object.\n     * @param overlayService IgxOverlay service to use in this strategy.\n     * @param id Unique id for this strategy.\n     * ```typescript\n     * settings.scrollStrategy.initialize(document, overlay, id);\n     * ```\n     */\n    public abstract initialize(document: Document, overlayService: IgxOverlayService, id: string);\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public abstract attach(): void;\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public abstract detach(): void;\n}\n","import { ScrollStrategy } from './scroll-strategy';\n\n/**\n * Empty scroll strategy. Does nothing.\n */\nexport class NoOpScrollStrategy extends ScrollStrategy {\n    constructor() {\n        super();\n    }\n    /**\n     * Initializes the strategy. Should be called once\n     */\n    public initialize() { }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public attach(): void { }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void { }\n}\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { DOCUMENT } from '@angular/common';\nimport {\n    ApplicationRef,\n    ComponentRef,\n    createComponent,\n    ElementRef,\n    EventEmitter,\n    Inject,\n    Injectable,\n    Injector,\n    NgZone,\n    OnDestroy,\n    Type,\n    ViewContainerRef\n} from '@angular/core';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { fadeIn, fadeOut, IAnimationParams, scaleInHorLeft, scaleInHorRight, scaleInVerBottom, scaleInVerTop, scaleOutHorLeft, scaleOutHorRight, scaleOutVerBottom, scaleOutVerTop, slideInBottom, slideInTop, slideOutBottom, slideOutTop } from 'igniteui-angular/animations';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxOverlayOutletDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxAngularAnimationService } from '../animation/angular-animation-service';\nimport { AnimationService } from '../animation/animation';\nimport { AutoPositionStrategy } from './position/auto-position-strategy';\nimport { ConnectedPositioningStrategy } from './position/connected-positioning-strategy';\nimport { ContainerPositionStrategy } from './position/container-position-strategy';\nimport { ElasticPositionStrategy } from './position/elastic-position-strategy';\nimport { GlobalPositionStrategy } from './position/global-position-strategy';\nimport { IPositionStrategy } from './position/IPositionStrategy';\nimport { NoOpScrollStrategy } from './scroll/NoOpScrollStrategy';\nimport {\n    AbsolutePosition,\n    HorizontalAlignment,\n    OffsetMode,\n    OverlayAnimationEventArgs,\n    OverlayCancelableEventArgs,\n    OverlayClosingEventArgs,\n    OverlayCreateSettings,\n    OverlayEventArgs,\n    OverlayInfo,\n    OverlaySettings,\n    Point,\n    PositionSettings,\n    RelativePosition,\n    RelativePositionStrategy,\n    VerticalAlignment\n} from './utilities';\n\n/**\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/overlay-main)\n * The overlay service allows users to show components on overlay div above all other elements in the page.\n */\n@Injectable({ providedIn: 'root' })\nexport class IgxOverlayService implements OnDestroy {\n    /**\n     * Emitted just before the overlay content starts to open.\n     * ```typescript\n     * opening(event: OverlayCancelableEventArgs){\n     *     const opening = event;\n     * }\n     * ```\n     */\n    public opening = new EventEmitter<OverlayCancelableEventArgs>();\n\n    /**\n     * Emitted after the overlay content is opened and all animations are finished.\n     * ```typescript\n     * opened(event: OverlayEventArgs){\n     *     const opened = event;\n     * }\n     * ```\n     */\n    public opened = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted just before the overlay content starts to close.\n     * ```typescript\n     * closing(event: OverlayCancelableEventArgs){\n     *     const closing = event;\n     * }\n     * ```\n     */\n    public closing = new EventEmitter<OverlayClosingEventArgs>();\n\n    /**\n     * Emitted after the overlay content is closed and all animations are finished.\n     * ```typescript\n     * closed(event: OverlayEventArgs){\n     *     const closed = event;\n     * }\n     * ```\n     */\n    public closed = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted before the content is appended to the overlay.\n     * ```typescript\n     * contentAppending(event: OverlayEventArgs){\n     *     const contentAppending = event;\n     * }\n     * ```\n     */\n    public contentAppending = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted after the content is appended to the overlay, and before animations are started.\n     * ```typescript\n     * contentAppended(event: OverlayEventArgs){\n     *     const contentAppended = event;\n     * }\n     * ```\n     */\n    public contentAppended = new EventEmitter<OverlayEventArgs>();\n\n    /**\n     * Emitted just before the overlay animation start.\n     * ```typescript\n     * animationStarting(event: OverlayAnimationEventArgs){\n     *     const animationStarting = event;\n     * }\n     * ```\n     */\n    public animationStarting = new EventEmitter<OverlayAnimationEventArgs>();\n\n    private _componentId = 0;\n    private _overlayInfos: OverlayInfo[] = [];\n    private _overlayElement: HTMLElement;\n    private _document: Document;\n    private _keyPressEventListener: Subscription;\n    private destroy$ = new Subject<boolean>();\n    private _cursorStyleIsSet = false;\n    private _cursorOriginalValue: string;\n\n    private _defaultSettings: OverlaySettings = {\n        excludeFromOutsideClick: [],\n        positionStrategy: new GlobalPositionStrategy(),\n        scrollStrategy: new NoOpScrollStrategy(),\n        modal: true,\n        closeOnOutsideClick: true,\n        closeOnEscape: false\n    };\n\n    constructor(\n        private _appRef: ApplicationRef,\n        @Inject(DOCUMENT) private document: any,\n        private _zone: NgZone,\n        protected platformUtil: PlatformUtil,\n        @Inject(IgxAngularAnimationService) private animationService: AnimationService) {\n        this._document = this.document;\n    }\n\n    /**\n     * Creates overlay settings with global or container position strategy and preset position settings\n     *\n     * @param position Preset position settings. Default position is 'center'\n     * @param outlet The outlet container to attach the overlay to\n     * @returns Non-modal overlay settings based on Global or Container position strategy and the provided position.\n     */\n    public static createAbsoluteOverlaySettings(\n        position?: AbsolutePosition, outlet?: IgxOverlayOutletDirective | ElementRef): OverlaySettings {\n        const positionSettings = this.createAbsolutePositionSettings(position);\n        const strategy = outlet ? new ContainerPositionStrategy(positionSettings) : new GlobalPositionStrategy(positionSettings);\n        const overlaySettings: OverlaySettings = {\n            positionStrategy: strategy,\n            scrollStrategy: new NoOpScrollStrategy(),\n            modal: false,\n            closeOnOutsideClick: true,\n            outlet\n        };\n        return overlaySettings;\n    }\n\n    /**\n     * Creates overlay settings with auto, connected or elastic position strategy and preset position settings\n     *\n     * @param target Attaching target for the component to show\n     * @param strategy The relative position strategy to be applied to the overlay settings. Default is Auto positioning strategy.\n     * @param position Preset position settings. By default the element is positioned below the target, left aligned.\n     * @returns Non-modal overlay settings based on the provided target, strategy and position.\n     */\n    public static createRelativeOverlaySettings(\n        target: Point | HTMLElement,\n        position?: RelativePosition,\n        strategy?: RelativePositionStrategy):\n        OverlaySettings {\n        const positionSettings = this.createRelativePositionSettings(position);\n        const overlaySettings: OverlaySettings = {\n            target,\n            positionStrategy: this.createPositionStrategy(strategy, positionSettings),\n            scrollStrategy: new NoOpScrollStrategy(),\n            modal: false,\n            closeOnOutsideClick: true\n        };\n        return overlaySettings;\n    }\n\n    private static createAbsolutePositionSettings(position: AbsolutePosition): PositionSettings {\n        let positionSettings: PositionSettings;\n        switch (position) {\n            case AbsolutePosition.Bottom:\n                positionSettings = {\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Bottom,\n                    openAnimation: slideInBottom,\n                    closeAnimation: slideOutBottom\n                };\n                break;\n            case AbsolutePosition.Top:\n                positionSettings = {\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Top,\n                    openAnimation: slideInTop,\n                    closeAnimation: slideOutTop\n                };\n                break;\n            case AbsolutePosition.Center:\n            default:\n                positionSettings = {\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Middle,\n                    openAnimation: fadeIn,\n                    closeAnimation: fadeOut\n                };\n        }\n        return positionSettings;\n    }\n\n    private static createRelativePositionSettings(position: RelativePosition): PositionSettings {\n        let positionSettings: PositionSettings;\n        switch (position) {\n            case RelativePosition.Above:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Center,\n                    verticalStartPoint: VerticalAlignment.Top,\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Top,\n                    openAnimation: scaleInVerBottom,\n                    closeAnimation: scaleOutVerBottom,\n                };\n                break;\n            case RelativePosition.Below:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Center,\n                    verticalStartPoint: VerticalAlignment.Bottom,\n                    horizontalDirection: HorizontalAlignment.Center,\n                    verticalDirection: VerticalAlignment.Bottom,\n                    openAnimation: scaleInVerTop,\n                    closeAnimation: scaleOutVerTop\n                };\n                break;\n            case RelativePosition.After:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Right,\n                    verticalStartPoint: VerticalAlignment.Middle,\n                    horizontalDirection: HorizontalAlignment.Right,\n                    verticalDirection: VerticalAlignment.Middle,\n                    openAnimation: scaleInHorLeft,\n                    closeAnimation: scaleOutHorLeft\n                };\n                break;\n            case RelativePosition.Before:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Left,\n                    verticalStartPoint: VerticalAlignment.Middle,\n                    horizontalDirection: HorizontalAlignment.Left,\n                    verticalDirection: VerticalAlignment.Middle,\n                    openAnimation: scaleInHorRight,\n                    closeAnimation: scaleOutHorRight\n                };\n                break;\n            case RelativePosition.Default:\n            default:\n                positionSettings = {\n                    horizontalStartPoint: HorizontalAlignment.Left,\n                    verticalStartPoint: VerticalAlignment.Bottom,\n                    horizontalDirection: HorizontalAlignment.Right,\n                    verticalDirection: VerticalAlignment.Bottom,\n                    openAnimation: scaleInVerTop,\n                    closeAnimation: scaleOutVerTop,\n                };\n                break;\n        }\n        return positionSettings;\n    }\n\n    private static createPositionStrategy(strategy: RelativePositionStrategy, positionSettings: PositionSettings): IPositionStrategy {\n        switch (strategy) {\n            case RelativePositionStrategy.Connected:\n                return new ConnectedPositioningStrategy(positionSettings);\n            case RelativePositionStrategy.Elastic:\n                return new ElasticPositionStrategy(positionSettings);\n            case RelativePositionStrategy.Auto:\n            default:\n                return new AutoPositionStrategy(positionSettings);\n        }\n    }\n\n    /**\n     * Generates Id. Provide this Id when call `show(id)` method\n     *\n     * @param component ElementRef to show in overlay\n     * @param settings (optional): Display settings for the overlay, such as positioning and scroll/close behavior.\n     * @returns Id of the created overlay. Valid until `detach` is called.\n     */\n    public attach(element: ElementRef, settings?: OverlaySettings): string;\n    /**\n     * Generates Id. Provide this Id when call `show(id)` method\n     *\n     * Note created instance is in root scope, prefer the `viewContainerRef` overload when local injection context is needed.\n     *\n     * @param component Component Type to show in overlay\n     * @param settings (optional): Create settings for the overlay, such as positioning and scroll/close behavior.\n     * Includes also an optional `Injector` to add to the created dynamic component's injectors.\n     * @returns Id of the created overlay. Valid until `detach` is called.\n     */\n    public attach(component: Type<any>, settings?: OverlayCreateSettings): string;\n    // TODO: change third parameter to OverlayCreateSettings and allow passing of Injector and so on.\n    /**\n     * Generates an Id. Provide this Id when calling the `show(id)` method\n     *\n     * @param component Component Type to show in overlay\n     * @param viewContainerRef Reference to the container where created component's host view will be inserted\n     * @param settings (optional): Display settings for the overlay, such as positioning and scroll/close behavior.\n     */\n    public attach(component: Type<any>, viewContainerRef: ViewContainerRef, settings?: OverlaySettings): string;\n    public attach(\n        componentOrElement: ElementRef | Type<any>,\n        viewContainerRefOrSettings?: ViewContainerRef | OverlayCreateSettings,\n        settings?: OverlaySettings): string {\n        const info: OverlayInfo = this.getOverlayInfo(componentOrElement, viewContainerRefOrSettings, settings);\n\n        if (!info) {\n            console.warn('Overlay was not able to attach provided component!');\n            return null;\n        }\n\n        info.id = (this._componentId++).toString();\n        info.visible = false;\n        // Emit the contentAppending event before appending the content\n        const eventArgs = { id: info.id, elementRef: info.elementRef, componentRef: info.componentRef, settings: info.settings };\n        this.contentAppending.emit(eventArgs);\n        // Append the content to the overlay\n        info.settings = eventArgs.settings;\n        this._overlayInfos.push(info);\n        info.hook = this.placeElementHook(info.elementRef.nativeElement);\n        const elementRect = info.elementRef.nativeElement.getBoundingClientRect();\n        info.initialSize = { width: elementRect.width, height: elementRect.height };\n        // Get the size before moving the container into the overlay so that it does not forget about inherited styles.\n        this.getComponentSize(info);\n        this.moveElementToOverlay(info);\n        // Update the container size after moving if there is size.\n        if (info.size) {\n            info.elementRef.nativeElement.parentElement.style.setProperty('--ig-size', info.size);\n        }\n        this.contentAppended.emit({ id: info.id, componentRef: info.componentRef });\n        info.settings.scrollStrategy.initialize(this._document, this, info.id);\n        info.settings.scrollStrategy.attach();\n        this.addOutsideClickListener(info);\n        this.addResizeHandler();\n        this.addCloseOnEscapeListener(info);\n        this.buildAnimationPlayers(info);\n        return info.id;\n    }\n\n    /**\n     * Remove overlay with the provided id.\n     *\n     * @param id Id of the overlay to remove\n     * ```typescript\n     * this.overlay.detach(id);\n     * ```\n     */\n    public detach(id: string) {\n        const info: OverlayInfo = this.getOverlayById(id);\n\n        if (!info) {\n            console.warn('igxOverlay.detach was called with wrong id: ', id);\n            return;\n        }\n        info.detached = true;\n        this.finishAnimations(info);\n        info.settings.scrollStrategy.detach();\n        this.removeOutsideClickListener(info);\n        this.removeResizeHandler();\n        this.cleanUp(info);\n    }\n\n    /**\n     * Remove all the overlays.\n     * ```typescript\n     * this.overlay.detachAll();\n     * ```\n     */\n    public detachAll() {\n        for (let i = this._overlayInfos.length; i--;) {\n            this.detach(this._overlayInfos[i].id);\n        }\n    }\n\n    /**\n     * Shows the overlay for provided id.\n     *\n     * @param id Id to show overlay for\n     * @param settings Display settings for the overlay, such as positioning and scroll/close behavior.\n     */\n    public show(id: string, settings?: OverlaySettings): void {\n        const info: OverlayInfo = this.getOverlayById(id);\n        if (!info) {\n            console.warn('igxOverlay.show was called with wrong id: ', id);\n            return;\n        }\n        const eventArgs: OverlayCancelableEventArgs = { id, componentRef: info.componentRef, cancel: false };\n        this.opening.emit(eventArgs);\n        if (eventArgs.cancel) {\n            return;\n        }\n        if (settings) {\n            settings.positionStrategy ??= info.settings.positionStrategy;\n            settings.scrollStrategy ??= info.settings.scrollStrategy;\n            info.settings = { ...info.settings, ...settings };\n        }\n        this.updateSize(info);\n        info.settings.positionStrategy.position(\n            info.elementRef.nativeElement.parentElement,\n            { width: info.initialSize.width, height: info.initialSize.height },\n            this._document,\n            true,\n            info.settings.target);\n        this.addModalClasses(info);\n        if (info.settings.positionStrategy.settings.openAnimation) {\n            // TODO: should we build players again. This was already done in attach!!!\n            // this.buildAnimationPlayers(info);\n            this.playOpenAnimation(info);\n        } else {\n            //  to eliminate flickering show the element just before opened fires\n            info.wrapperElement.style.visibility = '';\n            info.visible = true;\n            this.opened.emit({ id: info.id, componentRef: info.componentRef });\n        }\n    }\n\n    /**\n     * Hides the component with the ID provided as a parameter.\n     * ```typescript\n     * this.overlay.hide(id);\n     * ```\n     */\n    public hide(id: string, event?: Event) {\n        this._hide(id, event);\n    }\n\n    /**\n     * Hides all the components and the overlay.\n     * ```typescript\n     * this.overlay.hideAll();\n     * ```\n     */\n    public hideAll() {\n        for (let i = this._overlayInfos.length; i--;) {\n            this.hide(this._overlayInfos[i].id);\n        }\n    }\n\n    /**\n     * Repositions the component with ID provided as a parameter.\n     *\n     * @param id Id to reposition overlay for\n     * ```typescript\n     * this.overlay.reposition(id);\n     * ```\n     */\n    public reposition(id: string) {\n        const overlayInfo = this.getOverlayById(id);\n        if (!overlayInfo || !overlayInfo.settings) {\n            console.warn('Wrong id provided in overlay.reposition method. Id: ', id);\n            return;\n        }\n        if (!overlayInfo.visible) {\n            return;\n        }\n        const contentElement = overlayInfo.elementRef.nativeElement.parentElement;\n        const contentElementRect = contentElement.getBoundingClientRect();\n        overlayInfo.settings.positionStrategy.position(\n            contentElement,\n            {\n                width: contentElementRect.width,\n                height: contentElementRect.height\n            },\n            this._document,\n            false,\n            overlayInfo.settings.target);\n    }\n\n    /**\n     * Offsets the content along the corresponding axis by the provided amount with optional offsetMode that determines whether to add (by default) or set the offset values\n     *\n     * @param id Id to offset overlay for\n     * @param deltaX Amount of offset in horizontal direction\n     * @param deltaY Amount of offset in vertical direction\n     * @param offsetMode Determines whether to add (by default) or set the offset values with OffsetMode.Add and OffsetMode.Set\n     * ```typescript\n     * this.overlay.setOffset(id, deltaX, deltaY, offsetMode);\n     * ```\n     */\n    public setOffset(id: string, deltaX: number, deltaY: number, offsetMode?: OffsetMode) {\n        const info: OverlayInfo = this.getOverlayById(id);\n\n        if (!info) {\n            return;\n        }\n\n        switch (offsetMode) {\n            case OffsetMode.Set:\n                info.transformX = deltaX;\n                info.transformY = deltaY;\n                break;\n            case OffsetMode.Add:\n            default:\n                info.transformX += deltaX;\n                info.transformY += deltaY;\n                break;\n        }\n\n        const transformX = info.transformX;\n        const transformY = info.transformY;\n\n        const translate = `translate(${transformX}px, ${transformY}px)`;\n        info.elementRef.nativeElement.parentElement.style.transform = translate;\n    }\n\n    /** @hidden */\n    public repositionAll = () => {\n        for (let i = this._overlayInfos.length; i--;) {\n            this.reposition(this._overlayInfos[i].id);\n        }\n    };\n\n    /** @hidden */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /** @hidden @internal */\n    public getOverlayById(id: string): OverlayInfo {\n        if (!id) {\n            return null;\n        }\n        const info = this._overlayInfos.find(e => e.id === id);\n        return info;\n    }\n\n    private _hide(id: string, event?: Event) {\n        const info: OverlayInfo = this.getOverlayById(id);\n        if (!info) {\n            console.warn('igxOverlay.hide was called with wrong id: ', id);\n            return;\n        }\n        const eventArgs: OverlayClosingEventArgs = { id, componentRef: info.componentRef, cancel: false, event };\n        this.closing.emit(eventArgs);\n        if (eventArgs.cancel) {\n            return;\n        }\n        this.removeModalClasses(info);\n        if (info.settings.positionStrategy.settings.closeAnimation) {\n            this.playCloseAnimation(info, event);\n        } else {\n            this.closeDone(info);\n        }\n    }\n\n    /**\n     * Creates overlayInfo. Sets the info's `elementRef`, `componentRef`and `settings`. Also\n     * initialize info's `ngZone`, `transformX` and `transformY`.\n     * @param component ElementRef or Type. If type is provided dynamic component will be created\n     * @param viewContainerRefOrSettings (optional): If ElementRef is provided for `component` this\n     * parameter is OverlaySettings. Otherwise it could be ViewContainerRef or OverlayCreateSettings and will be\n     * used when dynamic component is created.\n     * @param settings (optional): OverlaySettings when `ViewContainerRef` is provided.\n     * @returns OverlayInfo\n     */\n    private getOverlayInfo(\n        component: ElementRef | Type<any>,\n        viewContainerRefOrSettings?: ViewContainerRef | OverlayCreateSettings,\n        settings?: OverlaySettings): OverlayInfo | null {\n        const info: OverlayInfo = { ngZone: this._zone, transformX: 0, transformY: 0 };\n        let overlaySettings = settings;\n        if (component instanceof ElementRef) {\n            info.elementRef = component;\n            overlaySettings = viewContainerRefOrSettings as OverlaySettings;\n        } else {\n            let dynamicComponent: ComponentRef<any>;\n            if (viewContainerRefOrSettings instanceof ViewContainerRef) {\n                const viewContainerRef = viewContainerRefOrSettings as ViewContainerRef;\n                dynamicComponent = viewContainerRef.createComponent(component);\n            } else {\n                const environmentInjector = this._appRef.injector;\n                const createSettings = viewContainerRefOrSettings as OverlayCreateSettings | undefined;\n                let elementInjector: Injector;\n                if (createSettings) {\n                    ({ injector: elementInjector, ...overlaySettings } = createSettings);\n                }\n                dynamicComponent = createComponent(component, { environmentInjector, elementInjector });\n                this._appRef.attachView(dynamicComponent.hostView);\n            }\n            if (dynamicComponent.onDestroy) {\n                dynamicComponent.onDestroy(() => {\n                    if (!info.detached && this._overlayInfos.indexOf(info) !== -1) {\n                        this.detach(info.id);\n                    }\n                })\n            }\n\n            // If the element is newly created from a Component, it is wrapped in 'ng-component' tag - we do not want that.\n            const element = dynamicComponent.location.nativeElement;\n            info.elementRef = { nativeElement: element };\n            info.componentRef = dynamicComponent;\n        }\n        info.settings = Object.assign({}, this._defaultSettings, overlaySettings);\n        return info;\n    }\n\n    private placeElementHook(element: HTMLElement): HTMLElement {\n        if (!element.parentElement) {\n            return null;\n        }\n        const hook = this._document.createElement('div');\n        hook.style.display = 'none';\n        element.parentElement.insertBefore(hook, element);\n        return hook;\n    }\n\n    private moveElementToOverlay(info: OverlayInfo) {\n        info.wrapperElement = this.getWrapperElement();\n        const contentElement = this.getContentElement(info.wrapperElement, info.settings.modal);\n        this.getOverlayElement(info).appendChild(info.wrapperElement);\n        contentElement.appendChild(info.elementRef.nativeElement);\n    }\n\n    private getWrapperElement(): HTMLElement {\n        const wrapper: HTMLElement = this._document.createElement('div');\n        wrapper.classList.add('igx-overlay__wrapper');\n        return wrapper;\n    }\n\n    private getContentElement(wrapperElement: HTMLElement, modal: boolean): HTMLElement {\n        const content: HTMLElement = this._document.createElement('div');\n        if (modal) {\n            content.classList.add('igx-overlay__content--modal');\n            content.addEventListener('click', (ev: Event) => {\n                ev.stopPropagation();\n            });\n        } else {\n            content.classList.add('igx-overlay__content');\n        }\n        content.addEventListener('scroll', (ev: Event) => {\n            ev.stopPropagation();\n        });\n\n        //  hide element to eliminate flickering. Show the element exactly before animation starts\n        wrapperElement.style.visibility = 'hidden';\n        wrapperElement.appendChild(content);\n        return content;\n    }\n\n    private getOverlayElement(info: OverlayInfo): HTMLElement {\n        if (info.settings.outlet) {\n            return info.settings.outlet.nativeElement || info.settings.outlet;\n        }\n        if (!this._overlayElement) {\n            this._overlayElement = this._document.createElement('div');\n            this._overlayElement.classList.add('igx-overlay');\n            this._document.body.appendChild(this._overlayElement);\n        }\n        return this._overlayElement;\n    }\n\n    private updateSize(info: OverlayInfo) {\n        if (info.componentRef) {\n            //  if we are positioning component this is first time it gets visible\n            //  and we can finally get its size\n            info.componentRef.changeDetectorRef.detectChanges();\n            info.initialSize = info.elementRef.nativeElement.getBoundingClientRect();\n        }\n\n        // set content div width only if element to show has width\n        if (info.initialSize.width !== 0) {\n            info.elementRef.nativeElement.parentElement.style.width = info.initialSize.width + 'px';\n        }\n    }\n\n    private closeDone(info: OverlayInfo) {\n        info.visible = false;\n        if (info.wrapperElement) {\n            // to eliminate flickering show the element just before animation start\n            info.wrapperElement.style.visibility = 'hidden';\n        }\n        if (!info.closeAnimationDetaching) {\n            this.closed.emit({ id: info.id, componentRef: info.componentRef, event: info.event });\n        }\n        delete info.event;\n    }\n\n    private cleanUp(info: OverlayInfo) {\n        const child: HTMLElement = info.elementRef.nativeElement;\n        const outlet = this.getOverlayElement(info);\n        // if same element is shown in other overlay outlet will not contain\n        // the element and we should not remove it form outlet\n        if (outlet.contains(child)) {\n            outlet.removeChild(child.parentNode.parentNode);\n        }\n        if (info.componentRef) {\n            this._appRef.detachView(info.componentRef.hostView);\n            info.componentRef.destroy();\n            delete info.componentRef;\n        }\n        if (info.hook) {\n            info.hook.parentElement.insertBefore(info.elementRef.nativeElement, info.hook);\n            info.hook.parentElement.removeChild(info.hook);\n            delete info.hook;\n        }\n\n        const index = this._overlayInfos.indexOf(info);\n        this._overlayInfos.splice(index, 1);\n\n        // this._overlayElement.parentElement check just for tests that manually delete the element\n        if (this._overlayInfos.length === 0) {\n            if (this._overlayElement && this._overlayElement.parentElement) {\n                this._overlayElement.parentElement.removeChild(this._overlayElement);\n                this._overlayElement = null;\n            }\n            this.removeCloseOnEscapeListener();\n        }\n\n        // clean all the resources attached to info\n        delete info.elementRef;\n        delete info.settings;\n        delete info.initialSize;\n        info.openAnimationDetaching = true;\n        info.openAnimationPlayer?.destroy();\n        delete info.openAnimationPlayer;\n        info.closeAnimationDetaching = true;\n        info.closeAnimationPlayer?.destroy();\n        delete info.closeAnimationPlayer;\n        delete info.ngZone;\n        delete info.wrapperElement;\n        info = null;\n    }\n\n    private playOpenAnimation(info: OverlayInfo) {\n        //  if there is opening animation already started do nothing\n        if (info.openAnimationPlayer?.hasStarted()) {\n            return;\n        }\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            const position = info.closeAnimationPlayer.position;\n            info.closeAnimationPlayer.reset();\n            info.openAnimationPlayer.init();\n            info.openAnimationPlayer.position = 1 - position;\n        }\n        this.animationStarting.emit({ id: info.id, animationPlayer: info.openAnimationPlayer, animationType: 'open' });\n\n        //  to eliminate flickering show the element just before animation start\n        info.wrapperElement.style.visibility = '';\n        info.visible = true;\n        info.openAnimationPlayer.play();\n    }\n\n    private playCloseAnimation(info: OverlayInfo, event?: Event) {\n        //  if there is closing animation already started do nothing\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            return;\n        }\n        if (info.openAnimationPlayer?.hasStarted()) {\n            const position = info.openAnimationPlayer.position;\n            info.openAnimationPlayer.reset();\n            info.closeAnimationPlayer.init();\n            info.closeAnimationPlayer.position = 1 - position;\n        }\n        this.animationStarting.emit({ id: info.id, animationPlayer: info.closeAnimationPlayer, animationType: 'close' });\n        info.event = event;\n        info.closeAnimationPlayer.play();\n    }\n\n    //  TODO: check if applyAnimationParams will work with complex animations\n    private applyAnimationParams(wrapperElement: HTMLElement, animationOptions: AnimationReferenceMetadata) {\n        if (!animationOptions) {\n            wrapperElement.style.transitionDuration = '0ms';\n            return;\n        }\n        if (!animationOptions.options || !animationOptions.options.params) {\n            return;\n        }\n        const params = animationOptions.options.params as IAnimationParams;\n        if (params.duration) {\n            wrapperElement.style.transitionDuration = params.duration;\n        }\n        if (params.easing) {\n            wrapperElement.style.transitionTimingFunction = params.easing;\n        }\n    }\n\n    private documentClicked = (ev: MouseEvent) => {\n        //  if we get to modal overlay just return - we should not close anything under it\n        //  if we get to non-modal overlay do the next:\n        //   1. Check it has close on outside click. If not go on to next overlay;\n        //   2. If true check if click is on the element. If it is on the element we have closed\n        //  already all previous non-modal with close on outside click elements, so we return. If\n        //  not close the overlay and check next\n        for (let i = this._overlayInfos.length; i--;) {\n            const info = this._overlayInfos[i];\n            if (info.settings.modal) {\n                return;\n            }\n            if (info.settings.closeOnOutsideClick) {\n                const target = ev.composed ? ev.composedPath()[0] : ev.target;\n                const overlayElement = info.elementRef.nativeElement;\n                // check if the click is on the overlay element or on an element from the exclusion list, and if so do not close the overlay\n                const excludeElements = info.settings.excludeFromOutsideClick ?\n                    [...info.settings.excludeFromOutsideClick, overlayElement] : [overlayElement];\n                const isInsideClick: boolean = excludeElements.some(e => e.contains(target as Node));\n                if (isInsideClick) {\n                    return;\n                    //  if the click is outside click, but close animation has started do nothing\n                } else if (!(info.closeAnimationPlayer?.hasStarted())) {\n                    this._hide(info.id, ev);\n                }\n            }\n        }\n    };\n\n    private addOutsideClickListener(info: OverlayInfo) {\n        if (info.settings.closeOnOutsideClick) {\n            if (info.settings.modal) {\n                fromEvent(info.elementRef.nativeElement.parentElement.parentElement, 'click')\n                    .pipe(takeUntil(this.destroy$))\n                    .subscribe((e: Event) => this._hide(info.id, e));\n            } else if (\n                //  if all overlays minus closing overlays equals one add the handler\n                this._overlayInfos.filter(x => x.settings.closeOnOutsideClick && !x.settings.modal).length -\n                this._overlayInfos.filter(x => x.settings.closeOnOutsideClick && !x.settings.modal &&\n                    x.closeAnimationPlayer?.hasStarted()).length === 1) {\n\n                // click event is not fired on iOS. To make element \"clickable\" we are\n                // setting the cursor to pointer\n                if (this.platformUtil.isIOS && !this._cursorStyleIsSet) {\n                    this._cursorOriginalValue = this._document.body.style.cursor;\n                    this._document.body.style.cursor = 'pointer';\n                    this._cursorStyleIsSet = true;\n                }\n                this._document.addEventListener('click', this.documentClicked, true);\n            }\n        }\n    }\n\n    private removeOutsideClickListener(info: OverlayInfo) {\n        if (info.settings.modal === false) {\n            let shouldRemoveClickEventListener = true;\n            this._overlayInfos.forEach(o => {\n                if (o.settings.modal === false && o.id !== info.id) {\n                    shouldRemoveClickEventListener = false;\n                }\n            });\n            if (shouldRemoveClickEventListener) {\n                if (this._cursorStyleIsSet) {\n                    this._document.body.style.cursor = this._cursorOriginalValue;\n                    this._cursorOriginalValue = '';\n                    this._cursorStyleIsSet = false;\n                }\n                this._document.removeEventListener('click', this.documentClicked, true);\n            }\n        }\n    }\n\n    private addResizeHandler() {\n        const closingOverlaysCount =\n            this._overlayInfos\n                .filter(o => o.closeAnimationPlayer?.hasStarted())\n                .length;\n        if (this._overlayInfos.length - closingOverlaysCount === 1) {\n            this._document.defaultView.addEventListener('resize', this.repositionAll);\n        }\n    }\n\n    private removeResizeHandler() {\n        const closingOverlaysCount =\n            this._overlayInfos\n                .filter(o => o.closeAnimationPlayer?.hasStarted())\n                .length;\n        if (this._overlayInfos.length - closingOverlaysCount === 1) {\n            this._document.defaultView.removeEventListener('resize', this.repositionAll);\n        }\n    }\n\n    private addCloseOnEscapeListener(info: OverlayInfo) {\n        if (info.settings.closeOnEscape && !this._keyPressEventListener) {\n            this._keyPressEventListener = fromEvent(this._document, 'keydown').pipe(\n                filter((ev: KeyboardEvent) => ev.key === 'Escape' || ev.key === 'Esc')\n            ).subscribe((ev) => {\n                const visibleOverlays = this._overlayInfos.filter(o => o.visible);\n                if (visibleOverlays.length < 1) {\n                    return;\n                }\n                const targetOverlayInfo = visibleOverlays[visibleOverlays.length - 1];\n                if (targetOverlayInfo.visible && targetOverlayInfo.settings.closeOnEscape) {\n                    this.hide(targetOverlayInfo.id, ev);\n                }\n            });\n        }\n    }\n\n    private removeCloseOnEscapeListener() {\n        if (this._keyPressEventListener) {\n            this._keyPressEventListener.unsubscribe();\n            this._keyPressEventListener = null;\n        }\n    }\n\n    private addModalClasses(info: OverlayInfo) {\n        if (info.settings.modal) {\n            const wrapperElement = info.elementRef.nativeElement.parentElement.parentElement;\n            wrapperElement.classList.remove('igx-overlay__wrapper');\n            this.applyAnimationParams(wrapperElement, info.settings.positionStrategy.settings.openAnimation);\n            requestAnimationFrame(() => {\n                wrapperElement.classList.add('igx-overlay__wrapper--modal');\n            });\n        }\n    }\n\n    private removeModalClasses(info: OverlayInfo) {\n        if (info.settings.modal) {\n            const wrapperElement = info.elementRef.nativeElement.parentElement.parentElement;\n            this.applyAnimationParams(wrapperElement, info.settings.positionStrategy.settings.closeAnimation);\n            wrapperElement.classList.remove('igx-overlay__wrapper--modal');\n            wrapperElement.classList.add('igx-overlay__wrapper');\n        }\n    }\n\n    private buildAnimationPlayers(info: OverlayInfo) {\n        if (info.settings.positionStrategy.settings.openAnimation) {\n            info.openAnimationPlayer = this.animationService\n                .buildAnimation(info.settings.positionStrategy.settings.openAnimation, info.elementRef.nativeElement);\n            info.openAnimationPlayer.animationEnd\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => this.openAnimationDone(info));\n        }\n        if (info.settings.positionStrategy.settings.closeAnimation) {\n            info.closeAnimationPlayer = this.animationService\n                .buildAnimation(info.settings.positionStrategy.settings.closeAnimation, info.elementRef.nativeElement);\n            info.closeAnimationPlayer.animationEnd\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => this.closeAnimationDone(info));\n        }\n    }\n\n    private openAnimationDone(info: OverlayInfo) {\n        if (!info.openAnimationDetaching) {\n            this.opened.emit({ id: info.id, componentRef: info.componentRef });\n        }\n        if (info.openAnimationPlayer) {\n            info.openAnimationPlayer.reset();\n        }\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            info.closeAnimationPlayer.reset();\n        }\n    }\n\n    private closeAnimationDone(info: OverlayInfo) {\n        if (info.closeAnimationPlayer) {\n            info.closeAnimationPlayer.reset();\n        }\n        if (info.openAnimationPlayer?.hasStarted()) {\n            info.openAnimationPlayer.reset();\n        }\n        this.closeDone(info);\n    }\n\n    private finishAnimations(info: OverlayInfo) {\n        // // TODO: should we emit here opened or closed events\n        if (info.openAnimationPlayer?.hasStarted()) {\n            info.openAnimationPlayer.finish();\n        }\n        if (info.closeAnimationPlayer?.hasStarted()) {\n            info.closeAnimationPlayer.finish();\n        }\n    }\n\n    private getComponentSize(info: OverlayInfo) {\n        if (info.elementRef?.nativeElement instanceof Element) {\n            const styles = this._document.defaultView.getComputedStyle(info.elementRef.nativeElement);\n            const componentSize = styles.getPropertyValue('--component-size');\n            const globalSize = styles.getPropertyValue('--ig-size');\n            const size = componentSize || globalSize;\n            info.size = size;\n        }\n    }\n}\n","\n// Export position strategies\nexport * from './IPositionStrategy';\nexport * from './global-position-strategy';\nexport * from './container-position-strategy';\nexport * from './connected-positioning-strategy';\nexport * from './auto-position-strategy';\nexport * from './elastic-position-strategy';\n","import { NgZone } from '@angular/core';\nimport { IgxOverlayService } from '../overlay';\nimport { ScrollStrategy } from './scroll-strategy';\n\n/**\n * On scroll reposition the overlay content.\n */\nexport class AbsoluteScrollStrategy extends ScrollStrategy {\n    private _initialized = false;\n    private _document: Document;\n    private _overlayService: IgxOverlayService;\n    private _id: string;\n    private _scrollContainer: HTMLElement;\n    private _zone: NgZone;\n\n    constructor(scrollContainer?: HTMLElement) {\n        super();\n        this._scrollContainer = scrollContainer;\n    }\n\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     * @param document reference to Document object.\n     * @param overlayService IgxOverlay service to use in this strategy.\n     * @param id Unique id for this strategy.\n     * ```typescript\n     * settings.scrollStrategy.initialize(document, overlay, id);\n     * ```\n     */\n    public initialize(document: Document, overlayService: IgxOverlayService, id: string) {\n        if (this._initialized) {\n            return;\n        }\n        this._overlayService = overlayService;\n        this._id = id;\n        this._document = document;\n        this._zone = overlayService.getOverlayById(id).ngZone;\n        this._initialized = true;\n    }\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public attach(): void {\n        if (this._zone) {\n            this._zone.runOutsideAngular(() => {\n                this.addScrollEventListener();\n            });\n        } else {\n            this.addScrollEventListener();\n        }\n    }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void {\n        if (this._scrollContainer) {\n            this._scrollContainer.removeEventListener('scroll', this.onScroll, true);\n        } else {\n            // Tired of this thing throwing every other time. Fix it ffs!\n            this._document?.removeEventListener('scroll', this.onScroll, true);\n        }\n\n        this._initialized = false;\n    }\n\n    private addScrollEventListener() {\n        if (this._scrollContainer) {\n            this._scrollContainer.addEventListener('scroll', this.onScroll, true);\n        } else {\n            this._document.addEventListener('scroll', this.onScroll, true);\n        }\n    }\n\n    private onScroll = (e: Event) => {\n        const overlayInfo = this._overlayService.getOverlayById(this._id);\n        if (!overlayInfo) {\n            return;\n        }\n        if (!overlayInfo.elementRef.nativeElement.contains(e.target)) {\n            this._overlayService.reposition(this._id);\n        }\n    };\n}\n","import { ScrollStrategy } from './scroll-strategy';\n\n/**\n * Prevents scrolling while the overlay content is shown.\n */\nexport class BlockScrollStrategy extends ScrollStrategy {\n    private _initialized = false;\n    private _document: Document;\n    private _initialScrollTop: number;\n    private _initialScrollLeft: number;\n    private _sourceElement: Element;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     */\n    public initialize(document: Document) {\n        if (this._initialized) {\n            return;\n        }\n\n        this._document = document;\n        this._initialized = true;\n    }\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public attach(): void {\n        this._document.addEventListener('scroll', this.onScroll, true);\n    }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void {\n        this._document.removeEventListener('scroll', this.onScroll, true);\n        this._sourceElement = null;\n        this._initialScrollTop = 0;\n        this._initialScrollLeft = 0;\n        this._initialized = false;\n    }\n\n    private onScroll = (ev: Event) => {\n        ev.preventDefault();\n        if (!this._sourceElement || this._sourceElement !== ev.target) {\n            this._sourceElement = ev.target as Element;\n            this._initialScrollTop = this._sourceElement.scrollTop;\n            this._initialScrollLeft = this._sourceElement.scrollLeft;\n        }\n\n        this._sourceElement.scrollTop = this._initialScrollTop;\n        this._sourceElement.scrollLeft = this._initialScrollLeft;\n    };\n}\n","import { IgxOverlayService } from '../overlay';\nimport { OverlayInfo } from '../utilities';\nimport { ScrollStrategy } from './scroll-strategy';\n\n/**\n * Uses a tolerance and closes the shown component upon scrolling if the tolerance is exceeded\n */\nexport class CloseScrollStrategy extends ScrollStrategy {\n    private _document: Document;\n    private _overlayService: IgxOverlayService;\n    private _id: string;\n    private initialScrollTop: number;\n    private initialScrollLeft: number;\n    private _threshold: number;\n    private _initialized = false;\n    private _sourceElement: Element;\n    private _scrollContainer: HTMLElement;\n    private _overlayInfo: OverlayInfo;\n\n    constructor(scrollContainer?: HTMLElement) {\n        super();\n        this._scrollContainer = scrollContainer;\n        this._threshold = 10;\n    }\n\n    /**\n     * Initializes the strategy. Should be called once\n     *\n     * @param document reference to Document object.\n     * @param overlayService IgxOverlay service to use in this strategy.\n     * @param id Unique id for this strategy.\n     * ```typescript\n     * settings.scrollStrategy.initialize(document, overlay, id);\n     * ```\n     */\n    public initialize(document: Document, overlayService: IgxOverlayService, id: string) {\n        if (this._initialized) {\n            return;\n        }\n        this._overlayService = overlayService;\n        this._id = id;\n        this._document = document;\n        this._initialized = true;\n        this._overlayInfo = overlayService.getOverlayById(id);\n    }\n\n    /**\n     * Attaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.attach();\n     * ```\n     */\n    public attach(): void {\n        if (this._scrollContainer) {\n            this._scrollContainer.addEventListener('scroll', this.onScroll);\n            this._sourceElement = this._scrollContainer;\n        } else {\n            this._document.addEventListener('scroll', this.onScroll, true);\n        }\n    }\n\n    /**\n     * Detaches the strategy\n     * ```typescript\n     * settings.scrollStrategy.detach();\n     * ```\n     */\n    public detach(): void {\n        // TODO: check why event listener removes only on first call and remains on each next!!!\n        if (this._scrollContainer) {\n            this._scrollContainer.removeEventListener('scroll', this.onScroll);\n        } else {\n            this._document.removeEventListener('scroll', this.onScroll, true);\n        }\n        this._sourceElement = null;\n        this._initialized = false;\n    }\n\n    private onScroll = (ev: Event) => {\n        if (!this._sourceElement) {\n            this._sourceElement = ev.target as any;\n            this.initialScrollTop = this._sourceElement.scrollTop;\n            this.initialScrollLeft = this._sourceElement.scrollLeft;\n        }\n\n        if (this._overlayInfo.elementRef.nativeElement.contains(this._sourceElement)) {\n            return;\n        }\n        if (Math.abs(this._sourceElement.scrollTop - this.initialScrollTop) > this._threshold ||\n            Math.abs(this._sourceElement.scrollLeft - this.initialScrollLeft) > this._threshold) {\n            this._overlayService.hide(this._id);\n        }\n    };\n}\n","\n// Export scroll strategies\nexport * from './scroll-strategy';\nexport * from './IScrollStrategy';\nexport * from './absolute-scroll-strategy';\nexport * from './block-scroll-strategy';\nexport * from './close-scroll-strategy';\nexport * from './NoOpScrollStrategy';\n\n","import { TransactionService, Transaction, State, StateUpdateEvent, TransactionType } from './transaction';\nimport { EventEmitter } from '@angular/core';\nimport { isObject, mergeObjects } from '../../core/utils';\nimport { DefaultDataCloneStrategy, IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\n\nexport class IgxBaseTransactionService<T extends Transaction, S extends State> implements TransactionService<T, S> {\n    /**\n     * Gets/Sets the data clone strategy used to clone data\n     */\n    public get cloneStrategy(): IDataCloneStrategy {\n        return this._cloneStrategy;\n    }\n\n    public set cloneStrategy(strategy: IDataCloneStrategy) {\n        if (strategy) {\n            this._cloneStrategy = strategy;\n        }\n    }\n\n    /**\n     * @returns if there are any transactions in the Redo stack\n     */\n    public get canRedo(): boolean {\n        return false;\n    }\n\n    /**\n     * @returns if there are any transactions in the Undo stack\n     */\n    public get canUndo(): boolean {\n        return false;\n    }\n\n    /**\n     * Returns whether transaction is enabled for this service\n     */\n    public get enabled(): boolean {\n        return this._isPending;\n    }\n\n    /**\n     * Event fired when transaction state has changed - add transaction, commit all transactions, undo and redo\n     */\n    public onStateUpdate = new EventEmitter<StateUpdateEvent>();\n\n    protected _isPending = false;\n    protected _pendingTransactions: T[] = [];\n    protected _pendingStates: Map<any, S> = new Map();\n    private _cloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy();\n\n    /**\n     * Adds provided  transaction with recordRef if any\n     *\n     * @param transaction Transaction to be added\n     * @param recordRef Reference to the value of the record in the data source related to the changed item\n     */\n    public add(transaction: T, recordRef?: any): void {\n        if (this._isPending) {\n            this.updateState(this._pendingStates, transaction, recordRef);\n            this._pendingTransactions.push(transaction);\n        }\n    }\n\n    /**\n     * Returns all recorded transactions in chronological order\n     *\n     * @param id Optional record id to get transactions for\n     * @returns All transaction in the service or for the specified record\n     */\n    public getTransactionLog(_id?: any): T[] {\n        return [];\n    }\n\n    /**\n     * Remove the last transaction if any\n     */\n    public undo(): void { }\n\n     /**\n      * Applies the last undone transaction if any\n      */\n    public redo(): void { }\n\n    /**\n     * Returns aggregated changes from all transactions\n     *\n     * @param mergeChanges If set to true will merge each state's value over relate recordRef\n     * and will record resulting value in the related transaction\n     * @returns Collection of aggregated transactions for each changed record\n     */\n    public getAggregatedChanges(mergeChanges: boolean): T[] {\n        const result: T[] = [];\n        this._pendingStates.forEach((state: S, key: any) => {\n            const value = mergeChanges ? this.getAggregatedValue(key, mergeChanges) : state.value;\n            result.push({ id: key, newValue: value, type: state.type } as T);\n        });\n        return result;\n    }\n\n    /**\n     * Returns the state of the record with provided id\n     *\n     * @param id The id of the record\n     * @param pending Should get pending state\n     * @returns State of the record if any\n     */\n    public getState(id: any): S {\n        return this._pendingStates.get(id);\n    }\n\n    /**\n     * Returns value of the required id including all uncommitted changes\n     *\n     * @param id The id of the record to return value for\n     * @param mergeChanges If set to true will merge state's value over relate recordRef\n     * and will return merged value\n     * @returns Value with changes or **null**\n     */\n    public getAggregatedValue(id: any, mergeChanges: boolean): any {\n        const state = this._pendingStates.get(id);\n        if (!state) {\n            return null;\n        }\n        if (mergeChanges && state.recordRef) {\n            return this.updateValue(state);\n        }\n        return state.value;\n    }\n\n    /**\n     * Applies all transactions over the provided data\n     *\n     * @param data Data source to update\n     * @param id Optional record id to commit transactions for\n     */\n    public commit(_data: any[], _id?: any): void { }\n\n    /**\n     * Clears all transactions\n     *\n     * @param id Optional record id to clear transactions for\n     */\n    public clear(_id?: any): void {\n        this._pendingStates.clear();\n        this._pendingTransactions = [];\n    }\n\n    /**\n     * Starts pending transactions. All transactions passed after call to startPending\n     * will not be added to transaction log\n     */\n    public startPending(): void {\n        this._isPending = true;\n    }\n\n    /**\n     * Clears all pending transactions and aggregated pending state. If commit is set to true\n     * commits pending states as single transaction\n     *\n     * @param commit Should commit the pending states\n     */\n    public endPending(_commit: boolean): void {\n        this._isPending = false;\n        this._pendingStates.clear();\n        this._pendingTransactions = [];\n    }\n\n\n    /**\n     * Updates the provided states collection according to passed transaction and recordRef\n     *\n     * @param states States collection to apply the update to\n     * @param transaction Transaction to apply to the current state\n     * @param recordRef Reference to the value of the record in data source, if any, where transaction should be applied\n     */\n    protected updateState(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        let state = states.get(transaction.id);\n        if (state) {\n            if (isObject(state.value)) {\n                mergeObjects(state.value, transaction.newValue);\n            } else {\n                state.value = transaction.newValue;\n            }\n        } else {\n            state = { value: this.cloneStrategy.clone(transaction.newValue), recordRef, type: transaction.type } as S;\n            states.set(transaction.id, state);\n        }\n\n        this.cleanState(transaction.id, states);\n    }\n\n    /**\n     * Updates the recordRef of the provided state with all the changes in the state. Accepts primitive and object value types\n     *\n     * @param state State to update value for\n     * @returns updated value including all the changes in provided state\n     */\n    protected updateValue(state: S) {\n        return this.mergeValues(state.recordRef, state.value);\n    }\n\n    /**\n     * Merges second values in first value and the result in empty object. If values are primitive type\n     * returns second value if exists, or first value.\n     *\n     * @param first Value to merge into\n     * @param second Value to merge\n     */\n    protected mergeValues<U>(first: U, second: U): U {\n        if (isObject(first) || isObject(second)) {\n            return mergeObjects(this.cloneStrategy.clone(first), second);\n        } else {\n            return second ? second : first;\n        }\n    }\n\n    /**\n     * Compares the state with recordRef and clears all duplicated values. If any state ends as\n     * empty object removes it from states.\n     *\n     * @param state State to clean\n     */\n    protected cleanState(id: any, states: Map<any, S>): void {\n        const state = states.get(id);\n        //  do nothing if\n        //  there is no state, or\n        //  there is no state value (e.g. DELETED transaction), or\n        //  there is no recordRef (e.g. ADDED transaction)\n        if (state && state.value && state.recordRef) {\n            //  if state's value is object compare each key with the ones in recordRef\n            //  if values in any key are the same delete it from state's value\n            //  if state's value is not object, simply compare with recordRef and remove\n            //  the state if they are equal\n            if (isObject(state.recordRef)) {\n                for (const key of Object.keys(state.value)) {\n                    if (JSON.stringify(state.recordRef[key]) === JSON.stringify(state.value[key])) {\n                        delete state.value[key];\n                    }\n                }\n\n                //  if state's value is empty remove the state from the states, only if state is not DELETE type\n                if (state.type !== TransactionType.DELETE && Object.keys(state.value).length === 0) {\n                    states.delete(id);\n                }\n            } else {\n                if (state.recordRef === state.value) {\n                    states.delete(id);\n                }\n            }\n        }\n    }\n}\n","import { Transaction, State, TransactionType, TransactionEventOrigin, Action } from './transaction';\nimport { IgxBaseTransactionService } from './base-transaction';\nimport { isObject, mergeObjects } from '../../core/utils';\n\nexport class IgxTransactionService<T extends Transaction, S extends State> extends IgxBaseTransactionService<T, S> {\n\n    protected _transactions: T[] = [];\n    protected _redoStack: Action<T>[][] = [];\n    protected _undoStack: Action<T>[][] = [];\n    protected _states: Map<any, S> = new Map();\n\n    /**\n     * @returns if there are any transactions in the Undo stack\n     */\n    public override get canUndo(): boolean {\n        return this._undoStack.length > 0;\n    }\n\n    /**\n     * @returns if there are any transactions in the Redo stack\n     */\n    public override get canRedo(): boolean {\n        return this._redoStack.length > 0;\n    }\n\n    /**\n     * Adds provided  transaction with recordRef if any\n     *\n     * @param transaction Transaction to be added\n     * @param recordRef Reference to the value of the record in the data source related to the changed item\n     */\n    public override add(transaction: T, recordRef?: any): void {\n        const states = this._isPending ? this._pendingStates : this._states;\n        this.verifyAddedTransaction(states, transaction, recordRef);\n        this.addTransaction(transaction, states, recordRef);\n    }\n\n    /**\n     * Returns all recorded transactions in chronological order\n     *\n     * @param id Optional record id to get transactions for\n     * @returns All transaction in the service or for the specified record\n     */\n    public override getTransactionLog(id?: any): T[] {\n        if (id !== undefined) {\n            return this._transactions.filter(t => t.id === id);\n        }\n        return [...this._transactions];\n    }\n\n    /**\n     * Returns aggregated changes from all transactions\n     *\n     * @param mergeChanges If set to true will merge each state's value over relate recordRef\n     * and will record resulting value in the related transaction\n     * @returns Collection of aggregated transactions for each changed record\n     */\n    public override getAggregatedChanges(mergeChanges: boolean): T[] {\n        const result: T[] = [];\n        this._states.forEach((state: S, key: any) => {\n            const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : state.value;\n            result.push({ id: key, newValue: value, type: state.type } as T);\n        });\n        return result;\n    }\n\n    /**\n     * Returns the state of the record with provided id\n     *\n     * @param id The id of the record\n     * @param pending Should get pending state\n     * @returns State of the record if any\n     */\n    public override getState(id: any, pending = false): S {\n        return pending ? this._pendingStates.get(id) : this._states.get(id);\n    }\n\n    /**\n     * Returns whether transaction is enabled for this service\n     */\n    public override get enabled(): boolean {\n        return true;\n    }\n\n    /**\n     * Returns value of the required id including all uncommitted changes\n     *\n     * @param id The id of the record to return value for\n     * @param mergeChanges If set to true will merge state's value over relate recordRef\n     * and will return merged value\n     * @returns Value with changes or **null**\n     */\n    public override getAggregatedValue(id: any, mergeChanges: boolean): any {\n        const state = this._states.get(id);\n        const pendingState = super.getState(id);\n\n        //  if there is no state and there is no pending state return null\n        if (!state && !pendingState) {\n            return null;\n        }\n\n        const pendingChange = super.getAggregatedValue(id, false);\n        const change = state && state.value;\n        let aggregatedValue = this.mergeValues(change, pendingChange);\n        if (mergeChanges) {\n            const originalValue = state ? state.recordRef : pendingState.recordRef;\n            aggregatedValue = this.mergeValues(originalValue, aggregatedValue);\n        }\n        return aggregatedValue;\n    }\n\n    /**\n     * Clears all pending transactions and aggregated pending state. If commit is set to true\n     * commits pending states as single transaction\n     *\n     * @param commit Should commit the pending states\n     */\n    public override endPending(commit: boolean): void {\n        this._isPending = false;\n        if (commit) {\n            const actions: Action<T>[] = [];\n            // don't use addTransaction due to custom undo handling\n            for (const transaction of this._pendingTransactions) {\n                const pendingState = this._pendingStates.get(transaction.id);\n                this._transactions.push(transaction);\n                this.updateState(this._states, transaction, pendingState.recordRef);\n                actions.push({ transaction, recordRef: pendingState.recordRef });\n            }\n\n            this._undoStack.push(actions);\n            this._redoStack = [];\n\n            this.onStateUpdate.emit({ origin: TransactionEventOrigin.END, actions });\n        }\n        super.endPending(commit);\n    }\n\n    /**\n     * Applies all transactions over the provided data\n     *\n     * @param data Data source to update\n     * @param id Optional record id to commit transactions for\n     */\n    public override commit(data: any[], id?: any): void {\n        if (id !== undefined) {\n            const state = this.getState(id);\n            if (state) {\n                this.updateRecord(data, state);\n            }\n        } else {\n            this._states.forEach((s: S) => {\n                this.updateRecord(data, s);\n            });\n        }\n        this.clear(id);\n    }\n\n    /**\n     * Clears all transactions\n     *\n     * @param id Optional record id to clear transactions for\n     */\n    public override clear(id?: any): void {\n        if (id !== undefined) {\n            this._transactions = this._transactions.filter(t => t.id !== id);\n            this._states.delete(id);\n            //  Undo stack is an array of actions. Each action is array of transaction like objects\n            //  We are going trough all the actions. For each action we are filtering out transactions\n            //  with provided id. Finally if any action ends up as empty array we are removing it from\n            //  undo stack\n            this._undoStack = this._undoStack.map(a => a.filter(t => t.transaction.id !== id)).filter(a => a.length > 0);\n        } else {\n            this._transactions = [];\n            this._states.clear();\n            this._undoStack = [];\n        }\n        this._redoStack = [];\n        this.onStateUpdate.emit({ origin: TransactionEventOrigin.CLEAR, actions: [] });\n    }\n\n    /**\n     * Remove the last transaction if any\n     */\n    public override undo(): void {\n        if (this._undoStack.length <= 0) {\n            return;\n        }\n\n        const lastActions: Action<T>[] = this._undoStack.pop();\n        this._transactions.splice(this._transactions.length - lastActions.length);\n        this._redoStack.push(lastActions);\n\n        this._states.clear();\n        for (const currentActions of this._undoStack) {\n            for (const transaction of currentActions) {\n                this.updateState(this._states, transaction.transaction, transaction.recordRef);\n            }\n        }\n\n        this.onStateUpdate.emit({ origin: TransactionEventOrigin.UNDO, actions: lastActions });\n    }\n\n    /**\n     * Applies the last undone transaction if any\n     */\n    public override redo(): void {\n        if (this._redoStack.length > 0) {\n            const actions: Action<T>[] = this._redoStack.pop();\n            for (const action of actions) {\n                this.updateState(this._states, action.transaction, action.recordRef);\n                this._transactions.push(action.transaction);\n            }\n\n            this._undoStack.push(actions);\n            this.onStateUpdate.emit({ origin: TransactionEventOrigin.REDO, actions });\n        }\n    }\n\n    protected addTransaction(transaction: T, states: Map<any, S>, recordRef?: any) {\n        this.updateState(states, transaction, recordRef);\n\n        const transactions = this._isPending ? this._pendingTransactions : this._transactions;\n        transactions.push(transaction);\n\n        if (!this._isPending) {\n            const actions = [{ transaction, recordRef }];\n            this._undoStack.push(actions);\n            this._redoStack = [];\n            this.onStateUpdate.emit({ origin: TransactionEventOrigin.ADD, actions });\n        }\n    }\n\n    /**\n     * Verifies if the passed transaction is correct. If not throws an exception.\n     *\n     * @param transaction Transaction to be verified\n     */\n    protected verifyAddedTransaction(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        const state = states.get(transaction.id);\n        switch (transaction.type) {\n            case TransactionType.ADD:\n                if (state) {\n                    //  cannot add same item twice\n                    throw new Error(`Cannot add this transaction. Transaction with id: ${transaction.id} has been already added.`);\n                }\n                break;\n            case TransactionType.DELETE:\n            case TransactionType.UPDATE:\n                if (state && state.type === TransactionType.DELETE) {\n                    //  cannot delete or update deleted items\n                    throw new Error(`Cannot add this transaction. Transaction with id: ${transaction.id} has been already deleted.`);\n                }\n                if (!state && !recordRef && !this._isPending) {\n                    //  cannot initially add transaction or delete item with no recordRef\n                    throw new Error(`Cannot add this transaction. This is first transaction of type ${transaction.type} ` +\n                        `for id ${transaction.id}. For first transaction of this type recordRef is mandatory.`);\n                }\n                break;\n        }\n    }\n\n    /**\n     * Updates the provided states collection according to passed transaction and recordRef\n     *\n     * @param states States collection to apply the update to\n     * @param transaction Transaction to apply to the current state\n     * @param recordRef Reference to the value of the record in data source, if any, where transaction should be applied\n     */\n    protected override updateState(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        let state = states.get(transaction.id);\n        //  if TransactionType is ADD simply add transaction to states;\n        //  if TransactionType is DELETE:\n        //    - if there is state with this id of type ADD remove it from the states;\n        //    - if there is state with this id of type UPDATE change its type to DELETE;\n        //    - if there is no state with this id add transaction to states;\n        //  if TransactionType is UPDATE:\n        //    - if there is state with this id of type ADD merge new value and state recordRef into state new value\n        //    - if there is state with this id of type UPDATE merge new value into state new value\n        //    - if there is state with this id and state type is DELETE change its type to UPDATE\n        //    - if there is no state with this id add transaction to states;\n        if (state) {\n            switch (transaction.type) {\n                case TransactionType.DELETE:\n                    if (state.type === TransactionType.ADD) {\n                        states.delete(transaction.id);\n                    } else if (state.type === TransactionType.UPDATE) {\n                        state.value = transaction.newValue;\n                        state.type = TransactionType.DELETE;\n                    }\n                    break;\n                case TransactionType.UPDATE:\n                    if (isObject(state.value)) {\n                        if (state.type === TransactionType.ADD) {\n                            state.value = this.mergeValues(state.value, transaction.newValue);\n                        }\n                        if (state.type === TransactionType.UPDATE) {\n                            mergeObjects(state.value, transaction.newValue);\n                        }\n                    } else {\n                        state.value = transaction.newValue;\n                    }\n            }\n        } else {\n            state = { value: this.cloneStrategy.clone(transaction.newValue), recordRef, type: transaction.type } as S;\n            states.set(transaction.id, state);\n        }\n\n        this.cleanState(transaction.id, states);\n    }\n\n    /**\n     * Updates state related record in the provided data\n     *\n     * @param data Data source to update\n     * @param state State to update data from\n     */\n    protected updateRecord(data: any[], state: S) {\n        const index = data.findIndex(i => JSON.stringify(i) === JSON.stringify(state.recordRef || {}));\n        switch (state.type) {\n            case TransactionType.ADD:\n                data.push(state.value);\n                break;\n            case TransactionType.DELETE:\n                if (0 <= index && index < data.length) {\n                    data.splice(index, 1);\n                }\n                break;\n            case TransactionType.UPDATE:\n                if (0 <= index && index < data.length) {\n                    data[index] = this.updateValue(state);\n                }\n                break;\n        }\n    }\n}\n","import { HierarchicalTransaction, HierarchicalState, TransactionType } from './transaction';\nimport { IgxTransactionService } from './igx-transaction';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { HierarchicalTransactionService } from './hierarchical-transaction';\n\n/** @experimental @hidden */\nexport class IgxHierarchicalTransactionService<T extends HierarchicalTransaction, S extends HierarchicalState>\n    extends IgxTransactionService<T, S> implements HierarchicalTransactionService<T, S> {\n\n    public override getAggregatedChanges(mergeChanges: boolean): T[] {\n        const result: T[] = [];\n        this._states.forEach((state: S, key: any) => {\n            const value = mergeChanges ? this.mergeValues(state.recordRef, state.value) : this.cloneStrategy.clone(state.value);\n            this.clearArraysFromObject(value);\n            result.push({ id: key, path: state.path, newValue: value, type: state.type } as T);\n        });\n        return result;\n    }\n\n    public override commit(data: any[], primaryKeyOrId?: any, childDataKey?: any, id?: any): void {\n        if (childDataKey !== undefined) {\n            let transactions = this.getAggregatedChanges(true);\n            if (id !== undefined) {\n                transactions = transactions.filter(t => t.id === id);\n            }\n            DataUtil.mergeHierarchicalTransactions(data, transactions, childDataKey, primaryKeyOrId, this.cloneStrategy, true);\n            this.clear(id);\n        } else {\n            super.commit(data, primaryKeyOrId);\n        }\n    }\n\n    protected override updateState(states: Map<any, S>, transaction: T, recordRef?: any): void {\n        super.updateState(states, transaction, recordRef);\n\n        //  if transaction has no path, e.g. flat data source, get out\n        if (!transaction.path) {\n            return;\n        }\n\n        const currentState = states.get(transaction.id);\n        if (currentState) {\n            currentState.path = transaction.path;\n        }\n\n        //  if transaction has path, Hierarchical data source, and it is DELETE\n        //  type transaction for all child rows remove ADD states and update\n        //  transaction type and value of UPDATE states\n        if (transaction.type === TransactionType.DELETE) {\n            states.forEach((v: S, k: any) => {\n                if (v.path && v.path.indexOf(transaction.id) !== -1) {\n                    switch (v.type) {\n                        case TransactionType.ADD:\n                            states.delete(k);\n                            break;\n                        case TransactionType.UPDATE:\n                            states.get(k).type = TransactionType.DELETE;\n                            states.get(k).value = null;\n                    }\n                }\n            });\n        }\n    }\n\n    //  TODO: remove this method. Force cloning to strip child arrays when needed instead\n    private clearArraysFromObject(obj: any) {\n        if (obj) {\n            for (const prop of Object.keys(obj)) {\n                if (Array.isArray(obj[prop])) {\n                    delete obj[prop];\n                }\n            }\n        }\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { IgxBaseTransactionService } from './base-transaction';\nimport { HierarchicalTransactionService } from './hierarchical-transaction';\nimport { IgxHierarchicalTransactionService } from './igx-hierarchical-transaction';\nimport { IgxTransactionService } from './igx-transaction';\nimport { HierarchicalState, HierarchicalTransaction, State, Transaction, TransactionService } from './transaction';\n\n/**\n * The type of the transaction that should be provided.\n * When batchEditing is disabled, `None` is provided.\n * When enabled - `Base` is provided.\n * An enum instead of a boolean value leaves room for extra scenarios in the future.\n */\nexport const enum TRANSACTION_TYPE {\n    'None' = 'None',\n    'Base' = 'Base'\n}\n\n/**\n * Factory service for instantiating TransactionServices\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class IgxFlatTransactionFactory {\n\n    /**\n     * Creates a new Transaction service instance depending on the specified type.\n     *\n     * @param type The type of the transaction\n     * @returns a new instance of TransactionService<Transaction, State>\n     */\n    public create(type: TRANSACTION_TYPE): TransactionService<Transaction, State> {\n        switch (type) {\n            case (TRANSACTION_TYPE.Base):\n                return new IgxTransactionService();\n            default:\n                return new IgxBaseTransactionService();\n        }\n    }\n}\n\n/**\n * Factory service for instantiating HierarchicalTransactionServices\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class IgxHierarchicalTransactionFactory extends IgxFlatTransactionFactory {\n\n    /**\n     * Creates a new HierarchialTransaction service instance depending on the specified type.\n     *\n     * @param type The type of the transaction\n     * @returns a new instance of HierarchialTransaction<HierarchialTransaction, HierarchialState>\n     */\n    public override create(type: TRANSACTION_TYPE): HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState> {\n        switch (type) {\n            case (TRANSACTION_TYPE.Base):\n                return new IgxHierarchicalTransactionService();\n            default:\n                return new IgxBaseTransactionService();\n        }\n    }\n}\n","import { inject, InjectionToken } from \"@angular/core\";\nimport { mkenum } from \"../../core/utils\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { DOCUMENT } from \"@angular/common\";\n\nexport class ThemeToken {\n    private document = inject(DOCUMENT);\n    public subject: BehaviorSubject<IgxTheme>;\n\n    constructor(private t?: IgxTheme) {\n        const globalTheme = globalThis.window\n            ?.getComputedStyle(this.document.body)\n            .getPropertyValue(\"--ig-theme\")\n            .trim() || 'material' as IgxTheme;\n\n        const _theme = t ?? globalTheme as IgxTheme;\n        this.subject = new BehaviorSubject(_theme);\n    }\n\n    public onChange(callback: (theme: IgxTheme) => void) {\n        return this.subject.subscribe(callback);\n    }\n\n    public set(theme: IgxTheme) {\n        this.subject.next(theme);\n    }\n\n    public get theme() {\n        return this.subject.getValue();\n    }\n\n    public get preferToken() {\n        return !!this.t;\n    }\n}\n\nexport const THEME_TOKEN = new InjectionToken<ThemeToken>('ThemeToken', {\n    providedIn: 'root',\n    factory: () => new ThemeToken()\n});\n\nconst Theme = /*@__PURE__*/ mkenum({\n    Material: \"material\",\n    Fluent: \"fluent\",\n    Bootstrap: \"bootstrap\",\n    IndigoDesign: \"indigo\",\n});\n\n/**\n * Determines the component theme.\n */\nexport type IgxTheme = (typeof Theme)[keyof typeof Theme];\n","// Export services\nexport * from '../directives/text-highlight/text-highlight.service';\nexport * from './csv/csv-exporter';\nexport * from './csv/csv-exporter-options';\nexport * from './excel/excel-exporter';\nexport * from './excel/excel-exporter-options';\nexport * from './exporter-common/base-export-service';\nexport * from './exporter-common/exporter-options-base';\nexport * from './overlay/overlay';\nexport * from './overlay/position';\nexport * from './overlay/scroll';\nexport {\n    AbsolutePosition, HorizontalAlignment, OverlayAnimationEventArgs, OverlayCancelableEventArgs, OverlayClosingEventArgs,\n    OverlayCreateSettings, OverlayEventArgs, OverlaySettings, Point, PositionSettings, RelativePosition, RelativePositionStrategy, VerticalAlignment\n} from './overlay/utilities';\nexport * from './transaction/base-transaction';\nexport * from './transaction/hierarchical-transaction';\nexport * from './transaction/igx-hierarchical-transaction';\nexport * from './transaction/igx-transaction';\nexport * from './transaction/transaction';\nexport * from './transaction/transaction-factory.service';\nexport * from './theme/theme.token';\n\n","import { CancelableEventArgs, CancelableBrowserEventArgs, IBaseEventArgs, mkenum } from '../core/utils';\nimport { IgxDropDownItemBaseDirective } from './drop-down-item.base';\nimport { IToggleView } from '../core/navigation/IToggleView';\nimport { EventEmitter, InjectionToken } from '@angular/core';\n\n/** @hidden */\nexport enum Navigate {\n    Up = -1,\n    Down = 1\n}\n\n/** Key actions that have designated handlers in IgxDropDownComponent */\nexport const DropDownActionKey = /*@__PURE__*/mkenum({\n    ESCAPE: 'escape',\n    ENTER: 'enter',\n    SPACE: 'space'\n});\nexport type DropDownActionKey = (typeof DropDownActionKey)[keyof typeof DropDownActionKey];\n\n/**\n * Interface that encapsulates selectionChanging event arguments - old selection, new selection and cancel selection.\n *\n * @export\n */\nexport interface ISelectionEventArgs extends CancelableEventArgs, IBaseEventArgs {\n    oldSelection: IgxDropDownItemBaseDirective;\n    newSelection: IgxDropDownItemBaseDirective;\n}\n\n/**\n * Interface for an instance of IgxDropDownNavigationDirective\n *\n * @export\n */\nexport interface IDropDownNavigationDirective {\n    target: any;\n    handleKeyDown(event: KeyboardEvent): void;\n    onArrowDownKeyDown(event?: KeyboardEvent): void;\n    onArrowUpKeyDown(event?: KeyboardEvent): void;\n    onEndKeyDown(event?: KeyboardEvent): void;\n    onHomeKeyDown(event?: KeyboardEvent): void;\n}\n\nexport const IGX_DROPDOWN_BASE = /*@__PURE__*/new InjectionToken<IDropDownBase>('IgxDropDownBaseToken');\n\n/**\n * @hidden\n */\nexport interface IDropDownList {\n    selectionChanging: EventEmitter<ISelectionEventArgs>;\n    width: string;\n    height: string;\n    id: string;\n    maxHeight: string;\n    collapsed: boolean;\n    items: IgxDropDownItemBaseDirective[];\n    headers: IgxDropDownItemBaseDirective[];\n    focusedItem: IgxDropDownItemBaseDirective;\n    navigateFirst(): void;\n    navigateLast(): void;\n    navigateNext(): void;\n    navigatePrev(): void;\n    navigateItem(newIndex: number, direction?: Navigate): void;\n    onItemActionKey(key: DropDownActionKey, event?: Event): void;\n}\n\n/**\n * @hidden\n */\nexport interface IDropDownBase extends IDropDownList, IToggleView {\n    selectedItem: any;\n    opening: EventEmitter<CancelableBrowserEventArgs>;\n    opened: EventEmitter<IBaseEventArgs>;\n    closing: EventEmitter<CancelableBrowserEventArgs>;\n    closed: EventEmitter<IBaseEventArgs>;\n    allowItemsFocus?: boolean;\n    setSelectedItem(index: number): void;\n    selectItem(item: IgxDropDownItemBaseDirective, event?: Event, emit?: boolean): void;\n}\n\n","import {\n    Input, HostBinding, ElementRef, QueryList, Output, EventEmitter, ChangeDetectorRef, Directive,\n    OnInit,\n    Inject\n} from '@angular/core';\n\nimport { Navigate, ISelectionEventArgs } from './drop-down.common';\nimport { IDropDownList } from './drop-down.common';\nimport { DropDownActionKey } from './drop-down.common';\nimport { IgxDropDownItemBaseDirective } from './drop-down-item.base';\nimport { DOCUMENT } from '@angular/common';\n\nlet NEXT_ID = 0;\n\n/**\n * An abstract class, defining a drop-down component, with:\n * Properties for display styles and classes\n * A collection items of type `IgxDropDownItemBaseDirective`\n * Properties and methods for navigating (highlighting/focusing) items from the collection\n * Properties and methods for selecting items from the collection\n */\n@Directive()\nexport abstract class IgxDropDownBaseDirective implements IDropDownList, OnInit {\n    /**\n     * Emitted when item selection is changing, before the selection completes\n     *\n     * ```html\n     * <igx-drop-down (selectionChanging)='handleSelection()'></igx-drop-down>\n     * ```\n     */\n    @Output()\n    public selectionChanging = new EventEmitter<ISelectionEventArgs>();\n\n    /**\n     *  Gets/Sets the width of the drop down\n     *\n     * ```typescript\n     * // get\n     * let myDropDownCurrentWidth = this.dropdown.width;\n     * ```\n     * ```html\n     * <!--set-->\n     * <igx-drop-down [width]='160px'></igx-drop-down>\n     * ```\n     */\n    @Input()\n    public width: string;\n\n    /**\n     * Gets/Sets the height of the drop down\n     *\n     * ```typescript\n     * // get\n     * let myDropDownCurrentHeight = this.dropdown.height;\n     * ```\n     * ```html\n     * <!--set-->\n     * <igx-drop-down [height]='400px'></igx-drop-down>\n     * ```\n     */\n    @Input()\n    public height: string;\n\n    /**\n     * Gets/Sets the drop down's id\n     *\n     * ```typescript\n     * // get\n     * let myDropDownCurrentId = this.dropdown.id;\n     * ```\n     * ```html\n     * <!--set-->\n     * <igx-drop-down [id]='newDropDownId'></igx-drop-down>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this._id;\n    }\n    public set id(value: string) {\n        this._id = value;\n    }\n\n    /**\n     * Gets/Sets the drop down's container max height.\n     *\n     * ```typescript\n     * // get\n     * let maxHeight = this.dropdown.maxHeight;\n     * ```\n     * ```html\n     * <!--set-->\n     * <igx-drop-down [maxHeight]='200px'></igx-drop-down>\n     * ```\n     */\n    @Input()\n    @HostBinding('style.maxHeight')\n    public maxHeight = null;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-drop-down')\n    public cssClass = true;\n\n    /**\n     * Get all non-header items\n     *\n     * ```typescript\n     * let myDropDownItems = this.dropdown.items;\n     * ```\n     */\n    public get items(): IgxDropDownItemBaseDirective[] {\n        const items: IgxDropDownItemBaseDirective[] = [];\n        if (this.children !== undefined) {\n            for (const child of this.children.toArray()) {\n                if (!child.isHeader) {\n                    items.push(child);\n                }\n            }\n        }\n\n        return items;\n    }\n\n    /**\n     * Get all header items\n     *\n     * ```typescript\n     * let myDropDownHeaderItems = this.dropdown.headers;\n     * ```\n     */\n    public get headers(): IgxDropDownItemBaseDirective[] {\n        const headers: IgxDropDownItemBaseDirective[] = [];\n        if (this.children !== undefined) {\n            for (const child of this.children.toArray()) {\n                if (child.isHeader) {\n                    headers.push(child);\n                }\n            }\n        }\n\n        return headers;\n    }\n\n    /**\n     * Get dropdown html element\n     *\n     * ```typescript\n     * let myDropDownElement = this.dropdown.element;\n     * ```\n     */\n    public get element() {\n        return this.elementRef.nativeElement;\n    }\n    /**\n     * @hidden @internal\n     * Get dropdown's html element of its scroll container\n     */\n    public get scrollContainer(): HTMLElement {\n        return this.element;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public children: QueryList<IgxDropDownItemBaseDirective>;\n\n    protected _width;\n    protected _height;\n    protected _focusedItem: any = null;\n    protected _id = `igx-drop-down-${NEXT_ID++}`;\n    protected computedStyles;\n\n    /**\n     * Gets if the dropdown is collapsed\n     */\n    public abstract readonly collapsed: boolean;\n\n    constructor(\n        protected elementRef: ElementRef,\n        protected cdr: ChangeDetectorRef,\n        @Inject(DOCUMENT) public document: any) {}\n\n    public ngOnInit(): void {\n        this.computedStyles = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n    }\n\n    /** Keydown Handler */\n    public onItemActionKey(key: DropDownActionKey, event?: Event) {\n        switch (key) {\n            case DropDownActionKey.ENTER:\n            case DropDownActionKey.SPACE:\n                this.selectItem(this.focusedItem, event);\n                break;\n            case DropDownActionKey.ESCAPE:\n        }\n    }\n\n    /**\n     * Emits selectionChanging with the target item & event\n     *\n     * @hidden @internal\n     * @param newSelection the item selected\n     * @param event the event that triggered the call\n     */\n    public selectItem(newSelection?: IgxDropDownItemBaseDirective, event?: Event, emit = true) {  // eslint-disable-line\n        this.selectionChanging.emit({\n            newSelection,\n            oldSelection: null,\n            cancel: false\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get focusedItem(): IgxDropDownItemBaseDirective {\n        return this._focusedItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set focusedItem(item: IgxDropDownItemBaseDirective) {\n        this._focusedItem = item;\n    }\n\n    /**\n     * Navigates to the item on the specified index\n     *\n     * @param newIndex number - the index of the item in the `items` collection\n     */\n    public navigateItem(newIndex: number) {\n        if (newIndex !== -1) {\n            const oldItem = this._focusedItem;\n            const newItem = this.items[newIndex];\n            if (oldItem) {\n                oldItem.focused = false;\n            }\n            this.focusedItem = newItem;\n            this.scrollToHiddenItem(newItem);\n            this.focusedItem.focused = true;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public navigateFirst() {\n        this.navigate(Navigate.Down, -1);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public navigateLast() {\n        this.navigate(Navigate.Up, this.items.length);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public navigateNext() {\n        this.navigate(Navigate.Down);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public navigatePrev() {\n        this.navigate(Navigate.Up);\n    }\n\n    protected scrollToHiddenItem(newItem: IgxDropDownItemBaseDirective) {\n        const elementRect = newItem.element.nativeElement.getBoundingClientRect();\n        const parentRect = this.scrollContainer.getBoundingClientRect();\n        if (parentRect.top > elementRect.top) {\n            this.scrollContainer.scrollTop -= (parentRect.top - elementRect.top);\n        }\n\n        if (parentRect.bottom < elementRect.bottom) {\n            this.scrollContainer.scrollTop += (elementRect.bottom - parentRect.bottom);\n        }\n    }\n\n    protected navigate(direction: Navigate, currentIndex?: number) {\n        let index = -1;\n        if (this._focusedItem) {\n            index = currentIndex ? currentIndex : this.focusedItem.itemIndex;\n        }\n        const newIndex = this.getNearestSiblingFocusableItemIndex(index, direction);\n        this.navigateItem(newIndex);\n    }\n\n    protected getNearestSiblingFocusableItemIndex(startIndex: number, direction: Navigate): number {\n        let index = startIndex;\n        const items = this.items;\n        while (items[index + direction] && items[index + direction].disabled) {\n            index += direction;\n        }\n\n        index += direction;\n        if (index >= 0 && index < items.length) {\n            return index;\n        } else {\n            return -1;\n        }\n    }\n}\n","import { Directive, Optional, Self, Input, HostListener, Inject } from '@angular/core';\nimport { IGX_DROPDOWN_BASE } from './drop-down.common';\nimport { IDropDownNavigationDirective } from './drop-down.common';\nimport { IgxDropDownBaseDirective } from './drop-down.base';\nimport { DropDownActionKey } from './drop-down.common';\n\n/**\n * Navigation Directive that handles keyboard events on its host and controls a targeted IgxDropDownBaseDirective component\n */\n@Directive({\n    selector: '[igxDropDownItemNavigation]',\n    standalone: true\n})\nexport class IgxDropDownItemNavigationDirective implements IDropDownNavigationDirective {\n\n    protected _target: IgxDropDownBaseDirective = null;\n\n    constructor(@Self() @Optional() @Inject(IGX_DROPDOWN_BASE) public dropdown: IgxDropDownBaseDirective) { }\n\n    /**\n     * Gets the target of the navigation directive;\n     *\n     * ```typescript\n     * // Get\n     * export class MyComponent {\n     *  ...\n     *  @ContentChild(IgxDropDownNavigationDirective)\n     *  navDirective: IgxDropDownNavigationDirective = null\n     *  ...\n     *  const navTarget: IgxDropDownBaseDirective = navDirective.navTarget\n     * }\n     * ```\n     */\n     public get target(): IgxDropDownBaseDirective {\n        return this._target;\n    }\n\n    /**\n     * Sets the target of the navigation directive;\n     * If no valid target is passed, it falls back to the drop down context\n     *\n     * ```html\n     * <!-- Set -->\n     * <input [igxDropDownItemNavigation]=\"dropdown\" />\n     * ...\n     * <igx-drop-down #dropdown>\n     * ...\n     * </igx-drop-down>\n     * ```\n     */\n    @Input('igxDropDownItemNavigation')\n    public set target(target: IgxDropDownBaseDirective) {\n        this._target = target ? target : this.dropdown;\n    }\n\n    /**\n     * Captures keydown events and calls the appropriate handlers on the target component\n     */\n    @HostListener('keydown', ['$event'])\n    public handleKeyDown(event: KeyboardEvent) {\n        if (event) {\n            const key = event.key.toLowerCase();\n            if (!this.target.collapsed) { // If dropdown is opened\n                const navKeys = ['esc', 'escape', 'enter', 'space', 'spacebar', ' ',\n            'arrowup', 'up', 'arrowdown', 'down', 'home', 'end'];\n                if (navKeys.indexOf(key) === -1) { // If key has appropriate function in DD\n                    return;\n                }\n                event.preventDefault();\n                event.stopPropagation();\n            } else { // If dropdown is closed, do nothing\n                return;\n            }\n            switch (key) {\n                case 'esc':\n                case 'escape':\n                    this.target.onItemActionKey(DropDownActionKey.ESCAPE, event);\n                    break;\n                case 'enter':\n                    this.target.onItemActionKey(DropDownActionKey.ENTER, event);\n                    break;\n                case 'space':\n                case 'spacebar':\n                case ' ':\n                    this.target.onItemActionKey(DropDownActionKey.SPACE, event);\n                    break;\n                case 'arrowup':\n                case 'up':\n                    this.onArrowUpKeyDown();\n                    break;\n                case 'arrowdown':\n                case 'down':\n                    this.onArrowDownKeyDown();\n                    break;\n                case 'home':\n                    this.onHomeKeyDown();\n                    break;\n                case 'end':\n                    this.onEndKeyDown();\n                    break;\n                default:\n                    return;\n            }\n        }\n    }\n\n    /**\n     * Navigates to previous item\n     */\n     public onArrowDownKeyDown() {\n        this.target.navigateNext();\n    }\n\n    /**\n     * Navigates to previous item\n     */\n     public onArrowUpKeyDown() {\n        this.target.navigatePrev();\n    }\n\n    /**\n     * Navigates to target's last item\n     */\n     public onEndKeyDown() {\n        this.target.navigateLast();\n    }\n\n    /**\n     * Navigates to target's first item\n     */\n     public onHomeKeyDown() {\n        this.target.navigateFirst();\n    }\n}\n","import { Directive, HostBinding, Input, OnInit } from '@angular/core';\n\nenum IgxHintPosition {\n    START,\n    END\n}\n\n@Directive({\n    selector: 'igx-hint,[igxHint]',\n    standalone: true\n})\nexport class IgxHintDirective implements OnInit {\n    /**\n     * Sets/gets whether the hint position is at the start.\n     * Default value is `false`.\n     * ```typescript\n     * @ViewChild('hint', {read: IgxHintDirective})\n     * public igxHint: IgxHintDirective;\n     * this.igxHint.isPositionStart = true;\n     * ```\n     * ```typescript\n     * let isHintPositionStart = this.igxHint.isPositionStart;\n     * ```\n     *\n     * @memberof IgxHintDirective\n     */\n    @HostBinding('class.igx-input-group__hint-item--start')\n    public isPositionStart = false;\n    /**\n     * Sets/gets whether the hint position is at the end.\n     * Default value is `false`.\n     * ```typescript\n     * @ViewChild('hint', {read: IgxHintDirective})\n     * public igxHint: IgxHintDirective;\n     * this.igxHint.isPositionEnd = true;\n     * ```\n     * ```typescript\n     * let isHintPositionEnd = this.igxHint.isPositionEnd;\n     * ```\n     *\n     * @memberof IgxHintDirective\n     */\n    @HostBinding('class.igx-input-group__hint-item--end')\n    public isPositionEnd = false;\n\n    private _position: IgxHintPosition = IgxHintPosition.START;\n    /**\n     * Sets the position of the hint.\n     * ```html\n     * <igx-input-group>\n     *  <input igxInput type=\"text\"/>\n     *  <igx-hint #hint [position]=\"'start'\">IgxHint displayed at the start</igx-hint>\n     * </igx-input-group>\n     * ```\n     *\n     * @memberof IgxHintDirective\n     */\n    @Input()\n    public set position(value: string) {\n        const position: IgxHintPosition = (IgxHintPosition as any)[value.toUpperCase()];\n        if (position !== undefined) {\n            this._position = position;\n            this._applyPosition(this._position);\n        }\n    }\n    /**\n     * Gets the position of the hint.\n     * ```typescript\n     * @ViewChild('hint', {read: IgxHintDirective})\n     * public igxHint: IgxHintDirective;\n     * let hintPosition =  this.igxHint.position;\n     * ```\n     *\n     * @memberof IgxHintDirective\n     */\n    public get position() {\n        return this._position.toString();\n    }\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        this._applyPosition(this._position);\n    }\n\n    private _applyPosition(position: IgxHintPosition) {\n        this.isPositionStart = this.isPositionEnd = false;\n        switch (position) {\n            case IgxHintPosition.START:\n                this.isPositionStart = true;\n                break;\n            case IgxHintPosition.END:\n                this.isPositionEnd = true;\n                break;\n            default: break;\n        }\n    }\n}\n","/** @hidden */\nexport abstract class IgxInputGroupBase {\n    public disabled: boolean;\n    public isFocused: boolean;\n    public isRequired: boolean;\n    public hasPlaceholder: boolean;\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    Optional,\n    Renderer2,\n    Self,\n    booleanAttribute,\n} from '@angular/core';\nimport {\n    AbstractControl,\n    NgControl,\n    NgModel\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { IgxInputGroupBase } from '../../input-group/input-group.common';\n\nconst nativeValidationAttributes = [\n    'required',\n    'pattern',\n    'minlength',\n    'maxlength',\n    'min',\n    'max',\n    'step',\n];\n\nexport enum IgxInputState {\n    INITIAL,\n    VALID,\n    INVALID,\n}\n\n/**\n * The `igxInput` directive creates single- or multiline text elements, covering common scenarios when dealing with form inputs.\n *\n * @igxModule IgxInputGroupModule\n *\n * @igxParent Data Entry & Display\n *\n * @igxTheme igx-input-group-theme\n *\n * @igxKeywords input, input group, form, field, validation\n *\n * @igxGroup presentation\n *\n * @example\n * ```html\n * <input-group>\n *  <label for=\"address\">Address</label>\n *  <input igxInput name=\"address\" type=\"text\" [(ngModel)]=\"customer.address\">\n * </input-group>\n * ```\n */\n@Directive({\n    selector: '[igxInput]',\n    exportAs: 'igxInput',\n    standalone: true\n})\nexport class IgxInputDirective implements AfterViewInit, OnDestroy {\n    /**\n     * Sets/gets whether the `\"igx-input-group__input\"` class is added to the host element.\n     * Default value is `false`.\n     *\n     * @example\n     * ```typescript\n     * this.igxInput.isInput = true;\n     * ```\n     *\n     * @example\n     * ```typescript\n     * let isCLassAdded = this.igxInput.isInput;\n     * ```\n     */\n    @HostBinding('class.igx-input-group__input')\n    public isInput = false;\n    /**\n     * Sets/gets whether the `\"class.igx-input-group__textarea\"` class is added to the host element.\n     * Default value is `false`.\n     *\n     * @example\n     * ```typescript\n     * this.igxInput.isTextArea = true;\n     * ```\n     *\n     * @example\n     * ```typescript\n     * let isCLassAdded = this.igxInput.isTextArea;\n     * ```\n     */\n    @HostBinding('class.igx-input-group__textarea')\n    public isTextArea = false;\n\n    private _valid = IgxInputState.INITIAL;\n    private _statusChanges$: Subscription;\n    private _valueChanges$: Subscription;\n    private _fileNames: string;\n    private _disabled = false;\n\n    constructor(\n        public inputGroup: IgxInputGroupBase,\n        @Optional() @Self() @Inject(NgModel) protected ngModel: NgModel,\n        @Optional()\n        @Self()\n        @Inject(NgControl)\n        protected formControl: NgControl,\n        protected element: ElementRef<HTMLInputElement>,\n        protected cdr: ChangeDetectorRef,\n        protected renderer: Renderer2\n    ) { }\n\n    private get ngControl(): NgControl {\n        return this.ngModel ? this.ngModel : this.formControl;\n    }\n\n    /**\n     * Sets the `value` property.\n     *\n     * @example\n     * ```html\n     * <input-group>\n     *  <input igxInput #igxInput [value]=\"'IgxInput Value'\">\n     * </input-group>\n     * ```\n     */\n    @Input()\n    public set value(value: any) {\n        this.nativeElement.value = value ?? '';\n        this.updateValidityState();\n    }\n    /**\n     * Gets the `value` property.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild('igxInput', {read: IgxInputDirective})\n     *  public igxInput: IgxInputDirective;\n     * let inputValue = this.igxInput.value;\n     * ```\n     */\n    public get value() {\n        return this.nativeElement.value;\n    }\n    /**\n     * Sets the `disabled` property.\n     *\n     * @example\n     * ```html\n     * <input-group>\n     *  <input igxInput #igxInput [disabled]=\"true\">\n     * </input-group>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('disabled')\n    public set disabled(value: boolean) {\n        this._disabled = this.inputGroup.disabled = value;\n        if (this.focused && this._disabled) {\n            // Browser focus may not fire in good time and mess with change detection, adjust here in advance:\n            this.inputGroup.isFocused = false;\n        }\n    }\n    /**\n     * Gets the `disabled` property\n     *\n     * @example\n     * ```typescript\n     * @ViewChild('igxInput', {read: IgxInputDirective})\n     *  public igxInput: IgxInputDirective;\n     * let isDisabled = this.igxInput.disabled;\n     * ```\n     */\n    public get disabled() {\n        return this._disabled;\n    }\n\n    /**\n     * Sets the `required` property.\n     *\n     * @example\n     * ```html\n     * <input-group>\n     *  <input igxInput #igxInput required>\n     * </input-group>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set required(value: boolean) {\n        this.nativeElement.required = this.inputGroup.isRequired = value;\n    }\n\n    /**\n     * Gets whether the igxInput is required.\n     *\n     * @example\n     * ```typescript\n     * let isRequired = this.igxInput.required;\n     * ```\n     */\n    public get required() {\n        let validation;\n        if (this.ngControl && (this.ngControl.control.validator || this.ngControl.control.asyncValidator)) {\n            validation = this.ngControl.control.validator({} as AbstractControl);\n        }\n        return validation && validation.required || this.nativeElement.hasAttribute('required');\n    }\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('focus')\n    public onFocus() {\n        this.inputGroup.isFocused = true;\n    }\n    /**\n     * @param event The event to invoke the handler\n     *\n     * @hidden\n     * @internal\n     */\n    @HostListener('blur')\n    public onBlur() {\n        this.inputGroup.isFocused = false;\n        this.updateValidityState();\n    }\n    /** @hidden @internal */\n    @HostListener('input')\n    public onInput() {\n        this.checkNativeValidity();\n    }\n    /** @hidden @internal */\n    @HostListener('change', ['$event'])\n    public change(event: Event) {\n        if (this.type === 'file') {\n            const fileList: FileList | null = (event.target as HTMLInputElement)\n                .files;\n            const fileArray: File[] = [];\n\n            if (fileList) {\n                for (const file of Array.from(fileList)) {\n                    fileArray.push(file);\n                }\n            }\n\n            this._fileNames = (fileArray || []).map((f: File) => f.name).join(', ');\n\n            if (this.required && fileList?.length > 0) {\n                this._valid = IgxInputState.INITIAL;\n            }\n        }\n    }\n\n    /** @hidden @internal */\n    public get fileNames() {\n        return this._fileNames;\n    }\n\n    /** @hidden @internal */\n    public clear() {\n        this.ngControl?.control?.setValue('');\n        this.nativeElement.value = null;\n        this._fileNames = '';\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit() {\n        this.inputGroup.hasPlaceholder = this.nativeElement.hasAttribute(\n            'placeholder'\n        );\n\n        if (this.ngControl && this.ngControl.disabled !== null) {\n            this.disabled = this.ngControl.disabled;\n        }\n        this.inputGroup.disabled =\n            this.inputGroup.disabled ||\n            this.nativeElement.hasAttribute('disabled');\n        this.inputGroup.isRequired = this.nativeElement.hasAttribute(\n            'required'\n        );\n\n        // Make sure we do not invalidate the input on init\n        if (!this.ngControl) {\n            this._valid = IgxInputState.INITIAL;\n        }\n        // Also check the control's validators for required\n        if (this.required && !this.inputGroup.isRequired) {\n            this.inputGroup.isRequired = this.required;\n        }\n\n        this.renderer.setAttribute(this.nativeElement, 'aria-required', this.required.toString());\n\n        const elTag = this.nativeElement.tagName.toLowerCase();\n        if (elTag === 'textarea') {\n            this.isTextArea = true;\n        } else {\n            this.isInput = true;\n        }\n\n        if (this.ngControl) {\n            this._statusChanges$ = this.ngControl.statusChanges.subscribe(\n                this.onStatusChanged.bind(this)\n            );\n\n            this._valueChanges$ = this.ngControl.valueChanges.subscribe(\n                this.onValueChanged.bind(this)\n            );\n        }\n\n        this.cdr.detectChanges();\n    }\n    /** @hidden @internal */\n    public ngOnDestroy() {\n        if (this._statusChanges$) {\n            this._statusChanges$.unsubscribe();\n        }\n\n        if (this._valueChanges$) {\n            this._valueChanges$.unsubscribe();\n        }\n    }\n    /**\n     * Sets a focus on the igxInput.\n     *\n     * @example\n     * ```typescript\n     * this.igxInput.focus();\n     * ```\n     */\n    public focus() {\n        this.nativeElement.focus();\n    }\n    /**\n     * Gets the `nativeElement` of the igxInput.\n     *\n     * @example\n     * ```typescript\n     * let igxInputNativeElement = this.igxInput.nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n    /** @hidden @internal */\n    protected onStatusChanged() {\n        // Enable/Disable control based on ngControl #7086\n        if (this.disabled !== this.ngControl.disabled) {\n            this.disabled = this.ngControl.disabled;\n        }\n        this.updateValidityState();\n    }\n\n    /** @hidden @internal */\n    protected onValueChanged() {\n        if (this._fileNames && !this.value) {\n            this._fileNames = '';\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected updateValidityState() {\n        if (this.ngControl) {\n            if (!this.disabled && this.isTouchedOrDirty) {\n                if (this.hasValidators) {\n                    // Run the validation with empty object to check if required is enabled.\n                    const error = this.ngControl.control.validator({} as AbstractControl);\n                    this.inputGroup.isRequired = error && error.required;\n                    if (this.focused) {\n                        this._valid = this.ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n                    } else {\n                        this._valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n                    }\n                } else {\n                    // If validator is dynamically cleared, reset label's required class(asterisk) and IgxInputState #10010\n                    this.inputGroup.isRequired = false;\n                    this._valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n                }\n            } else {\n                this._valid = IgxInputState.INITIAL;\n            }\n            this.renderer.setAttribute(this.nativeElement, 'aria-required', this.required.toString());\n            const ariaInvalid = this.valid === IgxInputState.INVALID;\n            this.renderer.setAttribute(this.nativeElement, 'aria-invalid', ariaInvalid.toString());\n        } else {\n            this.checkNativeValidity();\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this.ngControl.control.touched || this.ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this.ngControl.control.validator || !!this.ngControl.control.asyncValidator);\n    }\n\n    /**\n     * Gets whether the igxInput has a placeholder.\n     *\n     * @example\n     * ```typescript\n     * let hasPlaceholder = this.igxInput.hasPlaceholder;\n     * ```\n     */\n    public get hasPlaceholder() {\n        return this.nativeElement.hasAttribute('placeholder');\n    }\n    /**\n     * Gets the placeholder element of the igxInput.\n     *\n     * @example\n     * ```typescript\n     * let igxInputPlaceholder = this.igxInput.placeholder;\n     * ```\n     */\n    public get placeholder() {\n        return this.nativeElement.placeholder;\n    }\n\n    /**\n     * @returns An indicator of whether the input has validator attributes or not\n     *\n     * @hidden\n     * @internal\n     */\n    private _hasValidators(): boolean {\n        for (const nativeValidationAttribute of nativeValidationAttributes) {\n            if (this.nativeElement.hasAttribute(nativeValidationAttribute)) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Gets whether the igxInput is focused.\n     *\n     * @example\n     * ```typescript\n     * let isFocused = this.igxInput.focused;\n     * ```\n     */\n    public get focused() {\n        return this.inputGroup.isFocused;\n    }\n    /**\n     * Gets the state of the igxInput.\n     *\n     * @example\n     * ```typescript\n     * let igxInputState = this.igxInput.valid;\n     * ```\n     */\n    public get valid(): IgxInputState {\n        return this._valid;\n    }\n\n    /**\n     * Sets the state of the igxInput.\n     *\n     * @example\n     * ```typescript\n     * this.igxInput.valid = IgxInputState.INVALID;\n     * ```\n     */\n    public set valid(value: IgxInputState) {\n        this._valid = value;\n    }\n\n    /**\n     * Gets whether the igxInput is valid.\n     *\n     * @example\n     * ```typescript\n     * let valid = this.igxInput.isValid;\n     * ```\n     */\n    public get isValid(): boolean {\n        return this.valid !== IgxInputState.INVALID;\n    }\n\n    /**\n     * A function to assign a native validity property of an input.\n     * This should be used when there's no ngControl\n     *\n     * @hidden\n     * @internal\n     */\n    private checkNativeValidity() {\n        if (!this.disabled && this._hasValidators()) {\n            this._valid = this.nativeElement.checkValidity() ?\n                this.focused ? IgxInputState.VALID : IgxInputState.INITIAL :\n                IgxInputState.INVALID;\n        }\n    }\n\n    /**\n     * Returns the input type.\n     *\n     * @hidden\n     * @internal\n     */\n    public get type() {\n        return this.nativeElement.type;\n    }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\n\nlet NEXT_ID = 0;\n\n@Directive({\n    selector: '[igxLabel]',\n    standalone: true\n})\nexport class IgxLabelDirective {\n    @HostBinding('class.igx-input-group__label')\n    public defaultClass = true;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-label-${NEXT_ID++}`;\n}\n","import { Directive } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: 'igx-prefix,[igxPrefix],[igxStart]',\n    standalone: true\n})\nexport class IgxPrefixDirective { }\n\n/**\n * @hidden\n */\n\n","import { Directive } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: 'igx-suffix,[igxSuffix],[igxEnd]',\n    standalone: true\n})\nexport class IgxSuffixDirective { }\n\n/**\n * @hidden\n */\n\n","export interface IInputResourceStrings {\n    igx_input_upload_button?: string;\n    igx_input_file_placeholder?: string;\n}\n\nexport const InputResourceStringsEN: IInputResourceStrings = {\n    igx_input_upload_button: 'Upload File',\n    igx_input_file_placeholder: 'No file chosen',\n};\n","import { Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, booleanAttribute } from '@angular/core';\nimport { mkenum } from '../../core/utils';\n\nexport const IgxBaseButtonType = /*@__PURE__*/mkenum({\n    Flat: 'flat',\n    Contained: 'contained',\n    Outlined: 'outlined'\n});\n\n@Directive()\nexport abstract class IgxButtonBaseDirective {\n    /**\n     * Emitted when the button is clicked.\n     */\n    @Output()\n    public buttonClick = new EventEmitter<any>();\n\n    /**\n     * Sets/gets the `role` attribute.\n     *\n     * @example\n     * ```typescript\n     * this.button.role = 'navbutton';\n     * let buttonRole = this.button.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    public role = 'button';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(ev: MouseEvent) {\n        this.buttonClick.emit(ev);\n        this.focused = false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('blur')\n    protected onBlur() {\n        this.focused = false;\n    }\n\n    /**\n     * Sets/gets whether the button component is on focus.\n     * Default value is `false`.\n     * ```typescript\n     * this.button.focus = true;\n     * ```\n     * ```typescript\n     * let isFocused =  this.button.focused;\n     * ```\n     */\n    @HostBinding('class.igx-button--focused')\n    protected focused = false;\n\n    /**\n      * Enables/disables the button.\n      *\n      * @example\n      * ```html\n      * <button igxButton=\"fab\" disabled></button>\n      * ```\n      */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-button--disabled')\n    public disabled = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('attr.disabled')\n    public get disabledAttribute() {\n        return this.disabled || null;\n    }\n\n    constructor(public element: ElementRef) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('keyup', ['$event'])\n    protected updateOnKeyUp(event: KeyboardEvent) {\n        if (event.key === \"Tab\") {\n            this.focused = true;\n        }\n    }\n\n    /**\n     * Returns the underlying DOM element.\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    Renderer2,\n    booleanAttribute,\n    AfterContentInit,\n    OnDestroy\n} from '@angular/core';\nimport { mkenum } from '../../core/utils';\nimport { IBaseEventArgs } from '../../core/utils';\nimport { IgxBaseButtonType, IgxButtonBaseDirective } from './button-base';\n\nconst IgxButtonType = /*@__PURE__*/mkenum({\n    ...IgxBaseButtonType,\n    FAB: 'fab'\n});\n\n/**\n * Determines the Button type.\n */\nexport type IgxButtonType = typeof IgxButtonType[keyof typeof IgxButtonType];\n\n/**\n * The Button directive provides the Ignite UI Button functionality to every component that's intended to be used as a button.\n *\n * @igxModule IgxButtonModule\n *\n * @igxParent Data Entry & Display\n *\n * @igxTheme igx-button-theme\n *\n * @igxKeywords button, span, div, click\n *\n * @remarks\n * The Ignite UI Button directive is intended to be used by any button, span or div and turn it into a fully functional button.\n *\n * @example\n * ```html\n * <button type=\"button\" igxButton=\"outlined\">A Button</button>\n * ```\n */\n@Directive({\n    selector: '[igxButton]',\n    standalone: true\n})\nexport class IgxButtonDirective extends IgxButtonBaseDirective implements AfterContentInit, OnDestroy {\n    private static ngAcceptInputType_type: IgxButtonType | '';\n\n    /**\n     * Called when the button is selected.\n     */\n    @Output()\n    public buttonSelected = new EventEmitter<IButtonEventArgs>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button')\n    public _cssClass = 'igx-button';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _type: IgxButtonType;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _color: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _label: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _backgroundColor: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _selected = false;\n\n    private emitSelected() {\n        this.buttonSelected.emit({\n            button: this\n        });\n    }\n\n    /**\n     * Gets or sets whether the button is selected.\n     * Mainly used in the IgxButtonGroup component and it will have no effect if set separately.\n     *\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton=\"flat\" [selected]=\"button.selected\"></button>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set selected(value: boolean) {\n        if (this._selected !== value) {\n            this._selected = value;\n            this._renderer.setAttribute(this.nativeElement, 'data-selected', value.toString());\n        }\n    }\n\n    public get selected(): boolean {\n        return this._selected;\n    }\n\n    constructor(\n        public override element: ElementRef,\n        private _renderer: Renderer2,\n    ) {\n        super(element);\n    }\n\n    public ngAfterContentInit() {\n        this.nativeElement.addEventListener('click', this.emitSelected.bind(this));\n    }\n\n    public ngOnDestroy(): void {\n        this.nativeElement.removeEventListener('click', this.emitSelected);\n    }\n\n    /**\n     * Sets the type of the button.\n     *\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton=\"outlined\"></button>\n     * ```\n     */\n    @Input('igxButton')\n    public set type(type: IgxButtonType) {\n        const t = type ? type : IgxButtonType.Flat;\n        if (this._type !== t) {\n            this._type = t;\n        }\n    }\n\n    /**\n     * Sets the `aria-label` attribute.\n     *\n     * @example\n     *  ```html\n     * <button type=\"button\" igxButton=\"flat\" igxLabel=\"Label\"></button>\n     * ```\n     */\n    @Input('igxLabel')\n    public set label(value: string) {\n        this._label = value || this._label;\n        this._renderer.setAttribute(this.nativeElement, 'aria-label', this._label);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--flat')\n    public get flat(): boolean {\n        return this._type === IgxButtonType.Flat;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--contained')\n    public get contained(): boolean {\n        return this._type === IgxButtonType.Contained;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--outlined')\n    public get outlined(): boolean {\n        return this._type === IgxButtonType.Outlined;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-button--fab')\n    public get fab(): boolean {\n        return this._type === IgxButtonType.FAB;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public select() {\n        this.selected = true;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public deselect() {\n        this.selected = false;\n        this.focused = false;\n    }\n}\n\nexport interface IButtonEventArgs extends IBaseEventArgs {\n    button: IgxButtonDirective;\n}\n","import { InjectionToken } from '@angular/core';\nimport { mkenum } from '../core/utils';\n\nconst IgxInputGroupEnum = /*@__PURE__*/mkenum({\n    Line: 'line',\n    Box: 'box',\n    Border: 'border',\n    Search: 'search'\n});\n\n/**\n * Defines the InputGroupType DI token.\n */\n // Should this go trough Interface https://angular.io/api/core/InjectionToken\n export const IGX_INPUT_GROUP_TYPE = /*@__PURE__*/new InjectionToken<IgxInputGroupType>('InputGroupType');\n\n /**\n  * Determines the InputGroupType.\n  */\n export type IgxInputGroupType = (typeof IgxInputGroupEnum)[keyof typeof IgxInputGroupEnum];\n","/** READ BEFORE YOU MODIFY THIS FILE!\n *\n * Before you add/modify an icon reference, please think about the semantics of the icon you are adding/modifying.\n *\n * Icon aliases have sematic meaning depending on the context in which they are used.\n * For instance, if your component handles toggling between expanded and collapsed states,\n * you may want to use the already existing `expand` and `collapse` aliases that point to\n * the `expand_more` and `expand_less` icons in the material font set.\n *\n * It may so happen, however, that the design of your component requires you to use the `chevron_right` for the\n * expand icon and the `expand_more` for the collapse icon. In this case the `tree_expand` and `tree_collapse` aliases\n * would be appropriate.\n * This distinction is important when choosing which icon to use for your component as it will have an impact\n * when a user decides to rewire the `expand`/`collapse` icons to some other icons.\n *\n * Likewise, modifying existing references should be handled with caution as many component in the framework already\n * share icons that have equivalent semantic meaning. For example, the `Paginator`, `Grid Filtering Row`,\n * and `Tabs` components in Ignite UI for Angular all use the `prev` and `next` icons for navigating between pages\n * or lists of items. Changing the underlying target for those icons should be done in a way that suits all components.\n *\n * Keep in mind that icon aliases and their underlying names are shared between Ignite UI component frameworks\n * and changing an alias name here should be reflected in the other frameworks as well.\n *\n * To get acquainted with which component uses what icon, please make sure to read the\n * [docs](https://infragistics.com/products/ignite-ui-angular/Angular/components/icon-service#internal-usage).\n */\nimport { IconMeta } from \"./types\";\nimport type { IconReference, IconThemeKey, MetaReference } from './types';\n\ntype Icon = { [key in IconThemeKey]?: IconMeta };\n\nconst makeIconRefs = (icons: Icon) => {\n  return new Map(\n    Object.entries(icons).map((icon) => {\n      return icon as [theme: IconThemeKey, IconReference];\n    })\n  );\n};\n\nconst addIcon = (name: string, target: Icon) => {\n    const icon = {\n        alias: {\n            name,\n            family: 'default'\n        },\n        target: makeIconRefs(target)\n    };\n\n    return icon as MetaReference;\n}\n\nconst loadIconRefs = () => [\n    addIcon('more_vert', {\n        default: {\n            name: 'more_vert',\n            family: 'material',\n        }\n    }),\n    addIcon('arrow_prev', {\n        default: {\n            name: 'chevron_left',\n            family: 'material',\n        },\n        fluent: {\n            name: 'arrow_upward',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_left',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('arrow_next', {\n        default: {\n            name: 'chevron_right',\n            family: 'material',\n        },\n        fluent: {\n            name: 'arrow_downward',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_right',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('expand', {\n        default: {\n            name: 'expand_more',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_down',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('collapse', {\n        default: {\n            name: 'expand_less',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_up',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('carousel_prev', {\n          default: {\n            name: 'keyboard_arrow_left',\n            family: 'material',\n          },\n          indigo: {\n            name: 'chevron_left',\n            family: 'internal_indigo',\n          },\n    }),\n    addIcon('carousel_next', {\n          default: {\n            name: 'keyboard_arrow_right',\n            family: 'material',\n          },\n          indigo: {\n            name: 'chevron_right',\n            family: 'internal_indigo',\n          },\n    }),\n    addIcon('arrow_back', {\n        default: {\n            name: 'arrow_back',\n            family: 'material',\n        },\n        indigo: {\n            name: 'arrow_back',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('arrow_forward', {\n        default: {\n            name: 'arrow_forward',\n            family: 'material',\n        },\n        indigo: {\n            name: 'arrow_forward',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('selected', {\n        default: {\n            name: 'done',\n            family: 'material',\n        },\n        indigo: {\n            name: 'check',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('remove', {\n        default: {\n            name: 'cancel',\n            family: 'material',\n        },\n        indigo: {\n            name: 'cancel',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('input_clear', {\n        default: {\n            name: 'clear',\n            family: 'material',\n        },\n        indigo: {\n            name: 'clear',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('input_expand', {\n        default: {\n            name: 'expand_more',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_down',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('input_collapse', {\n        default: {\n            name: 'expand_less',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_up',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('arrow_drop_down', {\n        default: {\n            name: 'keyboard_arrow_down',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_down',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('case_sensitive', {\n        default: {\n            name: 'case-sensitive',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('today', {\n        default: {\n            name: 'calendar_today',\n            family: 'material',\n        },\n        indigo: {\n            name: 'calendar_today',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('clock', {\n        default: {\n            name: 'access_time',\n            family: 'material',\n        },\n        indigo: {\n            name: 'access_time',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('date_range', {\n        default: {\n            name: 'date_range',\n            family: 'material',\n        },\n        indigo: {\n            name: 'calendar_today',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('prev', {\n        default: {\n            name: 'navigate_before',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_left',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('next', {\n        default: {\n            name: 'navigate_next',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_right',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('first_page', {\n        default: {\n            name: 'first_page',\n            family: 'material',\n        },\n        indigo: {\n            name: 'first_page',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('last_page', {\n        default: {\n            name: 'last_page',\n            family: 'material',\n        },\n        indigo: {\n            name: 'last_page',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('add', {\n        default: {\n            name: 'add',\n            family: 'material',\n        },\n        indigo: {\n            name: 'add',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('close', {\n        default: {\n            name: 'close',\n            family: 'material',\n        },\n        indigo: {\n            name: 'clear',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('error', {\n        default: {\n            name: 'error',\n            family: 'material',\n        },\n        indigo: {\n            name: 'error',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('confirm', {\n        default: {\n            name: 'check',\n            family: 'material',\n        },\n        indigo: {\n            name: 'check',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('cancel', {\n        default: {\n            name: 'close',\n            family: 'material',\n        },\n        indigo: {\n            name: 'clear',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('edit', {\n        default: {\n            name: 'edit',\n            family: 'material',\n        },\n    }),\n    addIcon('delete', {\n        default: {\n            name: 'delete',\n            family: 'material',\n        },\n    }),\n    addIcon('pin', {\n        default: {\n            name: 'pin-left',\n            family: 'imx-icons',\n        },\n        indigo: {\n            name: 'pin',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('unpin', {\n        default: {\n            name: 'unpin-left',\n            family: 'imx-icons',\n        },\n        indigo: {\n            name: 'unpin',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('show', {\n        default: {\n            name: 'visibility',\n            family: 'material',\n        },\n    }),\n    addIcon('hide', {\n        default: {\n            name: 'visibility_off',\n            family: 'material',\n        },\n    }),\n    addIcon('tree_expand', {\n        default: {\n            name: 'chevron_right',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_right',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('tree_collapse', {\n        default: {\n            name: 'expand_more',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_down',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('chevron_right', {\n        default: {\n            name: 'chevron_right',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_right',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('chevron_left', {\n        default: {\n            name: 'chevron_left',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_left',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('expand_more', {\n        default: {\n            name: 'expand_more',\n            family: 'material',\n        },\n        indigo: {\n            name: 'chevron_down',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('filter_list', {\n        default: {\n            name: 'filter_list',\n            family: 'material',\n        },\n        indigo: {\n            name: 'filter_list',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('import_export', {\n        default: {\n            name: 'import_export',\n            family: 'material',\n        },\n    }),\n    addIcon('unfold_more', {\n        default: {\n            name: 'unfold_more',\n            family: 'material',\n        },\n        indigo: {\n            name: 'unfold_more',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('unfold_less', {\n        default: {\n            name: 'unfold_less',\n            family: 'material',\n        },\n        indigo: {\n            name: 'unfold_less',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('drag_indicator', {\n        default: {\n            name: 'drag_indicator',\n            family: 'material',\n        },\n    }),\n    addIcon('group_work', {\n        default: {\n            name: 'group_work',\n            family: 'material',\n        },\n    }),\n    addIcon('sort_asc', {\n        default: {\n            name: 'arrow_upward',\n            family: 'material',\n        },\n        indigo: {\n            name: 'arrow_upward',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('sort_desc', {\n        default: {\n            name: 'arrow_downward',\n            family: 'material',\n        },\n        indigo: {\n            name: 'arrow_downward',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('search', {\n        default: {\n            name: 'search',\n            family: 'material',\n        },\n        indigo: {\n            name: 'search',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('functions', {\n        default: {\n            name: 'functions',\n            family: 'material',\n        },\n    }),\n    addIcon('table_rows', {\n        default: {\n            name: 'table_rows',\n            family: 'material',\n        },\n    }),\n    addIcon('view_column', {\n        default: {\n            name: 'view_column',\n            family: 'material',\n        },\n    }),\n    addIcon('refresh', {\n        default: {\n            name: 'refresh',\n            family: 'material',\n        },\n        indigo: {\n            name: 'refresh',\n            family: 'internal_indigo',\n        },\n    }),\n    addIcon('add_row', {\n        default: {\n            name: 'add-row',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('add_child', {\n        default: {\n            name: 'add-child',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('jump_up', {\n        default: {\n            name: 'jump-up',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('jump_down', {\n        default: {\n            name: 'jump-down',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_null', {\n        default: {\n            name: 'is-null',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_not_null', {\n        default: {\n            name: 'is-not-null',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_in', {\n        default: {\n            name: 'is-in',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_all', {\n        default: {\n            name: 'select-all',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_true', {\n        default: {\n            name: 'is-true',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_false', {\n        default: {\n            name: 'is-false',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_empty', {\n        default: {\n            name: 'is-empty',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_not_empty', {\n        default: {\n            name: 'not-empty',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_equal', {\n        default: {\n            name: 'equals',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_not_equal', {\n        default: {\n            name: 'not-equal',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_before', {\n        default: {\n            name: 'is-before',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_after', {\n        default: {\n            name: 'is-after',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_today', {\n        default: {\n            name: 'today',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_yesterday', {\n        default: {\n            name: 'yesterday',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_this_month', {\n        default: {\n            name: 'this-month',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_last_month', {\n        default: {\n            name: 'last-month',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_next_month', {\n        default: {\n            name: 'next-month',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_this_year', {\n        default: {\n            name: 'this-year',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_last_year', {\n        default: {\n            name: 'last-year',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_next_year', {\n        default: {\n            name: 'next-year',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_greater_than', {\n        default: {\n            name: 'greater-than',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_less_than', {\n        default: {\n            name: 'less-than',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_greater_than_or_equal', {\n        default: {\n            name: 'greater-than-or-equal',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_less_than_or_equal', {\n        default: {\n            name: 'less-than-or-equal',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_contains', {\n        default: {\n            name: 'contains',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_does_not_contain', {\n        default: {\n            name: 'does-not-contain',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_starts_with', {\n        default: {\n            name: 'starts-with',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('filter_ends_with', {\n        default: {\n            name: 'ends-with',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('ungroup', {\n        default: {\n            name: 'ungroup',\n            family: 'imx-icons',\n        },\n    }),\n    addIcon('file_download', {\n        default: {\n            name: 'file_download',\n            family: 'material',\n        },\n        indigo: {\n            name: 'file_download',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('file_upload', {\n        default: {\n            name: 'file_upload',\n            family: 'material',\n        },\n        indigo: {\n            name: 'file_upload',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('horizontal_rule', {\n        default: {\n            name: 'horizontal_rule',\n            family: 'material',\n        },\n        indigo: {\n            name: 'horizontal_rule',\n            family: 'internal_indigo',\n        }\n    }),\n    addIcon('menu', {\n        default: {\n            name: 'menu',\n            family: 'material',\n        },\n        indigo: {\n            name: 'menu',\n            family: 'internal_indigo',\n        }\n    }),\n];\n\nexport const iconReferences = /*@__PURE__*/ loadIconRefs();\n","import { IMXIcon } from \"@igniteui/material-icons-extended\"\n\nconst clear: IMXIcon = {\n    name: 'clear',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M14.8144 11.9896L18.4171 8.39087C18.7818 8.0135 18.9836 7.50809 18.9791 6.98347C18.9745 6.45885 18.764 5.95699 18.3927 5.58602C18.0215 5.21504 17.5192 5.00464 16.9942 5.00008C16.4692 4.99552 15.9635 5.19718 15.5858 5.56166L11.9896 9.15372L8.39335 5.56166C8.01571 5.19718 7.50992 4.99552 6.98492 5.00008C6.45992 5.00464 5.95769 5.21505 5.58645 5.58602C5.2152 5.95699 5.00464 6.45885 5.00008 6.98347C4.99551 7.50809 5.19733 8.0135 5.56207 8.39087L9.18561 12.0104L5.58291 15.6091C5.21817 15.9865 5.01635 16.4919 5.02091 17.0165C5.02548 17.5412 5.23604 18.043 5.60729 18.414C5.97853 18.785 6.48075 18.9954 7.00576 18.9999C7.53076 19.0045 8.03654 18.8028 8.41419 18.4383L12.0104 14.8463L15.6067 18.4383C15.9843 18.8028 16.4901 19.0045 17.0151 18.9999C17.5401 18.9954 18.0423 18.785 18.4136 18.414C18.7848 18.043 18.9954 17.5412 18.9999 17.0165C19.0045 16.4919 18.8027 15.9865 18.4379 15.6091L14.8144 11.9896Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst unfold_more: IMXIcon = {\n    name: 'unfold_more',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M13.2403 2.52848C12.9114 2.1902 12.4652 2.0001 12 2C11.5348 2.0001 11.0886 2.1902 10.7597 2.52848L6.49245 6.94326C6.17289 7.28344 5.99607 7.73906 6.00007 8.21198C6.00406 8.6849 6.18855 9.13731 6.51381 9.47173C6.83907 9.80615 7.27909 9.99582 7.73907 9.99993C8.19904 10.004 8.64218 9.82225 8.97305 9.49369L12 6.35412L15.0269 9.49369C15.3578 9.82225 15.801 10.004 16.2609 9.99993C16.7209 9.99582 17.1609 9.80615 17.4862 9.47173C17.8115 9.13731 17.9959 8.6849 17.9999 8.21198C18.0039 7.73906 17.8271 7.28344 17.5076 6.94326L13.2403 2.52848Z\"/>\n<path d=\"M10.7597 21.4715C11.0886 21.8098 11.5348 21.9999 12 22C12.4652 21.9999 12.9114 21.8098 13.2403 21.4715L17.5076 17.0567C17.8271 16.7166 18.0039 16.2609 17.9999 15.788C17.9959 15.3151 17.8115 14.8627 17.4862 14.5283C17.1609 14.1939 16.7209 14.0042 16.2609 14.0001C15.801 13.996 15.3578 14.1778 15.0269 14.5063L12 17.6459L8.97305 14.5063C8.64218 14.1778 8.19904 13.996 7.73907 14.0001C7.27909 14.0042 6.83907 14.1939 6.51381 14.5283C6.18855 14.8627 6.00406 15.3151 6.00007 15.788C5.99607 16.2609 6.17289 16.7166 6.49245 17.0567L10.7597 21.4715Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst unfold_less: IMXIcon = {\n    name: 'unfold_less',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M10.7597 9.47152C11.0886 9.8098 11.5348 9.9999 12 10C12.4652 9.9999 12.9114 9.8098 13.2403 9.47152L17.5076 5.05674C17.8271 4.71656 18.0039 4.26094 17.9999 3.78802C17.9959 3.3151 17.8115 2.86269 17.4862 2.52827C17.1609 2.19385 16.7209 2.00418 16.2609 2.00007C15.801 1.99596 15.3578 2.17775 15.0269 2.50631L12 5.64588L8.97305 2.50631C8.64218 2.17775 8.19904 1.99596 7.73907 2.00007C7.27909 2.00418 6.83907 2.19386 6.51381 2.52828C6.18855 2.8627 6.00406 3.3151 6.00007 3.78802C5.99607 4.26095 6.17289 4.71656 6.49245 5.05674L10.7597 9.47152Z\"/>\n<path d=\"M13.2403 14.5285C12.9114 14.1902 12.4652 14.0001 12 14C11.5348 14.0001 11.0886 14.1902 10.7597 14.5285L6.49245 18.9433C6.17289 19.2834 5.99607 19.7391 6.00007 20.212C6.00406 20.6849 6.18855 21.1373 6.51381 21.4717C6.83907 21.8061 7.27909 21.9958 7.73907 21.9999C8.19904 22.004 8.64218 21.8222 8.97305 21.4937L12 18.3541L15.0269 21.4937C15.3578 21.8222 15.801 22.004 16.2609 21.9999C16.7209 21.9958 17.1609 21.8061 17.4862 21.4717C17.8115 21.1373 17.9959 20.6849 17.9999 20.212C18.0039 19.7391 17.8271 19.2834 17.5076 18.9433L13.2403 14.5285Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst arrow_forward: IMXIcon = {\n    name: 'arrow_forward',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M4.00085 11.9436C3.99347 12.178 4.034 12.4115 4.12005 12.6303C4.20609 12.849 4.33589 13.0484 4.50174 13.2168C4.66758 13.3851 4.8661 13.519 5.0855 13.6103C5.30489 13.7017 5.54069 13.7487 5.7789 13.7486H14.136L11.6165 16.1733L11.5898 16.1996C11.2817 16.5108 11.1117 16.9297 11.117 17.3643C11.1224 17.7989 11.3026 18.2137 11.6183 18.5175C11.9413 18.8269 12.3741 19 12.8247 19C13.2753 19 13.7081 18.8269 14.0311 18.5175L19.5004 13.2234C19.6586 13.0703 19.7843 12.8878 19.8701 12.6864C19.9559 12.485 20 12.2688 20 12.0504V11.9576C20.0002 11.7387 19.9561 11.5219 19.8703 11.3199C19.7846 11.1179 19.6588 10.9348 19.5004 10.7811L14.0311 5.48876C13.8672 5.32979 13.6726 5.20469 13.4589 5.12081C13.2451 5.03693 13.0165 4.99596 12.7865 5.00031C12.3501 5.01251 11.9346 5.18704 11.6236 5.48876L11.5952 5.51677C11.2855 5.82747 11.1138 6.24653 11.1178 6.68184C11.1218 7.11714 11.3012 7.53307 11.6165 7.83821L14.12 10.2472L5.7789 10.2472C5.31673 10.247 4.87263 10.4239 4.54073 10.7406C4.20882 11.0573 4.01518 11.4888 4.00085 11.9436Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst arrow_back: IMXIcon = {\n    name: 'arrow_back',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M18.229 13.7483H9.87121L12.3839 16.1672L12.4106 16.1952C12.5638 16.3492 12.6846 16.5315 12.7662 16.7316C12.8478 16.9316 12.8885 17.1455 12.8861 17.361C12.8836 17.5766 12.8379 17.7895 12.7518 17.9877C12.6656 18.1859 12.5406 18.3654 12.3839 18.516C12.0608 18.8263 11.6272 19 11.1757 19C10.7242 19 10.2906 18.8263 9.9675 18.516L4.4996 13.2197C4.3412 13.0668 4.21543 12.8843 4.12963 12.683C4.04384 12.4816 3.99978 12.2654 4 12.0471L4 11.9543C3.9998 11.7354 4.04385 11.5187 4.12963 11.3168C4.21542 11.1148 4.34117 10.9317 4.4996 10.7782L9.9675 5.48717C10.2904 5.17494 10.7249 5 11.1775 5C11.6301 5 12.0646 5.17494 12.3874 5.48717L12.4106 5.51163C12.564 5.66543 12.6851 5.84754 12.767 6.04746C12.8489 6.24737 12.8899 6.46121 12.8878 6.67675C12.8857 6.8923 12.8404 7.10529 12.7545 7.30359C12.6687 7.50189 12.5439 7.68161 12.3874 7.83242L9.87832 10.2479L18.2219 10.2479C18.6935 10.2479 19.1458 10.4323 19.4792 10.7605C19.8127 11.0887 20 11.5339 20 11.9981C20 12.4623 19.8127 12.9074 19.4792 13.2356C19.1458 13.5638 18.6935 13.7483 18.2219 13.7483H18.229Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst arrow_downward: IMXIcon = {\n    name: 'arrow_downward',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M12.0564 4.00085C11.822 3.99347 11.5885 4.034 11.3697 4.12005C11.151 4.20609 10.9516 4.33589 10.7832 4.50174C10.6149 4.66758 10.481 4.8661 10.3897 5.0855C10.2983 5.30489 10.2513 5.54069 10.2514 5.7789V14.136L7.82669 11.6165L7.80043 11.5898C7.48918 11.2817 7.07026 11.1117 6.63567 11.117C6.20107 11.1224 5.78632 11.3026 5.48249 11.6183C5.17311 11.9413 5 12.3741 5 12.8247C5 13.2753 5.17311 13.7081 5.48249 14.0311L10.7766 19.5004C10.9297 19.6586 11.1122 19.7843 11.3136 19.8701C11.515 19.9559 11.7312 20 11.9496 20H12.0424C12.2613 20.0002 12.4781 19.9561 12.6801 19.8703C12.8821 19.7846 13.0652 19.6588 13.2189 19.5004L18.5112 14.0311C18.6702 13.8672 18.7953 13.6726 18.8792 13.4589C18.9631 13.2451 19.004 13.0165 18.9997 12.7865C18.9875 12.3501 18.813 11.9346 18.5112 11.6236L18.4832 11.5952C18.1725 11.2855 17.7535 11.1138 17.3182 11.1178C16.8829 11.1218 16.4669 11.3012 16.1618 11.6165L13.7528 14.12V5.7789C13.753 5.31673 13.5761 4.87263 13.2594 4.54073C12.9427 4.20882 12.5112 4.01518 12.0564 4.00085Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst arrow_upward: IMXIcon = {\n    name: 'arrow_upward',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M10.2517 18.229V9.87121L7.83279 12.3839L7.80481 12.4106C7.65078 12.5638 7.46849 12.6846 7.26845 12.7662C7.0684 12.8478 6.85454 12.8885 6.63899 12.8861C6.42344 12.8836 6.21049 12.8379 6.01231 12.7518C5.81414 12.6656 5.63459 12.5406 5.48402 12.3839C5.17367 12.0608 5 11.6272 5 11.1757C5 10.7242 5.17367 10.2906 5.48402 9.9675L10.7803 4.4996C10.9332 4.3412 11.1157 4.21543 11.317 4.12963C11.5184 4.04384 11.7346 3.99978 11.9529 4H12.0457C12.2646 3.9998 12.4813 4.04385 12.6832 4.12963C12.8852 4.21542 13.0683 4.34117 13.2218 4.4996L18.5128 9.9675C18.8251 10.2904 19 10.7249 19 11.1775C19 11.6301 18.8251 12.0646 18.5128 12.3874L18.4884 12.4106C18.3346 12.564 18.1525 12.6851 17.9525 12.767C17.7526 12.8489 17.5388 12.8899 17.3232 12.8878C17.1077 12.8857 16.8947 12.8404 16.6964 12.7545C16.4981 12.6687 16.3184 12.5439 16.1676 12.3874L13.7521 9.87832V18.2219C13.7521 18.6935 13.5677 19.1458 13.2395 19.4792C12.9113 19.8127 12.4661 20 12.0019 20C11.5377 20 11.0926 19.8127 10.7644 19.4792C10.4362 19.1458 10.2517 18.6935 10.2517 18.2219V18.229Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst chevron_down: IMXIcon = {\n    name: 'chevron_down',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M12 17C11.5348 16.9999 11.0886 16.8098 10.7597 16.4715L5.49245 11.0567C5.17289 10.7166 4.99607 10.2609 5.00007 9.78802C5.00406 9.3151 5.18855 8.86269 5.51381 8.52827C5.83907 8.19385 6.27909 8.00418 6.73907 8.00007C7.19904 7.99596 7.64218 8.17775 7.97305 8.50631L12 12.6459L16.027 8.50631C16.3578 8.17775 16.801 7.99596 17.2609 8.00007C17.7209 8.00418 18.1609 8.19386 18.4862 8.52827C18.8115 8.86269 18.9959 9.3151 18.9999 9.78802C19.0039 10.2609 18.8271 10.7166 18.5076 11.0567L13.2403 16.4715C12.9114 16.8098 12.4652 16.9999 12 17Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst chevron_up: IMXIcon = {\n    name: 'chevron_up',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M12 7.00001C12.4629 7.00011 12.9069 7.18943 13.2342 7.52633L18.467 12.9116C18.6338 13.0773 18.7668 13.2755 18.8583 13.4947C18.9498 13.7138 18.9979 13.9496 18.9999 14.1881C19.0019 14.4266 18.9578 14.6632 18.87 14.8839C18.7822 15.1047 18.6526 15.3052 18.4887 15.4739C18.3247 15.6425 18.1299 15.7759 17.9153 15.8662C17.7008 15.9565 17.4709 16.002 17.2391 15.9999C17.0073 15.9979 16.7783 15.9483 16.5653 15.8542C16.3523 15.76 16.1596 15.6232 15.9986 15.4516L12 11.3363L8.00135 15.4516C7.84032 15.6232 7.64771 15.76 7.43472 15.8542C7.22174 15.9483 6.99265 15.9979 6.76085 15.9999C6.52906 16.002 6.29918 15.9565 6.08463 15.8662C5.87009 15.7759 5.6752 15.6425 5.51129 15.4739C5.34738 15.3052 5.21778 15.1047 5.13 14.8839C5.04223 14.6632 4.99805 14.4266 5.00007 14.1881C5.00208 13.9496 5.05023 13.7138 5.14172 13.4947C5.23321 13.2755 5.36619 13.0773 5.53292 12.9116L10.7658 7.52633C10.9274 7.35895 11.1198 7.22625 11.3316 7.1359C11.5435 7.04556 11.7706 6.99937 12 7.00001Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst chevron_right: IMXIcon = {\n    name: 'chevron_right',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M17 12C16.9999 12.4652 16.8098 12.9114 16.4715 13.2403L11.0567 18.5076C10.7166 18.8271 10.2609 19.0039 9.78802 18.9999C9.3151 18.9959 8.86269 18.8115 8.52827 18.4862C8.19385 18.1609 8.00418 17.7209 8.00007 17.2609C7.99596 16.801 8.17775 16.3578 8.50631 16.027L12.6459 12L8.50631 7.97305C8.17775 7.64218 7.99596 7.19904 8.00007 6.73907C8.00418 6.27909 8.19385 5.83907 8.52827 5.51381C8.86269 5.18855 9.3151 5.00406 9.78802 5.00007C10.2609 4.99607 10.7166 5.17289 11.0567 5.49245L16.4715 10.7597C16.8098 11.0886 16.9999 11.5348 17 12Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst chevron_left: IMXIcon = {\n    name: 'chevron_left',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M7.00001 12C7.00011 11.5371 7.18943 11.0931 7.52633 10.7658L12.9116 5.53297C13.0773 5.36624 13.2755 5.23321 13.4947 5.14172C13.7138 5.05023 13.9496 5.00208 14.1881 5.00007C14.4266 4.99805 14.6632 5.04223 14.8839 5.13C15.1047 5.21778 15.3052 5.34743 15.4739 5.51134C15.6425 5.67525 15.7759 5.87015 15.8662 6.08469C15.9565 6.29923 16.002 6.52911 15.9999 6.7609C15.9979 6.9927 15.9483 7.22174 15.8542 7.43472C15.76 7.64771 15.6232 7.84037 15.4516 8.00141L11.3363 12L15.4516 15.9986C15.6232 16.1597 15.76 16.3523 15.8542 16.5653C15.9483 16.7783 15.9979 17.0074 15.9999 17.2391C16.002 17.4709 15.9565 17.7008 15.8662 17.9154C15.7759 18.1299 15.6425 18.3248 15.4739 18.4887C15.3052 18.6526 15.1047 18.7822 14.8839 18.87C14.6632 18.9578 14.4266 19.0019 14.1881 18.9999C13.9496 18.9979 13.7138 18.9498 13.4947 18.8583C13.2755 18.7668 13.0773 18.6338 12.9116 18.4671L7.52633 13.2342C7.35895 13.0726 7.22625 12.8802 7.1359 12.6684C7.04556 12.4565 6.99937 12.2294 7.00001 12Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst check: IMXIcon = {\n    name: 'check',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\">\n<path d=\"M19.0329 5.00008C18.7694 4.99771 18.5081 5.04833 18.2646 5.14892C18.0211 5.2495 17.8003 5.39801 17.6153 5.5856L9.136 14.1629L6.38271 11.3931C6.19957 11.2083 5.98158 11.0615 5.74134 10.9613C5.5011 10.8612 5.24337 10.8096 4.98307 10.8096C4.72276 10.8096 4.46503 10.8612 4.22479 10.9613C3.98455 11.0615 3.76656 11.2083 3.58343 11.3931C3.2098 11.7677 3 12.2751 3 12.804C3 13.3329 3.2098 13.8402 3.58343 14.2148L7.73836 18.4113C7.92066 18.5977 8.13838 18.7458 8.37874 18.8468C8.61909 18.9479 8.87723 19 9.138 19C9.39876 19 9.6569 18.9479 9.89726 18.8468C10.1376 18.7458 10.3553 18.5977 10.5376 18.4113L20.4166 8.42125C20.7902 8.04667 21 7.53933 21 7.01042C21 6.48151 20.7902 5.97417 20.4166 5.59958C20.2368 5.41354 20.022 5.26481 19.7846 5.16193C19.5471 5.05905 19.2917 5.00405 19.0329 5.00008Z\"/>\n</svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst first_page: IMXIcon = {\n    name: 'first_page',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M4 17.222V6.778c0-.471.184-.924.513-1.257C4.84 5.187 5.286 5 5.75 5c.464 0 .91.187 1.238.52.328.334.512.787.512 1.258v10.444c0 .471-.184.924-.512 1.257-.328.334-.774.521-1.238.521-.464 0-.91-.187-1.237-.52A1.792 1.792 0 0 1 4 17.221ZM11.526 10.766A1.721 1.721 0 0 0 11 12c0 .23.046.457.136.668.09.212.223.405.39.566l5.386 5.233c.165.167.364.3.583.391a1.84 1.84 0 0 0 1.979-.37c.168-.163.302-.358.392-.573A1.703 1.703 0 0 0 19.452 16L15.336 12l4.116-3.999c.171-.16.308-.353.402-.566a1.703 1.703 0 0 0-.38-1.924 1.801 1.801 0 0 0-.59-.381 1.842 1.842 0 0 0-1.972.403l-5.386 5.233Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst last_page: IMXIcon = {\n    name: 'last_page',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path xmlns=\"http://www.w3.org/2000/svg\" d=\"M17.013 18.48a1.793 1.793 0 0 1-.513-1.258V6.778c0-.471.184-.924.513-1.257.328-.334.773-.521 1.237-.521.464 0 .91.187 1.238.52.328.334.512.787.512 1.258v10.444c0 .471-.184.924-.512 1.257-.328.334-.774.521-1.238.521-.464 0-.91-.187-1.237-.52ZM12.472 13.24A1.73 1.73 0 0 0 13 12c0-.465-.19-.911-.528-1.24L7.057 5.492A1.831 1.831 0 0 0 5.788 5a1.83 1.83 0 0 0-1.26.514A1.73 1.73 0 0 0 4 6.739c-.004.46.178.903.506 1.234L8.646 12l-4.14 4.027c-.328.33-.51.774-.506 1.234.004.46.194.9.528 1.225.335.325.787.51 1.26.514.473.004.929-.173 1.269-.492l5.415-5.268Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst access_time: IMXIcon = {\n    name: 'access_time',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M10.5 8a1.5 1.5 0 0 1 3 0v2.5H16a1.5 1.5 0 1 1 0 3h-4a1.5 1.5 0 0 1-1.5-1.5V8Z\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M22 12c0 5.523-4.476 10-10 10-5.522 0-10-4.477-10-10S6.479 2 12 2c5.524 0 10 4.477 10 10Zm-3 0a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst add: IMXIcon = {\n    name: 'add',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M10.2 13.8H5.8a1.8 1.8 0 0 1 0-3.6h4.4V5.8a1.8 1.8 0 1 1 3.6 0v4.4h4.4a1.8 1.8 0 0 1 0 3.6h-4.4v4.4a1.8 1.8 0 1 1-3.6 0v-4.4Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst attach_file: IMXIcon = {\n    name: 'attach_file',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"m16.496 10.809-7.63 7.365a.965.965 0 0 1-1.31 0 .844.844 0 0 1 0-1.24l6.59-6.382c.601-.601.59-1.55-.032-2.14a1.689 1.689 0 0 0-2.261-.03l-.033.03-6.558 6.351c-1.629 1.542-1.629 4.04 0 5.581 1.629 1.541 4.27 1.541 5.899 0l7.63-7.365c2.533-2.397 2.533-6.284 0-8.681-2.535-2.397-6.642-2.397-9.176 0L4.008 9.749l-.033.031a1.477 1.477 0 0 0 0 2.17 1.688 1.688 0 0 0 2.326-.03l5.608-5.452c1.267-1.198 3.32-1.198 4.587 0a2.954 2.954 0 0 1 0 4.34Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst block: IMXIcon = {\n    name: 'block',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M19.248 4.787c-.006-.007-.008-.014-.014-.02-.007-.007-.014-.009-.02-.015A10.232 10.232 0 0 0 4.751 19.213c.006.007.008.016.014.02.006.006.014.009.02.015A10.232 10.232 0 0 0 19.249 4.787ZM12 4.327c1.592 0 3.145.498 4.44 1.425L5.751 16.44A7.66 7.66 0 0 1 12 4.326Zm0 15.347a7.623 7.623 0 0 1-4.44-1.426L18.249 7.56A7.661 7.661 0 0 1 12 19.674Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst calendar_today: IMXIcon = {\n    name: 'calendar_today',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M18.299 4H17v-.5a1.5 1.5 0 1 0-3 0V4h-4v-.5a1.5 1.5 0 1 0-3 0V4H5.703A3.707 3.707 0 0 0 2 7.702v10.595A3.707 3.707 0 0 0 5.703 22h12.596A3.706 3.706 0 0 0 22 18.297V7.702A3.707 3.707 0 0 0 18.299 4ZM5.703 7H7v.5a1.5 1.5 0 0 0 3 0V7h4v.5a1.5 1.5 0 0 0 3 0V7h1.298a.704.704 0 0 1 .702.702v2.655H5V7.703A.703.703 0 0 1 5.703 7Zm12.596 12H5.703A.704.704 0 0 1 5 18.297v-4.94h14v4.94a.704.704 0 0 1-.702.703Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst cancel: IMXIcon = {\n    name: 'cancel',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 22c5.524 0 10-4.477 10-10 0-5.522-4.476-10-10-10C6.479 2 2 6.478 2 12c0 5.523 4.478 10 10 10ZM7.438 9.543a1.49 1.49 0 0 1 2.106-2.106l2.458 2.457 2.457-2.457a1.489 1.489 0 1 1 2.106 2.106L14.107 12l2.457 2.457a1.49 1.49 0 0 1-2.106 2.107l-2.457-2.458-2.458 2.458a1.489 1.489 0 1 1-2.106-2.107L9.894 12 7.437 9.543Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst check_circle: IMXIcon = {\n    name: 'check_circle',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.445 3.685a10 10 0 1 1 11.111 16.63A10 10 0 0 1 6.445 3.685Zm10.22 3.923a1.294 1.294 0 0 0-.523-.108 1.294 1.294 0 0 0-.947.424l-4.761 5.131-1.626-1.703a1.297 1.297 0 0 0-1.911 0c-.254.27-.396.632-.396 1.009 0 .376.142.738.396 1.008l2.59 2.712c.124.133.272.238.436.31a1.29 1.29 0 0 0 1.473-.31l3.547-3.815 2.162-2.33c.254-.27.396-.632.396-1.008 0-.377-.142-.738-.396-1.01a1.325 1.325 0 0 0-.44-.31Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst error: IMXIcon = {\n    name: 'error',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.685 17.556a10 10 0 1 1 16.63-11.112 10 10 0 0 1-16.63 11.112ZM10.5 11.5v-4a1.5 1.5 0 1 1 3 0v4a1.5 1.5 0 1 1-3 0Zm.253 5.833a1.5 1.5 0 1 1 2.495-1.667 1.5 1.5 0 0 1-2.495 1.667Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst file_download: IMXIcon = {\n    name: 'file_download',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M10.41 11.21V3.616c0-.43.167-.84.466-1.144A1.578 1.578 0 0 1 12 2c.422 0 .826.17 1.125.473.298.304.466.715.466 1.144v7.586l2.195-2.282a1.49 1.49 0 0 1 1.05-.455 1.47 1.47 0 0 1 1.06.434l.022.021c.284.294.443.689.443 1.1 0 .412-.16.807-.443 1.1l-4.81 4.972a1.496 1.496 0 0 1-1.069.454h-.084a1.47 1.47 0 0 1-1.066-.454L6.076 11.12a1.586 1.586 0 0 1-.44-1.098c0-.41.158-.805.44-1.098a1.49 1.49 0 0 1 1.05-.457 1.47 1.47 0 0 1 1.06.432l.025.025 2.199 2.284Z\"/><path d=\"M20.41 14.729a1.59 1.59 0 0 0-1.592 1.591v1.613a.886.886 0 0 1-.884.884H6.07a.892.892 0 0 1-.89-.884V16.32a1.591 1.591 0 0 0-3.181 0v1.618A4.087 4.087 0 0 0 6.066 22h11.868A4.07 4.07 0 0 0 22 17.931V16.32a1.59 1.59 0 0 0-1.59-1.591Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst file_upload: IMXIcon = {\n    name: 'file_upload',\n    categories: ['editor'],\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M13.59 14.927v-7.59L15.79 9.62l.026.024a1.489 1.489 0 0 0 1.06.432 1.473 1.473 0 0 0 1.05-.456c.281-.294.439-.688.439-1.098 0-.41-.158-.805-.44-1.099l-4.814-4.97A1.49 1.49 0 0 0 12.044 2h-.085a1.479 1.479 0 0 0-1.069.454l-4.81 4.97a1.582 1.582 0 0 0-.442 1.1c0 .412.16.806.443 1.1l.022.02a1.489 1.489 0 0 0 1.06.435 1.47 1.47 0 0 0 1.05-.455l2.195-2.28v7.583c0 .429.168.84.466 1.143.299.303.703.474 1.125.474.422 0 .827-.17 1.125-.474a1.63 1.63 0 0 0 .466-1.143Z\"/><path d=\"M19.284 15.197A1.59 1.59 0 0 1 22 16.32v1.611A4.071 4.071 0 0 1 17.934 22H6.066A4.085 4.085 0 0 1 2 17.939V16.32a1.59 1.59 0 0 1 3.182 0v1.613a.892.892 0 0 0 .89.884h11.862a.886.886 0 0 0 .884-.884v-1.613c0-.422.168-.826.466-1.124Z\"/></svg>`,\n    fontSet: 'indigo'\n}\n\nconst filter_list: IMXIcon = {\n    name: 'filter_list',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M4.616 7.682h14.768c.428 0 .84-.168 1.143-.466.303-.298.473-.703.473-1.125 0-.422-.17-.827-.473-1.125a1.63 1.63 0 0 0-1.143-.466H4.616c-.428 0-.84.168-1.143.466A1.579 1.579 0 0 0 3 6.091c0 .422.17.827.473 1.125a1.63 1.63 0 0 0 1.143.466ZM7.344 13.591h9.312c.429 0 .84-.168 1.143-.466.303-.299.474-.703.474-1.125 0-.422-.17-.827-.474-1.125a1.63 1.63 0 0 0-1.143-.466H7.344c-.429 0-.84.167-1.143.466A1.579 1.579 0 0 0 5.727 12c0 .422.17.827.474 1.125a1.63 1.63 0 0 0 1.143.466ZM13.929 19.5h-3.858a1.63 1.63 0 0 1-1.143-.466 1.578 1.578 0 0 1-.473-1.125c0-.422.17-.826.473-1.125a1.63 1.63 0 0 1 1.143-.466h3.858c.429 0 .84.167 1.143.466.303.298.474.703.474 1.125 0 .422-.17.827-.474 1.125a1.63 1.63 0 0 1-1.143.466Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst horizontal_rule: IMXIcon = {\n    name: 'horizontal_rule',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M5.778 13.5h12.444c.471 0 .924-.184 1.257-.512.334-.329.521-.774.521-1.238 0-.464-.187-.91-.52-1.237A1.793 1.793 0 0 0 18.221 10H5.778c-.471 0-.924.184-1.257.513-.334.328-.521.773-.521 1.237 0 .464.187.91.52 1.238.334.328.787.512 1.258.512Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst info: IMXIcon = {\n    name: 'info',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.686 6.944a10 10 0 1 0 16.63 11.112A10 10 0 0 0 3.685 6.944Zm6.815 5.556V17a1.5 1.5 0 0 0 3 0v-4.5a1.5 1.5 0 1 0-3 0Zm.253-5.333a1.5 1.5 0 1 0 2.494 1.666 1.5 1.5 0 0 0-2.494-1.666Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst menu: IMXIcon = {\n    name: 'menu',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M4.616 7.682h14.768c.428 0 .84-.168 1.143-.466.303-.299.473-.703.473-1.125 0-.422-.17-.827-.473-1.125a1.63 1.63 0 0 0-1.143-.466H4.616c-.428 0-.84.168-1.143.466A1.578 1.578 0 0 0 3 6.09c0 .422.17.826.473 1.125a1.63 1.63 0 0 0 1.143.466ZM4.616 13.59h14.768c.428 0 .84-.167 1.143-.465.303-.299.473-.703.473-1.125 0-.422-.17-.827-.473-1.125a1.63 1.63 0 0 0-1.143-.466H4.616c-.428 0-.84.167-1.143.466A1.578 1.578 0 0 0 3 12c0 .422.17.826.473 1.125a1.63 1.63 0 0 0 1.143.466ZM19.384 19.5H4.616a1.63 1.63 0 0 1-1.143-.466A1.578 1.578 0 0 1 3 17.909c0-.422.17-.826.473-1.125a1.63 1.63 0 0 1 1.143-.466h14.768c.428 0 .84.168 1.143.466.303.299.473.703.473 1.125 0 .422-.17.827-.473 1.125a1.63 1.63 0 0 1-1.143.466Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst pin: IMXIcon = {\n    name: 'pin',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.12 2.516A1.572 1.572 0 0 0 16.966 2H7.034c-.435 0-.85.187-1.154.516a1.814 1.814 0 0 0-.472 1.23c0 .46.168.902.472 1.23.304.33.72.516 1.154.516h.169v3.023a6.54 6.54 0 0 0-1.977 2.382c-.535 1.083-.782 2.444-.715 3.669.006.45.174.882.472 1.204.304.329.719.516 1.153.516h4.238v3.825c-.01.073-.015.147-.015.222 0 .92.735 1.667 1.641 1.667s1.64-.746 1.64-1.667c0-.075-.004-.15-.014-.222v-3.825h4.238c.434 0 .849-.187 1.153-.516.298-.322.466-.754.473-1.204.066-1.225-.181-2.586-.716-3.67a6.54 6.54 0 0 0-1.977-2.38V5.491h.17c.434 0 .849-.186 1.153-.515.304-.329.472-.772.472-1.23 0-.46-.168-.903-.472-1.231ZM8.005 12.114c-.114.169-.288.708-.288 1.076h8.566c0-.368-.174-.907-.289-1.076a2.738 2.738 0 0 0-1.051-.925 1.645 1.645 0 0 1-.764-.624 1.836 1.836 0 0 1-.304-1.016V5.095h-3.75V9.55c0 .364-.106.719-.304 1.016-.19.285-.456.503-.764.624-.417.205-.779.523-1.052.925Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst refresh: IMXIcon = {\n    name: 'refresh',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M14.068 3.247a9.05 9.05 0 0 0-8.98 2.925c-1.08 1.263-1.79 2.35-2.054 3.991a1.58 1.58 0 0 0-.034.315v.003A1.519 1.519 0 0 0 4.504 12a1.458 1.458 0 0 0 1.515-1.184l.002-.012.002-.012c.148-1.107.602-1.702 1.312-2.565a5.999 5.999 0 0 1 8.533-.75l-1.314 1.308a1.396 1.396 0 0 0-.314.445.761.761 0 0 0-.015.582.756.756 0 0 0 .418.406c.163.07.347.095.531.095H20.03A.985.985 0 0 0 21 9.348v-4.84c0-.323-.09-.772-.5-.94-.407-.17-.79.084-1.022.315l-1.45 1.444a9.05 9.05 0 0 0-3.96-2.08ZM3.977 13.687H3.97A.984.984 0 0 0 3 14.65v4.84c0 .324.09.773.499.942.408.17.79-.084 1.023-.315l1.45-1.444a9.049 9.049 0 0 0 12.94-.845c1.08-1.263 1.79-2.35 2.054-3.991.022-.104.033-.209.034-.315v-.003A1.518 1.518 0 0 0 19.496 12a1.458 1.458 0 0 0-1.513 1.184l-.002.012-.002.012c-.148 1.108-.602 1.702-1.312 2.565a6 6 0 0 1-8.535.75l1.314-1.308c.133-.132.246-.281.314-.445a.76.76 0 0 0 .015-.582.756.756 0 0 0-.418-.406 1.364 1.364 0 0 0-.531-.095h-4.85Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst search: IMXIcon = {\n    name: 'search',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path d=\"M10.393 3a7.393 7.393 0 1 0 4.068 13.567l3.996 3.997a1.49 1.49 0 1 0 2.107-2.107l-3.997-3.996A7.393 7.393 0 0 0 10.393 3ZM6 10.393a4.393 4.393 0 1 1 8.786 0 4.393 4.393 0 0 1-8.786 0Z\"></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst send: IMXIcon = {\n    name: 'send',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.302 10.84S5.5 2.591 4.352 2.13C3.207 1.666 3 2.59 3 2.59v17.791c0 .277.077.549.223.79.146.242.356.444.611.589a1.871 1.871 0 0 0 1.708.064l14.5-8.216c.29-.136.533-.343.702-.6.17-.256.258-.551.256-.851a1.528 1.528 0 0 0-.267-.85 1.672 1.672 0 0 0-.431-.433v-.035ZM6.5 10.021V6.803l9.5 5.385-9.5 5.555v-3.146l3.583-.645.036-.01a1.76 1.76 0 0 0 .913-.572 1.54 1.54 0 0 0 .361-.964 1.535 1.535 0 0 0-.336-.972 1.753 1.753 0 0 0-.898-.593l-.034-.01-3.625-.81Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nconst unpin: IMXIcon = {\n    name: 'unpin',\n    value: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"512\" height=\"512\" viewBox=\"0 0 24 24\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.474 19.223a1.633 1.633 0 0 0 0 2.3 1.614 1.614 0 0 0 2.29 0l5.11-5.105v3.693c-.01.073-.015.147-.015.222 0 .92.735 1.667 1.641 1.667s1.64-.746 1.64-1.667a1.77 1.77 0 0 0-.014-.222v-3.825h4.237c.435 0 .85-.187 1.154-.516.298-.322.466-.754.472-1.204.067-1.225-.18-2.586-.715-3.67A6.66 6.66 0 0 0 17.09 9.21l4.436-4.432a1.633 1.633 0 0 0 0-2.3 1.614 1.614 0 0 0-2.29 0L2.474 19.223Zm12.381-7.781-1.75 1.748h2.678c0-.368-.174-.907-.288-1.076a2.798 2.798 0 0 0-.64-.672Z\"/><path d=\"M12.614 5.095h-2.99v2.986l-5.609 5.605c.061-.969.302-1.96.71-2.79a6.54 6.54 0 0 1 1.978-2.38V5.491h-.17c-.434 0-.849-.186-1.153-.515a1.814 1.814 0 0 1-.472-1.23c0-.46.168-.903.472-1.231A1.572 1.572 0 0 1 6.534 2h9.178l-3.098 3.095Z\"/></svg>`,\n    categories: ['editor'],\n    fontSet: 'indigo'\n}\n\nexport const IndigoIcons: Map<string, IMXIcon> = new Map(Object.entries({\n    clear,\n    unfold_more,\n    unfold_less,\n    arrow_forward,\n    arrow_back,\n    arrow_downward,\n    arrow_upward,\n    chevron_down,\n    chevron_up,\n    chevron_right,\n    chevron_left,\n    check,\n    first_page,\n    last_page,\n    access_time,\n    add,\n    attach_file,\n    block,\n    calendar_today,\n    cancel,\n    check_circle,\n    error,\n    file_download,\n    file_upload,\n    filter_list,\n    horizontal_rule,\n    info,\n    menu,\n    pin,\n    refresh,\n    search,\n    send,\n    unpin\n}));\n","import { DestroyRef, Inject, Injectable, Optional, SecurityContext } from \"@angular/core\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport { DOCUMENT } from \"@angular/common\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { Observable, Subject } from \"rxjs\";\nimport { PlatformUtil } from \"../core/utils\";\nimport { iconReferences } from './icon.references'\nimport { IconFamily, IconMeta, FamilyMeta } from \"./types\";\nimport type { IconType, IconReference } from './types';\nimport { IgxTheme, THEME_TOKEN, ThemeToken } from \"../services/theme/theme.token\";\nimport { IndigoIcons } from \"./icons.indigo\";\n\n/**\n * Event emitted when a SVG icon is loaded through\n * a HTTP request.\n */\nexport interface IgxIconLoadedEvent {\n    /** Name of the icon */\n    name: string;\n    /** The actual SVG text, if any */\n    value?: string;\n    /** The font-family for the icon. Defaults to material. */\n    family: string;\n}\n\n/**\n * **Ignite UI for Angular Icon Service** -\n *\n * The Ignite UI Icon Service makes it easy for developers to include custom SVG images and use them with IgxIconComponent.\n * In addition it could be used to associate a custom class to be applied on IgxIconComponent according to given font-family.\n *\n * Example:\n * ```typescript\n * this.iconService.setFamily('material', { className: 'material-icons', type: 'font' });\n * this.iconService.addSvgIcon('aruba', '/assets/svg/country_flags/aruba.svg', 'svg-flags');\n * ```\n */\n@Injectable({\n    providedIn: \"root\",\n})\nexport class IgxIconService {\n    /**\n     * Observable that emits when an icon is successfully loaded\n     * through a HTTP request.\n     *\n     * @example\n     * ```typescript\n     * this.service.iconLoaded.subscribe((ev: IgxIconLoadedEvent) => ...);\n     * ```\n     */\n    public iconLoaded: Observable<IgxIconLoadedEvent>;\n\n    private _defaultFamily: IconFamily = {\n        name: \"material\",\n        meta: { className: \"material-icons\", type: \"liga\" },\n    };\n    private _iconRefs = new Map<string, Map<string, IconMeta>>();\n    private _families = new Map<string, FamilyMeta>();\n    private _cachedIcons = new Map<string, Map<string, SafeHtml>>();\n    private _iconLoaded = new Subject<IgxIconLoadedEvent>();\n    private _domParser: DOMParser;\n\n    constructor(\n        @Optional() private _sanitizer: DomSanitizer,\n        @Optional() private _httpClient: HttpClient,\n        @Optional() private _platformUtil: PlatformUtil,\n        @Optional() @Inject(THEME_TOKEN) private _themeToken: ThemeToken | undefined,\n        @Optional() @Inject(DestroyRef) private _destroyRef: DestroyRef,\n        @Optional() @Inject(DOCUMENT) protected document: Document,\n    ) {\n\n        this.iconLoaded = this._iconLoaded.asObservable();\n        this.setFamily(this._defaultFamily.name, this._defaultFamily.meta);\n\n        const themeChange = this._themeToken?.onChange((theme) => {\n            this.setRefsByTheme(theme);\n        });\n\n        this._destroyRef.onDestroy(() => themeChange?.unsubscribe());\n\n        if (this._platformUtil?.isBrowser) {\n            this._domParser = new DOMParser();\n\n            for (const [name, svg] of IndigoIcons) {\n                this.addSvgIconFromText(name, svg.value, `internal_${svg.fontSet}`, true);\n            }\n        }\n    }\n\n    /**\n     *  Returns the default font-family.\n     * ```typescript\n     *   const defaultFamily = this.iconService.defaultFamily;\n     * ```\n     */\n    public get defaultFamily(): IconFamily {\n        return this._defaultFamily;\n    }\n\n    /**\n     *  Sets the default font-family.\n     * ```typescript\n     *   this.iconService.defaultFamily = 'svg-flags';\n     * ```\n     */\n    public set defaultFamily(family: IconFamily) {\n        this._defaultFamily = family;\n        this.setFamily(this._defaultFamily.name, this._defaultFamily.meta);\n    }\n\n    /**\n     *  Registers a custom class to be applied to IgxIconComponent for a given font-family.\n     * ```typescript\n     *   this.iconService.registerFamilyAlias('material', 'material-icons');\n     * ```\n     * @deprecated in version 18.1.0. Use `setFamily` instead.\n     */\n    public registerFamilyAlias(\n        alias: string,\n        className: string = alias,\n        type: IconType = \"font\",\n    ): this {\n        this.setFamily(alias, { className, type });\n        return this;\n    }\n\n    /**\n     *  Returns the custom class, if any, associated to a given font-family.\n     * ```typescript\n     *   const familyClass = this.iconService.familyClassName('material');\n     * ```\n     */\n    public familyClassName(alias: string): string {\n        return this._families.get(alias)?.className || alias;\n    }\n\n    /** @hidden @internal */\n    private familyType(alias: string): IconType {\n        return this._families.get(alias)?.type;\n    }\n\n    /** @hidden @internal */\n    public setRefsByTheme(theme: IgxTheme) {\n        for (const { alias, target } of iconReferences) {\n            const external = this._iconRefs.get(alias.family)?.get(alias.name)?.external;\n\n            const _ref = this._iconRefs.get('default')?.get(alias.name) ?? {};\n            const _target = target.get(theme) ?? target.get('default')!;\n\n            const icon = target.get(theme) ?? target.get('default')!;\n            const overwrite = !external && !(JSON.stringify(_ref) === JSON.stringify(_target));\n\n            this._setIconRef(\n                alias.name,\n                alias.family,\n                icon,\n                overwrite\n            );\n        }\n    }\n\n    /**\n     *  Creates a family to className relationship that is applied to the IgxIconComponent\n     *   whenever that family name is used.\n     * ```typescript\n     *   this.iconService.setFamily('material', { className: 'material-icons', type: 'liga' });\n     * ```\n     */\n    public setFamily(name: string, meta: FamilyMeta) {\n        this._families.set(name, meta);\n    }\n\n    /**\n     *  Adds an icon reference meta for an icon in a meta family.\n     *  Executes only if no icon reference is found.\n     * ```typescript\n     *   this.iconService.addIconRef('aruba', 'default', { name: 'aruba', family: 'svg-flags' });\n     * ```\n     */\n    public addIconRef(name: string, family: string, icon: IconMeta) {\n        const iconRef = this._iconRefs.get(family)?.get(name);\n\n        if (!iconRef) {\n            this.setIconRef(name, family, icon);\n        }\n    }\n\n    private _setIconRef(name: string, family: string, icon: IconMeta, overwrite = false) {\n        if (overwrite) {\n            this.setIconRef(name, family, {\n                ...icon,\n                external: false\n            });\n        }\n    }\n\n    /**\n     *  Similar to addIconRef, but always sets the icon reference meta for an icon in a meta family.\n     * ```typescript\n     *   this.iconService.setIconRef('aruba', 'default', { name: 'aruba', family: 'svg-flags' });\n     * ```\n     */\n    public setIconRef(name: string, family: string, icon: IconMeta) {\n        let familyRef = this._iconRefs.get(family);\n\n        if (!familyRef) {\n            familyRef = new Map<string, IconMeta>();\n            this._iconRefs.set(family, familyRef);\n        }\n\n        const external = icon.external ?? true;\n        const familyType = this.familyType(icon?.family);\n        familyRef.set(name, { ...icon, type: icon.type ?? familyType, external });\n\n        this._iconLoaded.next({ name, family });\n    }\n\n    /**\n     *  Returns the icon reference meta for an icon in a given family.\n     * ```typescript\n     *   const iconRef = this.iconService.getIconRef('aruba', 'default');\n     * ```\n     */\n    public getIconRef(name: string, family: string): IconReference {\n        const icon = this._iconRefs.get(family)?.get(name);\n\n        const iconFamily = icon?.family ?? family;\n        const _name = icon?.name ?? name;\n        const className = this.familyClassName(iconFamily);\n        const prefix = this._families.get(iconFamily)?.prefix;\n\n        // Handle name prefixes\n        let iconName = _name;\n\n        if (iconName && prefix) {\n            iconName = _name.includes(prefix) ? _name : `${prefix}${_name}`;\n        }\n\n        const cached = this.isSvgIconCached(iconName, iconFamily);\n        const type = cached ? \"svg\" : icon?.type ?? this.familyType(iconFamily);\n\n        return {\n            className,\n            type,\n            name: iconName,\n            family: iconFamily,\n        };\n    }\n\n    private getOrCreateSvgFamily(family: string) {\n        if (!this._families.has(family)) {\n            this._families.set(family, { className: family, type: \"svg\" });\n        }\n\n        return this._families.get(family);\n    }\n    /**\n     *  Adds an SVG image to the cache. SVG source is an url.\n     * ```typescript\n     *   this.iconService.addSvgIcon('aruba', '/assets/svg/country_flags/aruba.svg', 'svg-flags');\n     * ```\n     */\n    public addSvgIcon(\n        name: string,\n        url: string,\n        family = this._defaultFamily.name,\n        stripMeta = false,\n    ) {\n        if (name && url) {\n            const safeUrl = this._sanitizer.bypassSecurityTrustResourceUrl(url);\n\n            if (!safeUrl) {\n                throw new Error(\n                    `The provided URL could not be processed as trusted resource URL by Angular's DomSanitizer: \"${url}\".`,\n                );\n            }\n\n            const sanitizedUrl = this._sanitizer.sanitize(\n                SecurityContext.RESOURCE_URL,\n                safeUrl,\n            );\n\n            if (!sanitizedUrl) {\n                throw new Error(\n                    `The URL provided was not trusted as a resource URL: \"${url}\".`,\n                );\n            }\n\n            if (!this.isSvgIconCached(name, family)) {\n                this.getOrCreateSvgFamily(family);\n\n                this.fetchSvg(url).subscribe((res) => {\n                    this.cacheSvgIcon(name, res, family, stripMeta);\n                });\n            }\n        } else {\n            throw new Error(\n                \"You should provide at least `name` and `url` to register an svg icon.\",\n            );\n        }\n    }\n\n    /**\n     *  Adds an SVG image to the cache. SVG source is its text.\n     * ```typescript\n     *   this.iconService.addSvgIconFromText('simple', '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 200\">\n     *   <path d=\"M74 74h54v54H74\" /></svg>', 'svg-flags');\n     * ```\n     */\n    public addSvgIconFromText(\n        name: string,\n        iconText: string,\n        family = this._defaultFamily.name,\n        stripMeta = false,\n    ) {\n        if (name && iconText) {\n            if (this.isSvgIconCached(name, family)) {\n                return;\n            }\n\n            this.getOrCreateSvgFamily(family);\n            this.cacheSvgIcon(name, iconText, family, stripMeta);\n        } else {\n            throw new Error(\n                \"You should provide at least `name` and `iconText` to register an svg icon.\",\n            );\n        }\n    }\n\n    /**\n     *  Returns whether a given SVG image is present in the cache.\n     * ```typescript\n     *   const isSvgCached = this.iconService.isSvgIconCached('aruba', 'svg-flags');\n     * ```\n     */\n    public isSvgIconCached(name: string, family: string): boolean {\n        if (this._cachedIcons.has(family)) {\n            const familyRegistry = this._cachedIcons.get(\n                family,\n            ) as Map<string, SafeHtml>;\n\n            return familyRegistry.has(name);\n        }\n\n        return false;\n    }\n\n    /**\n     *  Returns the cached SVG image as string.\n     * ```typescript\n     *   const svgIcon = this.iconService.getSvgIcon('aruba', 'svg-flags');\n     * ```\n     */\n    public getSvgIcon(name: string, family: string) {\n        return this._cachedIcons.get(family)?.get(name);\n    }\n\n    /**\n     * @hidden\n     */\n    private fetchSvg(url: string): Observable<string> {\n        const req = this._httpClient.get(url, { responseType: \"text\" });\n        return req;\n    }\n\n    /**\n     * @hidden\n     */\n    private cacheSvgIcon(\n        name: string,\n        value: string,\n        family = this._defaultFamily.name,\n        stripMeta: boolean,\n    ) {\n        if (this._platformUtil?.isBrowser && name && value) {\n            const doc = this._domParser.parseFromString(value, \"image/svg+xml\");\n            const svg = doc.querySelector(\"svg\") as SVGElement;\n\n            if (!this._cachedIcons.has(family)) {\n                this._cachedIcons.set(family, new Map<string, SafeHtml>());\n            }\n\n            if (svg) {\n                svg.setAttribute(\"fit\", \"\");\n                svg.setAttribute(\"preserveAspectRatio\", \"xMidYMid meet\");\n\n                if (stripMeta) {\n                    const title = svg.querySelector(\"title\");\n                    const desc = svg.querySelector(\"desc\");\n\n                    if (title) {\n                        svg.removeChild(title);\n                    }\n\n                    if (desc) {\n                        svg.removeChild(desc);\n                    }\n                }\n\n                const safeSvg = this._sanitizer.bypassSecurityTrustHtml(\n                    svg.outerHTML,\n                );\n\n                this._cachedIcons.get(family).set(name, safeSvg);\n                this._iconLoaded.next({ name, value, family });\n            }\n        }\n    }\n}\n","import {\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    OnInit,\n    OnDestroy,\n    OnChanges,\n    ChangeDetectorRef,\n    booleanAttribute,\n} from \"@angular/core\";\nimport { IgxIconService } from \"./icon.service\";\nimport type { IconReference } from \"./types\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { Subject } from \"rxjs\";\nimport { SafeHtml } from \"@angular/platform-browser\";\n\n/**\n * Icon provides a way to include material icons to markup\n *\n * @igxModule IgxIconModule\n *\n * @igxTheme igx-icon-theme\n *\n * @igxKeywords icon, picture\n *\n * @igxGroup Display\n *\n * @remarks\n *\n * The Ignite UI Icon makes it easy for developers to include material design icons directly in their markup. The icons\n * support different icon families and can be marked as active or disabled using the `active` property. This will change the appearance\n * of the icon.\n *\n * @example\n * ```html\n * <igx-icon family=\"filter-icons\" active=\"true\">home</igx-icon>\n * ```\n */\n@Component({\n    selector: \"igx-icon\",\n    templateUrl: \"icon.component.html\",\n})\nexport class IgxIconComponent implements OnInit, OnChanges, OnDestroy {\n    private _iconRef: IconReference;\n    private _destroy$ = new Subject<void>();\n    private _userClasses = new Set<string>();\n    private _iconClasses = new Set<string>();\n\n    @HostBinding(\"class\")\n    protected get elementClasses() {\n        const icon = Array.from(this._iconClasses).join(\" \");\n        const user = Array.from(this._userClasses).join(\" \");\n\n        return `igx-icon ${icon} ${user}`.trim();\n    }\n\n    private addIconClass(className: string) {\n        this._iconClasses.add(className);\n    }\n\n    private clearIconClasses() {\n        this._iconClasses.clear();\n    }\n\n    /**\n     *  An accessor that returns inactive property.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyIcon\")\n     * public icon: IgxIconComponent;\n     * ngAfterViewInit() {\n     *    let iconActive = this.icon.getInactive;\n     * }\n     * ```\n     */\n    @HostBinding(\"class.igx-icon--inactive\")\n    public get getInactive(): boolean {\n        return !this.active;\n    }\n\n    /**\n     * An @Input property that sets the value of the `family`. By default it's \"material\".\n     *\n     * @example\n     * ```html\n     * <igx-icon family=\"material\">settings</igx-icon>\n     * ```\n     */\n    @Input()\n    public family: string;\n\n    /**\n     *  Set the `name` of the icon.\n     *\n     *  @example\n     * ```html\n     * <igx-icon name=\"contains\" family=\"filter-icons\"></igx-icon>\n     * ```\n     */\n    @Input()\n    public name: string;\n\n    /**\n     * An @Input property that allows you to disable the `active` property. By default it's applied.\n     *\n     * @example\n     * ```html\n     * <igx-icon [active]=\"false\">settings</igx-icon>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public active = true;\n\n    constructor(\n        public el: ElementRef,\n        private iconService: IgxIconService,\n        private ref: ChangeDetectorRef,\n    ) {\n        this.family = this.iconService.defaultFamily.name;\n\n        this.iconService.iconLoaded\n            .pipe(\n                filter((e) => e.name === this.name && e.family === this.family),\n                takeUntil(this._destroy$),\n            )\n            .subscribe(() => {\n                this.setIcon();\n                this.ref.detectChanges()\n            });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnInit() {\n        this.setIcon();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnChanges() {\n        this.setIcon();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy() {\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    protected get iconRef() {\n        return this._iconRef;\n    }\n\n    protected set iconRef(ref: IconReference) {\n        this._iconRef = ref;\n    }\n\n    /**\n     *  An accessor that returns the value of the family property.\n     *\n     * @example\n     * ```typescript\n     *  @ViewChild(\"MyIcon\")\n     * public icon: IgxIconComponent;\n     * ngAfterViewInit() {\n     *    let iconFamily = this.icon.getFamily;\n     * }\n     * ```\n     */\n    public get getFamily(): string {\n        return this.iconRef.family;\n    }\n\n    /**\n     *  An accessor that returns the value of the active property.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyIcon\")\n     * public icon: IgxIconComponent;\n     * ngAfterViewInit() {\n     *    let iconActive = this.icon.getActive;\n     * }\n     * ```\n     */\n    public get getActive(): boolean {\n        return this.active;\n    }\n\n    /**\n     * An accessor that returns the value of the iconName property.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyIcon\")\n     * public icon: IgxIconComponent;\n     * ngAfterViewInit() {\n     *    let name = this.icon.getName;\n     * }\n     * ```\n     */\n    public get getName(): string {\n        return this.iconRef.name;\n    }\n\n    /**\n     *  An accessor that returns the underlying SVG image as SafeHtml.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyIcon\")\n     * public icon: IgxIconComponent;\n     * ngAfterViewInit() {\n     *    let svg: SafeHtml = this.icon.getSvg;\n     * }\n     * ```\n     */\n    public get getSvg(): SafeHtml {\n        const { name, family } = this.iconRef;\n\n        if (this.iconService.isSvgIconCached(name, family)) {\n            return this.iconService.getSvgIcon(name, family);\n        }\n\n        return null;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private setIcon() {\n        this.iconRef = this.iconService.getIconRef(this.name, this.family);\n        this.clearIconClasses();\n\n        const { name, type, className } = this.iconRef;\n\n        if (name && type === \"font\") {\n            this.addIconClass(name);\n        }\n\n        this.addIconClass(className);\n    }\n}\n","<!-- This is only here for backwards compatibility in case  -->\n<!-- ligatures are used and the name is provided as content -->\n@if (!iconRef.name) {\n    <ng-content></ng-content>\n}\n\n@switch (iconRef.type) {\n    @case (\"liga\") {{{ iconRef.name }}}\n\n    @case (\"svg\") {\n        <div [innerHTML]=\"getSvg\"></div>\n    }\n}\n","import { IDatePickerResourceStrings } from './date-picker-resources';\nimport { IDateRangePickerResourceStrings } from './date-range-picker-resources';\nimport { IGridResourceStrings } from './grid-resources';\nimport { ITimePickerResourceStrings } from './time-picker-resources';\nimport { IPaginatorResourceStrings } from './paginator-resources';\nimport { ICarouselResourceStrings } from './carousel-resources';\nimport { IChipResourceStrings } from './chip-resources';\nimport { IListResourceStrings } from './list-resources';\nimport { ICalendarResourceStrings } from './calendar-resources';\nimport { IInputResourceStrings } from './input-resources';\nimport { ITreeResourceStrings } from './tree-resources';\nimport { IActionStripResourceStrings } from './action-strip-resources';\nimport { IQueryBuilderResourceStrings } from './query-builder-resources';\nimport { IComboResourceStrings } from './combo-resources';\nimport { IBannerResourceStrings } from './banner-resources';\n\nexport interface IResourceStrings extends IGridResourceStrings, ITimePickerResourceStrings, ICalendarResourceStrings,\n    ICarouselResourceStrings, IChipResourceStrings, IComboResourceStrings, IInputResourceStrings, IDatePickerResourceStrings,\n    IDateRangePickerResourceStrings, IListResourceStrings, IPaginatorResourceStrings, ITreeResourceStrings,\n    IActionStripResourceStrings, IQueryBuilderResourceStrings, IBannerResourceStrings { }\n\nexport class igxI18N {\n    private static _instance: igxI18N;\n\n    private _currentResourceStrings: IResourceStrings = { };\n\n    private constructor() { }\n\n    public static instance() {\n        return this._instance || (this._instance = new this());\n    }\n\n    /**\n     * Changes the resource strings for all components in the application\n     * ```\n     * @param resourceStrings to be applied\n     */\n    public changei18n(resourceStrings: IResourceStrings) {\n        for (const key of Object.keys(resourceStrings)) {\n            this._currentResourceStrings[key] = resourceStrings[key];\n        }\n    }\n\n    public getCurrentResourceStrings(en: IResourceStrings): IResourceStrings {\n        for (const key of Object.keys(en)) {\n            if (!this._currentResourceStrings[key]) {\n                this._currentResourceStrings[key] = en[key];\n            }\n        }\n        return this._currentResourceStrings;\n    }\n}\n\nexport function getCurrentResourceStrings(en: IResourceStrings) {\n    return igxI18N.instance().getCurrentResourceStrings(en);\n}\n\nexport function changei18n(resourceStrings: IResourceStrings) {\n    igxI18N.instance().changei18n(resourceStrings);\n}\n","import { DOCUMENT, NgTemplateOutlet, NgClass } from '@angular/common';\nimport {\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    DestroyRef,\n    ElementRef,\n    HostBinding,\n    HostListener, Inject, Input,\n    Optional, QueryList, booleanAttribute,\n    inject\n} from '@angular/core';\nimport { IInputResourceStrings, InputResourceStringsEN } from '../core/i18n/input-resources';\nimport { PlatformUtil, getComponentTheme } from '../core/utils';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxHintDirective } from '../directives/hint/hint.directive';\nimport {\n    IgxInputDirective,\n    IgxInputState\n} from '../directives/input/input.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\n\nimport { IgxInputGroupBase } from './input-group.common';\nimport { IgxInputGroupType, IGX_INPUT_GROUP_TYPE } from './inputGroupType';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { IgxTheme, THEME_TOKEN, ThemeToken } from '../services/theme/theme.token';\n\n@Component({\n    selector: 'igx-input-group',\n    templateUrl: 'input-group.component.html',\n    providers: [{ provide: IgxInputGroupBase, useExisting: IgxInputGroupComponent }],\n    imports: [NgTemplateOutlet, IgxPrefixDirective, IgxButtonDirective, NgClass, IgxSuffixDirective, IgxIconComponent]\n})\nexport class IgxInputGroupComponent implements IgxInputGroupBase {\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IInputResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IInputResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Property that enables/disables the auto-generated class of the `IgxInputGroupComponent`.\n     * By default applied the class is applied.\n     * ```typescript\n     *  @ViewChild(\"MyInputGroup\")\n     *  public inputGroup: IgxInputGroupComponent;\n     *  ngAfterViewInit(){\n     *  this.inputGroup.defaultClass = false;\n     * ```\n     * }\n     */\n    @HostBinding('class.igx-input-group')\n    public defaultClass = true;\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--placeholder')\n    public hasPlaceholder = false;\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--required')\n    public isRequired = false;\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--focused')\n    public isFocused = false;\n\n    /**\n     * @hidden @internal\n     * When truthy, disables the `IgxInputGroupComponent`.\n     * Controlled by the underlying `IgxInputDirective`.\n     * ```html\n     * <igx-input-group [disabled]=\"true\"></igx-input-group>\n     * ```\n     */\n    @HostBinding('class.igx-input-group--disabled')\n    public disabled = false;\n\n    /**\n     * Prevents automatically focusing the input when clicking on other elements in the input group (e.g. prefix or suffix).\n     *\n     * @remarks Automatic focus causes software keyboard to show on mobile devices.\n     *\n     * @example\n     * ```html\n     * <igx-input-group [suppressInputAutofocus]=\"true\"></igx-input-group>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public suppressInputAutofocus = false;\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--warning')\n    public hasWarning = false;\n\n    /** @hidden */\n    @ContentChildren(IgxHintDirective, { read: IgxHintDirective })\n    protected hints: QueryList<IgxHintDirective>;\n\n    @ContentChildren(IgxPrefixDirective, { read: IgxPrefixDirective, descendants: true })\n    protected _prefixes: QueryList<IgxPrefixDirective>;\n\n    @ContentChildren(IgxSuffixDirective, { read: IgxSuffixDirective, descendants: true })\n    protected _suffixes: QueryList<IgxSuffixDirective>;\n\n    /** @hidden */\n    @ContentChild(IgxInputDirective, { read: IgxInputDirective, static: true })\n    protected input: IgxInputDirective;\n\n    private _destroyRef = inject(DestroyRef);\n    private _type: IgxInputGroupType = null;\n    private _filled = false;\n    private _theme: IgxTheme;\n    private _resourceStrings = getCurrentResourceStrings(InputResourceStringsEN);\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--valid')\n    public get validClass(): boolean {\n        return this.input.valid === IgxInputState.VALID;\n    }\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--invalid')\n    public get invalidClass(): boolean {\n        return this.input.valid === IgxInputState.INVALID;\n    }\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--filled')\n    public get isFilled() {\n        return this._filled || (this.input && this.input.value);\n    }\n\n    /** @hidden */\n    @HostBinding('class.igx-input-group--textarea-group')\n    public get textAreaClass(): boolean {\n        return this.input.isTextArea;\n    }\n\n    /**\n     * Sets how the input will be styled.\n     * Allowed values of type IgxInputGroupType.\n     * ```html\n     * <igx-input-group [type]=\"'search'\">\n     * ```\n     */\n    @Input()\n    public set type(value: IgxInputGroupType) {\n        this._type = value;\n    }\n\n    /**\n     * Returns the type of the `IgxInputGroupComponent`. How the input is styled.\n     * The default is `line`.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let inputType = this.inputGroup.type;\n     * }\n     * ```\n     */\n    public get type() {\n        return this._type || this._inputGroupType || 'line';\n    }\n\n    /**\n     * Sets the theme of the input.\n     * Allowed values of type IgxInputGroupTheme.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit() {\n     *  let inputTheme = 'fluent';\n     * }\n     */\n    @Input()\n    public set theme(value: IgxTheme) {\n        this._theme = value;\n    }\n\n    /**\n     * Returns the theme of the input.\n     * The returned value is of type IgxInputGroupType.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit() {\n     *  let inputTheme = this.inputGroup.theme;\n     * }\n     */\n    public get theme(): IgxTheme {\n        return this._theme;\n    }\n\n    constructor(\n        public element: ElementRef<HTMLElement>,\n        @Optional()\n        @Inject(IGX_INPUT_GROUP_TYPE)\n        private _inputGroupType: IgxInputGroupType,\n        @Inject(DOCUMENT)\n        private document: any,\n        private platform: PlatformUtil,\n        private cdr: ChangeDetectorRef,\n        @Inject(THEME_TOKEN)\n        private themeToken: ThemeToken\n    ) {\n        this._theme = this.themeToken.theme;\n        const themeChange = this.themeToken.onChange((theme) => {\n            if (this._theme !== theme) {\n                this._theme = theme;\n                this.cdr.detectChanges();\n            }\n        });\n        this._destroyRef.onDestroy(() => themeChange.unsubscribe());\n    }\n\n    /** @hidden */\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        if (\n            !this.isFocused &&\n            event.target !== this.input.nativeElement &&\n            !this.suppressInputAutofocus\n        ) {\n            this.input.focus();\n        }\n    }\n\n    /** @hidden */\n    @HostListener('pointerdown', ['$event'])\n    public onPointerDown(event: PointerEvent) {\n        if (this.isFocused && event.target !== this.input.nativeElement) {\n            event.preventDefault();\n        }\n    }\n\n    /** @hidden @internal */\n    public hintClickHandler(event: MouseEvent) {\n        event.stopPropagation();\n    }\n\n    /**\n     * Returns whether the `IgxInputGroupComponent` has hints.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let inputHints = this.inputGroup.hasHints;\n     * }\n     * ```\n     */\n    public get hasHints() {\n        return this.hints.length > 0;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-input-group--prefixed')\n    public get hasPrefixes() {\n        return this._prefixes.length > 0 || this.isFileType;\n    }\n\n    /** @hidden @internal */\n    public set prefixes(items: QueryList<IgxPrefixDirective>) {\n        this._prefixes = items;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-input-group--suffixed')\n    public get hasSuffixes() {\n        return this._suffixes.length > 0 || this.isFileType && this.isFilled;\n    }\n\n    /** @hidden @internal */\n    public set suffixes(items: QueryList<IgxPrefixDirective>) {\n        this._suffixes = items;\n    }\n\n    /**\n     * Returns whether the `IgxInputGroupComponent` has border.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let inputBorder = this.inputGroup.hasBorder;\n     * }\n     * ```\n     */\n    public get hasBorder() {\n        return (\n            (this.type === 'line' || this.type === 'box') &&\n            this._theme === 'material'\n        );\n    }\n\n    /**\n     * Returns whether the `IgxInputGroupComponent` type is line.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeLine = this.inputGroup.isTypeLine;\n     * }\n     * ```\n     */\n    public get isTypeLine(): boolean {\n        return this.type === 'line' && this._theme === 'material';\n    }\n\n    /**\n     * Returns whether the `IgxInputGroupComponent` type is box.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeBox = this.inputGroup.isTypeBox;\n     * }\n     * ```\n     */\n    @HostBinding('class.igx-input-group--box')\n    public get isTypeBox() {\n        return this.type === 'box' && this._theme === 'material';\n    }\n\n    /** @hidden @internal */\n    public uploadButtonHandler() {\n        this.input.nativeElement.click();\n    }\n\n    /** @hidden @internal */\n    public clearValueHandler() {\n        this.input.clear();\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-input-group--file')\n    public get isFileType() {\n        return this.input.type === 'file';\n    }\n\n    /** @hidden @internal */\n    public get fileNames() {\n        return this.input.fileNames || this._resourceStrings.igx_input_file_placeholder;\n    }\n\n    /**\n     * Returns whether the `IgxInputGroupComponent` type is border.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeBorder = this.inputGroup.isTypeBorder;\n     * }\n     * ```\n     */\n    @HostBinding('class.igx-input-group--border')\n    public get isTypeBorder() {\n        return this.type === 'border' && this._theme === 'material';\n    }\n\n    /**\n     * Returns true if the `IgxInputGroupComponent` theme is Fluent.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeFluent = this.inputGroup.isTypeFluent;\n     * }\n     * ```\n     */\n    @HostBinding('class.igx-input-group--fluent')\n    public get isTypeFluent() {\n        return this._theme === 'fluent';\n    }\n\n    /**\n     * Returns true if the `IgxInputGroupComponent` theme is Bootstrap.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeBootstrap = this.inputGroup.isTypeBootstrap;\n     * }\n     * ```\n     */\n    @HostBinding('class.igx-input-group--bootstrap')\n    public get isTypeBootstrap() {\n        return this._theme === 'bootstrap';\n    }\n\n    /**\n     * Returns true if the `IgxInputGroupComponent` theme is Indigo.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeIndigo = this.inputGroup.isTypeIndigo;\n     * }\n     * ```\n     */\n    @HostBinding('class.igx-input-group--indigo')\n    public get isTypeIndigo() {\n        return this._theme === 'indigo';\n    }\n\n    /**\n     * Returns whether the `IgxInputGroupComponent` type is search.\n     * ```typescript\n     * @ViewChild(\"MyInputGroup1\")\n     * public inputGroup: IgxInputGroupComponent;\n     * ngAfterViewInit(){\n     *    let isTypeSearch = this.inputGroup.isTypeSearch;\n     * }\n     * ```\n     */\n    @HostBinding('class.igx-input-group--search')\n    public get isTypeSearch() {\n        if(!this.isFileType && !this.input.isTextArea) {\n            return this.type === 'search';\n        }\n    }\n\n    /** @hidden */\n    public get filled() {\n        return this._filled;\n    }\n\n    /** @hidden */\n    public set filled(val) {\n        this._filled = val;\n    }\n\n    private setComponentTheme() {\n        if (!this.themeToken.preferToken) {\n            const theme = getComponentTheme(this.element.nativeElement);\n\n            if (theme && theme !== this._theme) {\n                this.theme = theme;\n                this.cdr.markForCheck();\n            }\n        }\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentChecked() {\n        this.setComponentTheme();\n    }\n}\n","@if (isTypeBox) {\n    <div class=\"igx-input-group__wrapper\">\n        <ng-container *ngTemplateOutlet=\"bundle\"></ng-container>\n    </div>\n} @else {\n    <ng-container *ngTemplateOutlet=\"bundle\"></ng-container>\n}\n\n<div class=\"igx-input-group__hint\" (click)=\"hintClickHandler($event)\">\n    <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n</div>\n\n<ng-template #label>\n    <ng-content select=\"[igxLabel]\"></ng-content>\n</ng-template>\n\n<ng-template #input>\n    <ng-content select=\"[igxInput]\"></ng-content>\n</ng-template>\n\n<ng-template #prefix>\n    <ng-content select=\"igx-prefix, [igxPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #uploadButton>\n    @if (isFileType) {\n        <igx-prefix class=\"igx-input-group__upload-button\">\n            <button\n                igxButton=\"contained\"\n                type=\"button\"\n                (click)=\"uploadButtonHandler()\"\n                [disabled]=\"disabled\"\n                [ngClass]=\"{ 'igx-input-group__upload-button': isTypeLine }\"\n            >\n                {{ resourceStrings.igx_input_upload_button }}\n            </button>\n        </igx-prefix>\n    }\n</ng-template>\n\n<ng-template #files>\n    @if (isFileType) {\n        <div\n            class=\"igx-input-group__file-input\"\n            [title]=\"fileNames\"\n        >\n            <span>{{ fileNames }}</span>\n        </div>\n    }\n</ng-template>\n\n<ng-template #clear>\n    @if (isFileType && isFilled) {\n        <igx-suffix\n            class=\"igx-input-group__clear-icon\"\n            (click)=\"clearValueHandler()\"\n            (keydown.Enter)=\"clearValueHandler()\"\n            title=\"clear files\"\n            tabindex=\"0\"\n        >\n            <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n        </igx-suffix>\n    }\n</ng-template>\n\n<ng-template #suffix>\n    <ng-content select=\"igx-suffix, [igxSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #materialBundle>\n    <div class=\"igx-input-group__bundle\">\n        <div class=\"igx-input-group__bundle-start\">\n            <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n        </div>\n\n        <ng-container>\n            <div class=\"igx-input-group__notch\">\n                <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n            </div>\n        </ng-container>\n\n        <div class=\"igx-input-group__bundle-main\">\n            <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"files\"></ng-container>\n        </div>\n\n        <div class=\"igx-input-group__filler\"></div>\n\n        <div class=\"igx-input-group__bundle-end\">\n            <ng-container *ngTemplateOutlet=\"clear\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\n        </div>\n\n        @if (hasBorder) {\n            <div class=\"igx-input-group__line\"></div>\n        }\n    </div>\n</ng-template>\n\n<ng-template #fluentBundle>\n    <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n\n    <div class=\"igx-input-group__bundle\">\n        <div class=\"igx-input-group__bundle-start\">\n            <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n        </div>\n\n\n        <div class=\"igx-input-group__bundle-main\">\n            <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"files\"></ng-container>\n        </div>\n\n        <div class=\"igx-input-group__bundle-end\">\n            <ng-container *ngTemplateOutlet=\"clear\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\n        </div>\n\n        @if (hasBorder) {\n            <div class=\"igx-input-group__line\"></div>\n        }\n    </div>\n</ng-template>\n\n<ng-template #bootstrapBundle>\n    <ng-container *ngTemplateOutlet=\"label\"></ng-container>\n\n    <div class=\"igx-input-group__bundle\">\n        <div class=\"igx-input-group__bundle-start\">\n            <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"uploadButton\"></ng-container>\n        </div>\n\n        <ng-container *ngTemplateOutlet=\"input\"></ng-container>\n        <ng-container *ngTemplateOutlet=\"files\"></ng-container>\n\n        <div class=\"igx-input-group__bundle-end\">\n            <ng-container *ngTemplateOutlet=\"clear\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\n        </div>\n    </div>\n</ng-template>\n\n<ng-template #bundle>\n    @switch (theme) {\n        @case ('bootstrap') {\n            <ng-container *ngTemplateOutlet=\"bootstrapBundle\"></ng-container>\n        }\n        @case ('fluent') {\n            <ng-container *ngTemplateOutlet=\"fluentBundle\"></ng-container>\n        }\n        @case ('indigo') {\n            <ng-container *ngTemplateOutlet=\"fluentBundle\"></ng-container>\n        }\n        @default {\n            <ng-container *ngTemplateOutlet=\"materialBundle\"></ng-container>\n        }\n    }\n</ng-template>\n","import { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxInputDirective } from '../directives/input/input.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxInputGroupComponent } from './input-group.component';\n\nexport * from './input-group.component';\nexport * from '../directives/input/input.directive';\nexport * from '../directives/label/label.directive';\nexport * from '../directives/hint/hint.directive';\nexport * from '../directives/prefix/prefix.directive';\nexport * from '../directives/suffix/suffix.directive';\nexport * from './inputGroupType';\n\n/* NOTE: Input group directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_INPUT_GROUP_DIRECTIVES = [\n    IgxInputGroupComponent,\n    IgxInputDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    Optional,\n    Output,\n    Self,\n    AfterViewInit,\n    OnInit,\n    booleanAttribute\n} from '@angular/core';\nimport { NgModel, FormControlName } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CancelableEventArgs, IBaseEventArgs } from '../../core/utils';\nimport {\n    AbsoluteScrollStrategy,\n    AutoPositionStrategy,\n    IPositionStrategy,\n    IScrollStrategy,\n    OverlaySettings\n} from '../../services/public_api';\nimport {\n    IgxDropDownComponent\n} from '../../drop-down/drop-down.component';\nimport { IgxDropDownItemNavigationDirective } from '../../drop-down/drop-down-navigation.directive';\nimport { IgxInputGroupComponent } from '../../input-group/public_api';\nimport { IgxOverlayOutletDirective } from '../toggle/toggle.directive';\nimport { ISelectionEventArgs } from '../../drop-down/drop-down.common';\n\n/**\n * Interface that encapsulates onItemSelection event arguments - new value and cancel selection.\n *\n * @export\n */\nexport interface AutocompleteSelectionChangingEventArgs extends CancelableEventArgs, IBaseEventArgs {\n    /**\n     * New value selected from the drop down\n     */\n    value: string;\n}\n\nexport interface AutocompleteOverlaySettings {\n    /** Position strategy to use with this settings */\n    positionStrategy?: IPositionStrategy;\n    /** Scroll strategy to use with this settings */\n    scrollStrategy?: IScrollStrategy;\n    /** Set the outlet container to attach the overlay to */\n    outlet?: IgxOverlayOutletDirective | ElementRef;\n}\n\n/**\n * **Ignite UI for Angular Autocomplete** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/autocomplete.html)\n *\n * The igxAutocomplete directive provides a way to enhance a text input\n * by showing a drop down of suggested options, provided by the developer.\n *\n * Example:\n * ```html\n * <input type=\"text\" [igxAutocomplete]=\"townsPanel\" #autocompleteRef=\"igxAutocomplete\"/>\n * <igx-drop-down #townsPanel>\n *     <igx-drop-down-item *ngFor=\"let town of towns | startsWith:townSelected\" [value]=\"town\">\n *         {{town}}\n *     </igx-drop-down-item>\n * </igx-drop-down>\n * ```\n */\n@Directive({\n    selector: '[igxAutocomplete]',\n    exportAs: 'igxAutocomplete',\n    standalone: true\n})\nexport class IgxAutocompleteDirective extends IgxDropDownItemNavigationDirective implements OnDestroy, AfterViewInit, OnInit {\n    /**\n     * Sets the target of the autocomplete directive\n     *\n     * ```html\n     * <!-- Set -->\n     * <input [igxAutocomplete]=\"dropdown\" />\n     * ...\n     * <igx-drop-down #dropdown>\n     * ...\n     * </igx-drop-down>\n     * ```\n     */\n    @Input('igxAutocomplete')\n    public override get target(): IgxDropDownComponent {\n        return this._target as IgxDropDownComponent;\n    }\n    public override set target(v: IgxDropDownComponent) {\n        this._target = v;\n    }\n\n    /**\n     * Provide overlay settings for the autocomplete drop down\n     *\n     * ```typescript\n     * // get\n     * let settings = this.autocomplete.autocompleteSettings;\n     * ```\n     * ```html\n     * <!--set-->\n     * <input type=\"text\" [igxAutocomplete]=\"townsPanel\" [igxAutocompleteSettings]=\"settings\"/>\n     * ```\n     * ```typescript\n     * // set\n     * this.settings = {\n     *  positionStrategy: new ConnectedPositioningStrategy({\n     *      closeAnimation: null,\n     *      openAnimation: null\n     *  })\n     * };\n     * ```\n     */\n    @Input('igxAutocompleteSettings')\n    public autocompleteSettings: AutocompleteOverlaySettings;\n\n    /** @hidden @internal */\n    @HostBinding('attr.autocomplete')\n    public autofill = 'off';\n\n    /** @hidden  @internal */\n    @HostBinding('attr.role')\n    public role = 'combobox';\n\n    /**\n     * Enables/disables autocomplete component\n     *\n     * ```typescript\n     * // get\n     * let disabled = this.autocomplete.disabled;\n     * ```\n     * ```html\n     * <!--set-->\n     * <input type=\"text\" [igxAutocomplete]=\"townsPanel\" [igxAutocompleteDisabled]=\"disabled\"/>\n     * ```\n     * ```typescript\n     * // set\n     * public disabled = true;\n     * ```\n     */\n    @Input({ alias: 'igxAutocompleteDisabled', transform: booleanAttribute })\n    public disabled = false;\n\n    /**\n     * Emitted after item from the drop down is selected\n     *\n     * ```html\n     * <input igxInput [igxAutocomplete]=\"townsPanel\" (selectionChanging)='selectionChanging($event)' />\n     * ```\n     */\n    @Output()\n    public selectionChanging = new EventEmitter<AutocompleteSelectionChangingEventArgs>();\n\n    /** @hidden @internal */\n    public get nativeElement(): HTMLInputElement {\n        return this.elementRef.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public get parentElement(): HTMLElement {\n        return this.group ? this.group.element.nativeElement : this.nativeElement;\n    }\n\n    private get settings(): OverlaySettings {\n        const settings = Object.assign({}, this.defaultSettings, this.autocompleteSettings);\n        if (!settings.target) {\n            const positionStrategyClone: IPositionStrategy = settings.positionStrategy.clone();\n            settings.target = this.parentElement;\n            settings.positionStrategy = positionStrategyClone;\n        }\n        return settings;\n    }\n\n    /** @hidden  @internal */\n    @HostBinding('attr.aria-expanded')\n    public get ariaExpanded() {\n        return !this.collapsed;\n    }\n\n    /** @hidden  @internal */\n    @HostBinding('attr.aria-haspopup')\n    public get hasPopUp() {\n        return 'listbox';\n    }\n\n    /** @hidden  @internal */\n    @HostBinding('attr.aria-owns')\n    public get ariaOwns() {\n        return this.target.listId;\n    }\n\n    /** @hidden  @internal */\n    @HostBinding('attr.aria-activedescendant')\n    public get ariaActiveDescendant() {\n        return !this.target.collapsed && this.target.focusedItem ? this.target.focusedItem.id : null;\n    }\n\n    /** @hidden  @internal */\n    @HostBinding('attr.aria-autocomplete')\n    public get ariaAutocomplete() {\n        return 'list';\n    }\n\n    protected _composing: boolean;\n    protected id: string;\n    protected get model() {\n        return this.ngModel || this.formControl;\n    }\n\n    private _shouldBeOpen = false;\n    private destroy$ = new Subject<void>();\n    private defaultSettings: OverlaySettings;\n\n    constructor(@Self() @Optional() @Inject(NgModel) protected ngModel: NgModel,\n        @Self() @Optional() @Inject(FormControlName) protected formControl: FormControlName,\n        @Optional() protected group: IgxInputGroupComponent,\n        protected elementRef: ElementRef,\n        protected cdr: ChangeDetectorRef) {\n        super(null);\n    }\n\n    /** @hidden  @internal */\n    @HostListener('input')\n    public onInput() {\n        this.open();\n    }\n\n    /** @hidden @internal */\n    @HostListener('compositionstart')\n    public onCompositionStart(): void {\n        if (!this._composing) {\n            this._composing = true;\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('compositionend')\n    public onCompositionEnd(): void {\n        this._composing = false;\n    }\n\n    /** @hidden  @internal */\n    @HostListener('keydown.ArrowDown', ['$event'])\n    @HostListener('keydown.Alt.ArrowDown', ['$event'])\n    @HostListener('keydown.ArrowUp', ['$event'])\n    @HostListener('keydown.Alt.ArrowUp', ['$event'])\n    public onArrowDown(event: Event) {\n        event.preventDefault();\n        this.open();\n    }\n\n    /** @hidden  @internal */\n    @HostListener('keydown.Tab')\n    @HostListener('keydown.Shift.Tab')\n    public onTab() {\n        this.close();\n    }\n\n    /** @hidden  @internal */\n    public override handleKeyDown(event) {\n        if (!this.collapsed && !this._composing) {\n            switch (event.key.toLowerCase()) {\n                case 'space':\n                case 'spacebar':\n                case ' ':\n                case 'home':\n                case 'end':\n                    return;\n                default:\n                    super.handleKeyDown(event);\n            }\n        }\n    }\n\n    /** @hidden  @internal */\n    public override onArrowDownKeyDown() {\n        super.onArrowDownKeyDown();\n    }\n\n    /** @hidden  @internal */\n    public override onArrowUpKeyDown() {\n        super.onArrowUpKeyDown();\n    }\n\n    /** @hidden  @internal */\n    public override onEndKeyDown() {\n        super.onEndKeyDown();\n    }\n\n    /** @hidden  @internal */\n    public override onHomeKeyDown() {\n        super.onHomeKeyDown();\n    }\n\n    /**\n     * Closes autocomplete drop down\n     */\n    public close() {\n        this._shouldBeOpen = false;\n        if (this.collapsed) {\n            return;\n        }\n        this.target.close();\n    }\n\n    /**\n     * Opens autocomplete drop down\n     */\n    public open() {\n        this._shouldBeOpen = true;\n        if (this.disabled || !this.collapsed || this.target.children.length === 0) {\n            return;\n        }\n        // if no drop-down width is set, the drop-down will be as wide as the autocomplete input;\n        this.target.width = this.target.width || (this.parentElement.clientWidth + 'px');\n        this.target.open(this.settings);\n        this.highlightFirstItem();\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        const targetElement = this.parentElement;\n        this.defaultSettings = {\n            target: targetElement,\n            modal: false,\n            scrollStrategy: new AbsoluteScrollStrategy(),\n            positionStrategy: new AutoPositionStrategy(),\n            excludeFromOutsideClick: [targetElement]\n        };\n    }\n\n    /** @hidden */\n    public ngOnDestroy() {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    public ngAfterViewInit() {\n        this.target.children.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.target.children.length) {\n                if (!this.collapsed) {\n                    this.highlightFirstItem();\n                } else if (this._shouldBeOpen) {\n                    this.open();\n                }\n            } else {\n                // _shouldBeOpen flag should remain unchanged since this state change doesn't come from outside of the component\n                // (like in the case of public API or user interaction).\n                this.target.close();\n            }\n        });\n        this.target.selectionChanging.pipe(takeUntil(this.destroy$)).subscribe(this.select.bind(this));\n    }\n\n    private get collapsed(): boolean {\n        return this.target ? this.target.collapsed : true;\n    }\n\n    private select(value: ISelectionEventArgs) {\n        if (!value.newSelection) {\n            return;\n        }\n        value.cancel = true; // Disable selection in the drop down, because in autocomplete we do not save selection.\n        const newValue = value.newSelection.value;\n        const args: AutocompleteSelectionChangingEventArgs = { value: newValue, cancel: false };\n        this.selectionChanging.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.close();\n\n        // Update model after the input is re-focused, in order to have proper valid styling.\n        // Otherwise when item is selected using mouse (and input is blurred), then valid style will be removed.\n        if (this.model) {\n            this.model.control.setValue(newValue);\n        } else {\n            this.nativeElement.value = newValue;\n        }\n    }\n\n    private highlightFirstItem() {\n        if (this.target.focusedItem) {\n            this.target.focusedItem.focused = false;\n            this.target.focusedItem = null;\n        }\n        this.target.navigateFirst();\n        this.cdr.detectChanges();\n    }\n}\n","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\nimport { mkenum } from '../../core/utils';\n\nexport const IgxDividerType = /*@__PURE__*/mkenum({\n    SOLID: 'solid',\n    DASHED: 'dashed'\n});\nexport type IgxDividerType = (typeof IgxDividerType)[keyof typeof IgxDividerType];\n\nlet NEXT_ID = 0;\n\n@Directive({\n    selector: 'igx-divider',\n    standalone: true\n})\nexport class IgxDividerDirective {\n    /**\n     * Sets/gets the `id` of the divider.\n     * If not set, `id` will have value `\"igx-divider-0\"`;\n     * ```html\n     * <igx-divider id=\"my-divider\"></igx-divider>\n     * ```\n     * ```typescript\n     * let dividerId =  this.divider.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-divider-${NEXT_ID++}`;\n\n    /**\n     * Sets the value of `role` attribute.\n     * If not the default value of `separator` will be used.\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'separator';\n\n    /**\n     * Sets the type of the divider. The default value\n     * is `default`. The divider can also be `dashed`;\n     * ```html\n     * <igx-divider type=\"dashed\"></igx-divider>\n     * ```\n     */\n    @HostBinding('class.igx-divider')\n    @Input()\n    public type: IgxDividerType | string = IgxDividerType.SOLID;\n\n    @HostBinding('class.igx-divider--dashed')\n    public get isDashed() {\n        return this.type === IgxDividerType.DASHED;\n    }\n\n    /**\n     * If set to `true` and an `inset` value has been provided,\n     * the divider will start shrinking from both ends.\n     * ```html\n     * <igx-divider [middle]=\"true\"></igx-divider>\n     * ```\n     */\n    @HostBinding('class.igx-divider--inset')\n    @Input({ transform: booleanAttribute })\n    public middle = false;\n\n    /**\n     * Sets the divider in vertical orientation.\n     * ```html\n     * <igx-divider [vertical]=\"true\"></igx-divider>\n     * ```\n     */\n    @HostBinding('class.igx-divider--vertical')\n    @Input({ transform: booleanAttribute })\n    public vertical = false;\n\n    /**\n     * Sets the inset of the divider from the side(s).\n     * If the divider attribute `middle` is set to `true`,\n     * it will inset the divider on both sides.\n     * ```typescript\n     * this.divider.inset = '32px';\n     * ```\n     */\n    @HostBinding('style.--inset')\n    @Input()\n    public set inset(value: string) {\n        this._inset = value;\n    }\n\n    /**\n     * Gets the current divider inset in terms of\n     * inset-inline-start representation as applied to the divider.\n     * ```typescript\n     * const inset = this.divider.inset;\n     * ```\n     */\n    public get inset() {\n        return this._inset;\n    }\n\n    /**\n     * Sets the value of the `inset` attribute.\n     * If not provided it will be set to `'0'`.\n     * ```html\n     * <igx-divider inset=\"16px\"></igx-divider>\n     * ```\n     */\n    private _inset = '0';\n\n    /**\n     * A getter that returns `true` if the type of the divider is `default`;\n     * ```typescript\n     * const isDefault = this.divider.isDefault;\n     * ```\n     */\n    public get isSolid() {\n        return this.type === IgxDividerType.SOLID;\n    }\n\n}\n\n\n","import { Renderer2 } from '@angular/core';\nimport { IgxDragDirective, IgxDropDirective } from './drag-drop.directive';\n\n\nexport interface IDropStrategy {\n    dropAction: (drag: IgxDragDirective, drop: IgxDropDirective, atIndex: number) => void;\n}\n\n// @dynamic\nexport class IgxDefaultDropStrategy implements IDropStrategy {\n\n    public dropAction(_drag: IgxDragDirective, _drop: IgxDropDirective, _atIndex: number) { }\n}\n\n// @dynamic\nexport class IgxAppendDropStrategy implements IDropStrategy {\n\n    constructor(private _renderer: Renderer2) { }\n\n    public dropAction(drag: IgxDragDirective, drop: IgxDropDirective, _atIndex: number) {\n        const dragElement = drag.element.nativeElement;\n        const dropAreaElement = drop.element.nativeElement;\n        this._renderer.removeChild(dragElement.parentNode, dragElement);\n        this._renderer.appendChild(dropAreaElement, dragElement);\n    }\n}\n\n// @dynamic\nexport class IgxPrependDropStrategy implements IDropStrategy {\n\n    constructor(private _renderer: Renderer2) { }\n\n    public dropAction(drag: IgxDragDirective, drop: IgxDropDirective, _atIndex: number) {\n        const dragElement = drag.element.nativeElement;\n        const dropAreaElement = drop.element.nativeElement;\n        this._renderer.removeChild(dragElement.parentNode, dragElement);\n        if (dropAreaElement.children.length) {\n            this._renderer.insertBefore(dropAreaElement, dragElement, dropAreaElement.children[0]);\n        } else {\n            this._renderer.appendChild(dropAreaElement, dragElement);\n        }\n    }\n}\n\n// @dynamic\nexport class IgxInsertDropStrategy implements IDropStrategy {\n\n    constructor(private _renderer: Renderer2) { }\n\n    public dropAction(drag: IgxDragDirective, drop: IgxDropDirective, atIndex: number) {\n        if (drag.element.nativeElement.parentElement === drop.element.nativeElement && atIndex === -1) {\n            return;\n        }\n\n        const dragElement = drag.element.nativeElement;\n        const dropAreaElement = drop.element.nativeElement;\n        this._renderer.removeChild(dragElement.parentNode, dragElement);\n        if (atIndex !== -1 && dropAreaElement.children.length > atIndex) {\n            this._renderer.insertBefore(dropAreaElement, dragElement, dropAreaElement.children[atIndex]);\n        } else {\n            this._renderer.appendChild(dropAreaElement, dragElement);\n        }\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2,\n    ChangeDetectorRef,\n    ViewContainerRef,\n    AfterContentInit,\n    TemplateRef,\n    ContentChildren,\n    QueryList,\n    RendererStyleFlags2,\n    booleanAttribute,\n    EmbeddedViewRef,\n    inject\n} from '@angular/core';\nimport { animationFrameScheduler, fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil, throttle } from 'rxjs/operators';\nimport { IBaseEventArgs, PlatformUtil } from '../../core/utils';\nimport { IDropStrategy, IgxDefaultDropStrategy } from './drag-drop.strategy';\nimport { DOCUMENT } from '@angular/common';\n\nenum DragScrollDirection {\n    UP,\n    DOWN,\n    LEFT,\n    RIGHT\n}\n\nexport enum DragDirection {\n    VERTICAL,\n    HORIZONTAL,\n    BOTH\n}\n\nexport interface IgxDragCustomEventDetails {\n    startX: number;\n    startY: number;\n    pageX: number;\n    pageY: number;\n    owner: IgxDragDirective;\n    originalEvent: any;\n}\n\nexport interface IDropBaseEventArgs extends IBaseEventArgs {\n    /**\n     * Reference to the original event that caused the draggable element to enter the igxDrop element.\n     * Can be PointerEvent, TouchEvent or MouseEvent.\n     */\n    originalEvent: any;\n    /** The owner igxDrop directive that triggered this event. */\n    owner: IgxDropDirective;\n    /** The igxDrag directive instanced on an element that entered the area of the igxDrop element */\n    drag: IgxDragDirective;\n    /** The data contained for the draggable element in igxDrag directive. */\n    dragData: any;\n    /** The initial position of the pointer on X axis when the dragged element began moving */\n    startX: number;\n    /** The initial position of the pointer on Y axis when the dragged element began moving */\n    startY: number;\n    /**\n     * The current position of the pointer on X axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageX: number;\n    /**\n     * The current position of the pointer on Y axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageY: number;\n    /**\n     * The current position of the pointer on X axis relative to the container that initializes the igxDrop.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    offsetX: number;\n    /**\n     * The current position of the pointer on Y axis relative to the container that initializes the igxDrop.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    offsetY: number;\n}\n\nexport interface IDropDroppedEventArgs extends IDropBaseEventArgs {\n    /** Specifies if the default drop logic related to the event should be canceled. */\n    cancel: boolean;\n}\n\nexport interface IDragBaseEventArgs extends IBaseEventArgs {\n    /**\n     * Reference to the original event that caused the interaction with the element.\n     * Can be PointerEvent, TouchEvent or MouseEvent.\n     */\n    originalEvent: PointerEvent | MouseEvent | TouchEvent;\n    /** The owner igxDrag directive that triggered this event. */\n    owner: IgxDragDirective;\n    /** The initial position of the pointer on X axis when the dragged element began moving */\n    startX: number;\n    /** The initial position of the pointer on Y axis when the dragged element began moving */\n    startY: number;\n    /**\n     * The current position of the pointer on X axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageX: number;\n    /**\n     * The current position of the pointer on Y axis when the event was triggered.\n     * Note: The browser might trigger the event with some delay and pointer would be already inside the igxDrop.\n     */\n    pageY: number;\n}\n\nexport interface IDragStartEventArgs extends IDragBaseEventArgs {\n    /** Set if the the dragging should be canceled. */\n    cancel: boolean;\n}\n\nexport interface IDragMoveEventArgs extends IDragStartEventArgs {\n    /** The new pageX position of the pointer that the igxDrag will use. It can be overridden to limit dragged element X movement. */\n    nextPageX: number;\n    /** The new pageX position of the pointer that the igxDrag will use. It can be overridden to limit dragged element Y movement. */\n    nextPageY: number;\n}\n\n\nexport interface IDragGhostBaseEventArgs extends IBaseEventArgs {\n    /** The owner igxDrag directive that triggered this event. */\n    owner: IgxDragDirective;\n    /** Instance to the ghost element that is created when dragging starts. */\n    ghostElement: any;\n    /** Set if the ghost creation/destruction should be canceled. */\n    cancel: boolean;\n}\n\nexport interface IDragCustomTransitionArgs {\n    duration?: number;\n    timingFunction?: string;\n    delay?: number;\n}\n\nexport class IgxDragLocation {\n    public pageX: number;\n    public pageY: number;\n\n    constructor(private _pageX, private _pageY) {\n        this.pageX = parseFloat(_pageX);\n        this.pageY = parseFloat(_pageY);\n    }\n}\n\n@Directive({\n    selector: '[igxDragHandle]',\n    standalone: true\n})\nexport class IgxDragHandleDirective {\n\n    @HostBinding('class.igx-drag__handle')\n    public baseClass = true;\n\n    /**\n     * @hidden\n     */\n    public parentDragElement: HTMLElement = null;\n\n    constructor(public element: ElementRef<any>) { }\n}\n\n@Directive({\n    selector: '[igxDragIgnore]',\n    standalone: true\n})\nexport class IgxDragIgnoreDirective {\n\n    @HostBinding('class.igx-drag__ignore')\n    public baseClass = true;\n\n    constructor(public element: ElementRef<any>) { }\n}\n\n@Directive({\n    exportAs: 'drag',\n    selector: '[igxDrag]',\n    standalone: true\n})\nexport class IgxDragDirective implements AfterContentInit, OnDestroy {\n    /**\n     * - Save data inside the `igxDrag` directive. This can be set when instancing `igxDrag` on an element.\n     * ```html\n     * <div [igxDrag]=\"{ source: myElement }\"></div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input('igxDrag')\n    public set data(value: any) {\n        this._data = value;\n    }\n\n    public get data(): any {\n        return this._data;\n    }\n\n    /**\n     * Sets the tolerance in pixels before drag starts.\n     * By default the drag starts after the draggable element is moved by 5px.\n     * ```html\n     * <div igxDrag [dragTolerance]=\"100\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public dragTolerance = 5;\n\n    /**\n     * Sets the directions that the element can be dragged.\n     * By default it is set to both horizontal and vertical directions.\n     * ```html\n     * <div igxDrag [dragDirection]=\"dragDir\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public dragDir = DragDirection.HORIZONTAL;\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public dragDirection = DragDirection.BOTH;\n\n    /**\n     * A property that provides a way for igxDrag and igxDrop to be linked through channels.\n     * It accepts single value or an array of values and evaluates then using strict equality.\n     * ```html\n     * <div igxDrag [dragChannel]=\"'odd'\">\n     *         <span>95</span>\n     * </div>\n     * <div igxDrop [dropChannel]=\"['odd', 'irrational']\">\n     *         <span>Numbers drop area!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public dragChannel: number | string | number[] | string[];\n\n    /**\n     * Sets whether the base element should be moved, or a ghost element should be rendered that represents it instead.\n     * By default it is set to `true`.\n     * If it is set to `false` when dragging the base element is moved instead and no ghost elements are rendered.\n     * ```html\n     * <div igxDrag [ghost]=\"false\">\n     *      <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input({ transform: booleanAttribute })\n    public ghost = true;\n\n    /**\n     * Sets a custom class that will be added to the `ghostElement` element.\n     * ```html\n     * <div igxDrag [ghostClass]=\"'ghostElement'\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostClass = '';\n\n    /**\n     * Set styles that will be added to the `ghostElement` element.\n     * ```html\n     * <div igxDrag [ghostStyle]=\"{'--ig-size': 'var(--ig-size-small)'}\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostStyle = {};\n\n    /**\n     * Specifies a template for the ghost element created when dragging starts and `ghost` is true.\n     * By default a clone of the base element the igxDrag is instanced is created.\n     * ```html\n     * <div igxDrag [ghostTemplate]=\"customGhost\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * <ng-template #customGhost>\n     *      <div class=\"customGhostStyle\">\n     *          <span>I am being dragged!</span>\n     *      </div>\n     * </ng-template>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostTemplate: TemplateRef<any>;\n\n    /**\n     * Sets the element to which the dragged element will be appended.\n     * By default it's set to null and the dragged element is appended to the body.\n     * ```html\n     * <div #hostDiv></div>\n     * <div igxDrag [ghostHost]=\"hostDiv\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public ghostHost;\n\n    /**\n     * Overrides the scroll container of the dragged element. By default its the window.\n     */\n    @Input()\n    public scrollContainer: HTMLElement = null\n\n    /**\n     * Event triggered when the draggable element drag starts.\n     * ```html\n     * <div igxDrag (dragStart)=\"onDragStart()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragStart(){\n     *      alert(\"The drag has stared!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragStart = new EventEmitter<IDragStartEventArgs>();\n\n    /**\n     * Event triggered when the draggable element has been moved.\n     * ```html\n     * <div igxDrag  (dragMove)=\"onDragMove()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragMove(){\n     *      alert(\"The element has moved!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragMove = new EventEmitter<IDragMoveEventArgs>();\n\n    /**\n     * Event triggered when the draggable element is released.\n     * ```html\n     * <div igxDrag (dragEnd)=\"onDragEnd()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragEnd(){\n     *      alert(\"The drag has ended!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragEnd = new EventEmitter<IDragBaseEventArgs>();\n\n    /**\n     * Event triggered when the draggable element is clicked.\n     * ```html\n     * <div igxDrag (dragClick)=\"onDragClick()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onDragClick(){\n     *      alert(\"The element has been clicked!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public dragClick = new EventEmitter<IDragBaseEventArgs>();\n\n    /**\n     * Event triggered when the drag ghost element is created.\n     * ```html\n     * <div igxDrag (ghostCreate)=\"ghostCreated()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public ghostCreated(){\n     *      alert(\"The ghost has been created!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public ghostCreate = new EventEmitter<IDragGhostBaseEventArgs>();\n\n    /**\n     * Event triggered when the drag ghost element is created.\n     * ```html\n     * <div igxDrag (ghostDestroy)=\"ghostDestroyed()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public ghostDestroyed(){\n     *      alert(\"The ghost has been destroyed!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public ghostDestroy = new EventEmitter<IDragGhostBaseEventArgs>();\n\n    /**\n     * Event triggered after the draggable element is released and after its animation has finished.\n     * ```html\n     * <div igxDrag (transitioned)=\"onMoveEnd()\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * public onMoveEnd(){\n     *      alert(\"The move has ended!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Output()\n    public transitioned = new EventEmitter<IDragBaseEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxDragHandleDirective, { descendants: true })\n    public dragHandles: QueryList<IgxDragHandleDirective>;\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxDragIgnoreDirective, { descendants: true })\n    public dragIgnoredElems: QueryList<IgxDragIgnoreDirective>;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-drag')\n    public baseClass = true;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-drag--select-disabled')\n    public selectDisabled = false;\n\n\n    /**\n     * Gets the current location of the element relative to the page.\n     */\n    public get location(): IgxDragLocation {\n        return new IgxDragLocation(this.pageX, this.pageY);\n    }\n\n    /**\n     * Gets the original location of the element before dragging started.\n     */\n    public get originLocation(): IgxDragLocation {\n        return new IgxDragLocation(this.baseOriginLeft, this.baseOriginTop);\n    }\n\n    /**\n     * @hidden\n     */\n    public get pointerEventsEnabled() {\n        return typeof PointerEvent !== 'undefined';\n    }\n\n    /**\n     * @hidden\n     */\n    public get touchEventsEnabled() {\n        return 'ontouchstart' in window;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pageX() {\n        if (this.ghost && this.ghostElement) {\n            return this.ghostLeft;\n        }\n        return this.baseLeft + this.windowScrollLeft;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pageY() {\n        if (this.ghost && this.ghostElement) {\n            return this.ghostTop;\n        }\n        return this.baseTop + this.windowScrollTop;\n    }\n\n    protected get baseLeft(): number {\n        return this.element.nativeElement.getBoundingClientRect().left;\n    }\n\n    protected get baseTop(): number {\n        return this.element.nativeElement.getBoundingClientRect().top;\n    }\n\n    protected get baseOriginLeft(): number {\n        return this.baseLeft - this.getTransformX(this.element.nativeElement);\n    }\n\n    protected get baseOriginTop(): number {\n        return this.baseTop - this.getTransformY(this.element.nativeElement);\n    }\n\n    protected set ghostLeft(pageX: number) {\n        if (this.ghostElement) {\n            // We need to take into account marginLeft, since top style does not include margin, but pageX includes the margin.\n            const ghostMarginLeft = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-left'], 10);\n            // If ghost host is defined it needs to be taken into account.\n            this.ghostElement.style.left = (pageX - ghostMarginLeft - this._ghostHostX) + 'px';\n        }\n    }\n\n    protected get ghostLeft() {\n        if (this.ghostElement) {\n            return parseInt(this.ghostElement.style.left, 10) + this._ghostHostX;\n        }\n    }\n\n    protected set ghostTop(pageY: number) {\n        if (this.ghostElement) {\n            // We need to take into account marginTop, since top style does not include margin, but pageY includes the margin.\n            const ghostMarginTop = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-top'], 10);\n            // If ghost host is defined it needs to be taken into account.\n            this.ghostElement.style.top = (pageY - ghostMarginTop - this._ghostHostY) + 'px';\n        }\n    }\n\n    protected get ghostTop() {\n        if (this.ghostElement) {\n            return parseInt(this.ghostElement.style.top, 10) + this._ghostHostY;\n        }\n    }\n\n    protected get windowScrollTop() {\n        return this.document.documentElement.scrollTop || window.scrollY;\n    }\n\n    protected get windowScrollLeft() {\n        return this.document.documentElement.scrollLeft || window.scrollX;\n    }\n\n    protected get windowScrollHeight() {\n        return this.document.documentElement.scrollHeight;\n    }\n\n    protected get windowScrollWidth() {\n        return this.document.documentElement.scrollWidth;\n    }\n\n    /**\n     * @hidden\n     */\n    public defaultReturnDuration = '0.5s';\n\n    /**\n     * @hidden\n     */\n    public ghostElement;\n\n    /**\n     * @hidden\n     */\n    public animInProgress = false;\n\n    protected ghostContext: any = null;\n    protected _startX = 0;\n    protected _startY = 0;\n    protected _lastX = 0;\n    protected _lastY = 0;\n    protected _dragStarted = false;\n\n    /** Drag ghost related properties */\n    protected _defaultOffsetX;\n    protected _defaultOffsetY;\n    protected _offsetX;\n    protected _offsetY;\n    protected _ghostStartX;\n    protected _ghostStartY;\n    protected _ghostHostX = 0;\n    protected _ghostHostY = 0;\n    protected _dynamicGhostRef: EmbeddedViewRef<any>;\n\n    protected _pointerDownId = null;\n    protected _clicked = false;\n    protected _lastDropArea = null;\n\n    protected _destroy = new Subject<boolean>();\n    protected _removeOnDestroy = true;\n    protected _data: any;\n    protected _scrollContainer = null;\n    protected _originalScrollContainerWidth = 0;\n    protected _originalScrollContainerHeight = 0;\n    protected _scrollContainerStep = 5;\n    protected _scrollContainerStepMs = 10;\n    protected _scrollContainerThreshold = 25;\n    protected _containerScrollIntervalId = null;\n    private document = inject(DOCUMENT);\n\n    /**\n     * Sets the offset of the dragged element relative to the mouse in pixels.\n     * By default it's taking the relative position to the mouse when the drag started and keeps it the same.\n     * ```html\n     * <div #hostDiv></div>\n     * <div igxDrag [ghostOffsetX]=\"0\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public set ghostOffsetX(value) {\n        this._offsetX = parseInt(value, 10);\n    }\n\n    public get ghostOffsetX() {\n        return this._offsetX !== undefined ? this._offsetX : this._defaultOffsetX;\n    }\n\n    /**\n     * Sets the offset of the dragged element relative to the mouse in pixels.\n     * By default it's taking the relative position to the mouse when the drag started and keeps it the same.\n     * ```html\n     * <div #hostDiv></div>\n     * <div igxDrag [ghostOffsetY]=\"0\">\n     *         <span>Drag Me!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDragDirective\n     */\n    @Input()\n    public set ghostOffsetY(value) {\n        this._offsetY = parseInt(value, 10);\n    }\n\n    public get ghostOffsetY() {\n        return this._offsetY !== undefined ? this._offsetY : this._defaultOffsetY;\n    }\n\n    constructor(\n        public cdr: ChangeDetectorRef,\n        public element: ElementRef,\n        public viewContainer: ViewContainerRef,\n        public zone: NgZone,\n        public renderer: Renderer2,\n        protected platformUtil: PlatformUtil\n    ) {\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit() {\n        if (!this.dragHandles || !this.dragHandles.length) {\n            // Set user select none to the whole draggable element if no drag handles are defined.\n            this.selectDisabled = true;\n        }\n\n        // Bind events\n        this.zone.runOutsideAngular(() => {\n            if (!this.platformUtil.isBrowser) {\n                return;\n            }\n            const targetElements = this.dragHandles && this.dragHandles.length\n                ? this.dragHandles\n                    .filter(item => item.parentDragElement === null)\n                    .map(item => {\n                        item.parentDragElement = this.element.nativeElement;\n                        return item.element.nativeElement;\n                    })\n                : [this.element.nativeElement];\n            targetElements.forEach((element) => {\n                if (this.pointerEventsEnabled) {\n                    fromEvent(element, 'pointerdown').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerDown(res));\n\n                    fromEvent(element, 'pointermove').pipe(\n                        throttle(() => interval(0, animationFrameScheduler)),\n                        takeUntil(this._destroy)\n                    ).subscribe((res) => this.onPointerMove(res));\n\n                    fromEvent(element, 'pointerup').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerUp(res));\n\n                    if (!this.ghost) {\n                        // Do not bind `lostpointercapture` to the target, because we will bind it on the ghost later.\n                        fromEvent(element, 'lostpointercapture').pipe(takeUntil(this._destroy))\n                            .subscribe((res) => this.onPointerLost(res));\n                    }\n                } else if (this.touchEventsEnabled) {\n                    fromEvent(element, 'touchstart').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerDown(res));\n                } else {\n                    // We don't have pointer events and touch events. Use then mouse events.\n                    fromEvent(element, 'mousedown').pipe(takeUntil(this._destroy))\n                        .subscribe((res) => this.onPointerDown(res));\n                }\n            });\n\n            // We should bind to document events only once when there are no pointer events.\n            if (!this.pointerEventsEnabled && this.touchEventsEnabled) {\n                fromEvent(this.document.defaultView, 'touchmove').pipe(\n                    throttle(() => interval(0, animationFrameScheduler)),\n                    takeUntil(this._destroy)\n                ).subscribe((res) => this.onPointerMove(res));\n\n                fromEvent(this.document.defaultView, 'touchend').pipe(takeUntil(this._destroy))\n                    .subscribe((res) => this.onPointerUp(res));\n            } else if (!this.pointerEventsEnabled) {\n                fromEvent(this.document.defaultView, 'mousemove').pipe(\n                    throttle(() => interval(0, animationFrameScheduler)),\n                    takeUntil(this._destroy)\n                ).subscribe((res) => this.onPointerMove(res));\n\n                fromEvent(this.document.defaultView, 'mouseup').pipe(takeUntil(this._destroy))\n                    .subscribe((res) => this.onPointerUp(res));\n            }\n            this.element.nativeElement.addEventListener('transitionend', this.onTransitionEnd.bind(this));\n        });\n\n        // Set transition duration to 0s. This also helps with setting `visibility: hidden` to the base to not lag.\n        this.element.nativeElement.style.transitionDuration = '0.0s';\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroy.next(true);\n        this._destroy.complete();\n\n        if (this.ghost && this.ghostElement && this._removeOnDestroy) {\n            this.ghostElement.parentNode.removeChild(this.ghostElement);\n            this.ghostElement = null;\n\n            if (this._dynamicGhostRef) {\n                this._dynamicGhostRef.destroy();\n                this._dynamicGhostRef = null;\n            }\n        }\n\n        this.element.nativeElement.removeEventListener('transitionend', this.onTransitionEnd);\n\n        if (this._containerScrollIntervalId) {\n            clearInterval(this._containerScrollIntervalId);\n            this._containerScrollIntervalId = null;\n        }\n    }\n\n    /**\n     * Sets desired location of the base element or ghost element if rended relative to the document.\n     *\n     * @param newLocation New location that should be applied. It is advised to get new location using getBoundingClientRects() + scroll.\n     */\n    public setLocation(newLocation: IgxDragLocation) {\n        // We do not subtract marginLeft and marginTop here because here we calculate deltas.\n        if (this.ghost && this.ghostElement) {\n            this.ghostLeft = newLocation.pageX + this.windowScrollLeft;\n            this.ghostTop = newLocation.pageY + this.windowScrollTop;\n        } else if (!this.ghost) {\n            const deltaX = newLocation.pageX - this.pageX;\n            const deltaY = newLocation.pageY - this.pageY;\n            const transformX = this.getTransformX(this.element.nativeElement);\n            const transformY = this.getTransformY(this.element.nativeElement);\n            this.setTransformXY(transformX + deltaX, transformY + deltaY);\n        }\n\n        this._startX = this.baseLeft;\n        this._startY = this.baseTop;\n    }\n\n    /**\n     * Animates the base or ghost element depending on the `ghost` input to its initial location.\n     * If `ghost` is true but there is not ghost rendered, it will be created and animated.\n     * If the base element has changed its DOM position its initial location will be changed accordingly.\n     *\n     * @param customAnimArgs Custom transition properties that will be applied when performing the transition.\n     * @param startLocation Start location from where the transition should start.\n     */\n    public transitionToOrigin(customAnimArgs?: IDragCustomTransitionArgs, startLocation?: IgxDragLocation) {\n        if ((!!startLocation && startLocation.pageX === this.baseOriginLeft && startLocation.pageY === this.baseOriginLeft) ||\n            (!startLocation && this.ghost && !this.ghostElement)) {\n            return;\n        }\n\n        if (!!startLocation && startLocation.pageX !== this.pageX && startLocation.pageY !== this.pageY) {\n            if (this.ghost && !this.ghostElement) {\n                this._startX = startLocation.pageX;\n                this._startY = startLocation.pageY;\n                this._ghostStartX = this._startX;\n                this._ghostStartY = this._startY;\n                this.createGhost(this._startX, this._startY);\n            }\n\n            this.setLocation(startLocation);\n        }\n\n        this.animInProgress = true;\n        // Use setTimeout because we need to be sure that the element is positioned first correctly if there is start location.\n        setTimeout(() => {\n            if (this.ghost) {\n                this.ghostElement.style.transitionProperty = 'top, left';\n                this.ghostElement.style.transitionDuration =\n                    customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n                this.ghostElement.style.transitionTimingFunction =\n                    customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n                this.ghostElement.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n                this.setLocation(new IgxDragLocation(this.baseLeft, this.baseTop));\n            } else if (!this.ghost) {\n                this.element.nativeElement.style.transitionProperty = 'transform';\n                this.element.nativeElement.style.transitionDuration =\n                    customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n                this.element.nativeElement.style.transitionTimingFunction =\n                    customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n                this.element.nativeElement.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n                this._startX = this.baseLeft;\n                this._startY = this.baseTop;\n                this.setTransformXY(0, 0);\n            }\n        }, 0);\n    }\n\n    /**\n     * Animates the base or ghost element to a specific target location or other element using transition.\n     * If `ghost` is true but there is not ghost rendered, it will be created and animated.\n     * It is recommended to use 'getBoundingClientRects() + pageScroll' when determining desired location.\n     *\n     * @param target Target that the base or ghost will transition to. It can be either location in the page or another HTML element.\n     * @param customAnimArgs Custom transition properties that will be applied when performing the transition.\n     * @param startLocation Start location from where the transition should start.\n     */\n    public transitionTo(target: IgxDragLocation | ElementRef, customAnimArgs?: IDragCustomTransitionArgs, startLocation?: IgxDragLocation) {\n        if (!!startLocation && this.ghost && !this.ghostElement) {\n            this._startX = startLocation.pageX;\n            this._startY = startLocation.pageY;\n            this._ghostStartX = this._startX;\n            this._ghostStartY = this._startY;\n        } else if (!!startLocation && (!this.ghost || this.ghostElement)) {\n            this.setLocation(startLocation);\n        } else if (this.ghost && !this.ghostElement) {\n            this._startX = this.baseLeft;\n            this._startY = this.baseTop;\n            this._ghostStartX = this._startX + this.windowScrollLeft;\n            this._ghostStartY = this._startY + this.windowScrollTop;\n        }\n\n        if (this.ghost && !this.ghostElement) {\n            this.createGhost(this._startX, this._startY);\n        }\n\n        this.animInProgress = true;\n        // Use setTimeout because we need to be sure that the element is positioned first correctly if there is start location.\n        setTimeout(() => {\n            const movedElem = this.ghost ? this.ghostElement : this.element.nativeElement;\n            movedElem.style.transitionProperty = this.ghost && this.ghostElement ? 'left, top' : 'transform';\n            movedElem.style.transitionDuration =\n                customAnimArgs && customAnimArgs.duration ? customAnimArgs.duration + 's' : this.defaultReturnDuration;\n            movedElem.style.transitionTimingFunction =\n                customAnimArgs && customAnimArgs.timingFunction ? customAnimArgs.timingFunction : '';\n            movedElem.style.transitionDelay = customAnimArgs && customAnimArgs.delay ? customAnimArgs.delay + 's' : '';\n\n            if (target instanceof IgxDragLocation) {\n                this.setLocation(new IgxDragLocation(target.pageX, target.pageY));\n            } else {\n                const targetRects = target.nativeElement.getBoundingClientRect();\n                this.setLocation(new IgxDragLocation(\n                    targetRects.left - this.windowScrollLeft,\n                    targetRects.top - this.windowScrollTop\n                ));\n            }\n        }, 0);\n    }\n\n    /**\n     * @hidden\n     * Method bound to the PointerDown event of the base element igxDrag is initialized.\n     * @param event PointerDown event captured\n     */\n    public onPointerDown(event) {\n        const ignoredElement = this.dragIgnoredElems.find(elem => elem.element.nativeElement === event.target);\n        if (ignoredElement) {\n            return;\n        }\n\n        // Set pointer capture so we detect pointermove even if mouse is out of bounds until ghostElement is created.\n        const handleFound = this.dragHandles.find(handle => handle.element.nativeElement === event.target);\n        const targetElement = handleFound ? handleFound.element.nativeElement : event.target || this.element.nativeElement;\n        if (this.pointerEventsEnabled && targetElement.isConnected) {\n            this._pointerDownId = event.pointerId;\n            targetElement.setPointerCapture(this._pointerDownId);\n        } else if (targetElement.isConnected) {\n            targetElement.focus();\n            event.preventDefault();\n        } else {\n            return;\n        }\n\n        this._clicked = true;\n        if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n            // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n            this._startX = event.pageX;\n            this._startY = event.pageY;\n        } else if (this.touchEventsEnabled) {\n            this._startX = event.touches[0].pageX;\n            this._startY = event.touches[0].pageY;\n        }\n\n        this._defaultOffsetX = this.baseLeft - this._startX + this.windowScrollLeft;\n        this._defaultOffsetY = this.baseTop - this._startY + this.windowScrollTop;\n        this._ghostStartX = this._startX + this.ghostOffsetX;\n        this._ghostStartY = this._startY + this.ghostOffsetY;\n        this._lastX = this._startX;\n        this._lastY = this._startY;\n    }\n\n    /**\n     * @hidden\n     * Perform drag move logic when dragging and dispatching events if there is igxDrop under the pointer.\n     * This method is bound at first at the base element.\n     * If dragging starts and after the ghostElement is rendered the pointerId is reassigned it. Then this method is bound to it.\n     * @param event PointerMove event captured\n     */\n    public onPointerMove(event) {\n        if (this._clicked) {\n            let pageX; let pageY;\n            if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n                // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n                pageX = event.pageX;\n                pageY = event.pageY;\n            } else if (this.touchEventsEnabled) {\n                pageX = event.touches[0].pageX;\n                pageY = event.touches[0].pageY;\n\n                // Prevent scrolling on touch while dragging\n                event.preventDefault();\n            }\n\n            const totalMovedX = pageX - this._startX;\n            const totalMovedY = pageY - this._startY;\n            if (!this._dragStarted &&\n                (Math.abs(totalMovedX) > this.dragTolerance || Math.abs(totalMovedY) > this.dragTolerance)) {\n                const dragStartArgs: IDragStartEventArgs = {\n                    originalEvent: event,\n                    owner: this,\n                    startX: pageX - totalMovedX,\n                    startY: pageY - totalMovedY,\n                    pageX,\n                    pageY,\n                    cancel: false\n                };\n                this.zone.run(() => {\n                    this.dragStart.emit(dragStartArgs);\n                });\n\n                if (!dragStartArgs.cancel) {\n                    this._dragStarted = true;\n                    if (this.ghost) {\n                        // We moved enough so ghostElement can be rendered and actual dragging to start.\n                        // When creating it will take into account any offset set by the user by default.\n                        this.createGhost(pageX, pageY);\n                    } else if (this._offsetX !== undefined || this._offsetY !== undefined) {\n                        // There is no need for ghost, but we will need to position initially the base element to reflect any offset.\n                        const transformX = (this._offsetX !== undefined ? this._offsetX - this._defaultOffsetX : 0) +\n                            this.getTransformX(this.element.nativeElement);\n                        const transformY = (this._offsetY !== undefined ? this._offsetY - this._defaultOffsetY : 0) +\n                            this.getTransformY(this.element.nativeElement);\n                        this.setTransformXY(transformX, transformY);\n                    }\n                } else {\n                    return;\n                }\n            } else if (!this._dragStarted) {\n                return;\n            }\n\n            const moveArgs: IDragMoveEventArgs = {\n                originalEvent: event,\n                owner: this,\n                startX: this._startX,\n                startY: this._startY,\n                pageX: this._lastX,\n                pageY: this._lastY,\n                nextPageX: pageX,\n                nextPageY: pageY,\n                cancel: false\n            };\n            this.dragMove.emit(moveArgs);\n\n            const setPageX = moveArgs.nextPageX;\n            const setPageY = moveArgs.nextPageY;\n            if (!moveArgs.cancel) {\n                // Scroll root container if the user reaches its boundaries.\n                this.onScrollContainer();\n\n                // Move the actual element around\n                if (this.ghost) {\n                    const updatedTotalMovedX = this.dragDirection === DragDirection.VERTICAL ? 0 : setPageX - this._startX;\n                    const updatedTotalMovedY = this.dragDirection === DragDirection.HORIZONTAL ? 0 : setPageY - this._startY;\n                    this.ghostLeft = this._ghostStartX + updatedTotalMovedX;\n                    this.ghostTop = this._ghostStartY + updatedTotalMovedY;\n                } else {\n                    const lastMovedX = this.dragDirection === DragDirection.VERTICAL ? 0 : setPageX - this._lastX;\n                    const lastMovedY = this.dragDirection === DragDirection.HORIZONTAL ? 0 : setPageY - this._lastY;\n                    const translateX = this.getTransformX(this.element.nativeElement) + lastMovedX;\n                    const translateY = this.getTransformY(this.element.nativeElement) + lastMovedY;\n                    this.setTransformXY(translateX, translateY);\n                }\n                this.dispatchDragEvents(pageX, pageY, event);\n            }\n\n            this._lastX = setPageX;\n            this._lastY = setPageY;\n        }\n    }\n\n    /**\n     * @hidden\n     * Perform drag end logic when releasing the ghostElement and dispatching drop event if igxDrop is under the pointer.\n     * This method is bound at first at the base element.\n     * If dragging starts and after the ghostElement is rendered the pointerId is reassigned to it. Then this method is bound to it.\n     * @param event PointerUp event captured\n     */\n    public onPointerUp(event) {\n        if (!this._clicked) {\n            return;\n        }\n\n        let pageX; let pageY;\n        if (this.pointerEventsEnabled || !this.touchEventsEnabled) {\n            // Check first for pointer events or non touch, because we can have pointer events and touch events at once.\n            pageX = event.pageX;\n            pageY = event.pageY;\n        } else if (this.touchEventsEnabled) {\n            pageX = event.touches[0].pageX;\n            pageY = event.touches[0].pageY;\n\n            // Prevent scrolling on touch while dragging\n            event.preventDefault();\n        }\n\n        const eventArgs: IDragBaseEventArgs = {\n            originalEvent: event,\n            owner: this,\n            startX: this._startX,\n            startY: this._startY,\n            pageX,\n            pageY\n        };\n        this._pointerDownId = null;\n        this._clicked = false;\n        if (this._dragStarted) {\n            if (this._lastDropArea && this._lastDropArea !== this.element.nativeElement) {\n                this.dispatchDropEvent(event.pageX, event.pageY, event);\n            }\n\n            this.zone.run(() => {\n                this.dragEnd.emit(eventArgs);\n            });\n\n            if (!this.animInProgress) {\n                this.onTransitionEnd(null);\n            }\n        } else {\n            // Trigger our own click event because when there is no ghost, native click cannot be prevented when dragging.\n            this.zone.run(() => {\n                this.dragClick.emit(eventArgs);\n            });\n        }\n\n        if (this._containerScrollIntervalId) {\n            clearInterval(this._containerScrollIntervalId);\n            this._containerScrollIntervalId = null;\n        }\n    }\n\n    /**\n     * @hidden\n     * Execute this method whe the pointer capture has been lost.\n     * This means that during dragging the user has performed other action like right clicking and then clicking somewhere else.\n     * This method will ensure that the drag state is being reset in this case as if the user released the dragged element.\n     * @param event Event captured\n     */\n    public onPointerLost(event) {\n        if (!this._clicked) {\n            return;\n        }\n\n        // When the base element is moved to previous index, angular reattaches the ghost template as a sibling by default.\n        // This is the defaut place for the EmbededViewRef when recreated.\n        // That's why we need to move it to the proper place and set pointer capture again.\n        if (this._pointerDownId && this.ghostElement && this._dynamicGhostRef && !this._dynamicGhostRef.destroyed) {\n            let ghostReattached = false;\n            if (this.ghostHost && !Array.from(this.ghostHost.children).includes(this.ghostElement)) {\n                ghostReattached = true;\n                this.ghostHost.appendChild(this.ghostElement);\n            } else if (!this.ghostHost && !Array.from(this.document.body.children).includes(this.ghostElement)) {\n                ghostReattached = true;\n                this.document.body.appendChild(this.ghostElement);\n            }\n\n            if (ghostReattached) {\n                this.ghostElement.setPointerCapture(this._pointerDownId);\n                return;\n            }\n        }\n\n        const eventArgs = {\n            originalEvent: event,\n            owner: this,\n            startX: this._startX,\n            startY: this._startY,\n            pageX: event.pageX,\n            pageY: event.pageY\n        };\n        this._pointerDownId = null;\n        this._clicked = false;\n        if (this._dragStarted) {\n            this.zone.run(() => {\n                this.dragEnd.emit(eventArgs);\n            });\n            if (!this.animInProgress) {\n                this.onTransitionEnd(null);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onTransitionEnd(event) {\n        if ((!this._dragStarted && !this.animInProgress) || this._clicked) {\n            // Return if no dragging started and there is no animation in progress.\n            return;\n        }\n\n        if (this.ghost && this.ghostElement) {\n            this._ghostStartX = this.baseLeft + this.windowScrollLeft;\n            this._ghostStartY = this.baseTop + this.windowScrollTop;\n\n            const ghostDestroyArgs: IDragGhostBaseEventArgs = {\n                owner: this,\n                ghostElement: this.ghostElement,\n                cancel: false\n            };\n            this.ghostDestroy.emit(ghostDestroyArgs);\n            if (ghostDestroyArgs.cancel) {\n                return;\n            }\n            this.clearGhost();\n        } else if (!this.ghost) {\n            this.element.nativeElement.style.transitionProperty = '';\n            this.element.nativeElement.style.transitionDuration = '0.0s';\n            this.element.nativeElement.style.transitionTimingFunction = '';\n            this.element.nativeElement.style.transitionDelay = '';\n        }\n        this.animInProgress = false;\n        this._dragStarted = false;\n\n        // Execute transitioned after everything is reset so if the user sets new location on the base now it would work as expected.\n        this.zone.run(() => {\n            this.transitioned.emit({\n                originalEvent: event,\n                owner: this,\n                startX: this._startX,\n                startY: this._startY,\n                pageX: this._startX,\n                pageY: this._startY\n            });\n        });\n    }\n\n    protected clearGhost() {\n        this.ghostElement.removeEventListener('pointermove', this.onPointerMove);\n        this.ghostElement.removeEventListener('pointerup', this.onPointerUp);\n        this.ghostElement.removeEventListener('lostpointercapture', this.onPointerLost);\n        this.ghostElement.removeEventListener('transitionend', this.onTransitionEnd);\n        this.ghostElement.remove();\n        this.ghostElement = null;\n\n        if (this._dynamicGhostRef) {\n            this._dynamicGhostRef.destroy();\n            this._dynamicGhostRef = null;\n        }\n    }\n\n    /**\n     * @hidden\n     * Create ghost element - if a Node object is provided it creates a clone of that node,\n     * otherwise it clones the host element.\n     * Bind all needed events.\n     * @param pageX Latest pointer position on the X axis relative to the page.\n     * @param pageY Latest pointer position on the Y axis relative to the page.\n     * @param node The Node object to be cloned.\n     */\n    protected createGhost(pageX, pageY, node: any = null) {\n        if (!this.ghost) {\n            return;\n        }\n\n        if (this.ghostTemplate) {\n            this.zone.run(() => {\n                // Create template in zone, so it gets updated by it automatically.\n                this._dynamicGhostRef = this.viewContainer.createEmbeddedView(this.ghostTemplate, this.ghostContext);\n            });\n            if (this._dynamicGhostRef.rootNodes[0].style.display === 'contents') {\n                // Change the display to default since display contents does not position the element absolutely.\n                this._dynamicGhostRef.rootNodes[0].style.display = 'block';\n            }\n            this.ghostElement = this._dynamicGhostRef.rootNodes[0];\n        } else {\n            this.ghostElement = node ? node.cloneNode(true) : this.element.nativeElement.cloneNode(true);\n        }\n\n        const totalMovedX = pageX - this._startX;\n        const totalMovedY = pageY - this._startY;\n        this._ghostHostX = this.getGhostHostBaseOffsetX();\n        this._ghostHostY = this.getGhostHostBaseOffsetY();\n\n        this.ghostElement.style.transitionDuration = '0.0s';\n        this.ghostElement.style.position = 'absolute';\n\n        if (this.ghostClass) {\n            this.ghostElement.classList.add(this.ghostClass);\n        }\n\n        if (this.ghostStyle) {\n            Object.entries(this.ghostStyle).map(([name, value]) => {\n                this.renderer.setStyle(this.ghostElement, name, value, RendererStyleFlags2.DashCase);\n            });\n        }\n\n        const createEventArgs = {\n            owner: this,\n            ghostElement: this.ghostElement,\n            cancel: false\n        };\n        this.ghostCreate.emit(createEventArgs);\n        if (createEventArgs.cancel) {\n            this.ghostElement = null;\n            if (this.ghostTemplate && this._dynamicGhostRef) {\n                this._dynamicGhostRef.destroy();\n            }\n            return;\n        }\n\n        if (this.ghostHost) {\n            this.ghostHost.appendChild(this.ghostElement);\n        } else {\n            this.document.body.appendChild(this.ghostElement);\n        }\n\n        const ghostMarginLeft = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-left'], 10);\n        const ghostMarginTop = parseInt(this.document.defaultView.getComputedStyle(this.ghostElement)['margin-top'], 10);\n        this.ghostElement.style.left = (this._ghostStartX - ghostMarginLeft + totalMovedX - this._ghostHostX) + 'px';\n        this.ghostElement.style.top = (this._ghostStartY - ghostMarginTop + totalMovedY - this._ghostHostY) + 'px';\n\n        if (this.pointerEventsEnabled) {\n            // The ghostElement takes control for moving and dragging after it has been rendered.\n            if (this._pointerDownId !== null) {\n                this.ghostElement.setPointerCapture(this._pointerDownId);\n            }\n            this.ghostElement.addEventListener('pointermove', this.onPointerMove.bind(this));\n            this.ghostElement.addEventListener('pointerup', this.onPointerUp.bind(this));\n            this.ghostElement.addEventListener('lostpointercapture', this.onPointerLost.bind(this));\n        }\n\n        // Transition animation when the ghostElement is released and it returns to it's original position.\n        this.ghostElement.addEventListener('transitionend', this.onTransitionEnd.bind(this));\n\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     * Dispatch custom igxDragEnter/igxDragLeave events based on current pointer position and if drop area is under.\n     */\n    protected dispatchDragEvents(pageX: number, pageY: number, originalEvent) {\n        let topDropArea;\n        const customEventArgs: IgxDragCustomEventDetails = {\n            startX: this._startX,\n            startY: this._startY,\n            pageX,\n            pageY,\n            owner: this,\n            originalEvent\n        };\n\n        const elementsFromPoint = this.getElementsAtPoint(pageX, pageY);\n        let targetElements = [];\n        // Check for shadowRoot instance and use it if present\n        for (const elFromPoint of elementsFromPoint) {\n            if (elFromPoint?.shadowRoot) {\n                targetElements = targetElements.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));\n            } else if (targetElements.indexOf(elFromPoint) === -1) {\n                targetElements.push(elFromPoint);\n            }\n        }\n\n        for (const element of targetElements) {\n            if (element.getAttribute('droppable') === 'true' &&\n                element !== this.ghostElement && element !== this.element.nativeElement) {\n                topDropArea = element;\n                break;\n            }\n        }\n\n        if (topDropArea &&\n            (!this._lastDropArea || (this._lastDropArea && this._lastDropArea !== topDropArea))) {\n            if (this._lastDropArea) {\n                this.dispatchEvent(this._lastDropArea, 'igxDragLeave', customEventArgs);\n            }\n\n            this._lastDropArea = topDropArea;\n            this.dispatchEvent(this._lastDropArea, 'igxDragEnter', customEventArgs);\n        } else if (!topDropArea && this._lastDropArea) {\n            this.dispatchEvent(this._lastDropArea, 'igxDragLeave', customEventArgs);\n            this._lastDropArea = null;\n            return;\n        }\n\n        if (topDropArea) {\n            this.dispatchEvent(topDropArea, 'igxDragOver', customEventArgs);\n        }\n    }\n\n    /**\n     * @hidden\n     * Traverse shadow dom in depth.\n     */\n    protected getFromShadowRoot(elem, pageX, pageY, parentDomElems) {\n        const elementsFromPoint = elem.shadowRoot.elementsFromPoint(pageX, pageY);\n        const shadowElements = elementsFromPoint.filter(cur => parentDomElems.indexOf(cur) === -1);\n        let res = [];\n        for (const elFromPoint of shadowElements) {\n            if (!!elFromPoint?.shadowRoot && elFromPoint.shadowRoot !== elem.shadowRoot) {\n                res = res.concat(this.getFromShadowRoot(elFromPoint, pageX, pageY, elementsFromPoint));\n            }\n            res.push(elFromPoint);\n        }\n        return res;\n    }\n\n    /**\n     * @hidden\n     * Dispatch custom igxDrop event based on current pointer position if there is last recorder drop area under the pointer.\n     * Last recorder drop area is updated in @dispatchDragEvents method.\n     */\n    protected dispatchDropEvent(pageX: number, pageY: number, originalEvent) {\n        const eventArgs: IgxDragCustomEventDetails = {\n            startX: this._startX,\n            startY: this._startY,\n            pageX,\n            pageY,\n            owner: this,\n            originalEvent\n        };\n\n        this.dispatchEvent(this._lastDropArea, 'igxDrop', eventArgs);\n        this.dispatchEvent(this._lastDropArea, 'igxDragLeave', eventArgs);\n        this._lastDropArea = null;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getElementsAtPoint(pageX: number, pageY: number) {\n        // correct the coordinates with the current scroll position, because\n        // document.elementsFromPoint consider position within the current viewport\n        // window.pageXOffset == window.scrollX; // always true\n        // using window.pageXOffset for IE9 compatibility\n        const viewPortX = pageX - window.pageXOffset;\n        const viewPortY = pageY - window.pageYOffset;\n        if (this.document['msElementsFromPoint']) {\n            // Edge and IE special snowflakes\n            const elements = this.document['msElementsFromPoint'](viewPortX, viewPortY);\n            return elements === null ? [] : elements;\n        } else {\n            // Other browsers like Chrome, Firefox, Opera\n            return this.document.elementsFromPoint(viewPortX, viewPortY);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected dispatchEvent(target, eventName: string, eventArgs: IgxDragCustomEventDetails) {\n        // This way is IE11 compatible.\n        // const dragLeaveEvent = document.createEvent('CustomEvent');\n        // dragLeaveEvent.initCustomEvent(eventName, false, false, eventArgs);\n        // target.dispatchEvent(dragLeaveEvent);\n        // Otherwise can be used `target.dispatchEvent(new CustomEvent(eventName, eventArgs));`\n        target.dispatchEvent(new CustomEvent(eventName, { detail: eventArgs }));\n    }\n\n    protected getTransformX(elem) {\n        let posX = 0;\n        if (elem.style.transform) {\n            const matrix = elem.style.transform;\n            const values = matrix ? matrix.match(/-?[\\d\\.]+/g) : undefined;\n            posX = values ? Number(values[1]) : 0;\n        }\n\n        return posX;\n    }\n\n    protected getTransformY(elem) {\n        let posY = 0;\n        if (elem.style.transform) {\n            const matrix = elem.style.transform;\n            const values = matrix ? matrix.match(/-?[\\d\\.]+/g) : undefined;\n            posY = values ? Number(values[2]) : 0;\n        }\n\n        return posY;\n    }\n\n    /** Method setting transformation to the base draggable element. */\n    protected setTransformXY(x: number, y: number) {\n        if(x === 0 && y === 0) {\n            this.element.nativeElement.style.transform = '';\n            return;\n        }\n        this.element.nativeElement.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0px)';\n    }\n\n    /**\n     * Since we are using absolute position to move the ghost, the ghost host might not have position: relative.\n     * Combined with position static, this means that the absolute position in the browser is relative to the offsetParent.\n     * The offsetParent is pretty much the closes parent that has position: relative, or if no such until it reaches the body.\n     * That's why if this is the case, we need to know how much we should compensate for the ghostHost being offset from\n     * its offsetParent.\n     *\n     * OffsetParent can be null in the case of position: fixed applied to the ghost host or display: none. In that case\n     * just get the clientRects of the ghost host.\n     */\n    protected getGhostHostBaseOffsetX() {\n        if (!this.ghostHost) return 0;\n\n        const ghostPosition = this.document.defaultView.getComputedStyle(this.ghostHost).getPropertyValue('position');\n        if (ghostPosition === 'static' && this.ghostHost.offsetParent && this.ghostHost.offsetParent === this.document.body) {\n            return 0;\n        } else if (ghostPosition === 'static' && this.ghostHost.offsetParent) {\n            return this.ghostHost.offsetParent.getBoundingClientRect().left + this.windowScrollLeft;\n        }\n        return this.ghostHost.getBoundingClientRect().left + this.windowScrollLeft;\n    }\n\n    protected getGhostHostBaseOffsetY() {\n        if (!this.ghostHost) return 0;\n\n        const ghostPosition = this.document.defaultView.getComputedStyle(this.ghostHost).getPropertyValue('position');\n        if (ghostPosition === 'static' && this.ghostHost.offsetParent && this.ghostHost.offsetParent === this.document.body) {\n            return 0;\n        } else if (ghostPosition === 'static' && this.ghostHost.offsetParent) {\n            return this.ghostHost.offsetParent.getBoundingClientRect().top + this.windowScrollTop;\n        }\n        return this.ghostHost.getBoundingClientRect().top + this.windowScrollTop;\n    }\n\n    protected getContainerScrollDirection() {\n        const containerBounds = this.scrollContainer ? this.scrollContainer.getBoundingClientRect() : null;\n        const scrolledX = !this.scrollContainer ? this.windowScrollLeft > 0 : this.scrollContainer.scrollLeft > 0;\n        const scrolledY = !this.scrollContainer ? this.windowScrollTop > 0 : this.scrollContainer.scrollTop > 0;\n        // Take into account window scroll top because we do not use fixed positioning to the window.\n        const topBorder = (!this.scrollContainer ? 0 : containerBounds.top) + this.windowScrollTop + this._scrollContainerThreshold;\n        // Subtract the element height because we position it from top left corner.\n        const elementHeight = this.ghost && this.ghostElement ? this.ghostElement.offsetHeight : this.element.nativeElement.offsetHeight;\n        const bottomBorder = (!this.scrollContainer ? window.innerHeight : containerBounds.bottom) +\n            this.windowScrollTop - this._scrollContainerThreshold - elementHeight;\n        // Same for window scroll left\n        const leftBorder = (!this.scrollContainer ? 0 : containerBounds.left) + this.windowScrollLeft + this._scrollContainerThreshold;\n        // Subtract the element width again because we position it from top left corner.\n        const elementWidth = this.ghost && this.ghostElement ? this.ghostElement.offsetWidth : this.element.nativeElement.offsetWidth;\n        const rightBorder = (!this.scrollContainer ? window.innerWidth : containerBounds.right) +\n            this.windowScrollLeft - this._scrollContainerThreshold - elementWidth\n\n        if (this.pageY <= topBorder && scrolledY) {\n            return DragScrollDirection.UP;\n        } else if (this.pageY > bottomBorder) {\n            return DragScrollDirection.DOWN;\n        } else if (this.pageX < leftBorder && scrolledX) {\n            return DragScrollDirection.LEFT;\n        } else if (this.pageX > rightBorder) {\n            return DragScrollDirection.RIGHT;\n        }\n        return null;\n    }\n\n    protected onScrollContainerStep(scrollDir: DragScrollDirection) {\n        animationFrameScheduler.schedule(() => {\n\n            let xDir = scrollDir == DragScrollDirection.LEFT ? -1 : (scrollDir == DragScrollDirection.RIGHT ? 1 : 0);\n            let yDir = scrollDir == DragScrollDirection.UP ? -1 : (scrollDir == DragScrollDirection.DOWN ? 1 : 0);\n            if (!this.scrollContainer) {\n                // Cap scrolling so we don't scroll past the window max scroll position.\n                const maxScrollX = this._originalScrollContainerWidth - this.document.documentElement.clientWidth;\n                const maxScrollY = this._originalScrollContainerHeight - this.document.documentElement.clientHeight;\n                xDir = (this.windowScrollLeft <= 0 && xDir < 0) || (this.windowScrollLeft >= maxScrollX && xDir > 0) ? 0 : xDir;\n                yDir = (this.windowScrollTop <= 0 && yDir < 0) || (this.windowScrollTop >= maxScrollY && yDir > 0) ? 0 : yDir;\n            } else {\n                // Cap scrolling so we don't scroll past the container max scroll position.\n                const maxScrollX = this._originalScrollContainerWidth - this.scrollContainer.clientWidth;\n                const maxScrollY = this._originalScrollContainerHeight - this.scrollContainer.clientHeight;\n                xDir = (this.scrollContainer.scrollLeft <= 0 && xDir < 0) || (this.scrollContainer.scrollLeft >= maxScrollX && xDir > 0) ? 0 : xDir;\n                yDir = (this.scrollContainer.scrollTop <= 0 && yDir < 0) || (this.scrollContainer.scrollTop >= maxScrollY && yDir > 0) ? 0 : yDir;\n            }\n\n            const scrollByX = xDir * this._scrollContainerStep;\n            const scrollByY = yDir * this._scrollContainerStep;\n\n            // Scroll the corresponding window or container.\n            if (!this.scrollContainer) {\n                window.scrollBy(scrollByX, scrollByY);\n            } else {\n                this.scrollContainer.scrollLeft += scrollByX;\n                this.scrollContainer.scrollTop += scrollByY;\n            }\n\n            if (this.ghost && !this.scrollContainer) {\n                // Scroll the ghost only when there is no container specifies.\n                // If it has container the ghost pretty much stays in the same position while the container is scrolled since e use top/left position.\n                // Otherwise increase the position the same amount we have scrolled the window\n                this.ghostLeft += scrollByX;\n                this.ghostTop += scrollByY;\n            } else if (!this.ghost) {\n                // Move the base element the same amount we moved the window/container because we use transformations.\n                const translateX = this.getTransformX(this.element.nativeElement) + scrollByX;\n                const translateY = this.getTransformY(this.element.nativeElement) + scrollByY;\n                this.setTransformXY(translateX, translateY);\n                if (!this.scrollContainer) {\n                    this._lastX += scrollByX;\n                    this._lastY += scrollByY;\n                }\n            }\n        })\n    }\n\n    protected onScrollContainer() {\n        const scrollDir = this.getContainerScrollDirection();\n        if (scrollDir !== null && scrollDir !== undefined && !this._containerScrollIntervalId) {\n            // Save original container sizes to ensure that we don't increase scroll sizes infinitely when out of bounds.\n            this._originalScrollContainerWidth = this.scrollContainer ? this.scrollContainer.scrollWidth : this.windowScrollWidth;\n            this._originalScrollContainerHeight = this.scrollContainer ? this.scrollContainer.scrollHeight : this.windowScrollHeight;\n\n            this._containerScrollIntervalId = setInterval(() => this.onScrollContainerStep(scrollDir), this._scrollContainerStepMs);\n        } else if ((scrollDir === null || scrollDir === undefined) && this._containerScrollIntervalId) {\n            // We moved out of end bounds and there is interval started\n            clearInterval(this._containerScrollIntervalId);\n            this._containerScrollIntervalId = null;\n        }\n    }\n}\n\n@Directive({\n    exportAs: 'drop',\n    selector: '[igxDrop]',\n    standalone: true\n})\nexport class IgxDropDirective implements OnInit, OnDestroy {\n    /**\n     * - Save data inside the `igxDrop` directive. This can be set when instancing `igxDrop` on an element.\n     * ```html\n     * <div [igxDrop]=\"{ source: myElement }\"></div>\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Input('igxDrop')\n    public set data(v: any) {\n        this._data = v;\n    }\n\n    public get data(): any {\n        return this._data;\n    }\n\n    /**\n     * A property that provides a way for igxDrag and igxDrop to be linked through channels.\n     * It accepts single value or an array of values and evaluates then using strict equality.\n     * ```html\n     * <div igxDrag [dragChannel]=\"'odd'\">\n     *         <span>95</span>\n     * </div>\n     * <div igxDrop [dropChannel]=\"['odd', 'irrational']\">\n     *         <span>Numbers drop area!</span>\n     * </div>\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Input()\n    public dropChannel: number | string | number[] | string[];\n\n    /**\n     * Sets a drop strategy type that will be executed when an `IgxDrag` element is released inside\n     *  the current drop area. The provided strategies are:\n     *  - IgxDefaultDropStrategy - This is the default base strategy and it doesn't perform any actions.\n     *  - IgxAppendDropStrategy - Appends the dropped element to last position as a direct child to the `igxDrop`.\n     *  - IgxPrependDropStrategy - Prepends the dropped element to first position as a direct child to the `igxDrop`.\n     *  - IgxInsertDropStrategy - If the dropped element is released above a child element of the `igxDrop`, it will be inserted\n     *      at that position. Otherwise the dropped element will be appended if released outside any child of the `igxDrop`.\n     * ```html\n     * <div igxDrag>\n     *      <span>DragMe</span>\n     * </div>\n     * <div igxDrop [dropStrategy]=\"myDropStrategy\">\n     *         <span>Numbers drop area!</span>\n     * </div>\n     * ```\n     * ```typescript\n     * import { IgxAppendDropStrategy } from 'igniteui-angular';\n     *\n     * export class App {\n     *      public myDropStrategy = IgxAppendDropStrategy;\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Input()\n    public set dropStrategy(classRef: any) {\n        this._dropStrategy = new classRef(this._renderer);\n    }\n\n    public get dropStrategy() {\n        return this._dropStrategy;\n    }\n\n    /**\n     * Event triggered when dragged element enters the area of the element.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (enter)=\"dragEnter()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragEnter(){\n     *     alert(\"A draggable element has entered the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public enter = new EventEmitter<IDropBaseEventArgs>();\n\n    /**\n     * Event triggered when dragged element enters the area of the element.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (enter)=\"dragEnter()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragEnter(){\n     *     alert(\"A draggable element has entered the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public over = new EventEmitter<IDropBaseEventArgs>();\n\n    /**\n     * Event triggered when dragged element leaves the area of the element.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (leave)=\"dragLeave()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragLeave(){\n     *     alert(\"A draggable element has left the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public leave = new EventEmitter<IDropBaseEventArgs>();\n\n    /**\n     * Event triggered when dragged element is dropped in the area of the element.\n     * Since the `igxDrop` has default logic that appends the dropped element as a child, it can be canceled here.\n     * To cancel the default logic the `cancel` property of the event needs to be set to true.\n     * ```html\n     * <div class=\"cageArea\" igxDrop (dropped)=\"dragDrop()\" (igxDragEnter)=\"onDragCageEnter()\" (igxDragLeave)=\"onDragCageLeave()\">\n     * </div>\n     * ```\n     * ```typescript\n     * public dragDrop(){\n     *     alert(\"A draggable element has been dropped in the chip area!\");\n     * }\n     * ```\n     *\n     * @memberof IgxDropDirective\n     */\n    @Output()\n    public dropped = new EventEmitter<IDropDroppedEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.droppable')\n    public droppable = true;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.dragOver')\n    public dragover = false;\n\n    /**\n     * @hidden\n     */\n    protected _destroy = new Subject<boolean>();\n    protected _dropStrategy: IDropStrategy;\n\n    private _data: any;\n\n    constructor(public element: ElementRef, private _renderer: Renderer2, private _zone: NgZone) {\n        this._dropStrategy = new IgxDefaultDropStrategy();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('igxDrop', ['$event'])\n    public onDragDrop(event) {\n        if (!this.isDragLinked(event.detail.owner)) {\n            return;\n        }\n\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const args: IDropDroppedEventArgs = {\n            owner: this,\n            originalEvent: event.detail.originalEvent,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY,\n            cancel: false\n        };\n        this._zone.run(() => {\n            this.dropped.emit(args);\n        });\n\n        if (this._dropStrategy && !args.cancel) {\n            const elementsAtPoint = event.detail.owner.getElementsAtPoint(event.detail.pageX, event.detail.pageY);\n            const insertIndex = this.getInsertIndexAt(event.detail.owner, elementsAtPoint);\n            this._dropStrategy.dropAction(event.detail.owner, this, insertIndex);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        this._zone.runOutsideAngular(() => {\n            fromEvent(this.element.nativeElement, 'igxDragEnter').pipe(takeUntil(this._destroy))\n                .subscribe((res) => this.onDragEnter(res as CustomEvent<IgxDragCustomEventDetails>));\n\n            fromEvent(this.element.nativeElement, 'igxDragLeave').pipe(takeUntil(this._destroy)).subscribe((res) => this.onDragLeave(res));\n            fromEvent(this.element.nativeElement, 'igxDragOver').pipe(takeUntil(this._destroy)).subscribe((res) => this.onDragOver(res));\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroy.next(true);\n        this._destroy.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public onDragOver(event) {\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const eventArgs: IDropBaseEventArgs = {\n            originalEvent: event.detail.originalEvent,\n            owner: this,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY\n        };\n\n        this.over.emit(eventArgs);\n    }\n\n    /**\n     * @hidden\n     */\n    public onDragEnter(event: CustomEvent<IgxDragCustomEventDetails>) {\n        if (!this.isDragLinked(event.detail.owner)) {\n            return;\n        }\n\n        this.dragover = true;\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const eventArgs: IDropBaseEventArgs = {\n            originalEvent: event.detail.originalEvent,\n            owner: this,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY\n        };\n        this._zone.run(() => {\n            this.enter.emit(eventArgs);\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public onDragLeave(event) {\n        if (!this.isDragLinked(event.detail.owner)) {\n            return;\n        }\n\n        this.dragover = false;\n        const elementPosX = this.element.nativeElement.getBoundingClientRect().left + this.getWindowScrollLeft();\n        const elementPosY = this.element.nativeElement.getBoundingClientRect().top + this.getWindowScrollTop();\n        const offsetX = event.detail.pageX - elementPosX;\n        const offsetY = event.detail.pageY - elementPosY;\n        const eventArgs: IDropBaseEventArgs = {\n            originalEvent: event.detail.originalEvent,\n            owner: this,\n            drag: event.detail.owner,\n            dragData: event.detail.owner.data,\n            startX: event.detail.startX,\n            startY: event.detail.startY,\n            pageX: event.detail.pageX,\n            pageY: event.detail.pageY,\n            offsetX,\n            offsetY\n        };\n        this._zone.run(() => {\n            this.leave.emit(eventArgs);\n        });\n    }\n\n    protected getWindowScrollTop() {\n        return window.scrollY ? window.scrollY : (window.pageYOffset ? window.pageYOffset : 0);\n    }\n\n    protected getWindowScrollLeft() {\n        return window.scrollX ? window.scrollX : (window.pageXOffset ? window.pageXOffset : 0);\n    }\n\n    protected isDragLinked(drag: IgxDragDirective): boolean {\n        const dragLinkArray = drag.dragChannel instanceof Array;\n        const dropLinkArray = this.dropChannel instanceof Array;\n\n        if (!dragLinkArray && !dropLinkArray) {\n            return this.dropChannel === drag.dragChannel;\n        } else if (!dragLinkArray && dropLinkArray) {\n            const dropLinks = this.dropChannel as any[];\n            for (const link of dropLinks) {\n                if (link === drag.dragChannel) {\n                    return true;\n                }\n            }\n        } else if (dragLinkArray && !dropLinkArray) {\n            const dragLinks = drag.dragChannel as any[];\n            for (const link of dragLinks) {\n                if (link === this.dropChannel) {\n                    return true;\n                }\n            }\n        } else {\n            const dragLinks = drag.dragChannel as any[];\n            const dropLinks = this.dropChannel as any[];\n            for (const draglink of dragLinks) {\n                for (const droplink of dropLinks) {\n                    if (draglink === droplink) {\n                        return true;\n                    }\n                }\n            }\n        }\n\n        return false;\n    }\n\n    protected getInsertIndexAt(draggedDir: IgxDragDirective, elementsAtPoint: any[]): number {\n        let insertIndex = -1;\n        const dropChildren = Array.prototype.slice.call(this.element.nativeElement.children);\n        if (!dropChildren.length) {\n            return insertIndex;\n        }\n\n        let i = 0;\n        let childUnder = null;\n        while (!childUnder && i < elementsAtPoint.length) {\n            if (elementsAtPoint[i].parentElement === this.element.nativeElement) {\n                childUnder = elementsAtPoint[i];\n            }\n            i++;\n        }\n\n        const draggedElemIndex = dropChildren.indexOf(draggedDir.element.nativeElement);\n        insertIndex = dropChildren.indexOf(childUnder);\n        if (draggedElemIndex !== -1 && draggedElemIndex < insertIndex) {\n            insertIndex++;\n        }\n\n        return insertIndex;\n    }\n}\n\n","import { IgxDragDirective, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDropDirective } from './drag-drop.directive';\n\nexport * from './drag-drop.strategy';\nexport * from './drag-drop.directive';\n\n/* NOTE: Drag and drop directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_DRAG_DROP_DIRECTIVES = [\n    IgxDragDirective,\n    IgxDropDirective,\n    IgxDragHandleDirective,\n    IgxDragIgnoreDirective\n] as const;\n","import {\n    Directive,\n    EventEmitter,\n    Input,\n    OnChanges,\n    Output,\n    Pipe,\n    PipeTransform,\n    SimpleChanges\n} from '@angular/core';\n\nexport class IgxFilterOptions {\n    // Input text value that will be used as a filtering pattern (matching condition is based on it)\n    public inputValue = '';\n\n    // Item property, which value should be used for filtering\n    public key: string | string[];\n\n    // Represent items of the list. It should be used to handle declaratively defined widgets\n    public items: any[];\n\n    // Function - get value to be tested from the item\n    // item - single item of the list to be filtered\n    // key - property name of item, which value should be tested\n    // Default behavior - returns \"key\"- named property value of item if key is provided,\n    // otherwise textContent of the item's html element\n    public get_value(item: any, key: string): string {\n        let result = '';\n\n        if (key && item[key]) {\n            result = item[key].toString();\n        } else if (item.element) {\n            if (item.element.nativeElement) {\n                result = item.element.nativeElement.textContent.trim();\n            // Check if element doesn't return the DOM element directly\n            } else if (item.element.textContent) {\n                result = item.element.textContent.trim();\n            }\n        }\n\n        return result;\n    }\n\n    // Function - formats the original text before matching process\n    // Default behavior - returns text to lower case\n    public formatter(valueToTest: string): string {\n        return valueToTest.toLowerCase();\n    }\n\n    // Function - determines whether the item met the condition\n    // valueToTest - text value that should be tested\n    // inputValue - text value from input that condition is based on\n    // Default behavior - \"contains\"\n    public matchFn(valueToTest: string, inputValue: string): boolean {\n        return valueToTest.indexOf(inputValue && inputValue.toLowerCase() || '') > -1;\n    }\n\n    // Function - executed after matching test for every matched item\n    // Default behavior - shows the item\n    public metConditionFn(item: any) {\n        if (item.hasOwnProperty('hidden')) {\n            item.hidden = false;\n        }\n    }\n\n    // Function - executed for every NOT matched item after matching test\n    // Default behavior - hides the item\n    public overdueConditionFn(item: any) {\n        if (item.hasOwnProperty('hidden')) {\n            item.hidden = true;\n        }\n    }\n}\n\n\n@Directive({\n    selector: '[igxFilter]',\n    standalone: true\n})\nexport class IgxFilterDirective implements OnChanges {\n    @Output() public filtering = new EventEmitter(false); // synchronous event emitter\n    @Output() public filtered = new EventEmitter();\n\n    @Input('igxFilter') public filterOptions: IgxFilterOptions;\n\n    constructor() {\n    }\n\n    public ngOnChanges(changes: SimpleChanges) {\n        // Detect only changes of input value\n        if (changes.filterOptions &&\n            changes.filterOptions.currentValue &&\n            changes.filterOptions.currentValue.inputValue !== undefined &&\n            changes.filterOptions.previousValue &&\n            changes.filterOptions.currentValue.inputValue !== changes.filterOptions.previousValue.inputValue) {\n            this.filter();\n        }\n    }\n\n    private filter() {\n        if (!this.filterOptions.items) {\n            return;\n        }\n\n        const args = { cancel: false, items: this.filterOptions.items };\n        this.filtering.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        const pipe = new IgxFilterPipe();\n\n        const filtered = pipe.transform(this.filterOptions.items, this.filterOptions);\n        this.filtered.emit({ filteredItems: filtered });\n    }\n}\n\n@Pipe({\n    name: 'igxFilter',\n    pure: false,\n    standalone: true\n})\nexport class IgxFilterPipe implements PipeTransform {\n    private findMatchByKey(item: any, options: IgxFilterOptions, key: string) {\n        const match = options.matchFn(options.formatter(options.get_value(item, key)), options.inputValue);\n\n        if (match) {\n            if (options.metConditionFn) {\n                options.metConditionFn(item);\n            }\n        } else {\n            if (options.overdueConditionFn) {\n                options.overdueConditionFn(item);\n            }\n        }\n\n        return match;\n    }\n\n    public transform(items: any[],\n                     // options - initial settings of filter functionality\n                     options: IgxFilterOptions) {\n\n        let result = [];\n\n        if (!items || !items.length || !options) {\n            return;\n        }\n\n        if (options.items) {\n            items = options.items;\n        }\n\n        result = items.filter((item: any) => {\n            if (!Array.isArray(options.key)) {\n                return this.findMatchByKey(item, options, options.key);\n            } else {\n                let isMatch = false;\n                options.key.forEach(key => {\n                    if (this.findMatchByKey(item, options, key)) {\n                        isMatch = true;\n                    }\n                });\n                return isMatch;\n            }\n        });\n\n        return result;\n    }\n}\n","import { InjectionToken } from \"@angular/core\";\n\n/**\n * Used for editor control components\n *\n * @hidden\n */\nexport interface EditorProvider {\n    /** Return the focusable native element */\n    getEditElement(): HTMLElement;\n}\n\n/**\n * Injection token is used to inject the EditorProvider token into components\n *\n * @hidden @internal\n */\nexport const EDITOR_PROVIDER = new InjectionToken<EditorProvider>('EditorProvider');\n","import { Directive, ElementRef, Input, Optional, Inject, Self, booleanAttribute } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { EditorProvider, EDITOR_PROVIDER } from '../../core/edit-provider';\n\n@Directive({\n    exportAs: 'igxFocus',\n    selector: '[igxFocus]',\n    standalone: true\n})\nexport class IgxFocusDirective {\n\n    private focusState = true;\n\n    /**\n     * Returns the state of the igxFocus.\n     * ```typescript\n     * @ViewChild('focusContainer', {read: IgxFocusDirective})\n     * public igxFocus: IgxFocusDirective;\n     * let isFocusOn = this.igxFocus.focused;\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    @Input({ alias: 'igxFocus', transform: booleanAttribute })\n    public get focused(): boolean {\n        return this.focusState;\n    }\n\n    /**\n     * Sets the state of the igxFocus.\n     * ```html\n     * <igx-input-group >\n     *  <input #focusContainer igxInput [igxFocus]=\"true\"/>\n     * </igx-input-group>\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    public set focused(val: boolean) {\n        this.focusState = val;\n        this.trigger();\n    }\n\n    /**\n     * Gets the native element of the igxFocus.\n     * ```typescript\n     * @ViewChild('focusContainer', {read: IgxFocusDirective})\n     * public igxFocus: IgxFocusDirective;\n     * let igxFocusNativeElement = this.igxFocus.nativeElement;\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    public get nativeElement() {\n        if (this.comp && this.comp[0] && this.comp[0].getEditElement) {\n            return (this.comp[0] as EditorProvider).getEditElement();\n        }\n\n        if (this.control && this.control[0] && this.control[0].getEditElement) {\n            return this.control[0].getEditElement();\n        }\n\n        return this.element.nativeElement;\n    }\n\n    constructor(\n        private element: ElementRef,\n        @Inject(NG_VALUE_ACCESSOR) @Self() @Optional() private comp?: any[],\n        @Inject(EDITOR_PROVIDER) @Self() @Optional() private control?: any[],\n    ) { }\n\n    /**\n     * Triggers the igxFocus state.\n     * ```typescript\n     * @ViewChild('focusContainer', {read: IgxFocusDirective})\n     * public igxFocus: IgxFocusDirective;\n     * this.igxFocus.trigger();\n     * ```\n     *\n     * @memberof IgxFocusDirective\n     */\n    public trigger() {\n        if (this.focusState) {\n            requestAnimationFrame(() => this.nativeElement.focus({ preventScroll: true }));\n        }\n    }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy, booleanAttribute } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PlatformUtil } from '../../core/utils';\n\n@Directive({\n    selector: '[igxFocusTrap]',\n    standalone: true\n})\nexport class IgxFocusTrapDirective implements AfterViewInit, OnDestroy {\n    /** @hidden */\n    public get element(): HTMLElement | null {\n        return this.elementRef.nativeElement;\n    }\n\n    private destroy$ = new Subject();\n    private _focusTrap = true;\n\n    /** @hidden */\n    constructor(\n        private elementRef: ElementRef,\n        protected platformUtil: PlatformUtil) {\n    }\n\n    /**\n     * Sets whether the Tab key focus is trapped within the element.\n     *\n     * @example\n     * ```html\n     * <div igxFocusTrap=\"true\"></div>\n     * ```\n     */\n    @Input({ alias: 'igxFocusTrap', transform: booleanAttribute })\n    public set focusTrap(focusTrap: boolean) {\n        this._focusTrap = focusTrap;\n    }\n\n    /** @hidden */\n    public get focusTrap(): boolean {\n        return this._focusTrap;\n    }\n\n    /** @hidden */\n    public ngAfterViewInit(): void {\n        fromEvent(this.element, 'keydown')\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((event: KeyboardEvent) => {\n                if (this._focusTrap && event.key === this.platformUtil.KEYMAP.TAB) {\n                    this.handleTab(event);\n                }\n            });\n    }\n\n    /** @hidden */\n    public ngOnDestroy() {\n        this.destroy$.complete();\n    }\n\n    private handleTab(event) {\n        const elements = this.getFocusableElements(this.element);\n        if (elements.length > 0) {\n            const focusedElement = this.getFocusedElement();\n            const focusedElementIndex = elements.findIndex((element) => element as HTMLElement === focusedElement);\n            const direction = event.shiftKey ? -1 : 1;\n            let nextFocusableElementIndex = focusedElementIndex + direction;\n            if (nextFocusableElementIndex < 0) {\n                nextFocusableElementIndex = elements.length - 1;\n            }\n            if (nextFocusableElementIndex >= elements.length) {\n                nextFocusableElementIndex = 0;\n            }\n            (elements[nextFocusableElementIndex] as HTMLElement).focus();\n        } else {\n            this.element.focus();\n        }\n\n        event.preventDefault();\n    }\n\n    private getFocusableElements(element: Element) {\n        return Array.from(element.querySelectorAll(\n            'a[href], button, input, textarea, select, details,[tabindex]:not([tabindex=\"-1\"])'\n        )).filter(el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));\n    }\n\n    private getFocusedElement(): HTMLElement | null {\n        let activeElement =\n            typeof document !== 'undefined' && document\n                ? (document.activeElement as HTMLElement | null)\n                : null;\n\n        while (activeElement && activeElement.shadowRoot) {\n            const newActiveElement = activeElement.shadowRoot.activeElement as HTMLElement | null;\n            if (newActiveElement === activeElement) {\n                break;\n            } else {\n                activeElement = newActiveElement;\n            }\n        }\n\n        return activeElement;\n    }\n}\n","import { Directive, Input, ElementRef, NgZone, OnInit, OnDestroy } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxScrollInertia]',\n    standalone: true\n})\nexport class IgxScrollInertiaDirective implements OnInit, OnDestroy {\n\n    @Input()\n    public IgxScrollInertiaDirection: string;\n\n    @Input()\n    public IgxScrollInertiaScrollContainer: any;\n\n    @Input()\n    public wheelStep = 50;\n\n    @Input()\n    public inertiaStep = 1.5;\n\n    @Input()\n    public smoothingStep = 1.5;\n\n    @Input()\n    public smoothingDuration = 0.5;\n\n    @Input()\n    public swipeToleranceX = 20;\n\n    @Input()\n    public inertiaDeltaY = 3;\n\n    @Input()\n    public inertiaDeltaX = 2;\n\n    @Input()\n    public inertiaDuration = 0.5;\n\n    private _touchInertiaAnimID;\n    private _startX;\n    private _startY;\n    private _touchStartX;\n    private _touchStartY;\n    private _lastTouchEnd;\n    private _lastTouchX;\n    private _lastTouchY;\n    private _savedSpeedsX = [];\n    private _savedSpeedsY;\n    private _totalMovedX;\n    private _offsetRecorded;\n    private _offsetDirection;\n    private _lastMovedX;\n    private _lastMovedY;\n    private _nextX;\n    private _nextY;\n    private parentElement;\n    private baseDeltaMultiplier = 1 / 120;\n    private firefoxDeltaMultiplier = 1 / 30;\n\n    constructor(private element: ElementRef, private _zone: NgZone) { }\n\n    public ngOnInit(): void {\n        this._zone.runOutsideAngular(() => {\n            this.parentElement = this.element.nativeElement.parentElement || this.element.nativeElement.parentNode;\n            if (!this.parentElement) {\n                return;\n            }\n            const targetElem = this.parentElement;\n            targetElem.addEventListener('wheel', this.onWheel.bind(this), { passive: false });\n            targetElem.addEventListener('touchstart', this.onTouchStart.bind(this), { passive: false });\n            targetElem.addEventListener('touchmove', this.onTouchMove.bind(this), { passive: false });\n            targetElem.addEventListener('touchend', this.onTouchEnd.bind(this), { passive: false });\n        });\n    }\n\n    public ngOnDestroy() {\n        this._zone.runOutsideAngular(() => {\n            const targetElem = this.parentElement;\n            if (!targetElem) {\n                return;\n            }\n            targetElem.removeEventListener('wheel', this.onWheel);\n            targetElem.removeEventListener('touchstart', this.onTouchStart);\n            targetElem.removeEventListener('touchmove', this.onTouchMove);\n            targetElem.removeEventListener('touchend', this.onTouchEnd);\n        });\n    }\n\n    /**\n     * @hidden\n     * Function that is called when scrolling with the mouse wheel or using touchpad\n     */\n    protected onWheel(evt) {\n        // if no scrollbar return\n        if (!this.IgxScrollInertiaScrollContainer) {\n            return;\n        }\n        // if ctrl key is pressed and the user want to zoom in/out the page\n        if (evt.ctrlKey) {\n            return;\n        }\n        let scrollDeltaX;\n        let scrollDeltaY;\n        const scrollStep = this.wheelStep;\n        const minWheelStep = 1 / this.wheelStep;\n        const smoothing = this.smoothingDuration !== 0;\n\n        this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n        this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n        if (evt.wheelDeltaX) {\n            /* Option supported on Chrome, Safari, Opera.\n            /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n            scrollDeltaX = -evt.wheelDeltaX * this.baseDeltaMultiplier;\n\n            if (-minWheelStep < scrollDeltaX && scrollDeltaX < minWheelStep) {\n                scrollDeltaX = Math.sign(scrollDeltaX) * minWheelStep;\n            }\n        } else if (evt.deltaX) {\n            /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n            const deltaScaledX = evt.deltaX * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 1);\n            scrollDeltaX = this.calcAxisCoords(deltaScaledX, -1, 1);\n        }\n\n        /** Get delta for the Y axis */\n        if (evt.wheelDeltaY) {\n            /* Option supported on Chrome, Safari, Opera.\n            /* 120 is default for mousewheel on these browsers. Other values are for trackpads */\n            scrollDeltaY = -evt.wheelDeltaY * this.baseDeltaMultiplier;\n\n            if (-minWheelStep < scrollDeltaY && scrollDeltaY < minWheelStep) {\n                scrollDeltaY = Math.sign(scrollDeltaY) * minWheelStep;\n            }\n        } else if (evt.deltaY) {\n            /* For other browsers that don't provide wheelDelta, use the deltaY to determine direction and pass default values. */\n            const deltaScaledY = evt.deltaY * (evt.deltaMode === 0 ? this.firefoxDeltaMultiplier : 1);\n            scrollDeltaY = this.calcAxisCoords(deltaScaledY, -1, 1);\n        }\n\n        if (evt.composedPath && this.didChildScroll(evt, scrollDeltaX, scrollDeltaY)) {\n            return;\n        }\n\n        if (scrollDeltaX && this.IgxScrollInertiaDirection === 'horizontal') {\n            const nextLeft = this._startX + scrollDeltaX * scrollStep;\n            if (!smoothing) {\n                this._scrollToX(nextLeft);\n            } else {\n                this._smoothWheelScroll(scrollDeltaX);\n            }\n            const maxScrollLeft = parseInt(this.IgxScrollInertiaScrollContainer.children[0].style.width, 10);\n            if (0 < nextLeft && nextLeft < maxScrollLeft) {\n                // Prevent navigating through pages when scrolling on Mac\n                evt.preventDefault();\n            }\n        } else if (evt.shiftKey && scrollDeltaY && this.IgxScrollInertiaDirection === 'horizontal') {\n            if (!smoothing) {\n                const step = this._startX + scrollDeltaY * scrollStep;\n                this._scrollToX(step);\n            } else {\n                this._smoothWheelScroll(scrollDeltaY);\n            }\n        } else if (!evt.shiftKey && scrollDeltaY && this.IgxScrollInertiaDirection === 'vertical') {\n            const nextTop = this._startY + scrollDeltaY * scrollStep;\n            if (!smoothing) {\n                this._scrollToY(nextTop);\n            } else {\n                this._smoothWheelScroll(scrollDeltaY);\n            }\n            this.preventParentScroll(evt, true, nextTop);\n        }\n    }\n\n    /**\n     * @hidden\n     * When there is still room to scroll up/down prevent the parent elements from scrolling too.\n     */\n    protected preventParentScroll(evt, preventDefault, nextTop = 0) {\n        const curScrollTop = nextTop === 0 ? this.IgxScrollInertiaScrollContainer.scrollTop : nextTop;\n        const maxScrollTop = this.IgxScrollInertiaScrollContainer.children[0].scrollHeight -\n            this.IgxScrollInertiaScrollContainer.offsetHeight;\n        if (0 < curScrollTop && curScrollTop < maxScrollTop) {\n            if (preventDefault) {\n                evt.preventDefault();\n            }\n            if (evt.stopPropagation) {\n                evt.stopPropagation();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Checks if the wheel event would have scrolled an element under the display container\n     * in DOM tree so that it can correctly be ignored until that element can no longer be scrolled.\n     */\n    protected didChildScroll(evt, scrollDeltaX, scrollDeltaY): boolean {\n        const path = evt.composedPath();\n        let i = 0;\n        while (i < path.length && path[i].localName !== 'igx-display-container') {\n            const e = path[i++];\n            if (e.scrollHeight > e.clientHeight) {\n                const overflowY = window.getComputedStyle(e)['overflow-y'];\n                if (overflowY === 'auto' || overflowY === 'scroll') {\n                    if (scrollDeltaY > 0 && e.scrollHeight - Math.abs(Math.round(e.scrollTop)) !== e.clientHeight) {\n                        return true;\n                    }\n                    if (scrollDeltaY < 0 && e.scrollTop !== 0) {\n                        return true;\n                    }\n                }\n            }\n            if (e.scrollWidth > e.clientWidth) {\n                const overflowX = window.getComputedStyle(e)['overflow-x'];\n                if (overflowX === 'auto' || overflowX === 'scroll') {\n                    if (scrollDeltaX > 0 && e.scrollWidth - Math.abs(Math.round(e.scrollLeft)) !== e.clientWidth) {\n                        return true;\n                    }\n                    if (scrollDeltaX < 0 && e.scrollLeft !== 0) {\n                        return true;\n                    }\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * @hidden\n     * Function that is called the first moment we start interacting with the content on a touch device\n     */\n    protected onTouchStart(event) {\n        if (!this.IgxScrollInertiaScrollContainer) {\n            return false;\n        }\n\n        // stops any current ongoing inertia\n        cancelAnimationFrame(this._touchInertiaAnimID);\n\n        const touch = event.touches[0];\n\n        this._startX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n\n        this._startY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n        this._touchStartX = touch.pageX;\n        this._touchStartY = touch.pageY;\n\n        this._lastTouchEnd = new Date().getTime();\n        this._lastTouchX = touch.pageX;\n        this._lastTouchY = touch.pageY;\n        this._savedSpeedsX = [];\n        this._savedSpeedsY = [];\n\n        // Vars regarding swipe offset\n        this._totalMovedX = 0;\n        this._offsetRecorded = false;\n        this._offsetDirection = 0;\n\n        if (this.IgxScrollInertiaDirection === 'vertical') {\n            this.preventParentScroll(event, false);\n        }\n    }\n\n    /**\n     * @hidden\n     * Function that is called when we need to scroll the content based on touch interactions\n     */\n    protected onTouchMove(event) {\n        if (!this.IgxScrollInertiaScrollContainer) {\n            return;\n        }\n\n        const touch = event.touches[0];\n        const destX = this._startX + (this._touchStartX - touch.pageX) * Math.sign(this.inertiaStep);\n        const destY = this._startY + (this._touchStartY - touch.pageY) * Math.sign(this.inertiaStep);\n\n        /* Handle complex touchmoves when swipe stops but the toch doesn't end and then a swipe is initiated again */\n        /* **********************************************************/\n\n\n        const timeFromLastTouch = (new Date().getTime()) - this._lastTouchEnd;\n        if (timeFromLastTouch !== 0 && timeFromLastTouch < 100) {\n            const speedX = (this._lastTouchX - touch.pageX) / timeFromLastTouch;\n            const speedY = (this._lastTouchY - touch.pageY) / timeFromLastTouch;\n\n            // Save the last 5 speeds between two touchmoves on X axis\n            if (this._savedSpeedsX.length < 5) {\n                this._savedSpeedsX.push(speedX);\n            } else {\n                this._savedSpeedsX.shift();\n                this._savedSpeedsX.push(speedX);\n            }\n\n            // Save the last 5 speeds between two touchmoves on Y axis\n            if (this._savedSpeedsY.length < 5) {\n                this._savedSpeedsY.push(speedY);\n            } else {\n                this._savedSpeedsY.shift();\n                this._savedSpeedsY.push(speedY);\n            }\n        }\n        this._lastTouchEnd = new Date().getTime();\n        this._lastMovedX = this._lastTouchX - touch.pageX;\n        this._lastMovedY = this._lastTouchY - touch.pageY;\n        this._lastTouchX = touch.pageX;\n        this._lastTouchY = touch.pageY;\n\n        this._totalMovedX += this._lastMovedX;\n\n        /*\tDo not scroll using touch untill out of the swipeToleranceX bounds */\n        if (Math.abs(this._totalMovedX) < this.swipeToleranceX && !this._offsetRecorded) {\n            this._scrollTo(this._startX, destY);\n        } else {\n            /*\tRecord the direction the first time we are out of the swipeToleranceX bounds.\n            *\tThat way we know which direction we apply the offset so it doesn't hickup when moving out of the swipeToleranceX bounds */\n            if (!this._offsetRecorded) {\n                this._offsetDirection = Math.sign(destX - this._startX);\n                this._offsetRecorded = true;\n            }\n\n            /*\tScroll with offset ammout of swipeToleranceX in the direction we have exited the bounds and\n            don't change it after that ever until touchend and again touchstart */\n            this._scrollTo(destX - this._offsetDirection * this.swipeToleranceX, destY);\n        }\n\n        // On Safari preventing the touchmove would prevent default page scroll behaviour even if there is the element doesn't have overflow\n        if (this.IgxScrollInertiaDirection === 'vertical') {\n            this.preventParentScroll(event, true);\n        }\n    }\n\n    protected onTouchEnd(event) {\n        let speedX = 0;\n        let speedY = 0;\n\n        // savedSpeedsX and savedSpeedsY have same length\n        for (let i = 0; i < this._savedSpeedsX.length; i++) {\n            speedX += this._savedSpeedsX[i];\n            speedY += this._savedSpeedsY[i];\n        }\n        speedX = this._savedSpeedsX.length ? speedX / this._savedSpeedsX.length : 0;\n        speedY = this._savedSpeedsX.length ? speedY / this._savedSpeedsY.length : 0;\n\n        // Use the lastMovedX and lastMovedY to determine if the swipe stops without lifting the finger so we don't start inertia\n        if ((Math.abs(speedX) > 0.1 || Math.abs(speedY) > 0.1) &&\n            (Math.abs(this._lastMovedX) > 2 || Math.abs(this._lastMovedY) > 2)) {\n            this._inertiaInit(speedX, speedY);\n        }\n        if (this.IgxScrollInertiaDirection === 'vertical') {\n            this.preventParentScroll(event, false);\n        }\n    }\n\n    protected _smoothWheelScroll(delta) {\n        this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n        this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n        let x = -1;\n        let wheelInertialAnimation = null;\n        const inertiaWheelStep = () => {\n            if (x > 1) {\n                cancelAnimationFrame(wheelInertialAnimation);\n                return;\n            }\n            const nextScroll = ((-3 * x * x + 3) * delta * 2) * this.smoothingStep;\n            if (this.IgxScrollInertiaDirection === 'vertical') {\n                this._nextY += nextScroll;\n                this._scrollToY(this._nextY);\n            } else {\n                this._nextX += nextScroll;\n                this._scrollToX(this._nextX);\n            }\n            //continue the inertia\n            x += 0.08 * (1 / this.smoothingDuration);\n            wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n        };\n        wheelInertialAnimation = requestAnimationFrame(inertiaWheelStep);\n    }\n\n    protected _inertiaInit(speedX, speedY) {\n        const stepModifer = this.inertiaStep;\n        const inertiaDuration = this.inertiaDuration;\n        let x = 0;\n        this._nextX = this.IgxScrollInertiaScrollContainer.scrollLeft;\n        this._nextY = this.IgxScrollInertiaScrollContainer.scrollTop;\n\n        // Sets timeout until executing next movement iteration of the inertia\n        const inertiaStep = () => {\n            if (x > 6) {\n                cancelAnimationFrame(this._touchInertiaAnimID);\n                return;\n            }\n\n            if (Math.abs(speedX) > Math.abs(speedY)) {\n                x += 0.05 / (1 * inertiaDuration);\n            } else {\n                x += 0.05 / (1 * inertiaDuration);\n            }\n\n            if (x <= 1) {\n                // We use constant quation to determine the offset without speed falloff befor x reaches 1\n                if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n                    this._nextX += 1 * speedX * 15 * stepModifer;\n                }\n                if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n                    this._nextY += 1 * speedY * 15 * stepModifer;\n                }\n            } else {\n                // We use the quation \"y = 2 / (x + 0.55) - 0.3\" to determine the offset\n                if (Math.abs(speedY) <= Math.abs(speedX) * this.inertiaDeltaY) {\n                    this._nextX += Math.abs(2 / (x + 0.55) - 0.3) * speedX * 15 * stepModifer;\n                }\n                if (Math.abs(speedY) >= Math.abs(speedX) * this.inertiaDeltaX) {\n                    this._nextY += Math.abs(2 / (x + 0.55) - 0.3) * speedY * 15 * stepModifer;\n                }\n            }\n\n            // If we have mixed environment we use the default behaviour. i.e. touchscreen + mouse\n            this._scrollTo(this._nextX, this._nextY);\n\n            this._touchInertiaAnimID = requestAnimationFrame(inertiaStep);\n        };\n\n        // Start inertia and continue it recursively\n        this._touchInertiaAnimID = requestAnimationFrame(inertiaStep);\n    }\n\n    private calcAxisCoords(target, min, max) {\n        if (target === undefined || target < min) {\n            target = min;\n        } else if (target > max) {\n            target = max;\n        }\n\n        return target;\n    }\n\n    private _scrollTo(destX, destY) {\n        // TODO Trigger scrolling event?\n        const scrolledX = this._scrollToX(destX);\n        const scrolledY = this._scrollToY(destY);\n\n        return { x: scrolledX, y: scrolledY };\n    }\n    private _scrollToX(dest) {\n        this.IgxScrollInertiaScrollContainer.scrollLeft = dest;\n    }\n    private _scrollToY(dest) {\n        this.IgxScrollInertiaScrollContainer.scrollTop = dest;\n    }\n}\n\n/**\n * @hidden\n */\n\n\n","import {\n    ChangeDetectorRef,\n    Component,\n    HostBinding,\n    ViewChild,\n    ViewContainerRef\n} from '@angular/core';\nimport { IgxScrollInertiaDirective } from '../scroll-inertia/scroll_inertia.directive';\n\n@Component({\n    selector: 'igx-display-container',\n    template: `\n        <ng-template\n            #display_container\n            igxScrollInertia\n            [IgxScrollInertiaScrollContainer]=\"scrollContainer\"\n            [IgxScrollInertiaDirection]=\"scrollDirection\">\n        </ng-template>\n    `,\n    imports: [IgxScrollInertiaDirective]\n})\nexport class DisplayContainerComponent {\n    @ViewChild('display_container', { read: ViewContainerRef, static: true })\n    public _vcr;\n\n    @ViewChild('display_container', { read: IgxScrollInertiaDirective, static: true })\n    public _scrollInertia: IgxScrollInertiaDirective;\n\n    @HostBinding('class')\n    public cssClass = 'igx-display-container';\n\n    @HostBinding('class.igx-display-container--inactive')\n    public notVirtual = true;\n\n    public scrollDirection: string;\n\n    public scrollContainer;\n\n    constructor(public cdr: ChangeDetectorRef, public _viewContainer: ViewContainerRef) { }\n}\n","import {\n    HostListener,\n    ElementRef,\n    ChangeDetectorRef,\n    OnDestroy,\n    Directive,\n    AfterViewInit,\n    Inject,\n    NgZone\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\nimport { resizeObservable, PlatformUtil } from '../../core/utils';\n\n@Directive({\n    selector: '[igxVirtualHelperBase]',\n    standalone: true\n})\nexport class VirtualHelperBaseDirective implements OnDestroy, AfterViewInit {\n    public scrollAmount = 0;\n    public _size = 0;\n    public destroyed;\n\n    protected destroy$ = new Subject<any>();\n\n    private _afterViewInit = false;\n    private _scrollNativeSize: number;\n    private _detached = false;\n\n    constructor(\n        public elementRef: ElementRef<HTMLElement>,\n        public cdr: ChangeDetectorRef,\n        protected _zone: NgZone,\n        @Inject(DOCUMENT) public document: any,\n        protected platformUtil: PlatformUtil,\n    ) {\n        this._scrollNativeSize = this.calculateScrollNativeSize();\n    }\n\n    @HostListener('scroll', ['$event'])\n    public onScroll(event) {\n        this.scrollAmount = event.target.scrollTop || event.target.scrollLeft;\n    }\n\n\n    public ngAfterViewInit() {\n        this._afterViewInit = true;\n        if (!this.platformUtil.isBrowser) {\n            return;\n        }\n        const delayTime = 0;\n        this._zone.runOutsideAngular(() => {\n            resizeObservable(this.nativeElement).pipe(\n                throttleTime(delayTime),\n                takeUntil(this.destroy$)).subscribe((event) => this.handleMutations(event));\n        });\n    }\n\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    public ngOnDestroy() {\n        this.destroyed = true;\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    public calculateScrollNativeSize() {\n        const div = this.document.createElement('div');\n        const style = div.style;\n        style.width = '100px';\n        style.height = '100px';\n        style.position = 'absolute';\n        style.top = '-10000px';\n        style.top = '-10000px';\n        style.overflow = 'scroll';\n        this.document.body.appendChild(div);\n        const scrollWidth = div.offsetWidth - div.clientWidth;\n        this.document.body.removeChild(div);\n        return scrollWidth ? scrollWidth + 1 : 1;\n    }\n\n    public set size(value) {\n        if (this.destroyed) {\n            return;\n        }\n        this._size = value;\n        if (this._afterViewInit) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    public get size() {\n        return this._size;\n    }\n\n    public get scrollNativeSize() {\n        return this._scrollNativeSize;\n    }\n\n    protected get isAttachedToDom(): boolean {\n        return this.document.body.contains(this.nativeElement);\n    }\n\n    protected handleMutations(event) {\n        const hasSize = !(event[0].contentRect.height === 0 && event[0].contentRect.width === 0);\n        if (!hasSize && !this.isAttachedToDom) {\n            // scroll bar detached from DOM\n            this._detached = true;\n        } else if (this._detached && hasSize && this.isAttachedToDom) {\n            // attached back now.\n            this.restoreScroll();\n        }\n    }\n\n    protected restoreScroll() {}\n}\n","import { Component, ElementRef, HostBinding, Input, ViewChild, ViewContainerRef, ChangeDetectorRef, Inject, NgZone } from '@angular/core';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\nimport { DOCUMENT } from '@angular/common';\nimport { PlatformUtil } from '../../core/utils';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-horizontal-virtual-helper',\n    template: '<div #horizontal_container class=\"igx-vhelper__placeholder-content\" [style.width.px]=\"size\"></div>',\n    standalone: true\n})\nexport class HVirtualHelperComponent extends VirtualHelperBaseDirective {\n    @ViewChild('horizontal_container', { read: ViewContainerRef, static: true }) public _vcr;\n\n    @Input() public width: number;\n\n    @HostBinding('class')\n    public cssClasses = 'igx-vhelper--horizontal';\n\n    constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, zone: NgZone, @Inject(DOCUMENT) document, platformUtil: PlatformUtil) {\n        super(elementRef, cdr, zone, document, platformUtil);\n    }\n\n    protected override restoreScroll() {\n        this.nativeElement.scrollLeft = this.scrollAmount;\n    }\n}\n","import { Component, ElementRef, HostBinding, Input, ViewChild, ViewContainerRef,\n     ChangeDetectorRef, OnDestroy, OnInit, Inject, NgZone } from '@angular/core';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\nimport { DOCUMENT } from '@angular/common';\nimport { PlatformUtil } from '../../core/utils';\n\n@Component({\n    selector: 'igx-virtual-helper',\n    template: '<div #container class=\"igx-vhelper__placeholder-content\" [style.height.px]=\"size\"></div>',\n    standalone: true\n})\nexport class VirtualHelperComponent extends VirtualHelperBaseDirective implements OnInit, OnDestroy  {\n    @HostBinding('scrollTop')\n    public scrollTop;\n\n    @HostBinding('style.width.px')\n    public scrollWidth;\n\n    @ViewChild('container', { read: ViewContainerRef, static: true }) public _vcr;\n    @Input() public itemsLength: number;\n\n\n    @HostBinding('class')\n    public cssClasses = 'igx-vhelper--vertical';\n\n    constructor(elementRef: ElementRef, cdr: ChangeDetectorRef, zone: NgZone, @Inject(DOCUMENT) document, platformUtil: PlatformUtil) {\n        super(elementRef, cdr, zone, document, platformUtil);\n    }\n\n    public ngOnInit() {\n        this.scrollWidth = this.scrollNativeSize;\n    }\n\n    protected override restoreScroll() {\n        this.nativeElement.scrollTop = this.scrollAmount;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { IgxGridForOfDirective } from './for_of.directive';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxForOfSyncService {\n\n    private _master: Map<string, IgxGridForOfDirective<any, any[]>> = new Map<string, IgxGridForOfDirective<any, any[]>>();\n\n    /**\n     * @hidden\n     */\n    public isMaster(directive: IgxGridForOfDirective<any, any[]>): boolean {\n        return this._master.get(directive.igxForScrollOrientation) === directive;\n    }\n\n    /**\n     * @hidden\n     */\n    public setMaster(directive: IgxGridForOfDirective<any, any[]>, forced = false) {\n        const orientation = directive.igxForScrollOrientation;\n        // in case master is not in dom, set a new master\n        const isMasterInDom = this._master.get(orientation)?.dc?.instance?._viewContainer.element.nativeElement.isConnected;\n        if (!isMasterInDom) {\n            forced = true;\n        }\n        if (orientation && (forced || !this._master.has(orientation))) {\n            this._master.set(orientation, directive);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public resetMaster() {\n        this._master.clear();\n    }\n\n    /**\n     * @hidden\n     */\n    public sizesCache(dir: string): number[] {\n        return this._master.get(dir).sizesCache;\n    }\n\n    /**\n     * @hidden\n     */\n    public chunkSize(dir: string): number {\n        return this._master.get(dir).state.chunkSize;\n    }\n}\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxForOfScrollSyncService {\n    private _masterScroll: Map<string, VirtualHelperBaseDirective> = new Map<string, any>();\n    public setScrollMaster(dir: string, scroll: VirtualHelperBaseDirective) {\n        this._masterScroll.set(dir, scroll);\n    }\n\n    public getScrollMaster(dir: string) {\n        return this._masterScroll.get(dir);\n    }\n}\n","import { DOCUMENT, NgForOfContext } from '@angular/common';\nimport {\n    ChangeDetectorRef,\n    ComponentRef,\n    Directive,\n    DoCheck,\n    EmbeddedViewRef,\n    EventEmitter,\n    Input,\n    IterableChanges,\n    IterableDiffer,\n    IterableDiffers,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    TrackByFunction,\n    ViewContainerRef,\n    AfterViewInit,\n    Inject,\n    booleanAttribute\n} from '@angular/core';\n\nimport { DisplayContainerComponent } from './display.container';\nimport { HVirtualHelperComponent } from './horizontal.virtual.helper.component';\nimport { VirtualHelperComponent } from './virtual.helper.component';\n\nimport { IgxForOfSyncService, IgxForOfScrollSyncService } from './for_of.sync.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter, throttleTime, first } from 'rxjs/operators';\nimport { getResizeObserver } from '../../core/utils';\nimport { IBaseEventArgs, PlatformUtil } from '../../core/utils';\nimport { VirtualHelperBaseDirective } from './base.helper.component';\n\nconst MAX_PERF_SCROLL_DIFF = 4;\n\n/**\n *  @publicApi\n */\nexport class IgxForOfContext<T, U extends T[] = T[]> {\n    constructor(\n        public $implicit: T,\n        public igxForOf: U,\n        public index: number,\n        public count: number\n    ) { }\n\n    /**\n     * A function that returns whether the element is the first or not\n     */\n    public get first(): boolean {\n        return this.index === 0;\n    }\n\n    /**\n     * A function that returns whether the element is the last or not\n     */\n    public get last(): boolean {\n        return this.index === this.count - 1;\n    }\n\n    /**\n     * A function that returns whether the element is even or not\n     */\n    public get even(): boolean {\n        return this.index % 2 === 0;\n    }\n\n    /**\n     * A function that returns whether the element is odd or not\n     */\n    public get odd(): boolean {\n        return !this.even;\n    }\n\n}\n\n/** @hidden @internal */\nexport abstract class IgxForOfToken<T, U extends T[] = T[]> {\n    public abstract igxForOf: U & T[] | null;\n    public abstract state: IForOfState;\n    public abstract totalItemCount: number;\n    public abstract scrollPosition: number;\n\n    public abstract chunkLoad: EventEmitter<IForOfState>;\n    public abstract chunkPreload: EventEmitter<IForOfState>;\n\n    public abstract scrollTo(index: number): void;\n    public abstract getScrollForIndex(index: number, bottom?: boolean): number;\n    public abstract getScroll(): HTMLElement | undefined;\n\n    // TODO: Re-evaluate use for this internally, better expose through separate API\n    public abstract igxForItemSize: any;\n    public abstract igxForContainerSize: any;\n    /** @hidden */\n    public abstract dc: ComponentRef<any>\n}\n\n@Directive({\n    selector: '[igxFor][igxForOf]',\n    providers: [\n        IgxForOfScrollSyncService,\n        { provide: IgxForOfToken, useExisting: IgxForOfDirective }\n    ],\n    standalone: true\n})\nexport class IgxForOfDirective<T, U extends T[] = T[]> extends IgxForOfToken<T,U> implements OnInit, OnChanges, DoCheck, OnDestroy, AfterViewInit {\n\n    /**\n     * Sets the data to be rendered.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public igxForOf: U & T[] | null;\n\n    /**\n     * Sets the property name from which to read the size in the data object.\n     */\n    @Input()\n    public igxForSizePropName;\n\n    /**\n     * Specifies the scroll orientation.\n     * Scroll orientation can be \"vertical\" or \"horizontal\".\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public igxForScrollOrientation = 'vertical';\n\n    /**\n     * Optionally pass the parent `igxFor` instance to create a virtual template scrolling both horizontally and vertically.\n     * ```html\n     * <ng-template #scrollContainer igxFor let-rowData [igxForOf]=\"data\"\n     *       [igxForScrollOrientation]=\"'vertical'\"\n     *       [igxForContainerSize]=\"'500px'\"\n     *       [igxForItemSize]=\"'50px'\"\n     *       let-rowIndex=\"index\">\n     *       <div [style.display]=\"'flex'\" [style.height]=\"'50px'\">\n     *           <ng-template #childContainer igxFor let-item [igxForOf]=\"data\"\n     *               [igxForScrollOrientation]=\"'horizontal'\"\n     *               [igxForScrollContainer]=\"parentVirtDir\"\n     *               [igxForContainerSize]=\"'500px'\">\n     *                   <div [style.min-width]=\"'50px'\">{{rowIndex}} : {{item.text}}</div>\n     *           </ng-template>\n     *       </div>\n     * </ng-template>\n     * ```\n     */\n    @Input()\n    public igxForScrollContainer: any;\n\n    /**\n     * Sets the px-affixed size of the container along the axis of scrolling.\n     * For \"horizontal\" orientation this value is the width of the container and for \"vertical\" is the height.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForContainerSize]=\"'500px'\"\n     *      [igxForScrollOrientation]=\"'horizontal'\">\n     * </ng-template>\n     * ```\n     */\n    @Input()\n    public igxForContainerSize: any;\n\n    /**\n     * @hidden\n     * @internal\n     * Initial chunk size if no container size is passed. If container size is passed then the igxForOf calculates its chunk size\n     */\n    @Input()\n    public igxForInitialChunkSize: any;\n\n    /**\n     * Sets the px-affixed size of the item along the axis of scrolling.\n     * For \"horizontal\" orientation this value is the width of the column and for \"vertical\" is the height or the row.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" [igxForItemSize]=\"'50px'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public igxForItemSize: any;\n\n    /**\n     * An event that is emitted after a new chunk has been loaded.\n     * ```html\n     * <ng-template igxFor [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" (chunkLoad)=\"loadChunk($event)\"></ng-template>\n     * ```\n     * ```typescript\n     * loadChunk(e){\n     * alert(\"chunk loaded!\");\n     * }\n     * ```\n     */\n    @Output()\n    public chunkLoad = new EventEmitter<IForOfState>();\n\n    /**\n     * @hidden @internal\n     * An event that is emitted when scrollbar visibility has changed.\n     */\n    @Output()\n    public scrollbarVisibilityChanged = new EventEmitter<any>();\n\n    /**\n     * An event that is emitted after the rendered content size of the igxForOf has been changed.\n     */\n    @Output()\n    public contentSizeChange = new EventEmitter<any>();\n\n    /**\n     * An event that is emitted after data has been changed.\n     * ```html\n     * <ng-template igxFor [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" (dataChanged)=\"dataChanged($event)\"></ng-template>\n     * ```\n     * ```typescript\n     * dataChanged(e){\n     * alert(\"data changed!\");\n     * }\n     * ```\n     */\n    @Output()\n    public dataChanged = new EventEmitter<any>();\n\n    @Output()\n    public beforeViewDestroyed = new EventEmitter<EmbeddedViewRef<any>>();\n\n    /**\n     * An event that is emitted on chunk loading to emit the current state information - startIndex, endIndex, totalCount.\n     * Can be used for implementing remote load on demand for the igxFor data.\n     * ```html\n     * <ng-template igxFor [igxForOf]=\"data\" [igxForScrollOrientation]=\"'horizontal'\" (chunkPreload)=\"chunkPreload($event)\"></ng-template>\n     * ```\n     * ```typescript\n     * chunkPreload(e){\n     * alert(\"chunk is loading!\");\n     * }\n     * ```\n     */\n    @Output()\n    public chunkPreload = new EventEmitter<IForOfState>();\n\n    /**\n     * @hidden\n     */\n    public dc: ComponentRef<DisplayContainerComponent>;\n\n    /**\n     * The current state of the directive. It contains `startIndex` and `chunkSize`.\n     * state.startIndex - The index of the item at which the current visible chunk begins.\n     * state.chunkSize - The number of items the current visible chunk holds.\n     * These options can be used when implementing remote virtualization as they provide the necessary state information.\n     * ```typescript\n     * const gridState = this.parentVirtDir.state;\n     * ```\n     */\n    public state: IForOfState = {\n        startIndex: 0,\n        chunkSize: 0\n    };\n\n    protected func;\n    protected _sizesCache: number[] = [];\n    protected scrollComponent: VirtualHelperBaseDirective;\n    protected _differ: IterableDiffer<T> | null = null;\n    protected _trackByFn: TrackByFunction<T>;\n    protected individualSizeCache: number[] = [];\n    /** Internal track for scroll top that is being virtualized */\n    protected _virtScrollPosition = 0;\n    /** If the next onScroll event is triggered due to internal setting of scrollTop */\n    protected _bScrollInternal = false;\n    // End properties related to virtual height handling\n    protected _embeddedViews: Array<EmbeddedViewRef<any>> = [];\n    protected contentResizeNotify = new Subject<void>();\n    protected contentObserver: ResizeObserver;\n    /** Size that is being virtualized. */\n    protected _virtSize = 0;\n    /**\n     * @hidden\n     */\n    protected destroy$ = new Subject<any>();\n\n    private _totalItemCount: number = null;\n    private _adjustToIndex;\n    // Start properties related to virtual size handling due to browser limitation\n    /** Maximum size for an element of the browser. */\n    private _maxSize;\n    /**\n     * Ratio for height that's being virtualizaed and the one visible\n     * If _virtHeightRatio = 1, the visible height and the virtualized are the same, also _maxSize > _virtHeight.\n     */\n    private _virtRatio = 1;\n\n    /**\n     * The total count of the virtual data items, when using remote service.\n     * Similar to the property totalItemCount, but this will allow setting the data count into the template.\n     * ```html\n     * <ng-template igxFor let-item [igxForOf]=\"data | async\" [igxForTotalItemCount]=\"count | async\"\n     *  [igxForContainerSize]=\"'500px'\" [igxForItemSize]=\"'50px'\"></ng-template>\n     * ```\n     */\n    @Input()\n    public get igxForTotalItemCount(): number {\n        return this.totalItemCount;\n    }\n    public set igxForTotalItemCount(value: number) {\n        this.totalItemCount = value;\n    }\n\n    /**\n     * The total count of the virtual data items, when using remote service.\n     * ```typescript\n     * this.parentVirtDir.totalItemCount = data.Count;\n     * ```\n     */\n    public get totalItemCount() {\n        return this._totalItemCount;\n    }\n\n    public set totalItemCount(val) {\n        if (this._totalItemCount !== val) {\n            this._totalItemCount = val;\n            // update sizes in case total count changes.\n            const newSize = this.initSizesCache(this.igxForOf);\n            const sizeDiff = this.scrollComponent.size - newSize;\n            this.scrollComponent.size = newSize;\n            const lastChunkExceeded = this.state.startIndex + this.state.chunkSize > val;\n            if (lastChunkExceeded) {\n                this.state.startIndex = val - this.state.chunkSize;\n            }\n            this._adjustScrollPositionAfterSizeChange(sizeDiff);\n        }\n    }\n\n    public get displayContainer(): HTMLElement | undefined {\n        return this.dc?.instance?._viewContainer?.element?.nativeElement;\n    }\n\n    public get virtualHelper() {\n        return this.scrollComponent.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get isRemote(): boolean {\n        return this.totalItemCount !== null;\n    }\n\n    /**\n     *\n     * Gets/Sets the scroll position.\n     * ```typescript\n     * const position = directive.scrollPosition;\n     * directive.scrollPosition = value;\n     * ```\n     */\n    public get scrollPosition(): number {\n        return this.scrollComponent.scrollAmount;\n    }\n    public set scrollPosition(val: number) {\n        if (val === this.scrollComponent.scrollAmount) {\n            return;\n        }\n        if (this.igxForScrollOrientation === 'horizontal' && this.scrollComponent) {\n            this.scrollComponent.nativeElement.scrollLeft = this.isRTL ? -val : val;\n        } else if (this.scrollComponent) {\n            this.scrollComponent.nativeElement.scrollTop = val;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected get isRTL() {\n        const dir = window.getComputedStyle(this.dc.instance._viewContainer.element.nativeElement).getPropertyValue('direction');\n        return dir === 'rtl';\n    }\n\n    protected get sizesCache(): number[] {\n        return this._sizesCache;\n    }\n    protected set sizesCache(value: number[]) {\n        this._sizesCache = value;\n    }\n\n    private get _isScrolledToBottom() {\n        if (!this.getScroll()) {\n            return true;\n        }\n        const scrollHeight = this.getScroll().scrollHeight;\n        // Use === and not >= because `scrollTop + container size` can't be bigger than `scrollHeight`, unless something isn't updated.\n        // Also use Math.round because Chrome has some inconsistencies and `scrollTop + container` can be float when zooming the page.\n        return Math.round(this.getScroll().scrollTop + this.igxForContainerSize) === scrollHeight;\n    }\n\n    private get _isAtBottomIndex() {\n        return this.igxForOf && this.state.startIndex + this.state.chunkSize > this.igxForOf.length;\n    }\n\n    constructor(\n        private _viewContainer: ViewContainerRef,\n        protected _template: TemplateRef<NgForOfContext<T>>,\n        protected _differs: IterableDiffers,\n        public cdr: ChangeDetectorRef,\n        protected _zone: NgZone,\n        protected syncScrollService: IgxForOfScrollSyncService,\n        protected platformUtil: PlatformUtil,\n        @Inject(DOCUMENT)\n        protected document: any,\n    ) {\n        super();\n    }\n\n    public verticalScrollHandler(event) {\n        this.onScroll(event);\n    }\n\n    public isScrollable() {\n        return this.scrollComponent.size > parseInt(this.igxForContainerSize, 10);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit(): void {\n        const vc = this.igxForScrollContainer ? this.igxForScrollContainer._viewContainer : this._viewContainer;\n        this.igxForSizePropName = this.igxForSizePropName || 'width';\n        this.dc = this._viewContainer.createComponent(DisplayContainerComponent, { index: 0 });\n        this.dc.instance.scrollDirection = this.igxForScrollOrientation;\n        if (this.igxForOf && this.igxForOf.length) {\n            this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n            this.state.chunkSize = this._calculateChunkSize();\n            this.dc.instance.notVirtual = !(this.igxForContainerSize && this.state.chunkSize < this.igxForOf.length);\n            if (this.scrollComponent && !this.scrollComponent.destroyed) {\n                this.state.startIndex = Math.min(this.getIndexAt(this.scrollPosition, this.sizesCache),\n                    this.igxForOf.length - this.state.chunkSize);\n            }\n            for (let i = this.state.startIndex; i < this.state.startIndex + this.state.chunkSize &&\n                this.igxForOf[i] !== undefined; i++) {\n                const input = this.igxForOf[i];\n                const embeddedView = this.dc.instance._vcr.createEmbeddedView(\n                    this._template,\n                    new IgxForOfContext<T, U>(input, this.igxForOf, this.getContextIndex(input), this.igxForOf.length)\n                );\n                this._embeddedViews.push(embeddedView);\n            }\n        }\n        this._maxSize = this._calcMaxBrowserSize();\n        if (this.igxForScrollOrientation === 'vertical') {\n            this.dc.instance._viewContainer.element.nativeElement.style.top = '0px';\n            this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n            if (!this.scrollComponent || this.scrollComponent.destroyed) {\n                this.scrollComponent = vc.createComponent(VirtualHelperComponent).instance;\n            }\n\n            this.scrollComponent.size = this.igxForOf ? this._calcSize() : 0;\n            this.syncScrollService.setScrollMaster(this.igxForScrollOrientation, this.scrollComponent);\n            this._zone.runOutsideAngular(() => {\n                this.verticalScrollHandler = this.verticalScrollHandler.bind(this);\n                this.scrollComponent.nativeElement.addEventListener('scroll', this.verticalScrollHandler);\n                this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n            });\n            const destructor = takeUntil<any>(this.destroy$);\n            this.contentResizeNotify.pipe(\n                filter(() => this.igxForContainerSize && this.igxForOf && this.igxForOf.length > 0),\n                throttleTime(40, undefined, { leading: false, trailing: true }),\n                destructor\n            ).subscribe(() => this._zone.runTask(() => this.updateSizes()));\n        }\n\n        if (this.igxForScrollOrientation === 'horizontal') {\n            this.func = (evt) => this.onHScroll(evt);\n            this.scrollComponent = this.syncScrollService.getScrollMaster(this.igxForScrollOrientation);\n            if (!this.scrollComponent) {\n                this.scrollComponent = vc.createComponent(HVirtualHelperComponent).instance;\n                this.scrollComponent.size = this.igxForOf ? this._calcSize() : 0;\n                this.syncScrollService.setScrollMaster(this.igxForScrollOrientation, this.scrollComponent);\n                this._zone.runOutsideAngular(() => {\n                    this.scrollComponent.nativeElement.addEventListener('scroll', this.func);\n                    this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n                });\n            } else {\n                this._zone.runOutsideAngular(() => {\n                    this.scrollComponent.nativeElement.addEventListener('scroll', this.func);\n                    this.dc.instance.scrollContainer = this.scrollComponent.nativeElement;\n                });\n            }\n            this._updateScrollOffset();\n        }\n    }\n\n    public ngAfterViewInit(): void {\n        if (this.igxForScrollOrientation === 'vertical') {\n            this._zone.runOutsideAngular(() => {\n                if (this.platformUtil.isBrowser) {\n                    this.contentObserver = new (getResizeObserver())(() => this.contentResizeNotify.next());\n                    this.contentObserver.observe(this.dc.instance._viewContainer.element.nativeElement);\n                }\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.removeScrollEventListeners();\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        if (this.contentObserver) {\n            this.contentObserver.disconnect();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * Asserts the correct type of the context for the template that `igxForOf` will render.\n     *\n     * The presence of this method is a signal to the Ivy template type-check compiler that the\n     * `IgxForOf` structural directive renders its template with a specific context type.\n     */\n    public static ngTemplateContextGuard<T, U extends T[]>(dir: IgxForOfDirective<T, U>, ctx: any):\n        ctx is IgxForOfContext<T, U> {\n        return true;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes: SimpleChanges): void {\n        const forOf = 'igxForOf';\n        if (forOf in changes) {\n            const value = changes[forOf].currentValue;\n            if (!this._differ && value) {\n                try {\n                    this._differ = this._differs.find(value).create(this.igxForTrackBy);\n                } catch (e) {\n                    throw new Error(\n                        `Cannot find a differ supporting object \"${value}\" of type \"${getTypeNameForDebugging(value)}\".\n                     NgFor only supports binding to Iterables such as Arrays.`);\n                }\n            }\n        }\n        const defaultItemSize = 'igxForItemSize';\n        if (defaultItemSize in changes && !changes[defaultItemSize].firstChange && this.igxForOf) {\n            // handle default item size changed.\n            this.initSizesCache(this.igxForOf);\n            this._applyChanges();\n        }\n        const containerSize = 'igxForContainerSize';\n        if (containerSize in changes && !changes[containerSize].firstChange && this.igxForOf) {\n            const prevSize = parseInt(changes[containerSize].previousValue, 10);\n            const newSize = parseInt(changes[containerSize].currentValue, 10);\n            this._recalcOnContainerChange({prevSize, newSize});\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngDoCheck(): void {\n        if (this._differ) {\n            const changes = this._differ.diff(this.igxForOf);\n            if (changes) {\n                //  re-init cache.\n                if (!this.igxForOf) {\n                    this.igxForOf = [] as U;\n                }\n                this._updateSizeCache();\n                this._zone.run(() => {\n                    this._applyChanges();\n                    this.cdr.markForCheck();\n                    this._updateScrollOffset();\n                    const args: IForOfDataChangingEventArgs = {\n                        containerSize: this.igxForContainerSize,\n                        state: this.state\n                    };\n                    this.dataChanged.emit(args);\n                });\n            }\n        }\n    }\n\n\n    /**\n     * Shifts the scroll thumb position.\n     * ```typescript\n     * this.parentVirtDir.addScroll(5);\n     * ```\n     *\n     * @param addTop negative value to scroll up and positive to scroll down;\n     */\n    public addScrollTop(add: number): boolean {\n        return this.addScroll(add);\n    }\n\n    /**\n     * Shifts the scroll thumb position.\n     * ```typescript\n     * this.parentVirtDir.addScroll(5);\n     * ```\n     *\n     * @param add negative value to scroll previous and positive to scroll next;\n     */\n    public addScroll(add: number): boolean {\n        if (add === 0) {\n            return false;\n        }\n        const originalVirtScrollTop = this._virtScrollPosition;\n        const containerSize = parseInt(this.igxForContainerSize, 10);\n        const maxVirtScrollTop = this._virtSize - containerSize;\n\n        this._bScrollInternal = true;\n        this._virtScrollPosition += add;\n        this._virtScrollPosition = this._virtScrollPosition > 0 ?\n            (this._virtScrollPosition < maxVirtScrollTop ? this._virtScrollPosition : maxVirtScrollTop) :\n            0;\n\n        this.scrollPosition += add / this._virtRatio;\n        if (Math.abs(add / this._virtRatio) < 1) {\n            // Actual scroll delta that was added is smaller than 1 and onScroll handler doesn't trigger when scrolling < 1px\n            const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n            // scrollOffset = scrollOffset !== parseInt(this.igxForItemSize, 10) ? scrollOffset : 0;\n            this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n        }\n\n        const maxRealScrollTop = this.scrollComponent.nativeElement.scrollHeight - containerSize;\n        if ((this._virtScrollPosition > 0 && this.scrollPosition === 0) ||\n            (this._virtScrollPosition < maxVirtScrollTop && this.scrollPosition === maxRealScrollTop)) {\n            // Actual scroll position is at the top or bottom, but virtual one is not at the top or bottom (there's more to scroll)\n            // Recalculate actual scroll position based on the virtual scroll.\n            this.scrollPosition = this._virtScrollPosition / this._virtRatio;\n        } else if (this._virtScrollPosition === 0 && this.scrollPosition > 0) {\n            // Actual scroll position is not at the top, but virtual scroll is. Just update the actual scroll\n            this.scrollPosition = 0;\n        } else if (this._virtScrollPosition === maxVirtScrollTop && this.scrollPosition < maxRealScrollTop) {\n            // Actual scroll position is not at the bottom, but virtual scroll is. Just update the acual scroll\n            this.scrollPosition = maxRealScrollTop;\n        }\n        return this._virtScrollPosition !== originalVirtScrollTop;\n    }\n\n    /**\n     * Scrolls to the specified index.\n     * ```typescript\n     * this.parentVirtDir.scrollTo(5);\n     * ```\n     *\n     * @param index\n     */\n    public scrollTo(index: number) {\n        if (index < 0 || index > (this.isRemote ? this.totalItemCount : this.igxForOf.length) - 1) {\n            return;\n        }\n        const containerSize = parseInt(this.igxForContainerSize, 10);\n        const isPrevItem = index < this.state.startIndex || this.scrollPosition > this.sizesCache[index];\n        let nextScroll = isPrevItem ? this.sizesCache[index] : this.sizesCache[index + 1] - containerSize;\n        if (nextScroll < 0) {\n            return;\n        }\n        const maxVirtScrollTop = this._virtSize - containerSize;\n        if (nextScroll > maxVirtScrollTop) {\n            nextScroll = maxVirtScrollTop;\n        }\n        this._bScrollInternal = true;\n        this._virtScrollPosition = nextScroll;\n        this.scrollPosition = this._virtScrollPosition / this._virtRatio;\n        this._adjustToIndex = !isPrevItem ? index : null;\n    }\n\n    /**\n     * Scrolls by one item into the appropriate next direction.\n     * For \"horizontal\" orientation that will be the right column and for \"vertical\" that is the lower row.\n     * ```typescript\n     * this.parentVirtDir.scrollNext();\n     * ```\n     */\n    public scrollNext() {\n        const scr = Math.abs(Math.ceil(this.scrollPosition));\n        const endIndex = this.getIndexAt(scr + parseInt(this.igxForContainerSize, 10), this.sizesCache);\n        this.scrollTo(endIndex);\n    }\n\n    /**\n     * Scrolls by one item into the appropriate previous direction.\n     * For \"horizontal\" orientation that will be the left column and for \"vertical\" that is the upper row.\n     * ```typescript\n     * this.parentVirtDir.scrollPrev();\n     * ```\n     */\n    public scrollPrev() {\n        this.scrollTo(this.state.startIndex - 1);\n    }\n\n    /**\n     * Scrolls by one page into the appropriate next direction.\n     * For \"horizontal\" orientation that will be one view to the right and for \"vertical\" that is one view to the bottom.\n     * ```typescript\n     * this.parentVirtDir.scrollNextPage();\n     * ```\n     */\n    public scrollNextPage() {\n        this.addScroll(parseInt(this.igxForContainerSize, 10));\n    }\n\n    /**\n     * Scrolls by one page into the appropriate previous direction.\n     * For \"horizontal\" orientation that will be one view to the left and for \"vertical\" that is one view to the top.\n     * ```typescript\n     * this.parentVirtDir.scrollPrevPage();\n     * ```\n     */\n    public scrollPrevPage() {\n        const containerSize = (parseInt(this.igxForContainerSize, 10));\n        this.addScroll(-containerSize);\n    }\n\n    /**\n     * @hidden\n     */\n    public getColumnScrollLeft(colIndex) {\n        return this.sizesCache[colIndex];\n    }\n\n    /**\n     * Returns the total number of items that are fully visible.\n     * ```typescript\n     * this.parentVirtDir.getItemCountInView();\n     * ```\n     */\n    public getItemCountInView() {\n        let startIndex = this.getIndexAt(this.scrollPosition, this.sizesCache);\n        if (this.scrollPosition - this.sizesCache[startIndex] > 0) {\n            // fisrt item is not fully in view\n            startIndex++;\n        }\n        const endIndex = this.getIndexAt(this.scrollPosition + parseInt(this.igxForContainerSize, 10), this.sizesCache);\n        return endIndex - startIndex;\n    }\n\n    /**\n     * Returns a reference to the scrollbar DOM element.\n     * This is either a vertical or horizontal scrollbar depending on the specified igxForScrollOrientation.\n     * ```typescript\n     * dir.getScroll();\n     * ```\n     */\n    public getScroll() {\n        return this.scrollComponent?.nativeElement;\n    }\n    /**\n     * Returns the size of the element at the specified index.\n     * ```typescript\n     * this.parentVirtDir.getSizeAt(1);\n     * ```\n     */\n    public getSizeAt(index: number) {\n        return this.sizesCache[index + 1] - this.sizesCache[index];\n    }\n\n    /**\n     * @hidden\n     * Function that is called to get the native scrollbar size that the browsers renders.\n     */\n    public getScrollNativeSize() {\n        return this.scrollComponent ? this.scrollComponent.scrollNativeSize : 0;\n    }\n\n    /**\n     * Returns the scroll offset of the element at the specified index.\n     * ```typescript\n     * this.parentVirtDir.getScrollForIndex(1);\n     * ```\n     */\n    public getScrollForIndex(index: number, bottom?: boolean) {\n        const containerSize = parseInt(this.igxForContainerSize, 10);\n        const scroll = bottom ? Math.max(0, this.sizesCache[index + 1] - containerSize) : this.sizesCache[index];\n        return scroll;\n    }\n\n    /**\n     * Returns the index of the element at the specified offset.\n     * ```typescript\n     * this.parentVirtDir.getIndexAtScroll(100);\n     * ```\n     */\n    public getIndexAtScroll(scrollOffset: number) {\n        return this.getIndexAt(scrollOffset, this.sizesCache);\n    }\n    /**\n     * Returns whether the target index is outside the view.\n     * ```typescript\n     * this.parentVirtDir.isIndexOutsideView(10);\n     * ```\n     */\n    public isIndexOutsideView(index: number) {\n        const targetNode = index >= this.state.startIndex && index <= this.state.startIndex + this.state.chunkSize ?\n            this._embeddedViews.map(view =>\n                view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling)[index - this.state.startIndex] : null;\n        const rowHeight = this.getSizeAt(index);\n        const containerSize = parseInt(this.igxForContainerSize, 10);\n        const containerOffset = -(this.scrollPosition - this.sizesCache[this.state.startIndex]);\n        const endTopOffset = targetNode ? targetNode.offsetTop + rowHeight + containerOffset : containerSize + rowHeight;\n        return !targetNode || targetNode.offsetTop < Math.abs(containerOffset)\n            || containerSize && endTopOffset - containerSize > 5;\n    }\n\n    /**\n     * @hidden\n     * Function that recalculates and updates cache sizes.\n     */\n    public recalcUpdateSizes() {\n        const dimension = this.igxForScrollOrientation === 'horizontal' ?\n            this.igxForSizePropName : 'height';\n        const diffs = [];\n        let totalDiff = 0;\n        const l = this._embeddedViews.length;\n        const rNodes = this._embeddedViews.map(view =>\n            view.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE) || view.rootNodes[0].nextElementSibling);\n        for (let i = 0; i < l; i++) {\n            const rNode = rNodes[i];\n            if (rNode) {\n                const height = window.getComputedStyle(rNode).getPropertyValue('height');\n                const h = parseFloat(height) || parseInt(this.igxForItemSize, 10);\n                const index = this.state.startIndex + i;\n                if (!this.isRemote && !this.igxForOf[index]) {\n                    continue;\n                }\n                const margin = this.getMargin(rNode, dimension);\n                const oldVal = this.individualSizeCache[index];\n                const newVal = (dimension === 'height' ? h : rNode.clientWidth) + margin;\n                this.individualSizeCache[index] = newVal;\n                const currDiff = newVal - oldVal;\n                diffs.push(currDiff);\n                totalDiff += currDiff;\n                this.sizesCache[index + 1] = (this.sizesCache[index] || 0) + newVal;\n            }\n        }\n        // update cache\n        if (Math.abs(totalDiff) > 0) {\n            for (let j = this.state.startIndex + this.state.chunkSize + 1; j < this.sizesCache.length; j++) {\n                this.sizesCache[j] = (this.sizesCache[j] || 0) + totalDiff;\n            }\n\n            // update scrBar heights/widths\n            const reducer = (acc, val) => acc + val;\n\n            const hSum = this.individualSizeCache.reduce(reducer);\n            if (hSum > this._maxSize) {\n                this._virtRatio = hSum / this._maxSize;\n            }\n            this.scrollComponent.size = Math.min(this.scrollComponent.size + totalDiff, this._maxSize);\n            this._virtSize = hSum;\n            if (!this.scrollComponent.destroyed) {\n                this.scrollComponent.cdr.detectChanges();\n            }\n            const scrToBottom = this._isScrolledToBottom && !this.dc.instance.notVirtual;\n            if (scrToBottom && !this._isAtBottomIndex) {\n                const containerSize = parseInt(this.igxForContainerSize, 10);\n                const maxVirtScrollTop = this._virtSize - containerSize;\n                this._bScrollInternal = true;\n                this._virtScrollPosition = maxVirtScrollTop;\n                this.scrollPosition = maxVirtScrollTop;\n                return;\n            }\n            if (this._adjustToIndex) {\n                // in case scrolled to specific index where after scroll heights are changed\n                // need to adjust the offsets so that item is last in view.\n                const updatesToIndex = this._adjustToIndex - this.state.startIndex + 1;\n                const sumDiffs = diffs.slice(0, updatesToIndex).reduce(reducer);\n                if (sumDiffs !== 0) {\n                    this.addScroll(sumDiffs);\n                }\n                this._adjustToIndex = null;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Reset scroll position.\n     * Needed in case scrollbar is hidden/detached but we still need to reset it.\n     */\n    public resetScrollPosition() {\n        this.scrollPosition = 0;\n        this.scrollComponent.scrollAmount = 0;\n    }\n\n    /**\n     * @hidden\n     */\n    protected removeScrollEventListeners() {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            this._zone.runOutsideAngular(() => this.scrollComponent?.nativeElement?.removeEventListener('scroll', this.func));\n        } else {\n            this._zone.runOutsideAngular(() =>\n                this.scrollComponent?.nativeElement?.removeEventListener('scroll', this.verticalScrollHandler)\n            );\n        }\n    }\n\n    /**\n     * @hidden\n     * Function that is called when scrolling vertically\n     */\n    protected onScroll(event) {\n        /* in certain situations this may be called when no scrollbar is visible */\n        if (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n            return;\n        }\n        if (!this._bScrollInternal) {\n            this._calcVirtualScrollPosition(event.target.scrollTop);\n        } else {\n            this._bScrollInternal = false;\n        }\n        const prevStartIndex = this.state.startIndex;\n        const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n        this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n\n        this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\n\n        this.dc.changeDetectorRef.detectChanges();\n        if (prevStartIndex !== this.state.startIndex) {\n            this.chunkLoad.emit(this.state);\n        }\n    }\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public updateScroll(): void {\n        if (this.igxForScrollOrientation === \"horizontal\") {\n            const scrollAmount = this.scrollComponent.nativeElement[\"scrollLeft\"];\n            this.scrollComponent.scrollAmount = scrollAmount;\n            this._updateScrollOffset();\n        }\n    }\n\n    protected updateSizes() {\n        if (!this.scrollComponent.nativeElement.isConnected) return;\n        const scrollable = this.isScrollable();\n        this.recalcUpdateSizes();\n        this._applyChanges();\n        this._updateScrollOffset();\n        if (scrollable !== this.isScrollable()) {\n            this.scrollbarVisibilityChanged.emit();\n        } else {\n            this.contentSizeChange.emit();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected fixedUpdateAllElements(inScrollTop: number): number {\n        const count = this.isRemote ? this.totalItemCount : this.igxForOf.length;\n        let newStart = this.getIndexAt(inScrollTop, this.sizesCache);\n\n        if (newStart + this.state.chunkSize > count) {\n            newStart = count - this.state.chunkSize;\n        }\n\n        const prevStart = this.state.startIndex;\n        const diff = newStart - this.state.startIndex;\n        this.state.startIndex = newStart;\n\n        if (diff) {\n            this.chunkPreload.emit(this.state);\n            if (!this.isRemote) {\n\n                // recalculate and apply page size.\n                if (diff && Math.abs(diff) <= MAX_PERF_SCROLL_DIFF) {\n                    if (diff > 0) {\n                        this.moveApplyScrollNext(prevStart);\n                    } else {\n                        this.moveApplyScrollPrev(prevStart);\n                    }\n                } else {\n                    this.fixedApplyScroll();\n                }\n            }\n        }\n\n        return inScrollTop - this.sizesCache[this.state.startIndex];\n    }\n\n    /**\n     * @hidden\n     * The function applies an optimized state change for scrolling down/right employing context change with view rearrangement\n     */\n    protected moveApplyScrollNext(prevIndex: number): void {\n        const start = prevIndex + this.state.chunkSize;\n        const end = start + this.state.startIndex - prevIndex;\n        const container = this.dc.instance._vcr as ViewContainerRef;\n\n        for (let i = start; i < end && this.igxForOf[i] !== undefined; i++) {\n            const embView = this._embeddedViews.shift();\n            if (!embView.destroyed) {\n                this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)\n                    || embView.rootNodes[0].nextElementSibling);\n                const view = container.detach(0);\n\n                this.updateTemplateContext(embView.context, i);\n                container.insert(view);\n                this._embeddedViews.push(embView);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * The function applies an optimized state change for scrolling up/left employing context change with view rearrangement\n     */\n    protected moveApplyScrollPrev(prevIndex: number): void {\n        const container = this.dc.instance._vcr as ViewContainerRef;\n        for (let i = prevIndex - 1; i >= this.state.startIndex && this.igxForOf[i] !== undefined; i--) {\n            const embView = this._embeddedViews.pop();\n            if (!embView.destroyed) {\n                this.scrollFocus(embView.rootNodes.find(node => node.nodeType === Node.ELEMENT_NODE)\n                    || embView.rootNodes[0].nextElementSibling);\n                const view = container.detach(container.length - 1);\n\n                this.updateTemplateContext(embView.context, i);\n                container.insert(view, 0);\n                this._embeddedViews.unshift(embView);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected getContextIndex(input) {\n        return this.isRemote ? this.state.startIndex + this.igxForOf.indexOf(input) : this.igxForOf.indexOf(input);\n    }\n\n    /**\n     * @hidden\n     * Function which updates the passed context of an embedded view with the provided index\n     * from the view container.\n     * Often, called while handling a scroll event.\n     */\n    protected updateTemplateContext(context: any, index = 0): void {\n        context.$implicit = this.igxForOf[index];\n        context.index = this.getContextIndex(this.igxForOf[index]);\n        context.count = this.igxForOf.length;\n    }\n\n    /**\n     * @hidden\n     * The function applies an optimized state change through context change for each view\n     */\n    protected fixedApplyScroll(): void {\n        let j = 0;\n        const endIndex = this.state.startIndex + this.state.chunkSize;\n        for (let i = this.state.startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n            const embView = this._embeddedViews[j++];\n            this.updateTemplateContext(embView.context, i);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     *\n     * Clears focus inside the virtualized container on small scroll swaps.\n     */\n    protected scrollFocus(node?: HTMLElement): void {\n        if (!node) {\n            return;\n        }\n        const document = node.getRootNode() as Document | ShadowRoot;\n        const activeElement = document.activeElement as HTMLElement;\n\n        // Remove focus in case the the active element is inside the view container.\n        // Otherwise we hit an exception while doing the 'small' scrolls swapping.\n        // For more information:\n        //\n        // https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=432392\n        if (node && node.contains(activeElement)) {\n            activeElement.blur();\n        }\n    }\n\n    /**\n     * @hidden\n     * Function that is called when scrolling horizontally\n     */\n    protected onHScroll(event) {\n        /* in certain situations this may be called when no scrollbar is visible */\n        const firstScrollChild = this.scrollComponent.nativeElement.children.item(0) as HTMLElement;\n        if (!parseInt(firstScrollChild.style.width, 10)) {\n            return;\n        }\n        if (!this._bScrollInternal) {\n            this._calcVirtualScrollPosition(event.target.scrollLeft);\n        } else {\n            this._bScrollInternal = false;\n        }\n        const prevStartIndex = this.state.startIndex;\n        const scrLeft = event.target.scrollLeft;\n        // Updating horizontal chunks\n        const scrollOffset = this.fixedUpdateAllElements(Math.abs(this._virtScrollPosition));\n        if (scrLeft < 0) {\n            // RTL\n            this.dc.instance._viewContainer.element.nativeElement.style.left = scrollOffset + 'px';\n        } else {\n            this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n        }\n        this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\n\n        this.dc.changeDetectorRef.detectChanges();\n        if (prevStartIndex !== this.state.startIndex) {\n            this.chunkLoad.emit(this.state);\n        }\n    }\n\n    /**\n     * Gets the function used to track changes in the items collection.\n     * By default the object references are compared. However this can be optimized if you have unique identifier\n     * value that can be used for the comparison instead of the object ref or if you have some other property values\n     * in the item object that should be tracked for changes.\n     * This option is similar to ngForTrackBy.\n     * ```typescript\n     * const trackFunc = this.parentVirtDir.igxForTrackBy;\n     * ```\n     */\n    @Input()\n    public get igxForTrackBy(): TrackByFunction<T> {\n        return this._trackByFn;\n    }\n\n    /**\n     * Sets the function used to track changes in the items collection.\n     * This function can be set in scenarios where you want to optimize or\n     * customize the tracking of changes for the items in the collection.\n     * The igxForTrackBy function takes the index and the current item as arguments and needs to return the unique identifier for this item.\n     * ```typescript\n     * this.parentVirtDir.igxForTrackBy = (index, item) => {\n     *      return item.id + item.width;\n     * };\n     * ```\n     */\n    public set igxForTrackBy(fn: TrackByFunction<T>) {\n        this._trackByFn = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    protected _applyChanges() {\n        const prevChunkSize = this.state.chunkSize;\n        this.applyChunkSizeChange();\n        this._recalcScrollBarSize();\n        if (this.igxForOf && this.igxForOf.length && this.dc) {\n            const embeddedViewCopy = Object.assign([], this._embeddedViews);\n            let startIndex = this.state.startIndex;\n            let endIndex = this.state.chunkSize + this.state.startIndex;\n            if (this.isRemote) {\n                startIndex = 0;\n                endIndex = this.igxForOf.length;\n            }\n            for (let i = startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n                const embView = embeddedViewCopy.shift();\n                this.updateTemplateContext(embView.context, i);\n            }\n            if (prevChunkSize !== this.state.chunkSize) {\n                this.chunkLoad.emit(this.state);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected _calcMaxBrowserSize(): number {\n        if (!this.platformUtil.isBrowser) {\n            return 0;\n        }\n        const div = this.document.createElement('div');\n        const style = div.style;\n        style.position = 'absolute';\n        const dir = this.igxForScrollOrientation === 'horizontal' ? 'left' : 'top';\n        style[dir] = '9999999999999999px';\n        this.document.body.appendChild(div);\n        const size = Math.abs(div.getBoundingClientRect()[dir]);\n        this.document.body.removeChild(div);\n        return size;\n    }\n\n    /**\n     * @hidden\n     * Recalculates the chunkSize based on current startIndex and returns the new size.\n     * This should be called after this.state.startIndex is updated, not before.\n     */\n    protected _calculateChunkSize(): number {\n        let chunkSize = 0;\n        if (this.igxForContainerSize !== null && this.igxForContainerSize !== undefined) {\n            if (!this.sizesCache || this.sizesCache.length === 0) {\n                this.initSizesCache(this.igxForOf);\n            }\n            chunkSize = this._calcMaxChunkSize();\n            if (this.igxForOf && chunkSize > this.igxForOf.length) {\n                chunkSize = this.igxForOf.length;\n            }\n        } else {\n            if (this.igxForOf) {\n                chunkSize = Math.min(this.igxForInitialChunkSize || this.igxForOf.length, this.igxForOf.length);\n            }\n        }\n        return chunkSize;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getElement(viewref, nodeName) {\n        const elem = viewref.element.nativeElement.parentNode.getElementsByTagName(nodeName);\n        return elem.length > 0 ? elem[0] : null;\n    }\n\n    /**\n     * @hidden\n     */\n    protected initSizesCache(items: U): number {\n        let totalSize = 0;\n        let size = 0;\n        const dimension = this.igxForSizePropName || 'height';\n        let i = 0;\n        this.sizesCache = [];\n        this.individualSizeCache = [];\n        this.sizesCache.push(0);\n        const count = this.isRemote ? this.totalItemCount : items.length;\n        for (i; i < count; i++) {\n            size = this._getItemSize(items[i], dimension);\n            this.individualSizeCache.push(size);\n            totalSize += size;\n            this.sizesCache.push(totalSize);\n        }\n        return totalSize;\n    }\n\n    protected _updateSizeCache() {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            this.initSizesCache(this.igxForOf);\n            return;\n        }\n        const oldHeight = this.individualSizeCache.length > 0 ? this.individualSizeCache.reduce((acc, val) => acc + val) : 0;\n        const newHeight = this.initSizesCache(this.igxForOf);\n\n        const diff = oldHeight - newHeight;\n        this._adjustScrollPositionAfterSizeChange(diff);\n    }\n\n    /**\n     * @hidden\n     */\n    protected _calcMaxChunkSize(): number {\n        let i = 0;\n        let length = 0;\n        let maxLength = 0;\n        const arr = [];\n        let sum = 0;\n        const availableSize = parseInt(this.igxForContainerSize, 10);\n        if (!availableSize) {\n            return 0;\n        }\n        const dimension = this.igxForScrollOrientation === 'horizontal' ?\n            this.igxForSizePropName : 'height';\n        const reducer = (accumulator, currentItem) => accumulator + this._getItemSize(currentItem, dimension);\n        for (i; i < this.igxForOf.length; i++) {\n            let item: T | { value: T, height: number } = this.igxForOf[i];\n            if (dimension === 'height') {\n                item = { value: this.igxForOf[i], height: this.individualSizeCache[i] };\n            }\n            const size = dimension === 'height' ?\n                this.individualSizeCache[i] :\n                this._getItemSize(item, dimension);\n            sum = arr.reduce(reducer, size);\n            if (sum < availableSize) {\n                arr.push(item);\n                length = arr.length;\n                if (i === this.igxForOf.length - 1) {\n                    // reached end without exceeding\n                    // include prev items until size is filled or first item is reached.\n                    let curItem = dimension === 'height' ? arr[0].value : arr[0];\n                    let prevIndex = this.igxForOf.indexOf(curItem) - 1;\n                    while (prevIndex >= 0 && sum <= availableSize) {\n                        curItem = dimension === 'height' ? arr[0].value : arr[0];\n                        prevIndex = this.igxForOf.indexOf(curItem) - 1;\n                        const prevItem = this.igxForOf[prevIndex];\n                        const prevSize = dimension === 'height' ?\n                            this.individualSizeCache[prevIndex] :\n                            parseInt(prevItem[dimension], 10);\n                        sum = arr.reduce(reducer, prevSize);\n                        arr.unshift(prevItem);\n                        length = arr.length;\n                    }\n                }\n            } else {\n                arr.push(item);\n                length = arr.length + 1;\n                arr.shift();\n            }\n            if (length > maxLength) {\n                maxLength = length;\n            }\n        }\n        return maxLength;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getIndexAt(left, set) {\n        let start = 0;\n        let end = set.length - 1;\n        if (left === 0) {\n            return 0;\n        }\n        while (start <= end) {\n            const midIdx = Math.floor((start + end) / 2);\n            const midLeft = set[midIdx];\n            const cmp = left - midLeft;\n            if (cmp > 0) {\n                start = midIdx + 1;\n            } else if (cmp < 0) {\n                end = midIdx - 1;\n            } else {\n                return midIdx;\n            }\n        }\n        return end;\n    }\n\n    protected _recalcScrollBarSize(containerSizeInfo = null) {\n        const count = this.isRemote ? this.totalItemCount : (this.igxForOf ? this.igxForOf.length : 0);\n        this.dc.instance.notVirtual = !(this.igxForContainerSize && this.dc && this.state.chunkSize < count);\n        const scrollable = containerSizeInfo ? this.scrollComponent.size > containerSizeInfo.prevSize : this.isScrollable();\n        if (this.igxForScrollOrientation === 'horizontal') {\n            const totalWidth = parseInt(this.igxForContainerSize, 10) > 0 ? this._calcSize() : 0;\n            if (totalWidth <= parseInt(this.igxForContainerSize, 10)) {\n                this.resetScrollPosition();\n            }\n            this.scrollComponent.nativeElement.style.width = this.igxForContainerSize + 'px';\n            this.scrollComponent.size = totalWidth;\n        }\n        if (this.igxForScrollOrientation === 'vertical') {\n            const totalHeight = this._calcSize();\n            if (totalHeight <= parseInt(this.igxForContainerSize, 10)) {\n                this.resetScrollPosition();\n            }\n            this.scrollComponent.nativeElement.style.height = parseInt(this.igxForContainerSize, 10) + 'px';\n            this.scrollComponent.size = totalHeight;\n        }\n        if (scrollable !== this.isScrollable()) {\n            // scrollbar visibility has changed\n            this.scrollbarVisibilityChanged.emit();\n        }\n    }\n\n    protected _calcSize(): number {\n        let size;\n        if (this.individualSizeCache && this.individualSizeCache.length > 0) {\n            size = this.individualSizeCache.reduce((acc, val) => acc + val, 0);\n        } else {\n            size = this.initSizesCache(this.igxForOf);\n        }\n        this._virtSize = size;\n        if (size > this._maxSize) {\n            this._virtRatio = size / this._maxSize;\n            size = this._maxSize;\n        }\n        return size;\n    }\n\n    protected _recalcOnContainerChange(containerSizeInfo = null) {\n        const prevChunkSize = this.state.chunkSize;\n        this.applyChunkSizeChange();\n        this._recalcScrollBarSize(containerSizeInfo);\n        if (prevChunkSize !== this.state.chunkSize) {\n            this.chunkLoad.emit(this.state);\n        }\n    }\n\n    /**\n     * @hidden\n     * Removes an element from the embedded views and updates chunkSize.\n     */\n    protected removeLastElem() {\n        const oldElem = this._embeddedViews.pop();\n        this.beforeViewDestroyed.emit(oldElem);\n        // also detach from ViewContainerRef to make absolutely sure this is removed from the view container.\n        this.dc.instance._vcr.detach(this.dc.instance._vcr.length - 1);\n        oldElem.destroy();\n\n        this.state.chunkSize--;\n    }\n\n    /**\n     * @hidden\n     * If there exists an element that we can create embedded view for creates it, appends it and updates chunkSize\n     */\n    protected addLastElem() {\n        let elemIndex = this.state.startIndex + this.state.chunkSize;\n        if (!this.isRemote && !this.igxForOf) {\n            return;\n        }\n\n        if (elemIndex >= this.igxForOf.length) {\n            elemIndex = this.igxForOf.length - this.state.chunkSize;\n        }\n        const input = this.igxForOf[elemIndex];\n        const embeddedView = this.dc.instance._vcr.createEmbeddedView(\n            this._template,\n            new IgxForOfContext<T, U>(input, this.igxForOf, this.getContextIndex(input), this.igxForOf.length)\n        );\n\n        this._embeddedViews.push(embeddedView);\n        this.state.chunkSize++;\n\n        this._zone.run(() => this.cdr.markForCheck());\n    }\n\n    /**\n     * Recalculates chunkSize and adds/removes elements if need due to the change.\n     * this.state.chunkSize is updated in @addLastElem() or @removeLastElem()\n     */\n    protected applyChunkSizeChange() {\n        const chunkSize = this.isRemote ? (this.igxForOf ? this.igxForOf.length : 0) : this._calculateChunkSize();\n        if (chunkSize > this.state.chunkSize) {\n            const diff = chunkSize - this.state.chunkSize;\n            for (let i = 0; i < diff; i++) {\n                this.addLastElem();\n            }\n        } else if (chunkSize < this.state.chunkSize) {\n            const diff = this.state.chunkSize - chunkSize;\n            for (let i = 0; i < diff; i++) {\n                this.removeLastElem();\n            }\n        }\n    }\n\n    protected _calcVirtualScrollPosition(scrollPosition: number) {\n        const containerSize = parseInt(this.igxForContainerSize, 10);\n        const maxRealScrollPosition = this.scrollComponent.size - containerSize;\n        const realPercentScrolled = maxRealScrollPosition !== 0 ? scrollPosition / maxRealScrollPosition : 0;\n        const maxVirtScroll = this._virtSize - containerSize;\n        this._virtScrollPosition = realPercentScrolled * maxVirtScroll;\n    }\n\n    protected _getItemSize(item, dimension: string): number {\n        const dim = item ? item[dimension] : null;\n        return typeof dim === 'number' ? dim : parseInt(this.igxForItemSize, 10) || 0;\n    }\n\n    protected _updateScrollOffset() {\n        let scrollOffset = 0;\n        let currentScroll = this.scrollPosition;\n        if (this._virtRatio !== 1) {\n            this._calcVirtualScrollPosition(this.scrollPosition);\n            currentScroll = this._virtScrollPosition;\n        }\n        const scroll = this.scrollComponent.nativeElement;\n        scrollOffset = scroll && this.scrollComponent.size ?\n        currentScroll - this.sizesCache[this.state.startIndex] : 0;\n        const dir = this.igxForScrollOrientation === 'horizontal' ? 'left' : 'top';\n        this.dc.instance._viewContainer.element.nativeElement.style[dir] = -(scrollOffset) + 'px';\n    }\n\n    protected _adjustScrollPositionAfterSizeChange(sizeDiff) {\n        // if data has been changed while container is scrolled\n        // should update scroll top/left according to change so that same startIndex is in view\n        if (Math.abs(sizeDiff) > 0 && this.scrollPosition > 0) {\n            this.recalcUpdateSizes();\n            const offset = this.igxForScrollOrientation === 'horizontal' ?\n                parseInt(this.dc.instance._viewContainer.element.nativeElement.style.left, 10) :\n                parseInt(this.dc.instance._viewContainer.element.nativeElement.style.top, 10);\n            const newSize = this.sizesCache[this.state.startIndex] - offset;\n            this.scrollPosition = newSize;\n            if (this.scrollPosition !== newSize) {\n                this.scrollComponent.scrollAmount = newSize;\n            }\n        }\n    }\n\n    private getMargin(node, dimension: string): number {\n        const styles = window.getComputedStyle(node);\n        if (dimension === 'height') {\n            return parseFloat(styles['marginTop']) +\n                parseFloat(styles['marginBottom']) || 0;\n        }\n        return parseFloat(styles['marginLeft']) +\n            parseFloat(styles['marginRight']) || 0;\n    }\n}\n\nexport const getTypeNameForDebugging = (type: any): string => type.name || typeof type;\n\nexport interface IForOfState extends IBaseEventArgs {\n    startIndex?: number;\n    chunkSize?: number;\n}\n\nexport interface IForOfDataChangingEventArgs extends IBaseEventArgs {\n    containerSize: number;\n    state: IForOfState;\n}\n\nexport class IgxGridForOfContext<T, U extends T[] = T[]> extends IgxForOfContext<T, U> {\n    constructor(\n        $implicit: T,\n        public igxGridForOf: U,\n        index: number,\n        count: number\n    ) {\n        super($implicit, igxGridForOf, index, count);\n    }\n}\n\n@Directive({\n    selector: '[igxGridFor][igxGridForOf]',\n    standalone: true\n})\nexport class IgxGridForOfDirective<T, U extends T[] = T[]> extends IgxForOfDirective<T, U> implements OnInit, OnChanges, DoCheck {\n    @Input()\n    public set igxGridForOf(value: U & T[] | null) {\n        this.igxForOf = value;\n    }\n\n    public get igxGridForOf() {\n        return this.igxForOf;\n    }\n\n    @Input({ transform: booleanAttribute })\n    public igxGridForOfUniqueSizeCache = false;\n\n    @Input({ transform: booleanAttribute })\n    public igxGridForOfVariableSizes = true;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get sizesCache(): number[] {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            if (this.igxGridForOfUniqueSizeCache || this.syncService.isMaster(this)) {\n                return this._sizesCache;\n            }\n            return this.syncService.sizesCache(this.igxForScrollOrientation);\n        } else {\n            return this._sizesCache;\n        }\n    }\n    /**\n     * @hidden\n     * @internal\n     */\n    public override set sizesCache(value: number[]) {\n        this._sizesCache = value;\n    }\n\n    protected get itemsDimension() {\n        return this.igxForSizePropName || 'height';\n    }\n\n    public override recalcUpdateSizes() {\n        if (this.igxGridForOfVariableSizes && this.igxForScrollOrientation === 'vertical') {\n            super.recalcUpdateSizes();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * An event that is emitted after data has been changed but before the view is refreshed\n     */\n    @Output()\n    public dataChanging = new EventEmitter<IForOfDataChangingEventArgs>();\n\n    constructor(\n        _viewContainer: ViewContainerRef,\n        _template: TemplateRef<NgForOfContext<T>>,\n        _differs: IterableDiffers,\n        cdr: ChangeDetectorRef,\n        _zone: NgZone,\n        _platformUtil: PlatformUtil,\n        @Inject(DOCUMENT) _document: any,\n        syncScrollService: IgxForOfScrollSyncService,\n        protected syncService: IgxForOfSyncService) {\n        super(_viewContainer, _template, _differs, cdr, _zone, syncScrollService, _platformUtil, _document);\n    }\n\n    /**\n     * @hidden @internal\n     * Asserts the correct type of the context for the template that `IgxGridForOfDirective` will render.\n     *\n     * The presence of this method is a signal to the Ivy template type-check compiler that the\n     * `IgxGridForOfDirective` structural directive renders its template with a specific context type.\n     */\n    public static override ngTemplateContextGuard<T, U extends T[]>(dir: IgxGridForOfDirective<T, U>, ctx: any):\n        ctx is IgxGridForOfContext<T, U> {\n        return true;\n    }\n\n    public override ngOnInit() {\n        this.syncService.setMaster(this);\n        super.ngOnInit();\n        this.removeScrollEventListeners();\n    }\n\n    public override ngOnChanges(changes: SimpleChanges) {\n        const forOf = 'igxGridForOf';\n        this.syncService.setMaster(this);\n        if (forOf in changes) {\n            const value = changes[forOf].currentValue;\n            if (!this._differ && value) {\n                try {\n                    this._differ = this._differs.find(value).create(this.igxForTrackBy);\n                } catch (e) {\n                    throw new Error(\n                        `Cannot find a differ supporting object \"${value}\" of type \"${getTypeNameForDebugging(value)}\".\n                     NgFor only supports binding to Iterables such as Arrays.`);\n                }\n            }\n            if (this.igxForScrollOrientation === 'horizontal') {\n                // in case collection has changes, reset sync service\n                this.syncService.setMaster(this, this.igxGridForOfUniqueSizeCache);\n            }\n        }\n        const defaultItemSize = 'igxForItemSize';\n        if (defaultItemSize in changes && !changes[defaultItemSize].firstChange &&\n            this.igxForScrollOrientation === 'vertical' && this.igxForOf) {\n            // handle default item size changed.\n            this.initSizesCache(this.igxForOf);\n        }\n        const containerSize = 'igxForContainerSize';\n        if (containerSize in changes && !changes[containerSize].firstChange && this.igxForOf) {\n            const prevSize = parseInt(changes[containerSize].previousValue, 10);\n            const newSize = parseInt(changes[containerSize].currentValue, 10);\n            this._recalcOnContainerChange({prevSize, newSize});\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public assumeMaster(): void {\n        this._sizesCache = this.syncService.sizesCache(this.igxForScrollOrientation);\n        this.syncService.setMaster(this, true);\n    }\n\n    public override ngDoCheck() {\n        if (this._differ) {\n            const changes = this._differ.diff(this.igxForOf);\n            if (changes) {\n                const args: IForOfDataChangingEventArgs = {\n                    containerSize: this.igxForContainerSize,\n                    state: this.state\n                };\n                this.dataChanging.emit(args);\n                //  re-init cache.\n                if (!this.igxForOf) {\n                    this.igxForOf = [] as U;\n                }\n                /* we need to reset the master dir if all rows are removed\n                (e.g. because of filtering); if all columns are hidden, rows are\n                still rendered empty, so we should not reset master */\n                if (!this.igxForOf.length &&\n                    this.igxForScrollOrientation === 'vertical') {\n                    this.syncService.resetMaster();\n                }\n                this.syncService.setMaster(this);\n                this.igxForContainerSize = args.containerSize;\n                const sizeDiff = this._updateSizeCache(changes);\n                this._applyChanges();\n                if (sizeDiff) {\n                    this._adjustScrollPositionAfterSizeChange(sizeDiff);\n                }\n                this._updateScrollOffset();\n                this.dataChanged.emit(args);\n            }\n        }\n    }\n\n    public override onScroll(event) {\n        if (!parseInt(this.scrollComponent.nativeElement.style.height, 10)) {\n            return;\n        }\n        if (!this._bScrollInternal) {\n            this._calcVirtualScrollPosition(event.target.scrollTop);\n        } else {\n            this._bScrollInternal = false;\n        }\n        const scrollOffset = this.fixedUpdateAllElements(this._virtScrollPosition);\n\n        this.dc.instance._viewContainer.element.nativeElement.style.top = -(scrollOffset) + 'px';\n\n        this._zone.onStable.pipe(first()).subscribe(this.recalcUpdateSizes.bind(this));\n        this.cdr.markForCheck();\n    }\n\n    public override onHScroll(scrollAmount) {\n        /* in certain situations this may be called when no scrollbar is visible */\n        const firstScrollChild = this.scrollComponent.nativeElement.children.item(0) as HTMLElement;\n        if (!this.scrollComponent || !parseInt(firstScrollChild.style.width, 10)) {\n            return;\n        }\n        // Updating horizontal chunks\n        const scrollOffset = this.fixedUpdateAllElements(Math.abs(scrollAmount));\n        if (scrollAmount < 0) {\n            // RTL\n            this.dc.instance._viewContainer.element.nativeElement.style.left = scrollOffset + 'px';\n        } else {\n            // LTR\n            this.dc.instance._viewContainer.element.nativeElement.style.left = -scrollOffset + 'px';\n        }\n    }\n\n    protected getItemSize(item) {\n        let size = 0;\n        const dimension = this.igxForSizePropName || 'height';\n        if (this.igxForScrollOrientation === 'vertical') {\n            size = this._getItemSize(item, dimension);\n            if (item && item.summaries) {\n                size = item.max;\n            } else if (item && item.groups && item.height) {\n                size = item.height;\n            }\n        } else {\n            size = parseInt(item[dimension], 10) || 0;\n        }\n        return size;\n    }\n\n    protected override initSizesCache(items: U): number {\n        if (!this.syncService.isMaster(this) && this.igxForScrollOrientation === 'horizontal') {\n            const masterSizesCache = this.syncService.sizesCache(this.igxForScrollOrientation);\n            return masterSizesCache[masterSizesCache.length - 1];\n        }\n        let totalSize = 0;\n        let size = 0;\n        let i = 0;\n        this.sizesCache = [];\n        this.individualSizeCache = [];\n        this.sizesCache.push(0);\n        const count = this.isRemote ? this.totalItemCount : items.length;\n        for (i; i < count; i++) {\n            size = this.getItemSize(items[i]);\n            this.individualSizeCache.push(size);\n            totalSize += size;\n            this.sizesCache.push(totalSize);\n        }\n        return totalSize;\n    }\n\n    protected override _updateSizeCache(changes: IterableChanges<T> = null) {\n        const oldSize = this.individualSizeCache.length > 0 ? this.individualSizeCache.reduce((acc, val) => acc + val) : 0;\n        let newSize = oldSize;\n        if (changes && !this.isRemote) {\n            newSize = this.handleCacheChanges(changes);\n        } else {\n            return;\n        }\n\n        const diff = oldSize - newSize;\n        return diff;\n    }\n\n    protected handleCacheChanges(changes: IterableChanges<T>) {\n        const identityChanges = [];\n        const newHeightCache = [];\n        const newSizesCache = [];\n        newSizesCache.push(0);\n        let newHeight = 0;\n\n        // When there are more than one removed items the changes are not reliable so those with identity change should be default size.\n        let numRemovedItems = 0;\n        changes.forEachRemovedItem(() => numRemovedItems++);\n\n        // Get the identity changes to determine later if those that have changed their indexes should be assigned default item size.\n        changes.forEachIdentityChange((item) => {\n            if (item.currentIndex !== item.previousIndex) {\n                // Filter out ones that have not changed their index.\n                identityChanges[item.currentIndex] = item;\n            }\n        });\n\n        // Processing each item that is passed to the igxForOf so far seem to be most reliable. We parse the updated list of items.\n        changes.forEachItem((item) => {\n            if (item.previousIndex !== null &&\n                (numRemovedItems < 2 || !identityChanges.length || identityChanges[item.currentIndex])\n                && this.igxForScrollOrientation !== \"horizontal\") {\n                // Reuse cache on those who have previousIndex.\n                // When there are more than one removed items currently the changes are not readable so ones with identity change\n                // should be racalculated.\n                newHeightCache[item.currentIndex] = this.individualSizeCache[item.previousIndex];\n            } else {\n                // Assign default item size.\n                newHeightCache[item.currentIndex] = this.getItemSize(item.item);\n            }\n            newSizesCache[item.currentIndex + 1] = newSizesCache[item.currentIndex] + newHeightCache[item.currentIndex];\n            newHeight += newHeightCache[item.currentIndex];\n        });\n        this.individualSizeCache = newHeightCache;\n        this.sizesCache = newSizesCache;\n        return newHeight;\n    }\n\n    protected override addLastElem() {\n        let elemIndex = this.state.startIndex + this.state.chunkSize;\n        if (!this.isRemote && !this.igxForOf) {\n            return;\n        }\n\n        if (elemIndex >= this.igxForOf.length) {\n            elemIndex = this.igxForOf.length - this.state.chunkSize;\n        }\n        const input = this.igxForOf[elemIndex];\n        const embeddedView = this.dc.instance._vcr.createEmbeddedView(\n            this._template,\n            new IgxGridForOfContext<T, U>(input, this.igxForOf, this.getContextIndex(input), this.igxForOf.length)\n        );\n\n        this._embeddedViews.push(embeddedView);\n        this.state.chunkSize++;\n    }\n\n    protected _updateViews(prevChunkSize) {\n        if (this.igxForOf && this.igxForOf.length && this.dc) {\n            const embeddedViewCopy = Object.assign([], this._embeddedViews);\n            let startIndex;\n            let endIndex;\n            if (this.isRemote) {\n                startIndex = 0;\n                endIndex = this.igxForOf.length;\n            } else {\n                startIndex = this.getIndexAt(this.scrollPosition, this.sizesCache);\n                if (startIndex + this.state.chunkSize > this.igxForOf.length) {\n                    startIndex = this.igxForOf.length - this.state.chunkSize;\n                }\n                this.state.startIndex = startIndex;\n                endIndex = this.state.chunkSize + this.state.startIndex;\n            }\n\n            for (let i = startIndex; i < endIndex && this.igxForOf[i] !== undefined; i++) {\n                const embView = embeddedViewCopy.shift();\n                this.updateTemplateContext(embView.context, i);\n            }\n            if (prevChunkSize !== this.state.chunkSize) {\n                this.chunkLoad.emit(this.state);\n            }\n        }\n    }\n    protected override _applyChanges() {\n        const prevChunkSize = this.state.chunkSize;\n        this.applyChunkSizeChange();\n        this._recalcScrollBarSize();\n        this._updateViews(prevChunkSize);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override _calcMaxChunkSize(): number {\n        if (this.igxForScrollOrientation === 'horizontal') {\n            if (this.syncService.isMaster(this)) {\n                return super._calcMaxChunkSize();\n            }\n            return this.syncService.chunkSize(this.igxForScrollOrientation);\n        } else {\n            return super._calcMaxChunkSize();\n        }\n\n    }\n}\n","import { Directive, HostBinding, Input } from '@angular/core';\nimport { IgxBaseButtonType, IgxButtonBaseDirective } from './button-base';\n\n/**\n * Determines the Icon Button type.\n */\nexport type IgxIconButtonType = typeof IgxBaseButtonType[keyof typeof IgxBaseButtonType];\n\n/**\n * The IgxIconButtonDirective provides a way to use an icon as a fully functional button.\n *\n * @example\n * ```html\n * <button type=\"button\" igxIconButton=\"outlined\">\n *      <igx-icon>home</igx-icon>\n * </button>\n * ```\n */\n@Directive({\n    selector: '[igxIconButton]',\n    standalone: true\n})\nexport class IgxIconButtonDirective extends IgxButtonBaseDirective {\n    private static ngAcceptInputType_type: IgxIconButtonType | '';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button')\n    private _cssClass = 'igx-icon-button';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _type: IgxIconButtonType;\n\n    /**\n     * Sets the type of the icon button.\n     *\n     * @example\n     * ```html\n     * <button type=\"button\" igxIconButton=\"flat\"></button>\n     * ```\n     */\n    @Input('igxIconButton')\n    public set type(type: IgxIconButtonType) {\n        const t = type ? type : IgxBaseButtonType.Contained;\n        if (this._type !== t) {\n            this._type = t;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button--flat')\n    public get flat(): boolean {\n        return this._type === IgxBaseButtonType.Flat;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button--contained')\n    public get contained(): boolean {\n        return this._type === IgxBaseButtonType.Contained;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-icon-button--outlined')\n    public get outlined(): boolean {\n        return this._type === IgxBaseButtonType.Outlined;\n    }\n}\n","import { Directive, HostBinding, Input, booleanAttribute } from '@angular/core';\n\n@Directive({\n    selector: '[igxLayout]',\n    standalone: true\n})\nexport class IgxLayoutDirective {\n    /**\n     * Sets the default flow direction of the container's children.\n     *\n     * Defaults to `rows`.\n     *\n     * ```html\n     *  <div\n     *   igxLayout\n     *   igxLayoutDir=\"row\">\n     *    <div igxFlex>1</div>\n     *    <div igxFlex>2</div>\n     *    <div igxFlex>3</div>\n     *  </div>\n     * ```\n     */\n    @Input('igxLayoutDir') public dir = 'row';\n\n    /**\n     * Defines the direction flex children are placed in the flex container.\n     *\n     * When set to `true`, the `rows` direction goes right to left and `columns` goes bottom to top.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutReverse=\"true\">\n     *    <div igxFlex>1</div>\n     *    <div igxFlex>2</div>\n     *    <div igxFlex>3</div>\n     * </div>\n     * ```\n     */\n    @Input({ alias: 'igxLayoutReverse', transform: booleanAttribute }) public reverse = false;\n\n    /**\n     * By default the immediate children will all try to fit onto one line.\n     *\n     * The default value `nowrap` sets this behavior.\n     *\n     * Other accepted values are `wrap` and `wrap-reverse`.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutDir=\"row\"\n     *   igxLayoutWrap=\"wrap\">\n     *    <div igxFlex igxFlexGrow=\"0\">1</div>\n     *    <div igxFlex igxFlexGrow=\"0\">2</div>\n     *    <div igxFlex igxFlexGrow=\"0\">3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxLayoutWrap') public wrap = 'nowrap';\n\n    /**\n     * Defines the alignment along the main axis.\n     *\n     * Defaults to `flex-start` which packs the children toward the start line.\n     *\n     * Other possible values are `flex-end`, `center`, `space-between`, `space-around`.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutDir=\"column\"\n     *   igxLayoutJustify=\"space-between\">\n     *    <div>1</div>\n     *    <div>2</div>\n     *    <div>3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxLayoutJustify') public justify = 'flex-start';\n\n    /**\n     * Defines the default behavior for how children are laid out along the corss axis of the current line.\n     *\n     * Defaults to `flex-start`.\n     *\n     * Other possible values are `flex-end`, `center`, `baseline`, and `stretch`.\n     *\n     * ```html\n     * <div\n     *   igxLayout\n     *   igxLayoutDir=\"column\"\n     *   igxLayoutItemAlign=\"start\">\n     *    <div igxFlex igxFlexGrow=\"0\">1</div>\n     *    <div igxFlex igxFlexGrow=\"0\">2</div>\n     *    <div igxFlex igxFlexGrow=\"0\">3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxLayoutItemAlign') public itemAlign = 'stretch';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.display') public display = 'flex';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.flex-wrap')\n    public get flexwrap() {\n        return this.wrap;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.justify-content')\n    public get justifycontent() {\n        return this.justify;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.align-items')\n    public get align() {\n        return this.itemAlign;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.flex-direction')\n    public get direction() {\n        if (this.reverse) {\n            return (this.dir === 'row') ? 'row-reverse' : 'column-reverse';\n        }\n        return (this.dir === 'row') ? 'row' : 'column';\n    }\n}\n\n@Directive({\n    selector: '[igxFlex]',\n    standalone: true\n})\nexport class IgxFlexDirective {\n\n    /**\n     * Applies the `grow` attribute to an element that uses the directive.\n     *\n     * Default value is `1`.\n     *\n     * ```html\n     * <div>\n     *    <div igxFlex igxFlexGrow=\"0\">Content1</div>\n     *    <div igxFlex igxFlexGrow=\"1\">Content2</div>\n     *    <div igxFlex igxFlexGrow=\"0\">Content3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxFlexGrow') public grow = 1;\n\n    /**\n     * Applies the `shrink` attribute to an element that uses the directive.\n     *\n     * Default value is `1`.\n     *\n     * ```html\n     * <div>\n     *    <div igxFlex igxFlexShrink=\"1\">Content1</div>\n     *    <div igxFlex igxFlexShrink=\"0\">Content2</div>\n     *    <div igxFlex igxFlexShrink=\"1\">Content3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxFlexShrink') public shrink = 1;\n\n    /**\n     * Applies the directive to an element.\n     *\n     * Possible values include `igxFlexGrow`, `igxFlexShrink`, `igxFlexOrder`, `igxFlexBasis`.\n     *\n     * ```html\n     * <div igxFlex>Content</div>\n     * ```\n     */\n    @Input('igxFlex') public flex = '';\n\n    /**\n     * Applies the `order` attribute to an element that uses the directive.\n     *\n     * Default value is `0`.\n     *\n     * ```html\n     * <div>\n     *    <div igxFlex igxFlexOrder=\"1\">Content1</div>\n     *    <div igxFlex igxFlexOrder=\"0\">Content2</div>\n     *    <div igxFlex igxFlexOrder=\"2\">Content3</div>\n     * </div>\n     * ```\n     */\n    @Input('igxFlexOrder') public order = 0;\n\n    /**\n     * Applies the `flex-basis` attribute to an element that uses the directive.\n     *\n     * Default value is `auto`.\n     *\n     * Other possible values include `content`, `max-content`, `min-content`, `fit-content`.\n     *\n     * ```html\n     * <div igxFlex igxFlexBasis=\"fit-content\">Content</div>\n     * ```\n     */\n    @Input('igxFlexBasis') public basis = 'auto';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.flex')\n    public get style() {\n        if (this.flex) {\n            return `${this.flex}`;\n        }\n        return `${this.grow} ${this.shrink} ${this.basis}`;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.order')\n    public get itemorder() {\n        return this.order || 0;\n    }\n}\n","import { Injectable } from '@angular/core';\n\n\nconst FLAGS = new Set('aACL09#&?');\nconst REGEX = new Map([\n    ['C', /(?!^$)/u], // Non-empty\n    ['&', /[^\\p{Separator}]/u], // Non-whitespace\n    ['a', /[\\p{Letter}\\d\\p{Separator}]/u], // Alphanumeric & whitespace\n    ['A', /[\\p{Letter}\\d]/u], // Alphanumeric\n    ['?', /[\\p{Letter}\\p{Separator}]/u], // Alpha & whitespace\n    ['L', /\\p{Letter}/u], // Alpha\n    ['0', /\\d/], // Numeric\n    ['9', /[\\d\\p{Separator}]/u], // Numeric & whitespace\n    ['#', /[\\d\\-+]/], // Numeric and sign\n]);\n\n/** @hidden */\nexport interface MaskOptions {\n    format: string;\n    promptChar: string;\n}\n\n/** @hidden */\nexport interface Replaced {\n    value: string;\n    end: number;\n}\n\ninterface ParsedMask {\n    literals: Map<number, string>,\n    mask: string\n}\n\nconst replaceCharAt = (string: string, idx: number, char: string) =>\n    `${string.substring(0, idx)}${char}${string.substring(idx + 1)}`;\n\n\nexport function parseMask(format: string): ParsedMask {\n    const literals = new Map<number, string>();\n    let mask = format;\n\n    for (let i = 0, j = 0; i < format.length; i++, j++) {\n        const [current, next] = [format.charAt(i), format.charAt(i + 1)];\n\n        if (current === '\\\\' && FLAGS.has(next)) {\n            mask = replaceCharAt(mask, j, '');\n            literals.set(j, next);\n            i++;\n        } else {\n            if (!FLAGS.has(current)) {\n                literals.set(j, current);\n            }\n        }\n    }\n\n    return { literals, mask };\n}\n\n/** @hidden */\n@Injectable({\n    providedIn: 'root'\n})\nexport class MaskParsingService {\n\n    public applyMask(inputVal: string, maskOptions: MaskOptions, pos = 0): string {\n        let outputVal = '';\n        let value = '';\n        const { literals, mask } = parseMask(maskOptions.format);\n        const literalKeys: number[] = Array.from(literals.keys());\n        const nonLiteralIndices: number[] = this.getNonLiteralIndices(mask, literalKeys);\n        const literalValues: string[] = Array.from(literals.values());\n\n        if (inputVal != null) {\n            value = inputVal.toString();\n        }\n\n        for (const _maskSym of mask) {\n            outputVal += maskOptions.promptChar;\n        }\n\n        literals.forEach((val: string, key: number) => {\n            outputVal = replaceCharAt(outputVal, key, val);\n        });\n\n        if (!value) {\n            return outputVal;\n        }\n\n        const nonLiteralValues: string[] = this.getNonLiteralValues(value, literalValues);\n\n        for (let i = 0; i < nonLiteralValues.length; i++) {\n            const char = nonLiteralValues[i];\n            const isCharValid = this.validateCharOnPosition(char, nonLiteralIndices[i], mask);\n\n            if (!isCharValid && char !== maskOptions.promptChar) {\n                nonLiteralValues[i] = maskOptions.promptChar;\n            }\n        }\n\n        if (nonLiteralValues.length > nonLiteralIndices.length) {\n            nonLiteralValues.splice(nonLiteralIndices.length);\n        }\n\n        for (const nonLiteralValue of nonLiteralValues) {\n            const char = nonLiteralValue;\n            outputVal = replaceCharAt(outputVal, nonLiteralIndices[pos++], char);\n        }\n\n        return outputVal;\n    }\n\n    public parseValueFromMask(maskedValue: string, maskOptions: MaskOptions): string {\n        let outputVal = '';\n        const literalValues: string[] = Array.from(parseMask(maskOptions.format).literals.values());\n\n        for (const val of maskedValue) {\n            if (literalValues.indexOf(val) === -1) {\n                if (val !== maskOptions.promptChar) {\n                    outputVal += val;\n                }\n            }\n        }\n\n        return outputVal;\n    }\n\n    public replaceInMask(maskedValue: string, value: string, maskOptions: MaskOptions, start: number, end: number): Replaced {\n        const { literals, mask } = parseMask(maskOptions.format);\n        const literalsPositions = Array.from(literals.keys());\n        value = this.replaceIMENumbers(value);\n        const chars = Array.from(value);\n        let cursor = start;\n        end = Math.min(end, maskedValue.length);\n\n        for (let i = start; i < end || (chars.length && i < maskedValue.length); i++) {\n            if (literalsPositions.indexOf(i) !== -1) {\n                if (chars[0] === maskedValue[i] || value.length < 1) {\n                    cursor = i + 1;\n                    chars.shift();\n                }\n                continue;\n            }\n            if (chars[0]\n                && !this.validateCharOnPosition(chars[0], i, mask)\n                && chars[0] !== maskOptions.promptChar) {\n                break;\n            }\n\n            let char = maskOptions.promptChar;\n            if (chars.length) {\n                cursor = i + 1;\n                char = chars.shift();\n            }\n            if (value.length < 1) {\n                // on `delete` the cursor should move forward\n                cursor++;\n            }\n            maskedValue = replaceCharAt(maskedValue, i, char);\n        }\n\n        return { value: maskedValue, end: cursor };\n    }\n\n    /** Validates only non literal positions. */\n    private validateCharOnPosition(inputChar: string, position: number, mask: string): boolean {\n        const regex = REGEX.get(mask.charAt(position));\n        return regex ? regex.test(inputChar) : false;\n    }\n\n    private getNonLiteralIndices(mask: string, literalKeys: number[]): number[] {\n        const nonLiteralsIndices: number[] = [];\n\n        for (let i = 0; i < mask.length; i++) {\n            if (literalKeys.indexOf(i) === -1) {\n                nonLiteralsIndices.push(i);\n            }\n        }\n\n        return nonLiteralsIndices;\n    }\n    private getNonLiteralValues(value: string, literalValues: string[]): string[] {\n        const nonLiteralValues: string[] = [];\n\n        for (const val of value) {\n            if (literalValues.indexOf(val) === -1) {\n                nonLiteralValues.push(val);\n            }\n        }\n\n        return nonLiteralValues;\n    }\n\n    private replaceIMENumbers(value: string): string {\n        return value.replace(/[０１２３４５６７８９]/g, (num) => ({\n            '１': '1', '２': '2', '３': '3', '４': '4', '５': '5',\n            '６': '6', '７': '7', '８': '8', '９': '9', '０': '0'\n        }[num]));\n    }\n}\n","import {\n    Directive, ElementRef, EventEmitter, HostListener,\n    Output, PipeTransform, Renderer2,\n    Input, OnInit, AfterViewChecked, booleanAttribute,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MaskParsingService, MaskOptions, parseMask } from './mask-parsing.service';\nimport { IBaseEventArgs, PlatformUtil } from '../../core/utils';\nimport { noop } from 'rxjs';\n\n@Directive({\n    providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxMaskDirective, multi: true }],\n    selector: '[igxMask]',\n    exportAs: 'igxMask',\n    standalone: true\n})\nexport class IgxMaskDirective implements OnInit, AfterViewChecked, ControlValueAccessor {\n    /**\n     * Sets the input mask.\n     * ```html\n     * <input [igxMask] = \"'00/00/0000'\">\n     * ```\n     */\n    @Input('igxMask')\n    public get mask(): string {\n        return this._mask || this.defaultMask;\n    }\n\n    public set mask(val: string) {\n        // B.P. 9th June 2021 #7490\n        if (val !== this._mask) {\n            const cleanInputValue = this.maskParser.parseValueFromMask(this.inputValue, this.maskOptions);\n            this.setPlaceholder(val);\n            this._mask = val;\n            this.updateInputValue(cleanInputValue);\n        }\n    }\n\n    /**\n     * Sets the character representing a fillable spot in the input mask.\n     * Default value is \"'_'\".\n     * ```html\n     * <input [promptChar] = \"'/'\">\n     * ```\n     */\n    @Input()\n    public promptChar = '_';\n\n    /**\n     * Specifies if the bound value includes the formatting symbols.\n     * ```html\n     * <input [includeLiterals] = \"true\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public includeLiterals: boolean;\n\n    /**\n     * Specifies a pipe to be used on blur.\n     * ```html\n     * <input [displayValuePipe] = \"displayFormatPipe\">\n     * ```\n     */\n    @Input()\n    public displayValuePipe: PipeTransform;\n\n    /**\n     * Specifies a pipe to be used on focus.\n     * ```html\n     * <input [focusedValuePipe] = \"inputFormatPipe\">\n     * ```\n     */\n    @Input()\n    public focusedValuePipe: PipeTransform;\n\n    /**\n     * Emits an event each time the value changes.\n     * Provides `rawValue: string` and `formattedValue: string` as event arguments.\n     * ```html\n     * <input (valueChanged) = \"valueChanged(rawValue: string, formattedValue: string)\">\n     * ```\n     */\n    @Output()\n    public valueChanged = new EventEmitter<IMaskEventArgs>();\n\n    /** @hidden */\n    public get nativeElement(): HTMLInputElement {\n        return this.elementRef.nativeElement;\n    }\n\n    /** @hidden @internal; */\n    protected get inputValue(): string {\n        return this.nativeElement.value;\n    }\n\n    /** @hidden @internal */\n    protected set inputValue(val: string) {\n        this.nativeElement.value = val;\n    }\n\n    /** @hidden */\n    protected get maskOptions(): MaskOptions {\n        const format = this.mask || this.defaultMask;\n        const promptChar = this.promptChar && this.promptChar.substring(0, 1);\n        return { format, promptChar };\n    }\n\n    /** @hidden */\n    protected get selectionStart(): number {\n        // Edge(classic) and FF don't select text on drop\n        return this.nativeElement.selectionStart === this.nativeElement.selectionEnd && this._hasDropAction ?\n            this.nativeElement.selectionEnd - this._droppedData.length :\n            this.nativeElement.selectionStart;\n    }\n\n    /** @hidden */\n    protected get selectionEnd(): number {\n        return this.nativeElement.selectionEnd;\n    }\n\n    /** @hidden */\n    protected get start(): number {\n        return this._start;\n    }\n\n    /** @hidden */\n    protected get end(): number {\n        return this._end;\n    }\n\n    protected _composing: boolean;\n    protected _compositionStartIndex: number;\n    protected _focused = false;\n    private _compositionValue: string;\n    private _end = 0;\n    private _start = 0;\n    private _key: string;\n    private _mask: string;\n    private _oldText = '';\n    private _dataValue = '';\n    private _droppedData: string;\n    private _hasDropAction: boolean;\n\n    private readonly defaultMask = 'CCCCCCCCCC';\n\n    protected _onTouchedCallback: () => void = noop;\n    protected _onChangeCallback: (_: any) => void = noop;\n\n    constructor(\n        protected elementRef: ElementRef<HTMLInputElement>,\n        protected maskParser: MaskParsingService,\n        protected renderer: Renderer2,\n        protected platform: PlatformUtil) { }\n\n    /** @hidden */\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent): void {\n        const key = event.key;\n        if (!key) {\n            return;\n        }\n\n        if ((event.ctrlKey && (key === this.platform.KEYMAP.Z || key === this.platform.KEYMAP.Y))) {\n            event.preventDefault();\n        }\n\n        this._key = key;\n        this._start = this.selectionStart;\n        this._end = this.selectionEnd;\n    }\n\n    /** @hidden @internal */\n    @HostListener('compositionstart')\n    public onCompositionStart(): void {\n        if (!this._composing) {\n            this._compositionStartIndex = this._start;\n            this._composing = true;\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('compositionend')\n    public onCompositionEnd(): void {\n        this._start = this._compositionStartIndex;\n        const end = this.selectionEnd;\n        const valueToParse = this.inputValue.substring(this._start, end);\n        this.updateInput(valueToParse);\n        this._end = this.selectionEnd;\n        this._compositionValue = this.inputValue;\n    }\n\n    /** @hidden @internal */\n    @HostListener('input', ['$event'])\n    public onInputChanged(event): void {\n        /**\n         * '!this._focused' is a fix for #8165\n         * On page load IE triggers input events before focus events and\n         * it does so for every single input on the page.\n         * The mask needs to be prevented from doing anything while this is happening because\n         * the end user will be unable to blur the input.\n         * https://stackoverflow.com/questions/21406138/input-event-triggered-on-internet-explorer-when-placeholder-changed\n         */\n\n        if (this._composing) {\n            if (this.inputValue.length < this._oldText.length) {\n                // software keyboard input delete\n                this._key = this.platform.KEYMAP.BACKSPACE;\n            }\n            return;\n        }\n\n        // After the compositionend event Chromium triggers input events of type 'deleteContentBackward' and\n        // we need to adjust the start and end indexes to include mask literals\n        if (event.inputType === 'deleteContentBackward' && this._key !== this.platform.KEYMAP.BACKSPACE) {\n            const isInputComplete = this._compositionStartIndex === 0 && this._end === this.mask.length;\n            let numberOfMaskLiterals = 0;\n            const literalPos = parseMask(this.maskOptions.format).literals.keys();\n            for (const index of literalPos) {\n                if (index >= this._compositionStartIndex && index <= this._end) {\n                    numberOfMaskLiterals++;\n                }\n            }\n            this.inputValue = isInputComplete ?\n                this.inputValue.substring(0, this.selectionEnd - numberOfMaskLiterals) + this.inputValue.substring(this.selectionEnd)\n                : this._compositionValue?.substring(0, this._compositionStartIndex) || this.inputValue;\n\n            if (this._compositionValue) {\n                this._start = this.selectionStart;\n                this._end = this.selectionEnd;\n                this.nativeElement.selectionStart = isInputComplete ? this._start - numberOfMaskLiterals : this._compositionStartIndex;\n                this.nativeElement.selectionEnd = this._end - numberOfMaskLiterals;\n                this.nativeElement.selectionEnd = this._end;\n                this._start = this.selectionStart;\n                this._end = this.selectionEnd;\n            }\n        }\n\n        if (this._hasDropAction) {\n            this._start = this.selectionStart;\n        }\n\n        let valueToParse = '';\n        switch (this._key) {\n            case this.platform.KEYMAP.DELETE:\n                this._end = this._start === this._end ? ++this._end : this._end;\n                break;\n            case this.platform.KEYMAP.BACKSPACE:\n                this._start = this.selectionStart;\n                break;\n            default:\n                valueToParse = this.inputValue.substring(this._start, this.selectionEnd);\n                break;\n        }\n\n        this.updateInput(valueToParse);\n    }\n\n    /** @hidden */\n    @HostListener('paste')\n    public onPaste(): void {\n        this._oldText = this.inputValue;\n        this._start = this.selectionStart;\n    }\n\n    /** @hidden */\n    @HostListener('focus')\n    public onFocus(): void {\n        if (this.nativeElement.readOnly) {\n            return;\n        }\n        this._focused = true;\n        this.showMask(this.inputValue);\n    }\n\n    /** @hidden */\n    @HostListener('blur', ['$event.target.value'])\n    public onBlur(value: string): void {\n        this._focused = false;\n        this.showDisplayValue(value);\n        this._onTouchedCallback();\n    }\n\n    /** @hidden */\n    @HostListener('dragenter')\n    public onDragEnter(): void {\n        if (!this._focused && !this._dataValue) {\n            this.showMask(this._dataValue);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('dragleave')\n    public onDragLeave(): void {\n        if (!this._focused) {\n            this.showDisplayValue(this.inputValue);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('drop', ['$event'])\n    public onDrop(event: DragEvent): void {\n        this._hasDropAction = true;\n        this._droppedData = event.dataTransfer.getData('text');\n    }\n\n    /** @hidden */\n    public ngOnInit(): void {\n        this.setPlaceholder(this.maskOptions.format);\n    }\n\n    /**\n     * TODO: Remove after date/time picker integration refactor\n     *\n     * @hidden\n     */\n    public ngAfterViewChecked(): void {\n        if (this._composing) {\n            return;\n        }\n        this._oldText = this.inputValue;\n    }\n\n    /** @hidden */\n    public writeValue(value: string): void {\n        if (this.promptChar && this.promptChar.length > 1) {\n            this.maskOptions.promptChar = this.promptChar.substring(0, 1);\n        }\n\n        this.inputValue = value ? this.maskParser.applyMask(value, this.maskOptions) : '';\n        if (this.displayValuePipe) {\n            this.inputValue = this.displayValuePipe.transform(this.inputValue);\n        }\n\n        this._dataValue = this.includeLiterals ? this.inputValue : value;\n\n        this.valueChanged.emit({ rawValue: value, formattedValue: this.inputValue });\n    }\n\n    /** @hidden */\n    public registerOnChange(fn: (_: any) => void): void {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden */\n    public registerOnTouched(fn: () => void): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden */\n    protected showMask(value: string): void {\n        if (this.focusedValuePipe) {\n            // TODO(D.P.): focusedValuePipe should be deprecated or force-checked to match mask format\n            this.inputValue = this.focusedValuePipe.transform(value);\n        } else {\n            this.inputValue = this.maskParser.applyMask(value, this.maskOptions);\n        }\n\n        this._oldText = this.inputValue;\n    }\n\n    /** @hidden */\n    protected setSelectionRange(start: number, end: number = start): void {\n        this.nativeElement.setSelectionRange(start, end);\n    }\n\n    /** @hidden */\n    protected afterInput(): void {\n        this._oldText = this.inputValue;\n        this._hasDropAction = false;\n        this._start = 0;\n        this._end = 0;\n        this._key = null;\n        this._composing = false;\n    }\n\n    /** @hidden */\n    protected setPlaceholder(value: string): void {\n        const placeholder = this.nativeElement.placeholder;\n        if (!placeholder || placeholder === this.mask) {\n            this.renderer.setAttribute(this.nativeElement, 'placeholder', parseMask(value ?? '').mask || this.defaultMask);\n        }\n    }\n\n    private updateInputValue(value: string) {\n        if (this._focused) {\n            this.showMask(value);\n        } else if (!this.displayValuePipe) {\n            this.inputValue = this.inputValue ? this.maskParser.applyMask(value, this.maskOptions) : '';\n        }\n    }\n\n    private updateInput(valueToParse: string) {\n        const replacedData = this.maskParser.replaceInMask(this._oldText, valueToParse, this.maskOptions, this._start, this._end);\n        this.inputValue = replacedData.value;\n        if (this._key === this.platform.KEYMAP.BACKSPACE) {\n            replacedData.end = this._start;\n        }\n\n        this.setSelectionRange(replacedData.end);\n\n        const rawVal = this.maskParser.parseValueFromMask(this.inputValue, this.maskOptions);\n        this._dataValue = this.includeLiterals ? this.inputValue : rawVal;\n        this._onChangeCallback(this._dataValue);\n\n        this.valueChanged.emit({ rawValue: rawVal, formattedValue: this.inputValue });\n        this.afterInput();\n    }\n\n    private showDisplayValue(value: string) {\n        if (this.displayValuePipe) {\n            this.inputValue = this.displayValuePipe.transform(value);\n        } else if (value === this.maskParser.applyMask(null, this.maskOptions)) {\n            this.inputValue = '';\n        }\n    }\n}\n\n/**\n * The IgxMaskModule provides the {@link IgxMaskDirective} inside your application.\n */\nexport interface IMaskEventArgs extends IBaseEventArgs {\n    rawValue: string;\n    formattedValue: string;\n}\n\n","import { Directive, ElementRef, HostListener, Input, NgZone, Renderer2, booleanAttribute } from '@angular/core';\nimport { AnimationBuilder, style, animate } from '@angular/animations';\n\n@Directive({\n    selector: '[igxRipple]',\n    standalone: true\n})\nexport class IgxRippleDirective {\n    /**\n     * Sets/gets the ripple target.\n     * ```html\n     * <div  #rippleContainer class=\"div-1\" igxRipple [igxRippleTarget] = \"'.div-1'\"></div>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let rippleTarget = this.ripple.rippleTarget;\n     * ```\n     * Can set the ripple to activate on a child element inside the parent where igxRipple is defined.\n     * ```html\n     * <div #rippleContainer [igxRippleTarget]=\"'#child\"'>\n     *   <button type=\"button\" igxButton id=\"child\">Click</button>\n     * </div>\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input('igxRippleTarget')\n    public rippleTarget = '';\n    /**\n     * Sets/gets the ripple color.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxButton [igxRipple]=\"'red'\"></button>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let rippleColor = this.ripple.rippleColor;\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input('igxRipple')\n    public rippleColor: string;\n    /**\n     * Sets/gets the ripple duration(in milliseconds).\n     * Default value is `600`.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxButton igxRipple [igxRippleDuration]=\"800\"></button>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let rippleDuration = this.ripple.rippleDuration;\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input('igxRippleDuration')\n    public rippleDuration = 600;\n    /**\n     * Enables/disables the ripple to be centered.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxButton igxRipple [igxRippleCentered]=\"true\"></button>\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input({ alias: 'igxRippleCentered', transform: booleanAttribute })\n    public set centered(value: boolean) {\n        this._centered = value || this.centered;\n    }\n    /**\n     * Sets/gets whether the ripple is disabled.\n     * Default value is `false`.\n     * ```html\n     * <button type=\"button\" #rippleContainer igxRipple [igxRippleDisabled]=\"true\"></button>\n     * ```\n     * ```typescript\n     * @ViewChild('rippleContainer', {read: IgxRippleDirective})\n     * public ripple: IgxRippleDirective;\n     * let isRippleDisabled = this.ripple.rippleDisabled;\n     * ```\n     *\n     * @memberof IgxRippleDirective\n     */\n    @Input({ alias: 'igxRippleDisabled', transform: booleanAttribute })\n    public rippleDisabled = false;\n\n    protected get nativeElement(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    private rippleElementClass = 'igx-ripple__inner';\n    private rippleHostClass = 'igx-ripple';\n    private _centered = false;\n    private animationQueue = [];\n\n    constructor(\n        protected builder: AnimationBuilder,\n        protected elementRef: ElementRef,\n        protected renderer: Renderer2,\n        private zone: NgZone) { }\n    /**\n     * @hidden\n     */\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event) {\n        this.zone.runOutsideAngular(() => this._ripple(event));\n    }\n\n    private setStyles(rippleElement: HTMLElement, styleParams: any) {\n        this.renderer.addClass(rippleElement, this.rippleElementClass);\n        this.renderer.setStyle(rippleElement, 'width', `${styleParams.radius}px`);\n        this.renderer.setStyle(rippleElement, 'height', `${styleParams.radius}px`);\n        this.renderer.setStyle(rippleElement, 'top', `${styleParams.top}px`);\n        this.renderer.setStyle(rippleElement, 'left', `${styleParams.left}px`);\n        if (this.rippleColor) {\n            this.renderer.setStyle(rippleElement, 'background', this.rippleColor);\n        }\n    }\n\n    private _ripple(event) {\n        if (this.rippleDisabled) {\n            return;\n        }\n\n        const target = (this.rippleTarget ? this.nativeElement.querySelector(this.rippleTarget) || this.nativeElement : this.nativeElement);\n\n        const rectBounds = target.getBoundingClientRect();\n        const radius = Math.max(rectBounds.width, rectBounds.height);\n        let left = Math.round(event.clientX - rectBounds.left - radius / 2);\n        let top = Math.round(event.clientY - rectBounds.top - radius / 2);\n\n        if (this._centered) {\n            left = top = 0;\n        }\n\n        const dimensions = {\n            radius,\n            top,\n            left\n        };\n\n        const rippleElement = this.renderer.createElement('span');\n\n        this.setStyles(rippleElement, dimensions);\n        this.renderer.addClass(target, this.rippleHostClass);\n        this.renderer.appendChild(target, rippleElement);\n\n        const animation = this.builder.build([\n            style({ opacity: 0.5, transform: 'scale(.3)' }),\n            animate(this.rippleDuration, style({ opacity: 0, transform: 'scale(2)' }))\n        ]).create(rippleElement);\n\n        this.animationQueue.push(animation);\n\n        animation.onDone(() => {\n            this.animationQueue.splice(this.animationQueue.indexOf(animation), 1);\n            target.removeChild(rippleElement);\n            if (this.animationQueue.length < 1) {\n                this.renderer.removeClass(target, this.rippleHostClass);\n            }\n        });\n\n        animation.play();\n\n    }\n}\n","import {\n    Directive,\n    EventEmitter,\n    HostListener,\n    HostBinding,\n    Input,\n    Output,\n    ViewChild,\n    ElementRef,\n    ChangeDetectorRef,\n    Renderer2,\n    Optional,\n    Self,\n    booleanAttribute,\n    inject,\n    DestroyRef,\n    Inject,\n    AfterViewInit,\n} from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { IBaseEventArgs, getComponentTheme, mkenum } from '../core/utils';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n    IgxTheme,\n    THEME_TOKEN,\n    ThemeToken,\n} from '../services/theme/theme.token';\n\nexport const LabelPosition = /*@__PURE__*/ mkenum({\n    BEFORE: 'before',\n    AFTER: 'after'\n});\nexport type LabelPosition = typeof LabelPosition[keyof typeof LabelPosition];\n\nexport interface IChangeCheckboxEventArgs extends IBaseEventArgs {\n    checked: boolean;\n    value?: any;\n}\n\nlet nextId = 0;\n\n@Directive()\nexport class CheckboxBaseDirective implements AfterViewInit {\n    /**\n     * An event that is emitted after the checkbox state is changed.\n     * Provides references to the `IgxCheckboxComponent` and the `checked` property as event arguments.\n     */\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly change: EventEmitter<IChangeCheckboxEventArgs> =\n        new EventEmitter<IChangeCheckboxEventArgs>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public destroy$ = new Subject<boolean>();\n\n    /**\n     * Returns reference to the native checkbox element.\n     *\n     * @example\n     * ```typescript\n     * let checkboxElement =  this.component.checkboxElement;\n     * ```\n     */\n    @ViewChild('checkbox', { static: true })\n    public nativeInput: ElementRef;\n\n    /**\n     * Returns reference to the native label element.\n     * ```typescript\n     *\n     * @example\n     * let labelElement =  this.component.nativeLabel;\n     * ```\n     */\n    @ViewChild('label', { static: true })\n    public nativeLabel: ElementRef;\n\n    public cssClass: string;\n    public disabled: boolean;\n    public readonly: boolean;\n    public indeterminate: boolean;\n    public focused: boolean;\n    public invalid: boolean;\n\n    @Input({ transform: booleanAttribute })\n    public get checked() {\n        return this._checked;\n    }\n\n    public set checked(value: boolean) {\n        if (this._checked !== value) {\n            this._checked = value;\n            this._onChangeCallback(this._checked);\n        }\n    }\n\n    /**\n     * Returns reference to the `nativeElement` of the igx-checkbox/igx-switch.\n     *\n     * @example\n     * ```typescript\n     * let nativeElement = this.component.nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.nativeInput.nativeElement;\n    }\n\n    /**\n     * Returns reference to the label placeholder element.\n     * ```typescript\n     *\n     * @example\n     * let labelPlaceholder =  this.component.placeholderLabel;\n     * ```\n     */\n    @ViewChild('placeholderLabel', { static: true })\n    public placeholderLabel: ElementRef;\n\n    /**\n     * Sets/gets the `id` of the checkbox component.\n     * If not set, the `id` of the first checkbox component will be `\"igx-checkbox-0\"`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox id=\"my-first-checkbox\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let checkboxId =  this.checkbox.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-checkbox-${nextId++}`;\n\n    /**\n     * Sets/gets the id of the `label` element.\n     * If not set, the id of the `label` in the first checkbox component will be `\"igx-checkbox-0-label\"`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox labelId=\"Label1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let labelId =  this.component.labelId;\n     * ```\n     */\n    @Input() public labelId = `${this.id}-label`;\n\n    /**\n     * Sets/gets the `value` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [value]=\"'CheckboxValue'\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let value =  this.checkbox.value;\n     * ```\n     */\n    @Input() public value: any;\n\n    /**\n     * Sets/gets the `name` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox name=\"Checkbox1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let name =  this.checkbox.name;\n     * ```\n     */\n    @Input() public name: string;\n\n    /**\n     * Sets/gets the value of the `tabindex` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [tabindex]=\"1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let tabIndex =  this.checkbox.tabindex;\n     * ```\n     */\n    @Input() public tabindex: number = null;\n\n    /**\n     *  Sets/gets the position of the `label`.\n     *  If not set, the `labelPosition` will have value `\"after\"`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox labelPosition=\"before\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let labelPosition =  this.checkbox.labelPosition;\n     * ```\n     */\n    @Input()\n    public labelPosition: LabelPosition | string = LabelPosition.AFTER;\n\n    /**\n     * Enables/Disables the ripple effect.\n     * If not set, `disableRipple` will have value `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [disableRipple]=\"true\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isRippleDisabled = this.checkbox.desableRipple;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public disableRipple = false;\n\n    /**\n     * Sets/gets the `aria-labelledby` attribute.\n     * If not set, the `aria-labelledby` will be equal to the value of `labelId` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox aria-labelledby=\"Checkbox1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let ariaLabelledBy = this.checkbox.ariaLabelledBy;\n     * ```\n     */\n    @Input('aria-labelledby')\n    public ariaLabelledBy = this.labelId;\n\n    /**\n     * Sets/gets the value of the `aria-label` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox aria-label=\"Checkbox1\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let ariaLabel = this.checkbox.ariaLabel;\n     * ```\n     */\n    @Input('aria-label')\n    public ariaLabel: string | null = null;\n\n    constructor(\n        protected cdr: ChangeDetectorRef,\n        protected renderer: Renderer2,\n        @Inject(THEME_TOKEN)\n        protected themeToken: ThemeToken,\n        @Optional() @Self() public ngControl: NgControl\n    ) {\n        if (this.ngControl !== null) {\n            this.ngControl.valueAccessor = this;\n        }\n\n        this.theme = this.themeToken.theme;\n\n        const themeChange = this.themeToken.onChange((theme) => {\n            if (this.theme !== theme) {\n                this.theme = theme;\n                this.cdr.detectChanges();\n            }\n        });\n\n        this.destroyRef.onDestroy(() => themeChange.unsubscribe());\n    }\n\n    /**\n     * Sets/gets whether the checkbox is required.\n     * If not set, `required` will have value `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox required></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isRequired = this.checkbox.required;\n     * ```\n     */\n    // @Input({ transform: booleanAttribute })\n    // public get required(): boolean {\n    //     return this._required || this.nativeElement.hasAttribute('required');\n    // }\n    // public set required(value: boolean) {\n    //     this._required = value;\n    // }\n    @Input({ transform: booleanAttribute })\n    public get required(): boolean {\n        return this._required || this.nativeElement.hasAttribute('required');\n    }\n    public set required(value: boolean) {\n        this._required = value;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        if (this.ngControl) {\n            this.ngControl.statusChanges\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(this.updateValidityState.bind(this));\n\n            if (\n                this.ngControl.control.validator ||\n                this.ngControl.control.asyncValidator\n            ) {\n                this._required = this.ngControl?.control?.hasValidator(\n                    Validators.required\n                );\n                this.cdr.detectChanges();\n            }\n        }\n\n        this.setComponentTheme();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public inputId = `${this.id}-input`;\n\n    /**\n     * @hidden\n     */\n    protected _onChangeCallback: (_: any) => void = noop;\n\n    /**\n     * @hidden\n     */\n    private _onTouchedCallback: () => void = noop;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected _checked = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected theme: IgxTheme;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public _required = false;\n    private elRef = inject(ElementRef);\n    protected destroyRef = inject(DestroyRef);\n\n    private setComponentTheme() {\n        if (!this.themeToken.preferToken) {\n            const theme = getComponentTheme(this.elRef.nativeElement);\n\n            if (theme && theme !== this.theme) {\n                this.theme = theme;\n                this.cdr.markForCheck();\n            }\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('keyup', ['$event'])\n    public onKeyUp(event: KeyboardEvent) {\n        event.stopPropagation();\n        this.focused = true;\n    }\n\n    /** @hidden @internal */\n    @HostListener('click', ['$event'])\n    public _onCheckboxClick(event: PointerEvent | MouseEvent) {\n        // Since the original checkbox is hidden and the label\n        // is used for styling and to change the checked state of the checkbox,\n        // we need to prevent the checkbox click event from bubbling up\n        // as it gets triggered on label click\n        // NOTE: The above is no longer valid, as the native checkbox is not labeled\n        // by the SVG anymore.\n        if (this.disabled || this.readonly) {\n            // readonly prevents the component from changing state (see toggle() method).\n            // However, the native checkbox can still be activated through user interaction (focus + space, label click)\n            // Prevent the native change so the input remains in sync\n            event.preventDefault();\n            return;\n        }\n\n        this.nativeElement.focus();\n\n        this.indeterminate = false;\n        this.checked = !this.checked;\n        this.updateValidityState();\n\n        // K.D. March 23, 2021 Emitting on click and not on the setter because otherwise every component\n        // bound on change would have to perform self checks for weather the value has changed because\n        // of the initial set on initialization\n        this.change.emit({\n            checked: this.checked,\n            value: this.value,\n            owner: this,\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get ariaChecked() {\n        if (this.indeterminate) {\n            return 'mixed';\n        } else {\n            return this.checked;\n        }\n    }\n\n    /** @hidden @internal */\n    public _onCheckboxChange(event: Event) {\n        // We have to stop the original checkbox change event\n        // from bubbling up since we emit our own change event\n        event.stopPropagation();\n    }\n\n    /** @hidden @internal */\n    @HostListener('blur')\n    public onBlur() {\n        this.focused = false;\n        this._onTouchedCallback();\n        this.updateValidityState();\n    }\n\n    /** @hidden @internal */\n    public writeValue(value: boolean) {\n        this._checked = value;\n    }\n\n    /** @hidden @internal */\n    public get labelClass(): string {\n        switch (this.labelPosition) {\n            case LabelPosition.BEFORE:\n                return `${this.cssClass}__label--before`;\n            case LabelPosition.AFTER:\n            default:\n                return `${this.cssClass}__label`;\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn: (_: any) => void) {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: () => void) {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean) {\n        this.disabled = isDisabled;\n    }\n\n    /** @hidden @internal */\n    public getEditElement() {\n        return this.nativeInput.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected updateValidityState() {\n        if (this.ngControl) {\n            if (\n                !this.disabled &&\n                !this.readonly &&\n                (this.ngControl.control.touched || this.ngControl.control.dirty)\n            ) {\n                // the control is not disabled and is touched or dirty\n                this.invalid = this.ngControl.invalid;\n            } else {\n                //  if the control is untouched, pristine, or disabled, its state is initial. This is when the user did not interact\n                //  with the checkbox or when the form/control is reset\n                this.invalid = false;\n            }\n        } else {\n            this.checkNativeValidity();\n        }\n    }\n\n    /**\n     * A function to assign a native validity property of a checkbox.\n     * This should be used when there's no ngControl\n     *\n     * @hidden\n     * @internal\n     */\n    private checkNativeValidity() {\n        if (\n            !this.disabled &&\n            this._required &&\n            !this.checked &&\n            !this.readonly\n        ) {\n            this.invalid = true;\n        } else {\n            this.invalid = false;\n        }\n    }\n}\n","import {\n    AfterViewInit,\n    Component,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    booleanAttribute\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { EditorProvider, EDITOR_PROVIDER } from '../core/edit-provider';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { CheckboxBaseDirective } from '../checkbox/checkbox-base.directive';\n\n/**\n * **Ignite UI for Angular Radio Button** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/radio_button.html)\n *\n * The Ignite UI Radio Button allows the user to select a single option from an available set of options that are listed side by side.\n *\n * Example:\n * ```html\n * <igx-radio>\n *   Simple radio button\n * </igx-radio>\n * ```\n */\n@Component({\n    selector: 'igx-radio',\n    providers: [{\n            provide: EDITOR_PROVIDER,\n            useExisting: IgxRadioComponent,\n            multi: true\n        }],\n    templateUrl: 'radio.component.html',\n    imports: [IgxRippleDirective]\n})\nexport class IgxRadioComponent\n    extends CheckboxBaseDirective\n    implements AfterViewInit, ControlValueAccessor, EditorProvider {\n    /** @hidden @internal */\n    public blurRadio = new EventEmitter();\n\n    /**\n     * Returns the class of the radio component.\n     * ```typescript\n     * let radioClass = this.radio.cssClass;\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    @HostBinding('class.igx-radio')\n    public override cssClass = 'igx-radio';\n\n    /**\n     * Sets/gets  the `checked` attribute.\n     * Default value is `false`.\n     * ```html\n     * <igx-radio [checked]=\"true\"></igx-radio>\n     * ```\n     * ```typescript\n     * let isChecked =  this.radio.checked;\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    @HostBinding('class.igx-radio--checked')\n    @Input({ transform: booleanAttribute })\n    public override set checked(value: boolean) {\n        this._checked = value;\n    }\n    public override get checked() {\n        return this._checked;\n    }\n\n    /**\n     * Sets/gets  the `disabled` attribute.\n     * Default value is `false`.\n     * ```html\n     * <igx-radio disabled></igx-radio>\n     * ```\n     * ```typescript\n     * let isDisabled =  this.radio.disabled;\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    @HostBinding('class.igx-radio--disabled')\n    @Input({ transform: booleanAttribute })\n    public override disabled = false;\n\n    /**\n     * Sets/gets whether the radio button is invalid.\n     * Default value is `false`.\n     * ```html\n     * <igx-radio invalid></igx-radio>\n     * ```\n     * ```typescript\n     * let isInvalid =  this.radio.invalid;\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    @HostBinding('class.igx-radio--invalid')\n    @Input({ transform: booleanAttribute })\n    public override invalid = false;\n\n    /**\n     * Sets/gets whether the radio component is on focus.\n     * Default value is `false`.\n     * ```typescript\n     * this.radio.focus = true;\n     * ```\n     * ```typescript\n     * let isFocused =  this.radio.focused;\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    @HostBinding('class.igx-radio--focused')\n    public override focused = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('change', ['$event'])\n    public _changed(event: Event) {\n        if (event instanceof Event) {\n            event.preventDefault();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('click')\n    public override _onCheckboxClick() {\n        this.select();\n    }\n\n    /**\n     * Selects the current radio button.\n     * ```typescript\n     * this.radio.select();\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    public select() {\n        if (!this.checked) {\n            this.checked = true;\n            this.change.emit({\n                value: this.value,\n                owner: this,\n                checked: this.checked,\n            });\n            this._onChangeCallback(this.value);\n        }\n    }\n\n    /**\n     * Deselects the current radio button.\n     * ```typescript\n     * this.radio.deselect();\n     * ```\n     *\n     * @memberof IgxRadioComponent\n     */\n    public deselect() {\n        this.checked = false;\n        this.focused = false;\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * Checks whether the provided value is consistent to the current radio button.\n     * If it is, the checked attribute will have value `true`;\n     * ```typescript\n     * this.radio.writeValue('radioButtonValue');\n     * ```\n     */\n    public override writeValue(value: any) {\n        this.value = this.value ?? value;\n\n        if (value === this.value) {\n            if (!this.checked) {\n                this.checked = true;\n            }\n        } else {\n            this.deselect();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('blur')\n    public override onBlur() {\n        super.onBlur();\n        this.blurRadio.emit();\n    }\n}\n","<input #checkbox class=\"igx-radio__input\" type=\"radio\"\n    [id]=\"inputId\"\n    [name]=\"name\"\n    [value]=\"value\"\n    [tabindex]=\"tabindex\"\n    [disabled]=\"disabled\"\n    [checked]=\"checked\"\n    [required]=\"required\"\n    [attr.aria-required]=\"required\"\n    [attr.aria-invalid]=\"invalid\"\n    [attr.aria-checked]=\"checked\"\n    [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n    [attr.aria-label]=\"ariaLabel\"\n    (blur)=\"onBlur()\" />\n\n<span #label class=\"igx-radio__composite\" igxRipple\n    igxRippleTarget=\".igx-radio__ripple\"\n    [igxRippleDisabled]=\"disableRipple\"\n    [igxRippleCentered]=\"true\"\n    [igxRippleDuration]=\"300\">\n    <div class=\"igx-radio__ripple\"></div>\n</span>\n\n<span #placeholderLabel\n    [id]=\"labelId\"\n    [class]=\"labelClass\">\n    <ng-content></ng-content>\n</span>\n","import { Injectable, Inject, InjectionToken, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @hidden\n */\nexport type Direction = 'ltr' | 'rtl';\n\n/**\n * @hidden\n */\nexport function DIR_DOCUMENT_FACTORY(): Document {\n    return inject(DOCUMENT);\n}\n\n/**\n * Injection token is used to inject the document into Directionality\n * which factory could be faked for testing purposes.\n *\n * We can't provide and mock the DOCUMENT token from platform-browser because configureTestingModule\n * allows override of the default providers, directive, pipes, modules of the test injector\n * which causes errors.\n *\n * @hidden\n */\nexport const DIR_DOCUMENT = /*@__PURE__*/new InjectionToken<Document>('dir-doc', {\n    providedIn: 'root',\n    factory: DIR_DOCUMENT_FACTORY\n});\n\n/**\n * @hidden\n *\n * Bidirectional service that extracts the value of the direction attribute on the body or html elements.\n *\n * The dir attribute over the body element takes precedence.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class IgxDirectionality {\n    private _dir: Direction;\n    private _document: Document;\n\n    public get value(): Direction {\n        return this._dir;\n    }\n\n    public get document() {\n        return this._document;\n    }\n\n    public get rtl() {\n        return this._dir === 'rtl';\n    }\n\n    constructor(@Inject(DIR_DOCUMENT) document) {\n        this._document = document;\n        const bodyDir = this._document.body ? this._document.body.dir : null;\n        const htmlDir = this._document.documentElement ? this._document.documentElement.dir : null;\n        const extractedDir = bodyDir || htmlDir;\n        this._dir = (extractedDir === 'ltr' || extractedDir === 'rtl') ? extractedDir : 'ltr';\n    }\n}\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectorRef,\n    ContentChildren, Directive, DoCheck, EventEmitter, HostBinding, HostListener, Input, OnDestroy, Optional, Output, QueryList, Self, booleanAttribute\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { fromEvent, noop, Subject } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport { mkenum } from '../../core/utils';\nimport { IgxRadioComponent } from '../../radio/radio.component';\nimport { IgxDirectionality } from '../../services/direction/directionality';\nimport { IChangeCheckboxEventArgs } from '../../checkbox/public_api';\n\n/**\n * Determines the Radio Group alignment\n */\nexport const RadioGroupAlignment = mkenum({\n    horizontal: 'horizontal',\n    vertical: 'vertical'\n});\nexport type RadioGroupAlignment = typeof RadioGroupAlignment[keyof typeof RadioGroupAlignment];\n\nlet nextId = 0;\n\n/**\n * Radio group directive renders set of radio buttons.\n *\n * @igxModule IgxRadioModule\n *\n * @igxTheme igx-radio-theme\n *\n * @igxKeywords radiogroup, radio, button, input\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Radio Group allows the user to select a single option from an available set of options that are listed side by side.\n *\n * @example:\n * ```html\n * <igx-radio-group name=\"radioGroup\">\n *   <igx-radio *ngFor=\"let item of ['Foo', 'Bar', 'Baz']\" value=\"{{item}}\">\n *      {{item}}\n *   </igx-radio>\n * </igx-radio-group>\n * ```\n */\n@Directive({\n    exportAs: 'igxRadioGroup',\n    selector: 'igx-radio-group, [igxRadioGroup]',\n    standalone: true\n})\nexport class IgxRadioGroupDirective implements AfterContentInit, AfterViewInit, ControlValueAccessor, OnDestroy, DoCheck {\n    /**\n     * Returns reference to the child radio buttons.\n     *\n     * @example\n     * ```typescript\n     * let radioButtons =  this.radioGroup.radioButtons;\n     * ```\n     */\n    @ContentChildren(IgxRadioComponent, { descendants: true }) public radioButtons: QueryList<IgxRadioComponent>;\n\n    /**\n     * Sets/gets the `value` attribute.\n     *\n     * @example\n     * ```html\n     * <igx-radio-group [value] = \"'radioButtonValue'\"></igx-radio-group>\n     * ```\n     */\n    @Input()\n    public get value(): any {\n        return this._value;\n    }\n    public set value(newValue: any) {\n        if (this._value !== newValue) {\n            this._value = newValue;\n            this._selectRadioButton();\n        }\n    }\n\n    /**\n     * Sets/gets the `name` attribute of the radio group component. All child radio buttons inherits this name.\n     *\n     * @example\n     * ```html\n     * <igx-radio-group name = \"Radio1\"></igx-radio-group>\n     *  ```\n     */\n    @Input()\n    public get name(): string {\n        return this._name;\n    }\n    public set name(newValue: string) {\n        if (this._name !== newValue) {\n            this._name = newValue;\n            this._setRadioButtonNames();\n        }\n    }\n\n    /**\n     * Sets/gets whether the radio group is required.\n     *\n     * @remarks\n     * If not set, `required` will have value `false`.\n     *\n     * @example\n     * ```html\n     * <igx-radio-group [required] = \"true\"></igx-radio-group>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get required(): boolean {\n        return this._required;\n    }\n    public set required(value: boolean) {\n        this._required = value;\n        this._setRadioButtonsRequired();\n    }\n\n    /**\n     * Sets/gets the selected child radio button.\n     *\n     * @example\n     * ```typescript\n     * let selectedButton = this.radioGroup.selected;\n     * this.radioGroup.selected = selectedButton;\n     * ```\n     */\n    @Input()\n    public get selected() {\n        return this._selected;\n    }\n    public set selected(selected: IgxRadioComponent | null) {\n        if (this._selected !== selected) {\n            this._selected = selected;\n            this.value = selected ? selected.value : null;\n        }\n    }\n\n    /**\n     * Sets/gets whether the radio group is invalid.\n     *\n     * @remarks\n     * If not set, `invalid` will have value `false`.\n     *\n     * @example\n     * ```html\n     * <igx-radio-group [invalid] = \"true\"></igx-radio-group>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get invalid(): boolean {\n        return this._invalid;\n    }\n    public set invalid(value: boolean) {\n        this._invalid = value;\n        this._setRadioButtonsInvalid();\n    }\n\n    /**\n     * An event that is emitted after the radio group `value` is changed.\n     *\n     * @remarks\n     * Provides references to the selected `IgxRadioComponent` and the `value` property as event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-radio-group (change)=\"handler($event)\"></igx-radio-group>\n     * ```\n     */\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly change: EventEmitter<IChangeCheckboxEventArgs> = new EventEmitter<IChangeCheckboxEventArgs>();\n\n    /**\n     * The css class applied to the component.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-radio-group')\n    public cssClass = 'igx-radio-group';\n\n    /**\n     * Sets vertical alignment to the radio group, if `alignment` is set to `vertical`.\n     * By default the alignment is horizontal.\n     *\n     * @example\n     * ```html\n     * <igx-radio-group alignment=\"vertical\"></igx-radio-group>\n     * ```\n     */\n    @HostBinding('class.igx-radio-group--vertical')\n    private vertical = false;\n\n    @HostListener('click', ['$event'])\n    protected handleClick(event: MouseEvent) {\n        event.stopPropagation();\n\n        if (this.selected) {\n            this.selected.nativeElement.focus();\n        }\n    }\n\n    @HostListener('keydown', ['$event'])\n    protected handleKeyDown(event: KeyboardEvent) {\n        const { key } = event;\n        const buttons = this.radioButtons.filter(radio => !radio.disabled);\n        const checked = buttons.find((radio) => radio.checked);\n\n        if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n            let index = checked ? buttons.indexOf(checked) : -1;\n            const ltr = this._directionality.value === 'ltr';\n\n            switch (key) {\n                case 'ArrowUp':\n                    index += -1;\n                    break;\n                case 'ArrowLeft':\n                    index += ltr ? -1 : 1;\n                    break;\n                case 'ArrowRight':\n                    index += ltr ? 1 : -1;\n                    break;\n                default:\n                    index += 1;\n            }\n\n            if (index < 0) index = buttons.length - 1;\n            if (index > buttons.length - 1) index = 0;\n\n            buttons.forEach((radio) => {\n                radio.deselect();\n                radio.nativeElement.blur();\n            });\n\n            buttons[index].focused = true;\n            buttons[index].nativeElement.focus();\n            buttons[index].select();\n            event.preventDefault();\n        }\n\n        if (event.key === \"Tab\") {\n            buttons.forEach((radio) => {\n                if (radio !== checked) {\n                    event.stopPropagation();\n                }\n            });\n        }\n    }\n\n    /**\n     * Returns the alignment of the `igx-radio-group`.\n     * ```typescript\n     * @ViewChild(\"MyRadioGroup\")\n     * public radioGroup: IgxRadioGroupDirective;\n     * ngAfterViewInit(){\n     *    let radioAlignment = this.radioGroup.alignment;\n     * }\n     * ```\n     */\n    @Input()\n    public get alignment(): RadioGroupAlignment {\n        return this.vertical ? RadioGroupAlignment.vertical : RadioGroupAlignment.horizontal;\n    }\n    /**\n     * Allows you to set the radio group alignment.\n     * Available options are `RadioGroupAlignment.horizontal` (default) and `RadioGroupAlignment.vertical`.\n     * ```typescript\n     * public alignment = RadioGroupAlignment.vertical;\n     * //..\n     * ```\n     * ```html\n     * <igx-radio-group [alignment]=\"alignment\"></igx-radio-group>\n     * ```\n     */\n    public set alignment(value: RadioGroupAlignment) {\n        this.vertical = value === RadioGroupAlignment.vertical;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _onChangeCallback: (_: any) => void = noop;\n    /**\n     * @hidden\n     * @internal\n     */\n    private _name = `igx-radio-group-${nextId++}`;\n    /**\n     * @hidden\n     * @internal\n     */\n    private _value: any = null;\n    /**\n     * @hidden\n     * @internal\n     */\n    private _selected: IgxRadioComponent | null = null;\n    /**\n     * @hidden\n     * @internal\n     */\n    private _isInitialized = false;\n    /**\n     * @hidden\n     * @internal\n     */\n    private _required = false;\n    /**\n     * @hidden\n     * @internal\n     */\n    private _invalid = false;\n    /**\n     * @hidden\n     * @internal\n     */\n    private destroy$ = new Subject<boolean>();\n    /**\n     * @hidden\n     * @internal\n     */\n    private queryChange$ = new Subject<void>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterContentInit() {\n        // The initial value can possibly be set by NgModel and it is possible that\n        // the OnInit of the NgModel occurs after the OnInit of this class.\n        this._isInitialized = true;\n\n        this.radioButtons.changes.pipe(startWith(0), takeUntil(this.destroy$)).subscribe(() => {\n            this.queryChange$.next();\n            setTimeout(() => this._initRadioButtons());\n        });\n\n\n        if (this.ngControl) {\n            this.radioButtons.forEach((button) => {\n                if (this.ngControl.disabled) {\n                    button.disabled = this.ngControl.disabled;\n                }\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n    */\n    public ngAfterViewInit() {\n        if (this.ngControl) {\n            this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\n                this.invalid = false;\n            });\n\n            if (this.ngControl.control.validator || this.ngControl.control.asyncValidator) {\n                this._required = this.ngControl?.control?.hasValidator(Validators.required);\n            }\n        }\n\n        if (this.radioButtons) {\n            this.radioButtons.forEach((button) => {\n                button.blurRadio\n                    .pipe(takeUntil(this.destroy$))\n                    .subscribe(() => {\n                        this.updateValidityOnBlur()\n                    });\n\n                fromEvent(button.nativeElement, 'keyup')\n                    .pipe(takeUntil(this.destroy$))\n                    .subscribe((event: KeyboardEvent) => {\n                        this.updateOnKeyUp(event)\n                    });\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private updateValidityOnBlur() {\n        this.radioButtons.forEach((button) => {\n            button.focused = false;\n\n            if (button.invalid) {\n                this.invalid = true;\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private updateOnKeyUp(event: KeyboardEvent) {\n        const checked = this.radioButtons.find(x => x.checked);\n\n        if (event.key === \"Tab\") {\n            this.radioButtons.forEach((radio) => {\n                if (radio === checked) {\n                    checked.focused = true;\n                }\n            });\n        }\n    }\n\n    public ngDoCheck(): void {\n        this._updateTabIndex();\n    }\n\n    private _updateTabIndex() {\n        // Needed so that the keyboard navigation of a radio group\n        // placed inside a dialog works properly\n        if (this.radioButtons) {\n            const checked = this.radioButtons.find(x => x.checked);\n\n            if (checked) {\n                this.radioButtons.forEach((button) => {\n                    checked.nativeElement.tabIndex = 0;\n\n                    if (button !== checked) {\n                        button.nativeElement.tabIndex = -1;\n                        button.focused = false;\n                    }\n                });\n            }\n        }\n    }\n\n    /**\n     * Sets the \"checked\" property value on the radio input element.\n     *\n     * @remarks\n     * Checks whether the provided value is consistent to the current radio button.\n     * If it is, the checked attribute will have value `true` and selected property will contain the selected `IgxRadioComponent`.\n     *\n     * @example\n     * ```typescript\n     * this.radioGroup.writeValue('radioButtonValue');\n     * ```\n     */\n    public writeValue(value: any) {\n        this.value = value;\n    }\n\n    /**\n     * Registers a function called when the control value changes.\n     *\n     * @hidden\n     * @internal\n     */\n    public registerOnChange(fn: (_: any) => void) {\n        this._onChangeCallback = fn;\n    }\n\n    /**\n     * Registers a function called when the control is touched.\n     *\n     * @hidden\n     * @internal\n     */\n    public registerOnTouched(fn: () => void) {\n        if (this.radioButtons) {\n            this.radioButtons.forEach((button) => {\n                button.registerOnTouched(fn);\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    constructor(\n        @Optional() @Self() public ngControl: NgControl,\n        private _directionality: IgxDirectionality,\n        private cdr: ChangeDetectorRef,\n    ) {\n        if (this.ngControl !== null) {\n            this.ngControl.valueAccessor = this;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _initRadioButtons() {\n        if (this.radioButtons) {\n            const props = { name: this._name, required: this._required };\n            this.radioButtons.forEach((button) => {\n                Object.assign(button, props);\n\n                if (button.value === this._value) {\n                    button.checked = true;\n                    this._selected = button;\n                    this.cdr.markForCheck();\n                }\n\n                button.change.pipe(\n                    takeUntil(button.destroy$),\n                    takeUntil(this.destroy$),\n                    takeUntil(this.queryChange$)\n                ).subscribe((ev) => this._selectedRadioButtonChanged(ev));\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _selectedRadioButtonChanged(args: IChangeCheckboxEventArgs) {\n        this.radioButtons.forEach((button) => {\n            button.checked = button.id === args.owner.id;\n            if (button.checked && button.ngControl) {\n                this.invalid = button.ngControl.invalid;\n            } else if (button.checked) {\n                this.invalid = false;\n            }\n        });\n\n        this._selected = args.owner;\n        this._value = args.value;\n\n        if (this._isInitialized) {\n            this.change.emit(args);\n            this._onChangeCallback(this.value);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _setRadioButtonNames() {\n        if (this.radioButtons) {\n            this.radioButtons.forEach((button) => {\n                button.name = this._name;\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _selectRadioButton() {\n        if (this.radioButtons) {\n            this.radioButtons.forEach((button) => {\n                if (this._value === null) {\n                    // no value - uncheck all radio buttons\n                    if (button.checked) {\n                        button.checked = false;\n                    }\n                } else {\n                    if (this._value === button.value) {\n                        // selected button\n                        if (this._selected !== button) {\n                            this._selected = button;\n                        }\n\n                        if (!button.checked) {\n                            button.checked = true;\n                        }\n                    } else {\n                        // non-selected button\n                        if (button.checked) {\n                            button.checked = false;\n                        }\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _setRadioButtonsRequired() {\n        if (this.radioButtons) {\n            this.radioButtons.forEach((button) => {\n                button.required = this._required;\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _setRadioButtonsInvalid() {\n        if (this.radioButtons) {\n            this.radioButtons.forEach((button) => {\n                button.invalid = this._invalid;\n            });\n        }\n    }\n}\n","import { IgxRadioComponent } from '../../radio/radio.component';\nimport { IgxRadioGroupDirective } from './radio-group.directive';\n\nexport * from './radio-group.directive';\n\n/* NOTE: Radio Group directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_RADIO_GROUP_DIRECTIVES = [\n    IgxRadioGroupDirective,\n    IgxRadioComponent\n] as const;\n","import { Directive, HostBinding, Input } from '@angular/core';\n\n@Directive({\n    selector: '[igSize]',\n})\nexport class IgSizeDirective {\n    private _size: string;\n\n    @Input()\n    @HostBinding('style.--ig-size')\n    public get igSize(): string {\n        return this._size;\n    }\n\n    public set igSize(value: 'small' | 'medium' | 'large') {\n        this._size = `var(--ig-size-${value})`;\n    }\n}\n","import {\n    AfterViewInit,\n    Directive,\n    ElementRef,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Renderer2,\n    SimpleChanges,\n    AfterViewChecked,\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { compareMaps } from '../../core/utils';\nimport { IgxTextHighlightService } from './text-highlight.service';\n\nexport interface IBaseSearchInfo {\n    searchText: string;\n    caseSensitive: boolean;\n    exactMatch: boolean;\n    matchCount: number;\n    content: string;\n}\n\n/**\n * An interface describing information for the active highlight.\n */\nexport interface IActiveHighlightInfo {\n    /**\n     * The row of the highlight.\n     */\n    row?: any;\n    /**\n     * The column of the highlight.\n     */\n    column?: any;\n    /**\n     * The index of the highlight.\n     */\n    index: number;\n    /**\n     * Additional, custom checks to perform prior an element highlighting.\n     */\n    metadata?: Map<string, any>;\n}\n\n@Directive({\n    selector: '[igxTextHighlight]',\n    standalone: true\n})\nexport class IgxTextHighlightDirective implements AfterViewInit, AfterViewChecked, OnDestroy, OnChanges {\n    /**\n     * Determines the `CSS` class of the highlight elements.\n     * This allows the developer to provide custom `CSS` to customize the highlight.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [cssClass]=\"myClass\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public cssClass: string;\n\n    /**\n     * Determines the `CSS` class of the active highlight element.\n     * This allows the developer to provide custom `CSS` to customize the highlight.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [activeCssClass]=\"activeHighlightClass\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public activeCssClass: string;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public containerClass: string;\n\n    /**\n     * Identifies the highlight within a unique group.\n     * This allows it to have several different highlight groups,\n     * with each of them having their own active highlight.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [groupName]=\"myGroupName\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public groupName = '';\n\n    /**\n     * The underlying value of the element that will be highlighted.\n     *\n     * ```typescript\n     * // get\n     * const elementValue = this.textHighlight.value;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <div\n     *   igxTextHighlight\n     *   [value]=\"newValue\">\n     * </div>\n     * ```\n     */\n    @Input('value')\n    public get value(): any {\n        return this._value;\n    }\n    public set value(value: any) {\n        if (value === undefined || value === null) {\n            this._value = '';\n        } else {\n            this._value = value;\n        }\n    }\n\n    /**\n     * The identifier of the row on which the directive is currently on.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [row]=\"0\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public row: any;\n\n    /**\n     * The identifier of the column on which the directive is currently on.\n     *\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [column]=\"0\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public column: any;\n\n    /**\n     * A map that contains all additional conditions, that you need to activate a highlighted\n     * element. To activate the condition, you will have to add a new metadata key to\n     * the `metadata` property of the IActiveHighlightInfo interface.\n     *\n     * @example\n     * ```typescript\n     *  // Set a property, which would disable the highlight for a given element on a certain condition\n     *  const metadata = new Map<string, any>();\n     *  metadata.set('highlightElement', false);\n     * ```\n     * ```html\n     * <div\n     *   igxTextHighlight\n     *   [metadata]=\"metadata\">\n     * </div>\n     * ```\n     */\n    @Input()\n    public metadata: Map<string, any>;\n\n    /**\n     * @hidden\n     */\n    public get lastSearchInfo(): IBaseSearchInfo {\n        return this._lastSearchInfo;\n    }\n\n    /**\n     * @hidden\n     */\n    public parentElement: any;\n\n    private _container: any;\n\n    private destroy$ = new Subject<boolean>();\n    private _value = '';\n    private _lastSearchInfo: IBaseSearchInfo;\n    private _div = null;\n    private _observer: MutationObserver = null;\n    private _nodeWasRemoved = false;\n    private _forceEvaluation = false;\n    private _activeElementIndex = -1;\n    private _valueChanged: boolean;\n    private _defaultCssClass = 'igx-highlight';\n    private _defaultActiveCssClass = 'igx-highlight--active';\n\n    constructor(private element: ElementRef, private service: IgxTextHighlightService, private renderer: Renderer2) {\n        this.service.onActiveElementChanged.pipe(takeUntil(this.destroy$)).subscribe((groupName) => {\n            if (this.groupName === groupName) {\n                if (this._activeElementIndex !== -1) {\n                    this.deactivate();\n                }\n                this.activateIfNecessary();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.clearHighlight();\n\n        if (this._observer !== null) {\n            this._observer.disconnect();\n        }\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.value && !changes.value.firstChange) {\n            this._valueChanged = true;\n        } else if ((changes.row !== undefined && !changes.row.firstChange) ||\n            (changes.column !== undefined && !changes.column.firstChange) ||\n            (changes.page !== undefined && !changes.page.firstChange)) {\n            if (this._activeElementIndex !== -1) {\n                this.deactivate();\n            }\n            this.activateIfNecessary();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        this.parentElement = this.renderer.parentNode(this.element.nativeElement);\n\n        if (this.service.highlightGroupsMap.has(this.groupName) === false) {\n            this.service.highlightGroupsMap.set(this.groupName, {\n                index: -1\n            });\n        }\n\n        this._lastSearchInfo = {\n            searchText: '',\n            content: this.value,\n            matchCount: 0,\n            caseSensitive: false,\n            exactMatch: false\n        };\n\n        this._container = this.parentElement.firstElementChild;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewChecked() {\n        if (this._valueChanged) {\n            this.highlight(this._lastSearchInfo.searchText, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch);\n            this.activateIfNecessary();\n            this._valueChanged = false;\n        }\n    }\n\n    /**\n     * Clears the existing highlight and highlights the searched text.\n     * Returns how many times the element contains the searched text.\n     */\n    public highlight(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        const caseSensitiveResolved = caseSensitive ? true : false;\n        const exactMatchResolved = exactMatch ? true : false;\n\n        if (this.searchNeedsEvaluation(text, caseSensitiveResolved, exactMatchResolved)) {\n            this._lastSearchInfo.searchText = text;\n            this._lastSearchInfo.caseSensitive = caseSensitiveResolved;\n            this._lastSearchInfo.exactMatch = exactMatchResolved;\n            this._lastSearchInfo.content = this.value;\n\n            if (text === '' || text === undefined || text === null) {\n                this.clearHighlight();\n            } else {\n                this.clearChildElements(true);\n                this._lastSearchInfo.matchCount = this.getHighlightedText(text, caseSensitive, exactMatch);\n            }\n        } else if (this._nodeWasRemoved) {\n            this._lastSearchInfo.searchText = text;\n            this._lastSearchInfo.caseSensitive = caseSensitiveResolved;\n            this._lastSearchInfo.exactMatch = exactMatchResolved;\n        }\n\n        return this._lastSearchInfo.matchCount;\n    }\n\n    /**\n     * Clears any existing highlight.\n     */\n    public clearHighlight(): void {\n        this.clearChildElements(false);\n\n        this._lastSearchInfo.searchText = '';\n        this._lastSearchInfo.matchCount = 0;\n    }\n\n    /**\n     * Activates the highlight if it is on the currently active row and column.\n     */\n    public activateIfNecessary(): void {\n        const group = this.service.highlightGroupsMap.get(this.groupName);\n\n        if (group.index >= 0 && group.column === this.column && group.row === this.row && compareMaps(this.metadata, group.metadata)) {\n            this.activate(group.index);\n        }\n    }\n\n    /**\n     * Attaches a MutationObserver to the parentElement and watches for when the container element is removed/readded to the DOM.\n     * Should be used only when necessary as using many observers may lead to performance degradation.\n     */\n    public observe(): void {\n        if (this._observer === null) {\n            const callback = (mutationList) => {\n                mutationList.forEach((mutation) => {\n                    const removedNodes = Array.from(mutation.removedNodes);\n                    removedNodes.forEach((n) => {\n                        if (n === this._container) {\n                            this._nodeWasRemoved = true;\n                            this.clearChildElements(false);\n                        }\n                    });\n\n                    const addedNodes = Array.from(mutation.addedNodes);\n                    addedNodes.forEach((n) => {\n                        if (n === this.parentElement.firstElementChild && this._nodeWasRemoved) {\n                            this._container = this.parentElement.firstElementChild;\n                            this._nodeWasRemoved = false;\n\n                            this._forceEvaluation = true;\n                            this.highlight(this._lastSearchInfo.searchText,\n                                this._lastSearchInfo.caseSensitive,\n                                this._lastSearchInfo.exactMatch);\n                            this._forceEvaluation = false;\n\n                            this.activateIfNecessary();\n                            this._observer.disconnect();\n                            this._observer = null;\n                        }\n                    });\n                });\n            };\n\n            this._observer = new MutationObserver(callback);\n            this._observer.observe(this.parentElement, {childList: true});\n        }\n    }\n\n    private activate(index: number) {\n        this.deactivate();\n\n        if (this._div !== null) {\n            const spans = this._div.querySelectorAll('span');\n            this._activeElementIndex = index;\n\n            if (spans.length <= index) {\n                return;\n            }\n\n            const elementToActivate = spans[index];\n            this.renderer.addClass(elementToActivate, this._defaultActiveCssClass);\n            this.renderer.addClass(elementToActivate, this.activeCssClass);\n        }\n    }\n\n    private deactivate() {\n        if (this._activeElementIndex === -1) {\n            return;\n        }\n\n        const spans = this._div.querySelectorAll('span');\n\n        if (spans.length <= this._activeElementIndex) {\n            this._activeElementIndex = -1;\n            return;\n        }\n\n        const elementToDeactivate = spans[this._activeElementIndex];\n        this.renderer.removeClass(elementToDeactivate, this._defaultActiveCssClass);\n        this.renderer.removeClass(elementToDeactivate, this.activeCssClass);\n        this._activeElementIndex = -1;\n    }\n\n    private clearChildElements(originalContentHidden: boolean): void {\n        this.renderer.setProperty(this.element.nativeElement, 'hidden', originalContentHidden);\n\n        if (this._div !== null) {\n            this.renderer.removeChild(this.parentElement, this._div);\n\n            this._div = null;\n            this._activeElementIndex = -1;\n        }\n    }\n\n    private getHighlightedText(searchText: string, caseSensitive: boolean, exactMatch: boolean) {\n        this.appendDiv();\n\n        const stringValue = String(this.value);\n        const contentStringResolved = !caseSensitive ? stringValue.toLowerCase() : stringValue;\n        const searchTextResolved = !caseSensitive ? searchText.toLowerCase() : searchText;\n\n        let matchCount = 0;\n\n        if (exactMatch) {\n            if (contentStringResolved === searchTextResolved) {\n                this.appendSpan(`<span class=\"${this._defaultCssClass} ${this.cssClass ? this.cssClass : ''}\">${stringValue}</span>`);\n                matchCount++;\n            } else {\n                this.appendText(stringValue);\n            }\n        } else {\n            let foundIndex = contentStringResolved.indexOf(searchTextResolved, 0);\n            let previousMatchEnd = 0;\n\n            while (foundIndex !== -1) {\n                const start = foundIndex;\n                const end = foundIndex + searchTextResolved.length;\n\n                this.appendText(stringValue.substring(previousMatchEnd, start));\n                this.appendSpan(`<span class=\"${this._defaultCssClass} ${this.cssClass ? this.cssClass : ''}\">${stringValue.substring(start, end)}</span>`);\n\n                previousMatchEnd = end;\n                matchCount++;\n\n                foundIndex = contentStringResolved.indexOf(searchTextResolved, end);\n            }\n\n            this.appendText(stringValue.substring(previousMatchEnd, stringValue.length));\n        }\n\n        return matchCount;\n    }\n\n    private appendText(text: string) {\n        const textElement = this.renderer.createText(text);\n        this.renderer.appendChild(this._div, textElement);\n    }\n\n    private appendSpan(outerHTML: string) {\n        const span = this.renderer.createElement('span');\n        this.renderer.appendChild(this._div, span);\n        this.renderer.setProperty(span, 'outerHTML', outerHTML);\n    }\n\n    private appendDiv() {\n        this._div = this.renderer.createElement('div');\n        if ( this.containerClass) {\n            this.renderer.addClass(this._div, this.containerClass);\n        }\n        this.renderer.appendChild(this.parentElement, this._div);\n    }\n\n    private searchNeedsEvaluation(text: string, caseSensitive: boolean, exactMatch: boolean): boolean {\n        const searchedText = this._lastSearchInfo.searchText;\n\n        return !this._nodeWasRemoved &&\n            (searchedText === null ||\n                searchedText !== text ||\n                this._lastSearchInfo.content !== this.value ||\n                this._lastSearchInfo.caseSensitive !== caseSensitive ||\n                this._lastSearchInfo.exactMatch !== exactMatch ||\n                this._forceEvaluation);\n    }\n}\n","import { Directive, ElementRef, HostListener, Input, booleanAttribute } from '@angular/core';\n\n@Directive({\n    exportAs: 'igxTextSelection',\n    selector: '[igxTextSelection]',\n    standalone: true\n})\nexport class IgxTextSelectionDirective {\n    /**\n     *  Determines whether the input element could be selected through the directive.\n     *\n     * ```html\n     * <!--set-->\n     * <input\n     *   type=\"text\"\n     *   id=\"firstName\"\n     *   [igxTextSelection]=\"true\">\n     * </input>\n     *\n     * <input\n     *   type=\"text\"\n     *   id=\"lastName\"\n     *   igxTextSelection\n     *   [selected]=\"true\">\n     * </input>\n     * ```\n     */\n    @Input({ alias: 'igxTextSelection', transform: booleanAttribute })\n    public selected = true;\n\n    /**\n     * Returns the nativeElement of the element where the directive was applied.\n     *\n     * ```html\n     * <input\n     *   type=\"text\"\n     *   id=\"firstName\"\n     *   igxTextSelection>\n     * </input>\n     * ```\n     *\n     * ```typescript\n     * @ViewChild('firstName',\n     *  {read: IgxTextSelectionDirective})\n     * public inputElement: IgxTextSelectionDirective;\n     *\n     * public getNativeElement() {\n     *  return this.inputElement.nativeElement;\n     * }\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    constructor(private element: ElementRef) { }\n\n    /**\n     * @hidden\n     */\n    @HostListener('focus')\n    public onFocus() {\n        this.trigger();\n    }\n\n    /**\n     * Triggers the selection of the element if it is marked as selectable.\n     *\n     * ```html\n     * <input\n     *   type=\"text\"\n     *   id=\"firstName\"\n     *   igxTextSelection>\n     * </input>\n     * ```\n     *\n     * ```typescript\n     * @ViewChild('firstName',\n     *  {read: IgxTextSelectionDirective})\n     * public inputElement: IgxTextSelectionDirective;\n     *\n     * public triggerElementSelection() {\n     *  this.inputElement.trigger();\n     * }\n     * ```\n     */\n\n    public trigger() {\n        if (this.selected && this.nativeElement.value.length) {\n            // delay the select call to avoid race conditions in case the directive is applied\n            // to an element with its own focus handler\n            requestAnimationFrame(() => this.nativeElement.select());\n        }\n    }\n}\n\n/**\n * @hidden\n */\n\n","import {\n    Directive, EmbeddedViewRef, Input, OnChanges, ChangeDetectorRef,\n    SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef, NgZone, Output, EventEmitter\n} from '@angular/core';\n\nimport { IBaseEventArgs } from '../../core/utils';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxTemplateOutlet]',\n    standalone: true\n})\nexport class IgxTemplateOutletDirective implements OnChanges {\n    @Input() public igxTemplateOutletContext !: any;\n\n    @Input() public igxTemplateOutlet !: TemplateRef<any>;\n\n    @Output()\n    public viewCreated = new EventEmitter<IViewChangeEventArgs>();\n\n    @Output()\n    public viewMoved = new EventEmitter<IViewChangeEventArgs>();\n\n    @Output()\n    public cachedViewLoaded = new EventEmitter<ICachedViewLoadedEventArgs>();\n\n    @Output()\n    public beforeViewDetach = new EventEmitter<IViewChangeEventArgs>();\n\n    private _viewRef !: EmbeddedViewRef<any>;\n\n    /**\n     * The embedded views cache. Collection is key-value paired.\n     * Key is the template type, value is another key-value paired collection\n     * where the key is the template id and value is the embedded view for the related template.\n     */\n    private _embeddedViewsMap: Map<string, Map<any, EmbeddedViewRef<any>>> = new Map();\n\n    constructor(public _viewContainerRef: ViewContainerRef, private _zone: NgZone, public cdr: ChangeDetectorRef) {\n    }\n\n    public ngOnChanges(changes: SimpleChanges) {\n        const actionType: TemplateOutletAction = this._getActionType(changes);\n        switch (actionType) {\n            case TemplateOutletAction.CreateView: this._recreateView(); break;\n            case TemplateOutletAction.MoveView: this._moveView(); break;\n            case TemplateOutletAction.UseCachedView: this._useCachedView(); break;\n            case TemplateOutletAction.UpdateViewContext: this._updateExistingContext(this.igxTemplateOutletContext); break;\n        }\n    }\n\n    public cleanCache() {\n        this._embeddedViewsMap.forEach((collection) => {\n            collection.forEach((item => {\n                if (!item.destroyed) {\n                    item.destroy();\n                }\n            }));\n            collection.clear();\n        });\n        this._embeddedViewsMap.clear();\n    }\n\n    public cleanView(tmplID) {\n        const embViewCollection = this._embeddedViewsMap.get(tmplID.type);\n        const embView = embViewCollection?.get(tmplID.id);\n        if (embView) {\n            embView.destroy();\n            this._embeddedViewsMap.get(tmplID.type).delete(tmplID.id);\n        }\n    }\n\n    private _recreateView() {\n        const prevIndex = this._viewRef ? this._viewContainerRef.indexOf(this._viewRef) : -1;\n        // detach old and create new\n        if (prevIndex !== -1) {\n            this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n            this._viewContainerRef.detach(prevIndex);\n        }\n        if (this.igxTemplateOutlet) {\n            this._viewRef = this._viewContainerRef.createEmbeddedView(\n                this.igxTemplateOutlet, this.igxTemplateOutletContext);\n            this.viewCreated.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n            const tmplId = this.igxTemplateOutletContext['templateID'];\n            if (tmplId) {\n                // if context contains a template id, check if we have a view for that template already stored in the cache\n                // if not create a copy and add it to the cache in detached state.\n                // Note: Views in detached state do not appear in the DOM, however they remain stored in memory.\n                const resCollection = this._embeddedViewsMap.get(this.igxTemplateOutletContext['templateID'].type);\n                const res = resCollection?.get(this.igxTemplateOutletContext['templateID'].id);\n                if (!res) {\n                    this._embeddedViewsMap.set(this.igxTemplateOutletContext['templateID'].type,\n                        new Map([[this.igxTemplateOutletContext['templateID'].id, this._viewRef]]));\n                }\n            }\n        }\n    }\n\n    private _moveView() {\n        // using external view and inserting it in current view.\n        const view = this.igxTemplateOutletContext['moveView'];\n        const owner = this.igxTemplateOutletContext['owner'];\n        if (view !== this._viewRef) {\n            if (owner._viewContainerRef.indexOf(view) !== -1) {\n                // detach in case view it is attached somewhere else at the moment.\n                this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n                owner._viewContainerRef.detach(owner._viewContainerRef.indexOf(view));\n            }\n            if (this._viewRef && this._viewContainerRef.indexOf(this._viewRef) !== -1) {\n                this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n                this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\n            }\n            this._viewRef = view;\n            this._viewContainerRef.insert(view, 0);\n            this._updateExistingContext(this.igxTemplateOutletContext);\n            this.viewMoved.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n        } else {\n            this._updateExistingContext(this.igxTemplateOutletContext);\n        }\n    }\n    private _useCachedView() {\n        // use view for specific template cached in the current template outlet\n        const tmplID = this.igxTemplateOutletContext['templateID'];\n        const cachedView = tmplID ?\n            this._embeddedViewsMap.get(tmplID.type)?.get(tmplID.id) :\n            null;\n        // if view exists, but template has been changed and there is a view in the cache with the related template\n        // then detach old view and insert the stored one with the matching template\n        // after that update its context.\n        if (this._viewContainerRef.length > 0) {\n            this.beforeViewDetach.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext });\n            this._viewContainerRef.detach(this._viewContainerRef.indexOf(this._viewRef));\n        }\n\n        this._viewRef = cachedView;\n        const oldContext = this._cloneContext(cachedView.context);\n        this._viewContainerRef.insert(this._viewRef, 0);\n        this._updateExistingContext(this.igxTemplateOutletContext);\n        this.cachedViewLoaded.emit({ owner: this, view: this._viewRef, context: this.igxTemplateOutletContext, oldContext });\n    }\n\n    private _shouldRecreateView(changes: SimpleChanges): boolean {\n        const ctxChange = changes['igxTemplateOutletContext'];\n        return !!changes['igxTemplateOutlet'] || (ctxChange && this._hasContextShapeChanged(ctxChange));\n    }\n\n    private _hasContextShapeChanged(ctxChange: SimpleChange): boolean {\n        const prevCtxKeys = Object.keys(ctxChange.previousValue || {});\n        const currCtxKeys = Object.keys(ctxChange.currentValue || {});\n\n        if (prevCtxKeys.length === currCtxKeys.length) {\n            for (const propName of currCtxKeys) {\n                if (prevCtxKeys.indexOf(propName) === -1) {\n                    return true;\n                }\n            }\n            return false;\n        } else {\n            return true;\n        }\n    }\n\n    private _updateExistingContext(ctx: any): void {\n        for (const propName of Object.keys(ctx)) {\n            this._viewRef.context[propName] = this.igxTemplateOutletContext[propName];\n        }\n    }\n\n    private _cloneContext(ctx: any): any {\n        const clone = {};\n        for (const propName of Object.keys(ctx)) {\n            clone[propName] = ctx[propName];\n        }\n        return clone;\n    }\n\n    private _getActionType(changes: SimpleChanges) {\n        const movedView = this.igxTemplateOutletContext['moveView'];\n        const tmplID = this.igxTemplateOutletContext['templateID'];\n        const cachedView = tmplID ?\n            this._embeddedViewsMap.get(tmplID.type)?.get(tmplID.id) :\n            null;\n        const shouldRecreate = this._shouldRecreateView(changes);\n        if (movedView) {\n            // view is moved from external source\n            return TemplateOutletAction.MoveView;\n        } else if (shouldRecreate && cachedView) {\n            // should recreate (template or context change) and there is a matching template in cache\n            return TemplateOutletAction.UseCachedView;\n        } else if (!this._viewRef || shouldRecreate) {\n            // no view or should recreate\n            return TemplateOutletAction.CreateView;\n        } else if (this.igxTemplateOutletContext) {\n            // has context, update context\n            return TemplateOutletAction.UpdateViewContext;\n        }\n    }\n}\nenum TemplateOutletAction {\n    CreateView,\n    MoveView,\n    UseCachedView,\n    UpdateViewContext\n}\n\nexport interface IViewChangeEventArgs extends IBaseEventArgs {\n    owner: IgxTemplateOutletDirective;\n    view: EmbeddedViewRef<any>;\n    context: any;\n}\n\nexport interface ICachedViewLoadedEventArgs extends IViewChangeEventArgs {\n    oldContext: any;\n}\n\n/**\n * @hidden\n */\n\n","import {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output\n} from '@angular/core';\nimport { AbsoluteScrollStrategy } from '../../services/overlay/scroll/absolute-scroll-strategy';\nimport { CancelableBrowserEventArgs, IBaseEventArgs, PlatformUtil } from '../../core/utils';\nimport { ConnectedPositioningStrategy } from '../../services/overlay/position/connected-positioning-strategy';\nimport { filter, first, takeUntil } from 'rxjs/operators';\nimport { IgxNavigationService, IToggleView } from '../../core/navigation';\nimport { IgxOverlayService } from '../../services/overlay/overlay';\nimport { IPositionStrategy } from '../../services/overlay/position/IPositionStrategy';\nimport { OffsetMode, OverlayClosingEventArgs, OverlayEventArgs, OverlaySettings } from '../../services/overlay/utilities';\nimport { Subscription, Subject, MonoTypeOperatorFunction } from 'rxjs';\n\nexport interface ToggleViewEventArgs extends IBaseEventArgs {\n    /** Id of the toggle view */\n    id: string;\n    /* blazorSuppress */\n    event?: Event;\n}\n\nexport interface ToggleViewCancelableEventArgs extends ToggleViewEventArgs, CancelableBrowserEventArgs { }\n\n@Directive({\n    exportAs: 'toggle',\n    selector: '[igxToggle]',\n    standalone: true\n})\nexport class IgxToggleDirective implements IToggleView, OnInit, OnDestroy {\n    /**\n     * Emits an event after the toggle container is opened.\n     *\n     * ```typescript\n     * onToggleOpened(event) {\n     *    alert(\"Toggle opened!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (opened)='onToggleOpened($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Emits an event before the toggle container is opened.\n     *\n     * ```typescript\n     * onToggleOpening(event) {\n     *  alert(\"Toggle opening!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (opening)='onToggleOpening($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<ToggleViewCancelableEventArgs>();\n\n    /**\n     * Emits an event after the toggle container is closed.\n     *\n     * ```typescript\n     * onToggleClosed(event) {\n     *  alert(\"Toggle closed!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (closed)='onToggleClosed($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Emits an event before the toggle container is closed.\n     *\n     * ```typescript\n     * onToggleClosing(event) {\n     *  alert(\"Toggle closing!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *  igxToggle\n     *  (closing)='onToggleClosing($event)'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<ToggleViewCancelableEventArgs>();\n\n    /**\n     * Emits an event after the toggle element is appended to the overlay container.\n     *\n     * ```typescript\n     * onAppended() {\n     *  alert(\"Content appended!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <div\n     *   igxToggle\n     *   (appended)='onToggleAppended()'>\n     * </div>\n     * ```\n     */\n    @Output()\n    public appended = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * @hidden\n     */\n    public get collapsed(): boolean {\n        return this._collapsed;\n    }\n\n    /**\n     * Identifier which is registered into `IgxNavigationService`\n     *\n     * ```typescript\n     * let myToggleId = this.toggle.id;\n     * ```\n     */\n    @Input()\n    public id: string;\n\n    /**\n     * @hidden\n     */\n    public get element(): HTMLElement {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-toggle--hidden')\n    @HostBinding('attr.aria-hidden')\n    public get hiddenClass() {\n        return this.collapsed;\n    }\n\n    @HostBinding('class.igx-toggle--hidden-webkit')\n    public get hiddenWebkitClass() {\n        const isSafari = this.platform?.isSafari;\n        const browserVersion = this.platform?.browserVersion;\n\n        return this.collapsed && isSafari && !!browserVersion && browserVersion < 17.5;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-toggle')\n    public get defaultClass() {\n        return !this.collapsed;\n    }\n\n    protected _overlayId: string;\n\n    private _collapsed = true;\n    protected destroy$ = new Subject<boolean>();\n    private _overlaySubFilter: [MonoTypeOperatorFunction<OverlayEventArgs>, MonoTypeOperatorFunction<OverlayEventArgs>] = [\n        filter(x => x.id === this._overlayId),\n        takeUntil(this.destroy$)\n    ];\n    private _overlayOpenedSub: Subscription;\n    private _overlayClosingSub: Subscription;\n    private _overlayClosedSub: Subscription;\n    private _overlayContentAppendedSub: Subscription;\n\n    /**\n     * @hidden\n     */\n    constructor(\n        private elementRef: ElementRef,\n        private cdr: ChangeDetectorRef,\n        @Inject(IgxOverlayService) protected overlayService: IgxOverlayService,\n        @Optional() private navigationService: IgxNavigationService,\n        @Optional() private platform?: PlatformUtil\n    ) {\n    }\n\n    /**\n     * Opens the toggle.\n     *\n     * ```typescript\n     * this.myToggle.open();\n     * ```\n     */\n    public open(overlaySettings?: OverlaySettings) {\n        //  if there is open animation do nothing\n        //  if toggle is not collapsed and there is no close animation do nothing\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        const openAnimationStarted = info?.openAnimationPlayer?.hasStarted() ?? false;\n        const closeAnimationStarted = info?.closeAnimationPlayer?.hasStarted() ?? false;\n        if (openAnimationStarted || !(this._collapsed || closeAnimationStarted)) {\n            return;\n        }\n\n        this._collapsed = false;\n        this.cdr.detectChanges();\n\n        if (!info) {\n            this.unsubscribe();\n            this.subscribe();\n            this._overlayId = this.overlayService.attach(this.elementRef, overlaySettings);\n        }\n\n        const args: ToggleViewCancelableEventArgs = { cancel: false, owner: this, id: this._overlayId };\n        this.opening.emit(args);\n        if (args.cancel) {\n            this.unsubscribe();\n            this.overlayService.detach(this._overlayId);\n            this._collapsed = true;\n            delete this._overlayId;\n            this.cdr.detectChanges();\n            return;\n        }\n        this.overlayService.show(this._overlayId, overlaySettings);\n    }\n\n    /**\n     * Closes the toggle.\n     *\n     * ```typescript\n     * this.myToggle.close();\n     * ```\n     */\n    public close(event?: Event) {\n        //  if toggle is collapsed do nothing\n        //  if there is close animation do nothing, toggle will close anyway\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        const closeAnimationStarted = info?.closeAnimationPlayer?.hasStarted() || false;\n        if (this._collapsed || closeAnimationStarted) {\n            return;\n        }\n\n        this.overlayService.hide(this._overlayId, event);\n    }\n\n    /**\n     * Opens or closes the toggle, depending on its current state.\n     *\n     * ```typescript\n     * this.myToggle.toggle();\n     * ```\n     */\n    public toggle(overlaySettings?: OverlaySettings) {\n        //  if toggle is collapsed call open\n        //  if there is running close animation call open\n        if (this.collapsed || this.isClosing) {\n            this.open(overlaySettings);\n        } else {\n            this.close();\n        }\n    }\n\n    /** @hidden @internal */\n    public get isClosing() {\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        return info ? info.closeAnimationPlayer?.hasStarted() : false;\n    }\n\n    /**\n     * Returns the id of the overlay the content is rendered in.\n     * ```typescript\n     * this.myToggle.overlayId;\n     * ```\n     */\n    public get overlayId() {\n        return this._overlayId;\n    }\n\n    /**\n     * Repositions the toggle.\n     * ```typescript\n     * this.myToggle.reposition();\n     * ```\n     */\n    public reposition() {\n        this.overlayService.reposition(this._overlayId);\n    }\n\n    /**\n     * Offsets the content along the corresponding axis by the provided amount with optional\n     * offsetMode that determines whether to add (by default) or set the offset values with OffsetMode.Add and OffsetMode.Set\n     */\n    public setOffset(deltaX: number, deltaY: number, offsetMode?: OffsetMode) {\n        this.overlayService.setOffset(this._overlayId, deltaX, deltaY, offsetMode);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        if (this.navigationService && this.id) {\n            this.navigationService.add(this.id, this);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        if (this.navigationService && this.id) {\n            this.navigationService.remove(this.id);\n        }\n        if (this._overlayId) {\n            this.overlayService.detach(this._overlayId);\n        }\n        this.unsubscribe();\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    private overlayClosed = (e) => {\n        this._collapsed = true;\n        this.cdr.detectChanges();\n        this.unsubscribe();\n        this.overlayService.detach(this.overlayId);\n        const args: ToggleViewEventArgs = { owner: this, id: this._overlayId, event: e.event };\n        delete this._overlayId;\n        this.closed.emit(args);\n        this.cdr.markForCheck();\n    };\n\n    private subscribe() {\n        this._overlayContentAppendedSub = this.overlayService\n            .contentAppended\n            .pipe(first(), takeUntil(this.destroy$))\n            .subscribe(() => {\n                const args: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n                this.appended.emit(args);\n            });\n\n        this._overlayOpenedSub = this.overlayService\n            .opened\n            .pipe(...this._overlaySubFilter)\n            .subscribe(() => {\n                const args: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n                this.opened.emit(args);\n            });\n\n        this._overlayClosingSub = this.overlayService\n            .closing\n            .pipe(...this._overlaySubFilter)\n            .subscribe((e: OverlayClosingEventArgs) => {\n                const args: ToggleViewCancelableEventArgs = { cancel: false, event: e.event, owner: this, id: this._overlayId };\n                this.closing.emit(args);\n                e.cancel = args.cancel;\n\n                //  in case event is not canceled this will close the toggle and we need to unsubscribe.\n                //  Otherwise if for some reason, e.g. close on outside click, close() gets called before\n                //  closed was fired we will end with calling closing more than once\n                if (!e.cancel) {\n                    this.clearSubscription(this._overlayClosingSub);\n                }\n            });\n\n        this._overlayClosedSub = this.overlayService\n            .closed\n            .pipe(...this._overlaySubFilter)\n            .subscribe(this.overlayClosed);\n    }\n\n    private unsubscribe() {\n        this.clearSubscription(this._overlayOpenedSub);\n        this.clearSubscription(this._overlayClosingSub);\n        this.clearSubscription(this._overlayClosedSub);\n        this.clearSubscription(this._overlayContentAppendedSub);\n    }\n\n    private clearSubscription(subscription: Subscription) {\n        if (subscription && !subscription.closed) {\n            subscription.unsubscribe();\n        }\n    }\n}\n\n@Directive({\n    exportAs: 'toggle-action',\n    selector: '[igxToggleAction]',\n    standalone: true\n})\nexport class IgxToggleActionDirective implements OnInit {\n    /**\n     * Provide settings that control the toggle overlay positioning, interaction and scroll behavior.\n     * ```typescript\n     * const settings: OverlaySettings = {\n     *      closeOnOutsideClick: false,\n     *      modal: false\n     *  }\n     * ```\n     * ---\n     * ```html\n     * <!--set-->\n     * <div igxToggleAction [overlaySettings]=\"settings\"></div>\n     * ```\n     */\n    @Input()\n    public overlaySettings: OverlaySettings;\n\n    /**\n     * Determines where the toggle element overlay should be attached.\n     *\n     * ```html\n     * <!--set-->\n     * <div igxToggleAction [igxToggleOutlet]=\"outlet\"></div>\n     * ```\n     * Where `outlet` in an instance of `IgxOverlayOutletDirective` or an `ElementRef`\n     */\n    @Input('igxToggleOutlet')\n    public outlet: IgxOverlayOutletDirective | ElementRef;\n\n    /**\n     * @hidden\n     */\n    @Input('igxToggleAction')\n    public set target(target: any) {\n        if (target !== null && target !== '') {\n            this._target = target;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public get target(): any {\n        if (typeof this._target === 'string') {\n            return this.navigationService.get(this._target);\n        }\n        return this._target;\n    }\n\n    protected _overlayDefaults: OverlaySettings;\n    protected _target: IToggleView | string;\n\n    constructor(private element: ElementRef, @Optional() private navigationService: IgxNavigationService) { }\n\n    /**\n     * @hidden\n     */\n    @HostListener('click')\n    public onClick() {\n        if (this.outlet) {\n            this._overlayDefaults.outlet = this.outlet;\n        }\n\n        const clonedSettings = Object.assign({}, this._overlayDefaults, this.overlaySettings);\n        this.updateOverlaySettings(clonedSettings);\n        this.target.toggle(clonedSettings);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        const targetElement = this.element.nativeElement;\n        this._overlayDefaults = {\n            target: targetElement,\n            positionStrategy: new ConnectedPositioningStrategy(),\n            scrollStrategy: new AbsoluteScrollStrategy(),\n            closeOnOutsideClick: true,\n            modal: false,\n            excludeFromOutsideClick: [targetElement as HTMLElement]\n        };\n    }\n\n    /**\n     * Updates provided overlay settings\n     *\n     * @param settings settings to update\n     * @returns returns updated copy of provided overlay settings\n     */\n    protected updateOverlaySettings(settings: OverlaySettings): OverlaySettings {\n        if (settings && settings.positionStrategy) {\n            const positionStrategyClone: IPositionStrategy = settings.positionStrategy.clone();\n            settings.target = this.element.nativeElement;\n            settings.positionStrategy = positionStrategyClone;\n        }\n\n        return settings;\n    }\n}\n\n/**\n * Mark an element as an igxOverlay outlet container.\n * Directive instance is exported as `overlay-outlet` to be assigned to templates variables:\n * ```html\n * <div igxOverlayOutlet #outlet=\"overlay-outlet\"></div>\n * ```\n */\n@Directive({\n    exportAs: 'overlay-outlet',\n    selector: '[igxOverlayOutlet]',\n    standalone: true\n})\nexport class IgxOverlayOutletDirective {\n    constructor(public element: ElementRef<HTMLElement>) { }\n\n    /** @hidden */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n}\n","import {\n    Directive, ElementRef, Input, ChangeDetectorRef, Optional, HostBinding, Inject\n} from '@angular/core';\nimport { IgxOverlayService } from '../../services/overlay/overlay';\nimport { OverlaySettings } from '../../services/public_api';\nimport { IgxNavigationService } from '../../core/navigation';\nimport { IgxToggleDirective } from '../toggle/toggle.directive';\n\nlet NEXT_ID = 0;\n/**\n * **Ignite UI for Angular Tooltip** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tooltip)\n *\n * The Ignite UI for Angular Tooltip directive is used to mark an HTML element in the markup as one that should behave as a tooltip.\n * The tooltip is used in combination with the Ignite UI for Angular Tooltip Target by assigning the exported tooltip reference to the\n * respective target's selector property.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\">Hover me</button>\n * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n * ```\n */\n@Directive({\n    exportAs: 'tooltip',\n    selector: '[igxTooltip]',\n    standalone: true\n})\nexport class IgxTooltipDirective extends IgxToggleDirective {\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-tooltip--hidden')\n    public override get hiddenClass() {\n        return this.collapsed;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-tooltip')\n    public override get defaultClass() {\n        return !this.collapsed;\n    }\n\n    /**\n     * Gets/sets any tooltip related data.\n     * The 'context' can be used for storing any information that is necessary\n     * to access when working with the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let tooltipContext = this.tooltip.context;\n     * ```\n     *\n     * ```typescript\n     * // set\n     * this.tooltip.context = \"Tooltip's context\";\n     * ```\n     */\n    @Input()\n    public context;\n\n    /**\n     * Identifier for the tooltip.\n     * If this is property is not explicitly set, it will be automatically generated.\n     *\n     * ```typescript\n     * let tooltipId = this.tooltip.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public override id = `igx-tooltip-${NEXT_ID++}`;\n\n    /**\n     * Get the role attribute of the tooltip.\n     *\n     * ```typescript\n     * let tooltipRole = this.tooltip.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    public get role() {\n        return 'tooltip';\n    }\n\n    /**\n     * @hidden\n     */\n    public timeoutId;\n\n    /**\n     * @hidden\n     * Returns whether close time out has started\n     */\n    public toBeHidden = false;\n\n    /**\n     * @hidden\n     * Returns whether open time out has started\n     */\n    public toBeShown = false;\n\n    /** @hidden */\n    constructor(\n        elementRef: ElementRef,\n        cdr: ChangeDetectorRef,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n        @Optional() navigationService: IgxNavigationService) {\n        // D.P. constructor duplication due to es6 compilation, might be obsolete in the future\n        super(elementRef, cdr, overlayService, navigationService);\n    }\n\n    /**\n     * If there is open animation in progress this method will finish is.\n     * If there is no open animation in progress this method will open the toggle with no animation.\n     *\n     * @param overlaySettings setting to use for opening the toggle\n     */\n    protected forceOpen(overlaySettings?: OverlaySettings) {\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        const hasOpenAnimation = info ? info.openAnimationPlayer : false;\n        if (hasOpenAnimation) {\n            info.openAnimationPlayer.finish();\n            info.openAnimationPlayer.reset();\n            info.openAnimationPlayer = null;\n        } else if (this.collapsed) {\n            const animation = overlaySettings.positionStrategy.settings.openAnimation;\n            overlaySettings.positionStrategy.settings.openAnimation = null;\n            this.open(overlaySettings);\n            overlaySettings.positionStrategy.settings.openAnimation = animation;\n        }\n    }\n\n    /**\n     * If there is close animation in progress this method will finish is.\n     * If there is no close animation in progress this method will close the toggle with no animation.\n     *\n     * @param overlaySettings settings to use for closing the toggle\n     */\n    protected forceClose(overlaySettings?: OverlaySettings) {\n        const info = this.overlayService.getOverlayById(this._overlayId);\n        const hasCloseAnimation = info ? info.closeAnimationPlayer : false;\n\n        if (hasCloseAnimation) {\n            info.closeAnimationPlayer.finish();\n            info.closeAnimationPlayer.reset();\n            info.closeAnimationPlayer = null;\n        } else if (!this.collapsed) {\n            const animation = overlaySettings.positionStrategy.settings.closeAnimation;\n            overlaySettings.positionStrategy.settings.closeAnimation = null;\n            this.close();\n            overlaySettings.positionStrategy.settings.closeAnimation = animation;\n        }\n    }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { IgxTooltipDirective } from './tooltip.directive';\n\n@Component({\n    selector: 'igx-tooltip',\n    templateUrl: 'tooltip.component.html',\n    imports: [IgxTooltipDirective]\n})\n\nexport class IgxTooltipComponent {\n\n    @ViewChild(IgxTooltipDirective, { static: true })\n    public tooltip: IgxTooltipDirective;\n\n    public content: string;\n}","<span igxTooltip>{{content}}</span>","import { useAnimation } from '@angular/animations';\nimport { Directive, OnInit, OnDestroy, Output, ElementRef, Optional, ViewContainerRef, HostListener, Input, EventEmitter, booleanAttribute } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxNavigationService } from '../../core/navigation';\nimport { IBaseEventArgs } from '../../core/utils';\nimport { AutoPositionStrategy, HorizontalAlignment, PositionSettings } from '../../services/public_api';\nimport { IgxToggleActionDirective } from '../toggle/toggle.directive';\nimport { IgxTooltipComponent } from './tooltip.component';\nimport { IgxTooltipDirective } from './tooltip.directive';\nimport { fadeOut, scaleInCenter } from 'igniteui-angular/animations';\n\nexport interface ITooltipShowEventArgs extends IBaseEventArgs {\n    target: IgxTooltipTargetDirective;\n    tooltip: IgxTooltipDirective;\n    cancel: boolean;\n}\nexport interface ITooltipHideEventArgs extends IBaseEventArgs {\n    target: IgxTooltipTargetDirective;\n    tooltip: IgxTooltipDirective;\n    cancel: boolean;\n}\n\n/**\n * **Ignite UI for Angular Tooltip Target** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/tooltip)\n *\n * The Ignite UI for Angular Tooltip Target directive is used to mark an HTML element in the markup as one that has a tooltip.\n * The tooltip target is used in combination with the Ignite UI for Angular Tooltip by assigning the exported tooltip reference to the\n * target's selector property.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\">Hover me</button>\n * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n * ```\n */\n@Directive({\n    exportAs: 'tooltipTarget',\n    selector: '[igxTooltipTarget]',\n    standalone: true\n})\nexport class IgxTooltipTargetDirective extends IgxToggleActionDirective implements OnInit, OnDestroy {\n    /**\n     * Gets/sets the amount of milliseconds that should pass before showing the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let tooltipShowDelay = this.tooltipTarget.showDelay;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" [showDelay]=\"1500\">Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input()\n    public showDelay = 500;\n\n    /**\n     * Gets/sets the amount of milliseconds that should pass before hiding the tooltip.\n     *\n     * ```typescript\n     * // get\n     * let tooltipHideDelay = this.tooltipTarget.hideDelay;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" [hideDelay]=\"1500\">Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input()\n    public hideDelay = 500;\n\n    /**\n     * Specifies if the tooltip should not show when hovering its target with the mouse. (defaults to false)\n     * While setting this property to 'true' will disable the user interactions that shows/hides the tooltip,\n     * the developer will still be able to show/hide the tooltip through the API.\n     *\n     * ```typescript\n     * // get\n     * let tooltipDisabledValue = this.tooltipTarget.tooltipDisabled;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" [tooltipDisabled]=\"true\">Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public tooltipDisabled = false;\n\n    /**\n     * @hidden\n     */\n    @Input('igxTooltipTarget')\n    public override set target(target: any) {\n        if (target instanceof IgxTooltipDirective) {\n            this._target = target;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override get target(): any {\n        if (typeof this._target === 'string') {\n            return this._navigationService.get(this._target);\n        }\n        return this._target;\n    }\n\n    /**\n    * @hidden\n    */\n    @Input()\n    public set tooltip(content: any) {\n        if (!this.target && (typeof content === 'string' || content instanceof String)) {\n            const tooltipComponent = this._viewContainerRef.createComponent(IgxTooltipComponent);\n            tooltipComponent.instance.content = content as string;\n\n            this._target = tooltipComponent.instance.tooltip;\n        }\n    }\n\n    /**\n     * Gets the respective native element of the directive.\n     *\n     * ```typescript\n     * let tooltipTargetElement = this.tooltipTarget.nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this._element.nativeElement;\n    }\n\n    /**\n     * Indicates if the tooltip that is is associated with this target is currently hidden.\n     *\n     * ```typescript\n     * let tooltipHiddenValue = this.tooltipTarget.tooltipHidden;\n     * ```\n     */\n    public get tooltipHidden(): boolean {\n        return !this.target || this.target.collapsed;\n    }\n\n    /**\n     * Emits an event when the tooltip that is associated with this target starts showing.\n     * This event is fired before the start of the countdown to showing the tooltip.\n     *\n     * ```typescript\n     * tooltipShowing(args: ITooltipShowEventArgs) {\n     *    alert(\"Tooltip started showing!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" (tooltipShow)='tooltipShowing($event)'>Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Output()\n    public tooltipShow = new EventEmitter<ITooltipShowEventArgs>();\n\n    /**\n     * Emits an event when the tooltip that is associated with this target starts hiding.\n     * This event is fired before the start of the countdown to hiding the tooltip.\n     *\n     * ```typescript\n     * tooltipHiding(args: ITooltipHideEventArgs) {\n     *    alert(\"Tooltip started hiding!\");\n     * }\n     * ```\n     *\n     * ```html\n     * <button type=\"button\" igxButton [igxTooltipTarget]=\"tooltipRef\" (tooltipHide)='tooltipHiding($event)'>Hover me</button>\n     * <span #tooltipRef=\"tooltip\" igxTooltip>Hello there, I am a tooltip!</span>\n     * ```\n     */\n    @Output()\n    public tooltipHide = new EventEmitter<ITooltipHideEventArgs>();\n\n    private destroy$ = new Subject<void>();\n\n    constructor(private _element: ElementRef,\n        @Optional() private _navigationService: IgxNavigationService, private _viewContainerRef: ViewContainerRef) {\n        super(_element, _navigationService);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('click')\n    public override onClick() {\n        if (!this.target.collapsed) {\n            this.target.forceClose(this.mergedOverlaySettings);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mouseenter')\n    public onMouseEnter() {\n        if (this.tooltipDisabled) {\n            return;\n        }\n\n        this.checkOutletAndOutsideClick();\n        const shouldReturn = this.preMouseEnterCheck();\n        if (shouldReturn) {\n            return;\n        }\n\n        const showingArgs = { target: this, tooltip: this.target, cancel: false };\n        this.tooltipShow.emit(showingArgs);\n\n        if (showingArgs.cancel) {\n            return;\n        }\n\n        this.target.toBeShown = true;\n        this.target.timeoutId = setTimeout(() => {\n            this.target.open(this.mergedOverlaySettings); // Call open() of IgxTooltipDirective\n            this.target.toBeShown = false;\n        }, this.showDelay);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mouseleave')\n    public onMouseLeave() {\n        if (this.tooltipDisabled) {\n            return;\n        }\n\n        this.checkOutletAndOutsideClick();\n        const shouldReturn = this.preMouseLeaveCheck();\n        if (shouldReturn || this.target.collapsed) {\n            return;\n        }\n\n        this.target.toBeHidden = true;\n        this.target.timeoutId = setTimeout(() => {\n            this.target.close(); // Call close() of IgxTooltipDirective\n            this.target.toBeHidden = false;\n        }, this.hideDelay);\n\n\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('touchstart')\n    public onTouchStart() {\n        if (this.tooltipDisabled) {\n            return;\n        }\n\n        this.showTooltip();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('document:touchstart', ['$event'])\n    public onDocumentTouchStart(event) {\n        if (this.tooltipDisabled) {\n            return;\n        }\n\n        if (this.nativeElement !== event.target &&\n            !this.nativeElement.contains(event.target)\n        ) {\n            this.hideTooltip();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        super.ngOnInit();\n\n        const positionSettings: PositionSettings = {\n            horizontalDirection: HorizontalAlignment.Center,\n            horizontalStartPoint: HorizontalAlignment.Center,\n            openAnimation: useAnimation(scaleInCenter, { params: { duration: '150ms' } }),\n            closeAnimation: useAnimation(fadeOut, { params: { duration: '75ms' } })\n        };\n\n        this._overlayDefaults.positionStrategy = new AutoPositionStrategy(positionSettings);\n        this._overlayDefaults.closeOnOutsideClick = false;\n        this._overlayDefaults.closeOnEscape = true;\n\n        this.target.closing.pipe(takeUntil(this.destroy$)).subscribe((event) => {\n            const hidingArgs = { target: this, tooltip: this.target, cancel: false };\n            this.tooltipHide.emit(hidingArgs);\n\n            if (hidingArgs.cancel) {\n                event.cancel = true;\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    /**\n     * Shows the tooltip by respecting the 'showDelay' property.\n     *\n     * ```typescript\n     * this.tooltipTarget.showTooltip();\n     * ```\n     */\n    public showTooltip() {\n        clearTimeout(this.target.timeoutId);\n\n        if (!this.target.collapsed) {\n            //  if close animation has started finish it, or close the tooltip with no animation\n            this.target.forceClose(this.mergedOverlaySettings);\n            this.target.toBeHidden = false;\n        }\n\n        const showingArgs = { target: this, tooltip: this.target, cancel: false };\n        this.tooltipShow.emit(showingArgs);\n\n        if (showingArgs.cancel) {\n            return;\n        }\n\n        this.target.toBeShown = true;\n        this.target.timeoutId = setTimeout(() => {\n            this.target.open(this.mergedOverlaySettings); // Call open() of IgxTooltipDirective\n            this.target.toBeShown = false;\n        }, this.showDelay);\n    }\n\n    /**\n     * Hides the tooltip by respecting the 'hideDelay' property.\n     *\n     * ```typescript\n     * this.tooltipTarget.hideTooltip();\n     * ```\n     */\n    public hideTooltip() {\n        if (this.target.collapsed && this.target.toBeShown) {\n            clearTimeout(this.target.timeoutId);\n        }\n\n        if (this.target.collapsed || this.target.toBeHidden) {\n            return;\n        }\n\n        this.target.toBeHidden = true;\n        this.target.timeoutId = setTimeout(() => {\n            this.target.close(); // Call close() of IgxTooltipDirective\n            this.target.toBeHidden = false;\n        }, this.hideDelay);\n    }\n\n    private checkOutletAndOutsideClick() {\n        if (this.outlet) {\n            this._overlayDefaults.outlet = this.outlet;\n        }\n    }\n\n    private get mergedOverlaySettings() {\n        return Object.assign({}, this._overlayDefaults, this.overlaySettings);\n    }\n\n    // Return true if the execution in onMouseEnter should be terminated after this method\n    private preMouseEnterCheck() {\n        // If tooltip is about to be opened\n        if (this.target.toBeShown) {\n            clearTimeout(this.target.timeoutId);\n            this.target.toBeShown = false;\n        }\n\n        // If Tooltip is opened or about to be hidden\n        if (!this.target.collapsed || this.target.toBeHidden) {\n            clearTimeout(this.target.timeoutId);\n\n            //  if close animation has started finish it, or close the tooltip with no animation\n            this.target.forceClose(this.mergedOverlaySettings);\n            this.target.toBeHidden = false;\n        }\n\n        return false;\n    }\n\n    // Return true if the execution in onMouseLeave should be terminated after this method\n    private preMouseLeaveCheck(): boolean {\n        clearTimeout(this.target.timeoutId);\n\n        // If tooltip is about to be opened\n        if (this.target.toBeShown) {\n            this.target.toBeShown = false;\n            this.target.toBeHidden = false;\n            return true;\n        }\n\n        return false;\n    }\n}\n","import { IgxTooltipTargetDirective } from './tooltip-target.directive';\nimport { IgxTooltipDirective } from './tooltip.directive';\n\nexport * from './tooltip.directive';\nexport * from './tooltip-target.directive';\n\n/* NOTE: Tooltip directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TOOLTIP_DIRECTIVES = [\n    IgxTooltipDirective,\n    IgxTooltipTargetDirective\n] as const;\n","import {\n    Directive, Input, ElementRef,\n    Renderer2, Output, EventEmitter, Inject,\n    LOCALE_ID, OnChanges, SimpleChanges, HostListener, OnInit, booleanAttribute\n} from '@angular/core';\nimport {\n    ControlValueAccessor,\n    Validator, AbstractControl, ValidationErrors, NG_VALIDATORS, NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { DOCUMENT } from '@angular/common';\nimport { IgxMaskDirective } from '../mask/mask.directive';\nimport { MaskParsingService } from '../mask/mask-parsing.service';\nimport { isDate, PlatformUtil } from '../../core/utils';\nimport { IgxDateTimeEditorEventArgs, DatePartInfo, DatePart } from './date-time-editor.common';\nimport { noop } from 'rxjs';\nimport { DatePartDeltas } from './date-time-editor.common';\nimport { DateTimeUtil } from '../../date-common/util/date-time.util';\n\n/**\n * Date Time Editor provides a functionality to input, edit and format date and time.\n *\n * @igxModule IgxDateTimeEditorModule\n *\n * @igxParent IgxInputGroup\n *\n * @igxTheme igx-input-theme\n *\n * @igxKeywords date, time, editor\n *\n * @igxGroup Scheduling\n *\n * @remarks\n *\n * The Ignite UI Date Time Editor Directive makes it easy for developers to manipulate date/time user input.\n * It requires input in a specified or default input format which is visible in the input element as a placeholder.\n * It allows the input of only date (ex: 'dd/MM/yyyy'), only time (ex:'HH:mm tt') or both at once, if needed.\n * Supports display format that may differ from the input format.\n * Provides methods to increment and decrement any specific/targeted `DatePart`.\n *\n * @example\n * ```html\n * <igx-input-group>\n *   <input type=\"text\" igxInput [igxDateTimeEditor]=\"'dd/MM/yyyy'\" [displayFormat]=\"'shortDate'\" [(ngModel)]=\"date\"/>\n * </igx-input-group>\n * ```\n */\n@Directive({\n    selector: '[igxDateTimeEditor]',\n    exportAs: 'igxDateTimeEditor',\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateTimeEditorDirective, multi: true },\n        { provide: NG_VALIDATORS, useExisting: IgxDateTimeEditorDirective, multi: true }\n    ],\n    standalone: true\n})\nexport class IgxDateTimeEditorDirective extends IgxMaskDirective implements OnChanges, OnInit, Validator, ControlValueAccessor {\n    /**\n     * Locale settings used for value formatting.\n     *\n     * @remarks\n     * Uses Angular's `LOCALE_ID` by default. Affects both input mask and display format if those are not set.\n     * If a `locale` is set, it must be registered via `registerLocaleData`.\n     * Please refer to https://angular.io/guide/i18n#i18n-pipes.\n     * If it is not registered, `Intl` will be used for formatting.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [locale]=\"'en'\">\n     * ```\n     */\n    @Input()\n    public locale: string;\n\n    /**\n     * Minimum value required for the editor to remain valid.\n     *\n     * @remarks\n     * If a `string` value is passed, it must be in the defined input format.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [minValue]=\"minDate\">\n     * ```\n     */\n    public get minValue(): string | Date {\n        return this._minValue;\n    }\n\n    @Input()\n    public set minValue(value: string | Date) {\n        this._minValue = value;\n        this._onValidatorChange();\n    }\n\n    /**\n     * Maximum value required for the editor to remain valid.\n     *\n     * @remarks\n     * If a `string` value is passed in, it must be in the defined input format.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [maxValue]=\"maxDate\">\n     * ```\n     */\n    public get maxValue(): string | Date {\n        return this._maxValue;\n    }\n\n    @Input()\n    public set maxValue(value: string | Date) {\n        this._maxValue = value;\n        this._onValidatorChange();\n    }\n\n    /**\n     * Specify if the currently spun date segment should loop over.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [spinLoop]=\"false\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public spinLoop = true;\n\n    /**\n     * Set both pre-defined format options such as `shortDate` and `longDate`,\n     * as well as constructed format string using characters supported by `DatePipe`, e.g. `EE/MM/yyyy`.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [displayFormat]=\"'shortDate'\">\n     * ```\n     */\n    @Input()\n    public set displayFormat(value: string) {\n        this._displayFormat = value;\n        this.updateDefaultFormat();\n    }\n\n    public get displayFormat(): string {\n        return this._displayFormat || this.inputFormat;\n    }\n\n    /**\n     * Expected user input format (and placeholder).\n     *\n     * @example\n     * ```html\n     * <input [igxDateTimeEditor]=\"'dd/MM/yyyy'\">\n     * ```\n     */\n    @Input(`igxDateTimeEditor`)\n    public set inputFormat(value: string) {\n        if (value) {\n            this.setMask(value);\n            this._inputFormat = value;\n        }\n    }\n\n    public get inputFormat(): string {\n        return this._inputFormat || this._defaultInputFormat;\n    }\n\n    /**\n     * Editor value.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [value]=\"date\">\n     * ```\n     */\n    @Input()\n    public set value(value: Date | string | undefined | null) {\n        this._value = value;\n        this.setDateValue(value);\n        this.onChangeCallback(value);\n        this.updateMask();\n    }\n\n    public get value(): Date | string | undefined | null {\n        return this._value;\n    }\n\n    /**\n     * Specify the default input format type. Defaults to `date`, which includes\n     * only date parts for editing. Other valid options are `time` and `dateTime`.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [defaultFormatType]=\"'dateTime'\">\n     * ```\n     */\n    @Input()\n    public defaultFormatType: 'date' | 'time' | 'dateTime' = 'date';\n\n    /**\n     * Delta values used to increment or decrement each editor date part on spin actions.\n     * All values default to `1`.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [spinDelta]=\"{date: 5, minute: 30}\">\n     * ```\n     */\n    @Input()\n    public spinDelta: DatePartDeltas;\n\n    /**\n     * Emitted when the editor's value has changed.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor (valueChange)=\"valueChange($event)\"/>\n     * ```\n     */\n    @Output()\n    public valueChange = new EventEmitter<Date | string>();\n\n    /**\n     * Emitted when the editor is not within a specified range or when the editor's value is in an invalid state.\n     *\n     * @example\n     * ```html\n     * <input igxDateTimeEditor [minValue]=\"minDate\" [maxValue]=\"maxDate\" (validationFailed)=\"onValidationFailed($event)\"/>\n     * ```\n     */\n    @Output()\n    public validationFailed = new EventEmitter<IgxDateTimeEditorEventArgs>();\n\n    private _inputFormat: string;\n    private _displayFormat: string;\n    private _oldValue: Date;\n    private _dateValue: Date;\n    private _onClear: boolean;\n    private document: Document;\n    private _defaultInputFormat: string;\n    private _value?: Date | string;\n    private _minValue: Date | string;\n    private _maxValue: Date | string;\n    private _inputDateParts: DatePartInfo[];\n    private _datePartDeltas: DatePartDeltas = {\n        date: 1,\n        month: 1,\n        year: 1,\n        hours: 1,\n        minutes: 1,\n        seconds: 1,\n        fractionalSeconds: 1\n    };\n\n    private onChangeCallback: (...args: any[]) => void = noop;\n    private _onValidatorChange: (...args: any[]) => void = noop;\n\n    private get datePartDeltas(): DatePartDeltas {\n        return Object.assign({}, this._datePartDeltas, this.spinDelta);\n    }\n\n    private get emptyMask(): string {\n        return this.maskParser.applyMask(null, this.maskOptions);\n    }\n\n    private get targetDatePart(): DatePart {\n        // V.K. May 16th, 2022 #11554 Get correct date part in shadow DOM\n        if (this.document.activeElement === this.nativeElement ||\n            this.document.activeElement?.shadowRoot?.activeElement === this.nativeElement) {\n            return this._inputDateParts\n                .find(p => p.start <= this.selectionStart && this.selectionStart <= p.end && p.type !== DatePart.Literal)?.type;\n        } else {\n            if (this._inputDateParts.some(p => p.type === DatePart.Date)) {\n                return DatePart.Date;\n            } else if (this._inputDateParts.some(p => p.type === DatePart.Hours)) {\n                return DatePart.Hours;\n            }\n        }\n    }\n\n    private get hasDateParts(): boolean {\n        return this._inputDateParts.some(\n            p => p.type === DatePart.Date\n                || p.type === DatePart.Month\n                || p.type === DatePart.Year);\n    }\n\n    private get hasTimeParts(): boolean {\n        return this._inputDateParts.some(\n            p => p.type === DatePart.Hours\n                || p.type === DatePart.Minutes\n                || p.type === DatePart.Seconds\n                || p.type === DatePart.FractionalSeconds);\n    }\n\n    private get dateValue(): Date {\n        return this._dateValue;\n    }\n\n    constructor(\n        renderer: Renderer2,\n        elementRef: ElementRef,\n        maskParser: MaskParsingService,\n        platform: PlatformUtil,\n        @Inject(DOCUMENT) private _document: any,\n        @Inject(LOCALE_ID) private _locale: any) {\n        super(elementRef, maskParser, renderer, platform);\n        this.document = this._document as Document;\n        this.locale = this.locale || this._locale;\n    }\n\n    @HostListener('wheel', ['$event'])\n    public onWheel(event: WheelEvent): void {\n        if (!this._focused) {\n            return;\n        }\n        event.preventDefault();\n        event.stopPropagation();\n        if (event.deltaY > 0) {\n            this.decrement();\n        } else {\n            this.increment();\n        }\n    }\n\n    public override ngOnInit(): void {\n        this.updateDefaultFormat();\n        this.setMask(this.inputFormat);\n        this.updateMask();\n    }\n\n    /** @hidden @internal */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes['locale'] && !changes['locale'].firstChange ||\n            changes['defaultFormatType'] && !changes['defaultFormatType'].firstChange\n        ) {\n            this.updateDefaultFormat();\n            this.setMask(this.inputFormat);\n            this.updateMask();\n        }\n        if (changes['inputFormat'] && !changes['inputFormat'].firstChange) {\n            this.updateMask();\n        }\n    }\n\n\n    /** Clear the input element value. */\n    public clear(): void {\n        this._onClear = true;\n        this.updateValue(null);\n        this.setSelectionRange(0, this.inputValue.length);\n        this._onClear = false;\n    }\n\n    /**\n     * Increment specified DatePart.\n     *\n     * @param datePart The optional DatePart to increment. Defaults to Date or Hours (when Date is absent from the inputFormat - ex:'HH:mm').\n     * @param delta The optional delta to increment by. Overrides `spinDelta`.\n     */\n    public increment(datePart?: DatePart, delta?: number): void {\n        const targetPart = datePart || this.targetDatePart;\n        if (!targetPart) {\n            return;\n        }\n        const newValue = this.trySpinValue(targetPart, delta);\n        this.updateValue(newValue);\n    }\n\n    /**\n     * Decrement specified DatePart.\n     *\n     * @param datePart The optional DatePart to decrement. Defaults to Date or Hours (when Date is absent from the inputFormat - ex:'HH:mm').\n     * @param delta The optional delta to decrement by. Overrides `spinDelta`.\n     */\n    public decrement(datePart?: DatePart, delta?: number): void {\n        const targetPart = datePart || this.targetDatePart;\n        if (!targetPart) {\n            return;\n        }\n        const newValue = this.trySpinValue(targetPart, delta, true);\n        this.updateValue(newValue);\n    }\n\n    /** @hidden @internal */\n    public override writeValue(value: any): void {\n        this._value = value;\n        this.setDateValue(value);\n        this.updateMask();\n    }\n\n    /** @hidden @internal */\n    public validate(control: AbstractControl): ValidationErrors | null {\n        if (!control.value) {\n            return null;\n        }\n        // InvalidDate handling\n        if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n            return { value: true };\n        }\n\n        let errors = {};\n        const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n        const minValueDate = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : this.parseDate(this.minValue);\n        const maxValueDate = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : this.parseDate(this.maxValue);\n        if (minValueDate || maxValueDate) {\n            errors = DateTimeUtil.validateMinMax(value,\n                minValueDate, maxValueDate,\n                this.hasTimeParts, this.hasDateParts);\n        }\n\n        return Object.keys(errors).length > 0 ? errors : null;\n    }\n\n    /** @hidden @internal */\n    public registerOnValidatorChange?(fn: () => void): void {\n        this._onValidatorChange = fn;\n    }\n\n    /** @hidden @internal */\n    public override registerOnChange(fn: any): void {\n        this.onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public override registerOnTouched(fn: any): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState?(_isDisabled: boolean): void { }\n\n    /** @hidden @internal */\n    public override onCompositionEnd(): void {\n        super.onCompositionEnd();\n\n        this.updateValue(this.parseDate(this.inputValue));\n        this.updateMask();\n    }\n\n    /** @hidden @internal */\n    public override onInputChanged(event): void {\n        super.onInputChanged(event);\n        if (this._composing) {\n            return;\n        }\n\n        if (this.inputIsComplete()) {\n            const parsedDate = this.parseDate(this.inputValue);\n            if (DateTimeUtil.isValidDate(parsedDate)) {\n                this.updateValue(parsedDate);\n            } else {\n                const oldValue = this.value && new Date(this.dateValue.getTime());\n                const args: IgxDateTimeEditorEventArgs = { oldValue, newValue: parsedDate, userInput: this.inputValue };\n                this.validationFailed.emit(args);\n                if (DateTimeUtil.isValidDate(args.newValue)) {\n                    this.updateValue(args.newValue);\n                } else {\n                    this.updateValue(null);\n                }\n            }\n        } else {\n            this.updateValue(null);\n        }\n    }\n\n    /** @hidden @internal */\n    public override onKeyDown(event: KeyboardEvent): void {\n        if (this.nativeElement.readOnly) {\n            return;\n        }\n        super.onKeyDown(event);\n        const key = event.key;\n\n        if (event.altKey) {\n            return;\n        }\n\n        if (key === this.platform.KEYMAP.ARROW_DOWN || key === this.platform.KEYMAP.ARROW_UP) {\n            this.spin(event);\n            return;\n        }\n\n        if (event.ctrlKey && key === this.platform.KEYMAP.SEMICOLON) {\n            this.updateValue(new Date());\n        }\n\n        this.moveCursor(event);\n    }\n\n    /** @hidden @internal */\n    public override onFocus(): void {\n        if (this.nativeElement.readOnly) {\n            return;\n        }\n        this._focused = true;\n        this._onTouchedCallback();\n        this.updateMask();\n        super.onFocus();\n        this.nativeElement.select();\n    }\n\n    /** @hidden @internal */\n    public override onBlur(value: string): void {\n        this._focused = false;\n        if (!this.inputIsComplete() && this.inputValue !== this.emptyMask) {\n            this.updateValue(this.parseDate(this.inputValue));\n        } else {\n            this.updateMask();\n        }\n\n        // TODO: think of a better way to set displayValuePipe in mask directive\n        if (this.displayValuePipe) {\n            return;\n        }\n\n        super.onBlur(value);\n    }\n\n    // the date editor sets its own inputFormat as its placeholder if none is provided\n    /** @hidden */\n    protected override setPlaceholder(_value: string): void { }\n\n    private updateDefaultFormat(): void {\n        this._defaultInputFormat = DateTimeUtil.getNumericInputFormat(this.locale, this._displayFormat)\n                                || DateTimeUtil.getDefaultInputFormat(this.locale, this.defaultFormatType);\n        this.setMask(this.inputFormat);\n    }\n\n    private updateMask(): void {\n        if (this._focused) {\n            // store the cursor position as it will be moved during masking\n            const cursor = this.selectionEnd;\n            this.inputValue = this.getMaskedValue();\n            this.setSelectionRange(cursor);\n        } else {\n            if (!this.dateValue || !DateTimeUtil.isValidDate(this.dateValue)) {\n                this.inputValue = '';\n                return;\n            }\n            if (this.displayValuePipe) {\n                // TODO: remove when formatter func has been deleted\n                this.inputValue = this.displayValuePipe.transform(this.value);\n                return;\n            }\n            const format = this.displayFormat || this.inputFormat;\n            if (format) {\n                this.inputValue = DateTimeUtil.formatDate(this.dateValue, format.replace('tt', 'aa'), this.locale);\n            } else {\n                this.inputValue = this.dateValue.toLocaleString();\n            }\n        }\n    }\n\n    private setMask(inputFormat: string): void {\n        const oldFormat = this._inputDateParts?.map(p => p.format).join('');\n        this._inputDateParts = DateTimeUtil.parseDateTimeFormat(inputFormat);\n        inputFormat = this._inputDateParts.map(p => p.format).join('');\n        const mask = (inputFormat || this._defaultInputFormat)\n        .replace(new RegExp(/(?=[^at])[\\w]/, 'g'), '0');\n        this.mask = mask.replaceAll(/(a{1,2})|tt/g, match => 'L'.repeat(match.length === 1 ? 1 : 2));\n        const placeholder = this.nativeElement.placeholder;\n        if (!placeholder || oldFormat === placeholder) {\n            this.renderer.setAttribute(this.nativeElement, 'placeholder', inputFormat);\n        }\n    }\n\n    private parseDate(val: string): Date | null {\n        if (!val) {\n            return null;\n        }\n\n        return DateTimeUtil.parseValueFromMask(val, this._inputDateParts, this.promptChar);\n    }\n\n    private getMaskedValue(): string {\n        let mask = this.emptyMask;\n        if (DateTimeUtil.isValidDate(this.value) || DateTimeUtil.parseIsoDate(this.value)) {\n            for (const part of this._inputDateParts) {\n                if (part.type === DatePart.Literal) {\n                    continue;\n                }\n                const targetValue = this.getPartValue(part, part.format.length);\n                mask = this.maskParser.replaceInMask(mask, targetValue, this.maskOptions, part.start, part.end).value;\n            }\n            return mask;\n        }\n        if (!this.inputIsComplete() || !this._onClear) {\n            return this.inputValue;\n        }\n        return mask;\n    }\n\n\n    private valueInRange(value: Date): boolean {\n        if (!value) {\n            return false;\n        }\n\n        let errors = {};\n        const minValueDate = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : this.parseDate(this.minValue);\n        const maxValueDate = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : this.parseDate(this.maxValue);\n        if (minValueDate || maxValueDate) {\n            errors = DateTimeUtil.validateMinMax(value,\n                this.minValue, this.maxValue,\n                this.hasTimeParts, this.hasDateParts);\n        }\n\n        return Object.keys(errors).length === 0;\n    }\n\n    private spinValue(datePart: DatePart, delta: number): Date {\n        if (!this.dateValue || !DateTimeUtil.isValidDate(this.dateValue)) {\n            return null;\n        }\n        const newDate = new Date(this.dateValue.getTime());\n        switch (datePart) {\n            case DatePart.Date:\n                DateTimeUtil.spinDate(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Month:\n                DateTimeUtil.spinMonth(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Year:\n                DateTimeUtil.spinYear(delta, newDate);\n                break;\n            case DatePart.Hours:\n                DateTimeUtil.spinHours(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Minutes:\n                DateTimeUtil.spinMinutes(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.Seconds:\n                DateTimeUtil.spinSeconds(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.FractionalSeconds:\n                DateTimeUtil.spinFractionalSeconds(delta, newDate, this.spinLoop);\n                break;\n            case DatePart.AmPm:\n                const formatPart = this._inputDateParts.find(dp => dp.type === DatePart.AmPm);\n                const amPmFromMask = this.inputValue.substring(formatPart.start, formatPart.end);\n                return DateTimeUtil.spinAmPm(newDate, this.dateValue, amPmFromMask);\n        }\n\n        return newDate;\n    }\n\n    private trySpinValue(datePart: DatePart, delta?: number, negative = false): Date {\n        if (!delta) {\n            // default to 1 if a delta is set to 0 or any other falsy value\n            delta = this.datePartDeltas[datePart] || 1;\n        }\n        const spinValue = negative ? -Math.abs(delta) : Math.abs(delta);\n        return this.spinValue(datePart, spinValue) || new Date();\n    }\n\n    private setDateValue(value: Date | string): void {\n        this._dateValue = DateTimeUtil.isValidDate(value)\n            ? value\n            : DateTimeUtil.parseIsoDate(value);\n    }\n\n    private updateValue(newDate: Date): void {\n        this._oldValue = this.dateValue;\n        this.value = newDate;\n\n        // TODO: should we emit events here?\n        if (this.inputIsComplete() || this.inputValue === this.emptyMask) {\n            this.valueChange.emit(this.dateValue);\n        }\n        if (this.dateValue && !this.valueInRange(this.dateValue)) {\n            this.validationFailed.emit({ oldValue: this._oldValue, newValue: this.dateValue, userInput: this.inputValue });\n        }\n    }\n\n    private toTwelveHourFormat(value: string): number {\n        let hour = parseInt(value.replace(new RegExp(this.promptChar, 'g'), '0'), 10);\n        if (hour > 12) {\n            hour -= 12;\n        } else if (hour === 0) {\n            hour = 12;\n        }\n\n        return hour;\n    }\n\n    private getPartValue(datePartInfo: DatePartInfo, partLength: number): string {\n        let maskedValue;\n        const datePart = datePartInfo.type;\n        switch (datePart) {\n            case DatePart.Date:\n                maskedValue = this.dateValue.getDate();\n                break;\n            case DatePart.Month:\n                // months are zero based\n                maskedValue = this.dateValue.getMonth() + 1;\n                break;\n            case DatePart.Year:\n                if (partLength === 2) {\n                    maskedValue = this.prependValue(\n                        parseInt(this.dateValue.getFullYear().toString().slice(-2), 10), partLength, '0');\n                } else {\n                    maskedValue = this.dateValue.getFullYear();\n                }\n                break;\n            case DatePart.Hours:\n                if (datePartInfo.format.indexOf('h') !== -1) {\n                    maskedValue = this.prependValue(\n                        this.toTwelveHourFormat(this.dateValue.getHours().toString()), partLength, '0');\n                } else {\n                    maskedValue = this.dateValue.getHours();\n                }\n                break;\n            case DatePart.Minutes:\n                maskedValue = this.dateValue.getMinutes();\n                break;\n            case DatePart.Seconds:\n                maskedValue = this.dateValue.getSeconds();\n                break;\n            case DatePart.FractionalSeconds:\n                partLength = 3;\n                maskedValue = this.prependValue(this.dateValue.getMilliseconds(), 3, '00');\n                break;\n            case DatePart.AmPm:\n                maskedValue = DateTimeUtil.getAmPmValue(partLength, this.dateValue.getHours() < 12);\n                break;\n        }\n\n        if (datePartInfo.type !== DatePart.AmPm) {\n            return this.prependValue(maskedValue, partLength, '0');\n        }\n\n        return maskedValue;\n    }\n\n    private prependValue(value: number, partLength: number, prependChar: string): string {\n        return (prependChar + value.toString()).slice(-partLength);\n    }\n\n    private spin(event: KeyboardEvent): void {\n        event.preventDefault();\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_UP:\n                this.increment();\n                break;\n            case this.platform.KEYMAP.ARROW_DOWN:\n                this.decrement();\n                break;\n        }\n    }\n\n    private inputIsComplete(): boolean {\n        return this.inputValue.indexOf(this.promptChar) === -1;\n    }\n\n    private moveCursor(event: KeyboardEvent): void {\n        const value = (event.target as HTMLInputElement).value;\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_LEFT:\n                if (event.ctrlKey) {\n                    event.preventDefault();\n                    this.setSelectionRange(this.getNewPosition(value));\n                }\n                break;\n            case this.platform.KEYMAP.ARROW_RIGHT:\n                if (event.ctrlKey) {\n                    event.preventDefault();\n                    this.setSelectionRange(this.getNewPosition(value, 1));\n                }\n                break;\n        }\n    }\n\n    /**\n     * Move the cursor in a specific direction until it reaches a date/time separator.\n     * Then return its index.\n     *\n     * @param value The string it operates on.\n     * @param direction 0 is left, 1 is right. Default is 0.\n     */\n    private getNewPosition(value: string, direction = 0): number {\n        const literals = this._inputDateParts.filter(p => p.type === DatePart.Literal);\n        let cursorPos = this.selectionStart;\n        if (!direction) {\n            do {\n                cursorPos = cursorPos > 0 ? --cursorPos : cursorPos;\n            } while (!literals.some(l => l.end === cursorPos) && cursorPos > 0);\n            return cursorPos;\n        } else {\n            do {\n                cursorPos++;\n            } while (!literals.some(l => l.start === cursorPos) && cursorPos < value.length);\n            return cursorPos;\n        }\n    }\n}\n\n\n","import {\n    Directive,\n    forwardRef,\n    ElementRef,\n    HostListener,\n    Renderer2\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({ \n    selector: 'igc-rating[ngModel],igc-rating[formControlName]',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => IgcFormControlDirective),\n            multi: true\n        }\n    ],\n    standalone: true\n})\nexport class IgcFormControlDirective implements ControlValueAccessor {\n    /** @hidden @internal */\n    private onChange: any = () => { };\n    /** @hidden @internal */\n    private onTouched: any = () => { };\n\n    constructor(\n        private elementRef: ElementRef,\n        private renderer: Renderer2) { }\n\n    /** @hidden @internal */\n    @HostListener('blur')\n    public onBlur() {\n        this.onTouched();\n    }\n\n    /** @hidden @internal */\n    @HostListener('igcChange', ['$event.detail'])\n    public listenForValueChange(value) {\n        this.onChange(value);\n    }\n\n    /** @hidden @internal */\n    public writeValue(value): void {\n        if (value) {\n            this.elementRef.nativeElement.value = value;\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn): void {\n        this.onChange = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn): void {\n        this.onTouched = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean): void {\n        this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n    }\n}\n\n","import { ColumnType } from '../grids/common/grid.interface';\nimport { ISortingExpression } from './sorting-strategy';\n\n/**\n * @hidden\n */\nexport class GroupedRecords extends Array<any> {}\n\n/* jsonAPIComplexObject */\nexport interface IGroupByRecord {\n    expression: ISortingExpression;\n    level: number;\n    /* wcAlternateType: any[] */\n    records: GroupedRecords;\n    value: any;\n    groupParent: IGroupByRecord;\n    groups?: IGroupByRecord[];\n    height: number;\n    column?: ColumnType;\n }\n","import { Directive, ElementRef, EventEmitter, InjectionToken } from '@angular/core';\nimport { AnimationReferenceMetadata } from '@angular/animations';\nimport { CancelableEventArgs, IBaseEventArgs } from '../core/utils';\n\nexport interface IgxExpansionPanelBase {\n    id: string;\n    cssClass: string;\n    /** @hidden @internal */\n    headerId: string;\n    collapsed: boolean;\n    animationSettings: { openAnimation: AnimationReferenceMetadata; closeAnimation: AnimationReferenceMetadata };\n    contentCollapsed: EventEmitter<any>;\n    contentCollapsing: EventEmitter<any>;\n    contentExpanded: EventEmitter<any>;\n    contentExpanding: EventEmitter<any>;\n    collapse(evt?: Event);\n    expand(evt?: Event);\n    toggle(evt?: Event);\n}\n\n/** @hidden */\nexport const IGX_EXPANSION_PANEL_COMPONENT = /*@__PURE__*/new InjectionToken<IgxExpansionPanelBase>('IgxExpansionPanelToken');\n\nexport interface IExpansionPanelEventArgs extends IBaseEventArgs {\n    event: Event;\n}\n\nexport interface IExpansionPanelCancelableEventArgs  extends IExpansionPanelEventArgs, CancelableEventArgs {}\n\n@Directive()\nexport abstract class HeaderContentBaseDirective {\n\n    constructor(protected element: ElementRef) { }\n\n    /**\n     * Returns the `textContent` of an element\n     *\n     * ```html\n     * <igx-expansion-panel-title>\n     *  Tooltip content\n     * </igx-expansion-panel-title>\n     * ```\n     *\n     *  or the `title` content\n     *\n     * ```html\n     * <igx-expansion-panel-title [title]=\"'Tooltip content'\">\n     * </igx-expansion-panel-title>\n     * ```\n     *\n     * If both are provided, returns the `title` content.\n     *\n     * @param element\n     * @returns tooltip content for an element\n     */\n    public getTooltipContent = (element: ElementRef): string => {\n        if (element.nativeElement.title) {\n            return element.nativeElement.title;\n        }\n        if (element.nativeElement.textContent) {\n            return element.nativeElement.textContent.trim();\n        }\n\n        return null;\n    };\n}\n","import { Component, HostBinding, ElementRef, Input, ChangeDetectorRef, Inject } from '@angular/core';\nimport { IgxExpansionPanelBase, IGX_EXPANSION_PANEL_COMPONENT } from './expansion-panel.common';\n\n@Component({\n    selector: 'igx-expansion-panel-body',\n    template: `<ng-content></ng-content>`,\n    standalone: true\n})\nexport class IgxExpansionPanelBodyComponent {\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-expansion-panel__body')\n    public cssClass = `igx-expansion-panel__body`;\n\n    /**\n     * Gets/sets the `role` attribute of the panel body\n     * Default is 'region';\n     * Get\n     * ```typescript\n     *  const currentRole = this.panel.body.role;\n     * ```\n     * Set\n     * ```typescript\n     *  this.panel.body.role = 'content';\n     * ```\n     * ```html\n     *  <igx-expansion-panel-body [role]=\"'custom'\"></igx-expansion-panel-body>\n     * ```\n     */\n    @Input()\n    @HostBinding('attr.role')\n    public role = 'region';\n\n    private _labelledBy = '';\n    private _label = '';\n    constructor(\n        @Inject(IGX_EXPANSION_PANEL_COMPONENT) public panel: IgxExpansionPanelBase,\n        public element: ElementRef, public cdr: ChangeDetectorRef) {\n    }\n\n    /**\n     * Gets the `aria-label` attribute of the panel body\n     * Defaults to the panel id with '-region' in the end;\n     * Get\n     * ```typescript\n     *  const currentLabel = this.panel.body.label;\n     * ```\n     */\n    @Input()\n    @HostBinding('attr.aria-label')\n    public get label(): string {\n        return this._label || this.panel.id + '-region';\n    }\n    /**\n     * Sets the `aria-label` attribute of the panel body\n     * ```typescript\n     *  this.panel.body.label = 'my-custom-label';\n     * ```\n     * ```html\n     *  <igx-expansion-panel-body [label]=\"'my-custom-label'\"></igx-expansion-panel-body>\n     * ```\n     */\n    public set label(val: string) {\n        this._label = val;\n    }\n\n    /**\n     * Gets the `aria-labelledby` attribute of the panel body\n     * Defaults to the panel header id;\n     * Get\n     * ```typescript\n     *  const currentLabel = this.panel.body.labelledBy;\n     * ```\n     */\n    @Input()\n    @HostBinding('attr.aria-labelledby')\n    public get labelledBy(): string {\n        return this._labelledBy;\n    }\n    /**\n     * Sets the `aria-labelledby` attribute of the panel body\n     * ```typescript\n     *  this.panel.body.labelledBy = 'my-custom-id';\n     * ```\n     * ```html\n     *  <igx-expansion-panel-body [labelledBy]=\"'my-custom-id'\"></igx-expansion-panel-body>\n     * ```\n     */\n    public set labelledBy(val: string) {\n        this._labelledBy = val;\n    }\n}\n","import { Directive, HostBinding } from '@angular/core';\nimport { HeaderContentBaseDirective } from './expansion-panel.common';\n\n/** @hidden @internal */\n@Directive({\n    selector: 'igx-expansion-panel-title',\n    standalone: true\n})\nexport class IgxExpansionPanelTitleDirective extends HeaderContentBaseDirective {\n    @HostBinding('class.igx-expansion-panel__header-title')\n    public cssClass = `igx-expansion-panel__header-title`;\n\n    @HostBinding('attr.title')\n    private get title(): string {\n        return this.getTooltipContent(this.element);\n    }\n}\n\n/** @hidden @internal */\n@Directive({\n    selector: 'igx-expansion-panel-description',\n    standalone: true\n})\nexport class IgxExpansionPanelDescriptionDirective extends HeaderContentBaseDirective {\n    @HostBinding('class.igx-expansion-panel__header-description')\n    public cssClass = `igx-expansion-panel__header-description`;\n\n    @HostBinding('attr.title')\n    private get title(): string {\n        return this.getTooltipContent(this.element);\n    }\n}\n\n/** @hidden @internal */\n@Directive({\n    selector: 'igx-expansion-panel-icon',\n    standalone: true\n})\nexport class IgxExpansionPanelIconDirective { }\n","import {\n    Component,\n    ChangeDetectorRef,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    Host,\n    EventEmitter,\n    Output,\n    ContentChild,\n    Inject,\n    ViewChild,\n    booleanAttribute\n} from '@angular/core';\nimport { IgxExpansionPanelIconDirective } from './expansion-panel.directives';\nimport { IGX_EXPANSION_PANEL_COMPONENT, IgxExpansionPanelBase, IExpansionPanelCancelableEventArgs } from './expansion-panel.common';\nimport { mkenum } from '../core/utils';\nimport { IgxIconComponent } from '../icon/icon.component';\n\n/**\n * @hidden\n */\nexport const ExpansionPanelHeaderIconPosition = /*@__PURE__*/mkenum({\n    LEFT: 'left',\n    NONE: 'none',\n    RIGHT: 'right'\n});\nexport type ExpansionPanelHeaderIconPosition = (typeof ExpansionPanelHeaderIconPosition)[keyof typeof ExpansionPanelHeaderIconPosition];\n\n\n@Component({\n    selector: 'igx-expansion-panel-header',\n    templateUrl: 'expansion-panel-header.component.html',\n    imports: [IgxIconComponent]\n})\nexport class IgxExpansionPanelHeaderComponent {\n    /**\n     * Returns a reference to the `igx-expansion-panel-icon` element;\n     * If `iconPosition` is `NONE` - return null;\n     */\n    public get iconRef(): ElementRef {\n        const renderedTemplate = this.customIconRef ?? this.defaultIconRef;\n        return this.iconPosition !== ExpansionPanelHeaderIconPosition.NONE ? renderedTemplate : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxExpansionPanelIconDirective)\n    public set iconTemplate(val: boolean) {\n        this._iconTemplate = val;\n    }\n\n    /**\n     * @hidden\n     */\n    public get iconTemplate(): boolean {\n        return this._iconTemplate;\n    }\n\n    /**\n     * Gets/sets the `aria-level` attribute of the header\n     * Get\n     * ```typescript\n     *  const currentAriaLevel = this.panel.header.lv;\n     * ```\n     * Set\n     * ```typescript\n     *  this.panel.header.lv = '5';\n     * ```\n     * ```html\n     *  <igx-expansion-panel-header [lv]=\"myCustomLevel\"></igx-expansion-panel-header>\n     * ```\n     */\n    @HostBinding('attr.aria-level')\n    @Input()\n    public lv = '3';\n\n    /**\n     * Gets/sets the `role` attribute of the header\n     * Get\n     * ```typescript\n     *  const currentRole = this.panel.header.role;\n     * ```\n     * Set\n     * ```typescript\n     *  this.panel.header.role = '5';\n     * ```\n     * ```html\n     *  <igx-expansion-panel-header [role]=\"'custom'\"></igx-expansion-panel-header>\n     * ```\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'heading';\n\n    /**\n     * @hidden\n     */\n    public get controls(): string {\n        return this.panel.id;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get innerElement() {\n        return this.elementRef.nativeElement.children[0];\n    }\n\n    /**\n     * Gets/sets the position of the expansion-panel-header expand/collapse icon\n     * Accepts `left`, `right` or `none`\n     * ```typescript\n     *  const currentIconPosition = this.panel.header.iconPosition;\n     * ```\n     * Set\n     * ```typescript\n     *  this.panel.header.iconPosition = 'left';\n     * ```\n     * ```html\n     *  <igx-expansion-panel-header [iconPosition]=\"'right'\"></igx-expansion-panel-header>\n     * ```\n     */\n    @Input()\n    public iconPosition: ExpansionPanelHeaderIconPosition = ExpansionPanelHeaderIconPosition.LEFT;\n\n    /**\n     * Emitted whenever a user interacts with the header host\n     * ```typescript\n     *  handleInteraction(event: IExpansionPanelCancelableEventArgs) {\n     *  ...\n     * }\n     * ```\n     * ```html\n     *  <igx-expansion-panel-header (interaction)=\"handleInteraction($event)\">\n     *      ...\n     *  </igx-expansion-panel-header>\n     * ```\n     */\n    @Output()\n    public interaction = new EventEmitter<IExpansionPanelCancelableEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-expansion-panel__header')\n    public cssClass = 'igx-expansion-panel__header';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-expansion-panel__header--expanded')\n    public get isExpanded() {\n        return !this.panel.collapsed;\n    }\n\n    /**\n     * Gets/sets the whether the header is disabled\n     * When disabled, the header will not handle user events and will stop their propagation\n     *\n     * ```typescript\n     *  const isDisabled = this.panel.header.disabled;\n     * ```\n     * Set\n     * ```typescript\n     *  this.panel.header.disabled = true;\n     * ```\n     * ```html\n     *  <igx-expansion-panel-header [disabled]=\"true\">\n     *     ...\n     *  </igx-expansion-panel-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-expansion-panel--disabled')\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    public set disabled(val: boolean) {\n        this._disabled = val;\n        if (val) {\n            // V.S. June 11th, 2021: #9696 TabIndex should be removed when panel is disabled\n            delete this.tabIndex;\n        } else {\n            this.tabIndex = 0;\n        }\n    }\n\n    /** @hidden @internal */\n    @ContentChild(IgxExpansionPanelIconDirective, { read: ElementRef })\n    private customIconRef: ElementRef;\n\n    /** @hidden @internal */\n    @ViewChild(IgxIconComponent, { read: ElementRef })\n    private defaultIconRef: ElementRef;\n\n    /**\n     * Sets/gets the `id` of the expansion panel header.\n     * ```typescript\n     * let panelHeaderId =  this.panel.header.id;\n     * ```\n     *\n     * @memberof IgxExpansionPanelComponent\n     */\n    public id = '';\n\n    /** @hidden @internal */\n    public tabIndex = 0;\n\n    // properties section\n    private _iconTemplate = false;\n    private _disabled = false;\n\n    constructor(\n        @Host() @Inject(IGX_EXPANSION_PANEL_COMPONENT)\n        public panel: IgxExpansionPanelBase,\n        public cdr: ChangeDetectorRef,\n        public elementRef: ElementRef,\n    ) {\n        this.id = `${this.panel.id}-header`;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.Enter', ['$event'])\n    @HostListener('keydown.Space', ['$event'])\n    @HostListener('keydown.Spacebar', ['$event'])\n    @HostListener('click', ['$event'])\n    public onAction(evt?: Event) {\n        if (this.disabled) {\n            evt.stopPropagation();\n            return;\n        }\n        const eventArgs: IExpansionPanelCancelableEventArgs = { event: evt, owner: this.panel, cancel: false };\n        this.interaction.emit(eventArgs);\n        if (eventArgs.cancel === true) {\n            return;\n        }\n        this.panel.toggle(evt);\n        evt.preventDefault();\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown.Alt.ArrowDown', ['$event'])\n    public openPanel(event: KeyboardEvent) {\n        if (event.altKey) {\n            const eventArgs: IExpansionPanelCancelableEventArgs = { event, owner: this.panel, cancel: false };\n            this.interaction.emit(eventArgs);\n            if (eventArgs.cancel === true) {\n                return;\n            }\n            this.panel.expand(event);\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown.Alt.ArrowUp', ['$event'])\n    public closePanel(event: KeyboardEvent) {\n        if (event.altKey) {\n            const eventArgs: IExpansionPanelCancelableEventArgs = { event, owner: this.panel, cancel: false };\n            this.interaction.emit(eventArgs);\n            if (eventArgs.cancel === true) {\n                return;\n            }\n            this.panel.collapse(event);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public get iconPositionClass(): string {\n        switch (this.iconPosition) {\n            case (ExpansionPanelHeaderIconPosition.LEFT):\n                return `igx-expansion-panel__header-icon--start`;\n            case (ExpansionPanelHeaderIconPosition.RIGHT):\n                return `igx-expansion-panel__header-icon--end`;\n            case (ExpansionPanelHeaderIconPosition.NONE):\n                return `igx-expansion-panel__header-icon--none`;\n            default:\n                return '';\n        }\n    }\n}\n","<div class=\"igx-expansion-panel__header-inner\" [attr.tabindex]=\"tabIndex\" role=\"button\" [attr.id]=\"id\"\n[attr.aria-disabled]=\"disabled\" [attr.aria-expanded]=\"isExpanded\" [attr.aria-controls]=\"controls\">\n    <div class=\"igx-expansion-panel__title-wrapper\">\n        <ng-content select=\"igx-expansion-panel-title\"></ng-content>\n        <ng-content select=\"igx-expansion-panel-description\"></ng-content>\n    </div>\n    <ng-content></ng-content>\n    <div [class]=\"iconPositionClass\">\n        @if (iconTemplate) {\n            <ng-content select=\"igx-expansion-panel-icon\"></ng-content>\n        }\n        @if (!iconTemplate) {\n            <igx-icon\n                family=\"default\"\n                [name]=\"panel.collapsed ? 'expand' : 'collapse'\"\n                [attr.aria-hidden]=\"true\">\n            </igx-icon>\n        }\n    </div>\n</div>\n","import { AnimationReferenceMetadata } from '@angular/animations';\nimport { Directive, ElementRef, EventEmitter, Inject, OnDestroy } from '@angular/core';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { IgxAngularAnimationService } from '../services/animation/angular-animation-service';\nimport { AnimationPlayer, AnimationService } from '../services/animation/animation';\nimport { growVerIn, growVerOut } from 'igniteui-angular/animations';\n\n/**@hidden @internal */\nexport interface ToggleAnimationSettings {\n    openAnimation: AnimationReferenceMetadata;\n    closeAnimation: AnimationReferenceMetadata;\n}\n\nexport interface ToggleAnimationOwner {\n    animationSettings: ToggleAnimationSettings;\n    openAnimationStart: EventEmitter<void>;\n    openAnimationDone: EventEmitter<void>;\n    closeAnimationStart: EventEmitter<void>;\n    closeAnimationDone: EventEmitter<void>;\n    openAnimationPlayer: AnimationPlayer;\n    closeAnimationPlayer: AnimationPlayer;\n    playOpenAnimation(element: ElementRef, onDone: () => void): void;\n    playCloseAnimation(element: ElementRef, onDone: () => void): void;\n}\n\n/** @hidden @internal */\nexport enum ANIMATION_TYPE {\n    OPEN = 'open',\n    CLOSE = 'close',\n}\n\n/**@hidden @internal */\n@Directive()\nexport abstract class ToggleAnimationPlayer implements ToggleAnimationOwner, OnDestroy {\n    /** @hidden @internal */\n    public openAnimationDone: EventEmitter<void> = new EventEmitter();\n    /** @hidden @internal */\n    public closeAnimationDone: EventEmitter<void> = new EventEmitter();\n    /** @hidden @internal */\n    public openAnimationStart: EventEmitter<void> = new EventEmitter();\n    /** @hidden @internal */\n    public closeAnimationStart: EventEmitter<void> = new EventEmitter();\n\n    public get animationSettings(): ToggleAnimationSettings {\n        return this._animationSettings;\n    }\n    public set animationSettings(value: ToggleAnimationSettings) {\n        this._animationSettings = value;\n    }\n\n    /** @hidden @internal */\n    public openAnimationPlayer: AnimationPlayer = null;\n\n    /** @hidden @internal */\n    public closeAnimationPlayer: AnimationPlayer = null;\n\n    protected destroy$: Subject<void> = new Subject();\n    protected players: Map<string, AnimationPlayer> = new Map();\n    protected _animationSettings: ToggleAnimationSettings = {\n        openAnimation: growVerIn,\n        closeAnimation: growVerOut\n    };\n\n    private closeInterrupted = false;\n    private openInterrupted = false;\n\n    private _defaultClosedCallback = noop;\n    private _defaultOpenedCallback = noop;\n    private onClosedCallback: () => any = this._defaultClosedCallback;\n    private onOpenedCallback: () => any = this._defaultOpenedCallback;\n\n    constructor(@Inject(IgxAngularAnimationService) protected animationService: AnimationService) {\n    }\n\n    /** @hidden @internal */\n    public playOpenAnimation(targetElement: ElementRef, onDone?: () => void): void {\n        this.startPlayer(ANIMATION_TYPE.OPEN, targetElement, onDone || this._defaultOpenedCallback);\n    }\n\n    /** @hidden @internal */\n    public playCloseAnimation(targetElement: ElementRef, onDone?: () => void): void {\n        this.startPlayer(ANIMATION_TYPE.CLOSE, targetElement, onDone || this._defaultClosedCallback);\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy() {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private startPlayer(type: ANIMATION_TYPE, targetElement: ElementRef, callback: () => void): void {\n        if (!targetElement) { // if no element is passed, there is nothing to animate\n            return;\n        }\n        let target = this.getPlayer(type);\n        if (!target) {\n            target = this.initializePlayer(type, targetElement, callback);\n        }\n        // V.S. Jun 28th, 2021 #9783: player will NOT be initialized w/ null settings\n        // events will already be emitted\n        if (!target || target.hasStarted()) {\n            return;\n        }\n        const targetEmitter = type === ANIMATION_TYPE.OPEN ? this.openAnimationStart : this.closeAnimationStart;\n        targetEmitter.emit();\n        if (target) {\n            target.play();\n        }\n    }\n\n    private initializePlayer(type: ANIMATION_TYPE, targetElement: ElementRef, callback: () => void): AnimationPlayer {\n        const oppositeType = type === ANIMATION_TYPE.OPEN ? ANIMATION_TYPE.CLOSE : ANIMATION_TYPE.OPEN;\n        // V.S. Jun 28th, 2021 #9783: Treat falsy animation settings as disabled animations\n        const targetAnimationSettings = this.animationSettings || { closeAnimation: null, openAnimation: null };\n        const animationSettings = type === ANIMATION_TYPE.OPEN ?\n            targetAnimationSettings.openAnimation : targetAnimationSettings.closeAnimation;\n        // V.S. Jun 28th, 2021 #9783: When no animation in target direction, emit start and done events and return\n        if (!animationSettings) {\n            this.setCallback(type, callback);\n            const targetEmitter = type === ANIMATION_TYPE.OPEN ? this.openAnimationStart : this.closeAnimationStart;\n            targetEmitter.emit();\n            this.onDoneHandler(type);\n            return;\n        }\n        const opposite = this.getPlayer(oppositeType);\n        let oppositePosition = 1;\n        if (opposite) {\n            oppositePosition = opposite.position;\n            this.cleanUpPlayer(oppositeType);\n        }\n        if (type === ANIMATION_TYPE.OPEN) {\n            this.openAnimationPlayer = this.animationService.buildAnimation(animationSettings, targetElement.nativeElement);\n        } else if (type === ANIMATION_TYPE.CLOSE) {\n            this.closeAnimationPlayer = this.animationService.buildAnimation(animationSettings, targetElement.nativeElement);\n        }\n        const target = this.getPlayer(type);\n        target.init();\n        this.getPlayer(type).position = 1 - oppositePosition;\n        this.setCallback(type, callback);\n        target.animationEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.onDoneHandler(type);\n        });\n        return target;\n    }\n\n    private onDoneHandler(type) {\n        const targetEmitter = type === ANIMATION_TYPE.OPEN ? this.openAnimationDone : this.closeAnimationDone;\n        const targetCallback = type === ANIMATION_TYPE.OPEN ? this.onOpenedCallback : this.onClosedCallback;\n        targetCallback();\n        if (!(type === ANIMATION_TYPE.OPEN ? this.openInterrupted : this.closeInterrupted)) {\n            targetEmitter.emit();\n        }\n        this.cleanUpPlayer(type);\n    }\n\n    private setCallback(type: ANIMATION_TYPE, callback: () => void) {\n        if (type === ANIMATION_TYPE.OPEN) {\n            this.onOpenedCallback = callback;\n            this.openInterrupted = false;\n        } else if (type === ANIMATION_TYPE.CLOSE) {\n            this.onClosedCallback = callback;\n            this.closeInterrupted = false;\n        }\n    }\n\n    private cleanUpPlayer(target: ANIMATION_TYPE) {\n        switch (target) {\n            case ANIMATION_TYPE.CLOSE:\n                if (this.closeAnimationPlayer != null) {\n                    this.closeAnimationPlayer.reset();\n                    this.closeAnimationPlayer.destroy();\n                    this.closeAnimationPlayer = null;\n                }\n                this.closeInterrupted = true;\n                this.onClosedCallback = this._defaultClosedCallback;\n                break;\n            case ANIMATION_TYPE.OPEN:\n                if (this.openAnimationPlayer != null) {\n                    this.openAnimationPlayer.reset();\n                    this.openAnimationPlayer.destroy();\n                    this.openAnimationPlayer = null;\n                }\n                this.openInterrupted = true;\n                this.onOpenedCallback = this._defaultOpenedCallback;\n                break;\n            default:\n                break;\n        }\n    }\n\n    private getPlayer(type: ANIMATION_TYPE): AnimationPlayer {\n        switch (type) {\n            case ANIMATION_TYPE.OPEN:\n                return this.openAnimationPlayer;\n            case ANIMATION_TYPE.CLOSE:\n                return this.closeAnimationPlayer;\n            default:\n                return null;\n        }\n    }\n}\n","import {\n    AfterContentInit,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Inject,\n    Input,\n    Output,\n    booleanAttribute\n} from '@angular/core';\nimport { IgxAngularAnimationService } from '../services/animation/angular-animation-service';\nimport { AnimationService } from '../services/animation/animation';\nimport { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component';\nimport { IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component';\nimport {\n    IExpansionPanelCancelableEventArgs,\n    IExpansionPanelEventArgs,\n    IgxExpansionPanelBase,\n    IGX_EXPANSION_PANEL_COMPONENT\n} from './expansion-panel.common';\nimport { ToggleAnimationPlayer, ToggleAnimationSettings } from './toggle-animation-component';\n\nlet NEXT_ID = 0;\n\n@Component({\n    selector: 'igx-expansion-panel',\n    templateUrl: 'expansion-panel.component.html',\n    providers: [{ provide: IGX_EXPANSION_PANEL_COMPONENT, useExisting: IgxExpansionPanelComponent }],\n    imports: []\n})\nexport class IgxExpansionPanelComponent extends ToggleAnimationPlayer implements IgxExpansionPanelBase, AfterContentInit {\n    /**\n     * Sets/gets the animation settings of the expansion panel component\n     * Open and Close animation should be passed\n     *\n     * Get\n     * ```typescript\n     *  const currentAnimations = this.panel.animationSettings;\n     * ```\n     * Set\n     * ```typescript\n     *  import { slideInLeft, slideOutRight } from 'igniteui-angular';\n     *  ...\n     *  this.panel.animationsSettings = {\n     *      openAnimation: slideInLeft,\n     *      closeAnimation: slideOutRight\n     * };\n     * ```\n     * or via template\n     * ```typescript\n     *  import { slideInLeft, slideOutRight } from 'igniteui-angular';\n     *  ...\n     *  myCustomAnimationObject = {\n     *      openAnimation: slideInLeft,\n     *      closeAnimation: slideOutRight\n     * };\n     * ```html\n     *  <igx-expansion-panel [animationSettings]='myCustomAnimationObject'>\n     *  ...\n     *  </igx-expansion-panel>\n     * ```\n     */\n    @Input()\n    public override get animationSettings(): ToggleAnimationSettings {\n        return this._animationSettings;\n    }\n    public override set animationSettings(value: ToggleAnimationSettings) {\n        this._animationSettings = value;\n    }\n\n    /**\n     * Sets/gets the `id` of the expansion panel component.\n     * If not set, `id` will have value `\"igx-expansion-panel-0\"`;\n     * ```html\n     * <igx-expansion-panel id = \"my-first-expansion-panel\"></igx-expansion-panel>\n     * ```\n     * ```typescript\n     * let panelId =  this.panel.id;\n     * ```\n     *\n     * @memberof IgxExpansionPanelComponent\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-expansion-panel-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-expansion-panel')\n    public cssClass = 'igx-expansion-panel';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-expansion-panel--expanded')\n    private opened = false;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.aria-expanded')\n    public get panelExpanded() {\n        return !this.collapsed;\n    }\n\n    /**\n     * Gets/sets whether the component is collapsed (its content is hidden)\n     * Get\n     * ```typescript\n     *  const myPanelState: boolean = this.panel.collapsed;\n     * ```\n     * Set\n     * ```html\n     *  this.panel.collapsed = true;\n     * ```\n     *\n     * Two-way data binding:\n     * ```html\n     * <igx-expansion-panel [(collapsed)]=\"model.isCollapsed\"></igx-expansion-panel>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public collapsed = true;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public collapsedChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted when the expansion panel starts collapsing\n     * ```typescript\n     *  handleCollapsing(event: IExpansionPanelCancelableEventArgs)\n     * ```\n     * ```html\n     *  <igx-expansion-panel (contentCollapsing)=\"handleCollapsing($event)\">\n     *      ...\n     *  </igx-expansion-panel>\n     * ```\n     */\n    @Output()\n    public contentCollapsing = new EventEmitter<IExpansionPanelCancelableEventArgs>();\n\n    /**\n     * Emitted when the expansion panel finishes collapsing\n     * ```typescript\n     *  handleCollapsed(event: IExpansionPanelEventArgs)\n     * ```\n     * ```html\n     *  <igx-expansion-panel (contentCollapsed)=\"handleCollapsed($event)\">\n     *      ...\n     *  </igx-expansion-panel>\n     * ```\n     */\n    @Output()\n    public contentCollapsed = new EventEmitter<IExpansionPanelEventArgs>();\n\n    /**\n     * Emitted when the expansion panel starts expanding\n     * ```typescript\n     *  handleExpanding(event: IExpansionPanelCancelableEventArgs)\n     * ```\n     * ```html\n     *  <igx-expansion-panel (contentExpanding)=\"handleExpanding($event)\">\n     *      ...\n     *  </igx-expansion-panel>\n     * ```\n     */\n    @Output()\n    public contentExpanding = new EventEmitter<IExpansionPanelCancelableEventArgs>();\n\n    /**\n     * Emitted when the expansion panel finishes expanding\n     * ```typescript\n     *  handleExpanded(event: IExpansionPanelEventArgs)\n     * ```\n     * ```html\n     *  <igx-expansion-panel (contentExpanded)=\"handleExpanded($event)\">\n     *      ...\n     *  </igx-expansion-panel>\n     * ```\n     */\n    @Output()\n    public contentExpanded = new EventEmitter<IExpansionPanelEventArgs>();\n\n    /**\n     * @hidden\n     */\n    public get headerId() {\n        return this.header ? `${this.id}-header` : '';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxExpansionPanelBodyComponent, { read: IgxExpansionPanelBodyComponent })\n    public body: IgxExpansionPanelBodyComponent;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxExpansionPanelHeaderComponent, { read: IgxExpansionPanelHeaderComponent })\n    public header: IgxExpansionPanelHeaderComponent;\n\n    constructor(\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        private cdr: ChangeDetectorRef,\n        private elementRef?: ElementRef) {\n        super(animationService);\n    }\n\n    /** @hidden */\n    public ngAfterContentInit(): void {\n        if (this.body && this.header) {\n            // schedule at end of turn:\n            Promise.resolve().then(() => {\n                this.body.labelledBy = this.body.labelledBy || this.headerId;\n                this.body.label = this.body.label || this.id + '-region';\n            });\n        }\n    }\n\n    /**\n     * Collapses the panel\n     *\n     * ```html\n     *  <igx-expansion-panel #myPanel>\n     *      ...\n     *  </igx-expansion-panel>\n     *  <button type=\"button\" igxButton (click)=\"myPanel.collapse($event)\">Collpase Panel</button>\n     * ```\n     */\n    public collapse(evt?: Event) {\n        // If expansion panel is already collapsed or is collapsing, do nothing\n        if (this.collapsed || this.closeAnimationPlayer) {\n            return;\n        }\n        const args = { event: evt, panel: this, owner: this, cancel: false };\n        this.contentCollapsing.emit(args);\n        if (args.cancel === true) {\n            return;\n        }\n        this.opened = false;\n        this.playCloseAnimation(\n            this.body?.element,\n            () => {\n                this.contentCollapsed.emit({ event: evt, owner: this });\n                this.collapsed = true;\n                this.collapsedChange.emit(true);\n                this.cdr.markForCheck();\n            }\n        );\n    }\n\n    /**\n     * Expands the panel\n     *\n     * ```html\n     *  <igx-expansion-panel #myPanel>\n     *      ...\n     *  </igx-expansion-panel>\n     *  <button type=\"button\" igxButton (click)=\"myPanel.expand($event)\">Expand Panel</button>\n     * ```\n     */\n    public expand(evt?: Event) {\n        if (!this.collapsed && !this.closeAnimationPlayer) { // Check if the panel is currently collapsing or already expanded\n            return;\n        }\n        const args = { event: evt, panel: this, owner: this, cancel: false };\n        this.contentExpanding.emit(args);\n        if (args.cancel === true) {\n            return;\n        }\n        this.collapsed = false;\n        this.opened = true;\n        this.collapsedChange.emit(false);\n        this.cdr.detectChanges();\n        this.playOpenAnimation(\n            this.body?.element,\n            () => {\n                this.contentExpanded.emit({ event: evt, owner: this });\n            }\n        );\n    }\n\n    /**\n     * Toggles the panel\n     *\n     * ```html\n     *  <igx-expansion-panel #myPanel>\n     *      ...\n     *  </igx-expansion-panel>\n     *  <button type=\"button\" igxButton (click)=\"myPanel.toggle($event)\">Expand Panel</button>\n     * ```\n     */\n    public toggle(evt?: Event) {\n        if (this.collapsed) {\n            this.open(evt);\n        } else {\n            this.close(evt);\n        }\n    }\n\n    public open(evt?: Event) {\n        this.expand(evt);\n    }\n\n    public close(evt?: Event) {\n        this.collapse(evt);\n    }\n}\n","<ng-content select=\"igx-expansion-panel-header\"></ng-content>\n@if (!collapsed) {\n    <ng-content select=\"igx-expansion-panel-body\"></ng-content>\n}\n","import {\n    AfterContentInit, AfterViewInit, ChangeDetectorRef, Component, ContentChildren, EventEmitter,\n    HostBinding, Input, OnDestroy, Output, QueryList, booleanAttribute\n} from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ACCORDION_NAVIGATION_KEYS } from '../core/utils';\nimport {\n    IExpansionPanelCancelableEventArgs,\n    IExpansionPanelEventArgs, IgxExpansionPanelBase\n} from '../expansion-panel/expansion-panel.common';\nimport { IgxExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { ToggleAnimationSettings } from '../expansion-panel/toggle-animation-component';\n\nexport interface IAccordionEventArgs extends IExpansionPanelEventArgs {\n    owner: IgxAccordionComponent;\n    /** Provides a reference to the `IgxExpansionPanelComponent` which was expanded/collapsed. */\n    panel: IgxExpansionPanelBase;\n}\n\nexport interface IAccordionCancelableEventArgs extends IExpansionPanelCancelableEventArgs {\n    owner: IgxAccordionComponent;\n    /** Provides a reference to the `IgxExpansionPanelComponent` which is currently expanding/collapsing. */\n    panel: IgxExpansionPanelBase;\n}\n\nlet NEXT_ID = 0;\n\n/**\n * IgxAccordion is a container-based component that contains that can house multiple expansion panels.\n *\n * @igxModule IgxAccordionModule\n *\n * @igxKeywords accordion\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Accordion component enables the user to navigate among multiple collapsing panels\n * displayed in a single container.\n * The accordion offers keyboard navigation and API to control the underlying panels' expansion state.\n *\n * @example\n * ```html\n * <igx-accordion>\n *   <igx-expansion-panel *ngFor=\"let panel of panels\">\n *       ...\n *   </igx-expansion-panel>\n * </igx-accordion>\n * ```\n */\n@Component({\n    selector: 'igx-accordion',\n    templateUrl: 'accordion.component.html',\n    standalone: true\n})\nexport class IgxAccordionComponent implements AfterContentInit, AfterViewInit, OnDestroy {\n    /**\n     * Get/Set the `id` of the accordion component.\n     * Default value is `\"igx-accordion-0\"`;\n     * ```html\n     * <igx-accordion id=\"my-first-accordion\"></igx-accordion>\n     * ```\n     * ```typescript\n     * const accordionId = this.accordion.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-accordion-${NEXT_ID++}`;\n\n    /** @hidden @internal **/\n    @HostBinding('class.igx-accordion')\n    public cssClass = 'igx-accordion';\n\n    /** @hidden @internal **/\n    @HostBinding('style.display')\n    public displayStyle = 'block';\n\n    /**\n     * Get/Set the animation settings that panels should use when expanding/collpasing.\n     *\n     * ```html\n     * <igx-accordion [animationSettings]=\"customAnimationSettings\"></igx-accordion>\n     * ```\n     *\n     * ```typescript\n     * const customAnimationSettings: ToggleAnimationSettings = {\n     *      openAnimation: growVerIn,\n     *      closeAnimation: growVerOut\n     * };\n     *\n     * this.accordion.animationSettings = customAnimationSettings;\n     * ```\n     */\n    @Input()\n    public get animationSettings(): ToggleAnimationSettings {\n        return this._animationSettings;\n    }\n\n    public set animationSettings(value: ToggleAnimationSettings) {\n        this._animationSettings = value;\n        this.updatePanelsAnimation();\n    }\n\n    /**\n     * Get/Set how the accordion handles the expansion of the projected expansion panels.\n     * If set to `true`, only a single panel can be expanded at a time, collapsing all others\n     *\n     * ```html\n     * <igx-accordion [singleBranchExpand]=\"true\">\n     * ...\n     * </igx-accordion>\n     * ```\n     *\n     * ```typescript\n     * this.accordion.singleBranchExpand = false;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get singleBranchExpand(): boolean {\n        return this._singleBranchExpand;\n    }\n\n    public set singleBranchExpand(val: boolean) {\n        this._singleBranchExpand = val;\n        if (val) {\n            this.collapseAllExceptLast();\n        }\n    }\n\n    /**\n     * Emitted before a panel is expanded.\n     *\n     * @remarks\n     * This event is cancelable.\n     *\n     * ```html\n     * <igx-accordion (panelExpanding)=\"handlePanelExpanding($event)\">\n     * </igx-accordion>\n     * ```\n     *\n     *```typescript\n     * public handlePanelExpanding(event: IExpansionPanelCancelableEventArgs){\n     *  const expandedPanel: IgxExpansionPanelComponent = event.panel;\n     *  if (expandedPanel.disabled) {\n     *      event.cancel = true;\n     *  }\n     * }\n     *```\n     */\n    @Output()\n    public panelExpanding = new EventEmitter<IAccordionCancelableEventArgs>();\n\n    /**\n     * Emitted after a panel has been expanded.\n     *\n     * ```html\n     * <igx-accordion (panelExpanded)=\"handlePanelExpanded($event)\">\n     * </igx-accordion>\n     * ```\n     *\n     *```typescript\n     * public handlePanelExpanded(event: IExpansionPanelCancelableEventArgs) {\n     *  const expandedPanel: IgxExpansionPanelComponent = event.panel;\n     *  console.log(\"Panel is expanded: \", expandedPanel.id);\n     * }\n     *```\n     */\n    @Output()\n    public panelExpanded = new EventEmitter<IAccordionEventArgs>();\n\n    /**\n     * Emitted before a panel is collapsed.\n     *\n     * @remarks\n     * This event is cancelable.\n     *\n     * ```html\n     * <igx-accordion (panelCollapsing)=\"handlePanelCollapsing($event)\">\n     * </igx-accordion>\n     * ```\n     */\n    @Output()\n    public panelCollapsing = new EventEmitter<IAccordionCancelableEventArgs>();\n\n    /**\n     * Emitted after a panel has been collapsed.\n     *\n     * ```html\n     * <igx-accordion (panelCollapsed)=\"handlePanelCollapsed($event)\">\n     * </igx-accordion>\n     * ```\n     */\n    @Output()\n    public panelCollapsed = new EventEmitter<IAccordionEventArgs>();\n\n    /**\n     * Get all panels.\n     *\n     * ```typescript\n     * const panels: IgxExpansionPanelComponent[] = this.accordion.panels;\n     * ```\n     */\n    public get panels(): IgxExpansionPanelComponent[] {\n        return this._panels?.toArray();\n    }\n\n    @ContentChildren(IgxExpansionPanelComponent)\n    private _panels!: QueryList<IgxExpansionPanelComponent>;\n    private _animationSettings!: ToggleAnimationSettings;\n    private _expandedPanels!: Set<IgxExpansionPanelComponent>;\n    private _expandingPanels!: Set<IgxExpansionPanelComponent>;\n    private _destroy$ = new Subject<void>();\n    private _unsubChildren$ = new Subject<void>();\n    private _enabledPanels!: IgxExpansionPanelComponent[];\n    private _singleBranchExpand = false;\n\n    constructor(private cdr: ChangeDetectorRef) { }\n\n    /** @hidden @internal **/\n    public ngAfterContentInit(): void {\n        this.updatePanelsAnimation();\n        if (this.singleBranchExpand) {\n            this.collapseAllExceptLast();\n        }\n    }\n\n    /** @hidden @internal **/\n    public ngAfterViewInit(): void {\n        this._expandedPanels = new Set<IgxExpansionPanelComponent>(this._panels.filter(panel => !panel.collapsed));\n        this._expandingPanels = new Set<IgxExpansionPanelComponent>();\n        this._panels.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {\n            this.subToChanges();\n        });\n        this.subToChanges();\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy(): void {\n        this._unsubChildren$.next();\n        this._unsubChildren$.complete();\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /**\n     * Expands all collapsed expansion panels.\n     *\n     * ```typescript\n     * accordion.expandAll();\n     * ```\n     */\n    public expandAll(): void {\n        if (this.singleBranchExpand) {\n            for (let i = 0; i < this.panels.length - 1; i++) {\n                this.panels[i].collapse();\n            }\n            this._panels.last.expand();\n            return;\n        }\n\n        this.panels.forEach(panel => panel.expand());\n    }\n\n    /**\n     * Collapses all expanded expansion panels.\n     *\n     * ```typescript\n     * accordion.collapseAll();\n     * ```\n     */\n    public collapseAll(): void {\n        this.panels.forEach(panel => panel.collapse());\n    }\n\n    private collapseAllExceptLast(): void {\n        const lastExpanded = this.panels?.filter(p => !p.collapsed && !p.header.disabled).pop();\n        this.panels?.forEach((p: IgxExpansionPanelComponent) => {\n            if (p !== lastExpanded && !p.header.disabled) {\n                p.collapsed = true;\n            }\n        });\n        this.cdr.markForCheck();\n    }\n\n    private handleKeydown(event: KeyboardEvent, panel: IgxExpansionPanelComponent): void {\n        const key = event.key.toLowerCase();\n        if (!(ACCORDION_NAVIGATION_KEYS.has(key))) {\n            return;\n        }\n        // TO DO: if we ever want to improve the performance of the accordion,\n        // enabledPanels could be cached (by making a disabledChange emitter on the panel header)\n        this._enabledPanels = this._panels.filter(p => !p.header.disabled);\n        event.preventDefault();\n        this.handleNavigation(event, panel);\n    }\n\n    private handleNavigation(event: KeyboardEvent, panel: IgxExpansionPanelComponent): void {\n        switch (event.key.toLowerCase()) {\n            case 'home':\n                this._enabledPanels[0].header.innerElement.focus();\n                break;\n            case 'end':\n                this._enabledPanels[this._enabledPanels.length - 1].header.innerElement.focus();\n                break;\n            case 'arrowup':\n            case 'up':\n                this.handleUpDownArrow(true, event, panel);\n                break;\n            case 'arrowdown':\n            case 'down':\n                this.handleUpDownArrow(false, event, panel);\n                break;\n        }\n    }\n\n    private handleUpDownArrow(isUp: boolean, event: KeyboardEvent, panel: IgxExpansionPanelComponent): void {\n        if (!event.altKey) {\n            const focusedPanel = panel;\n            const next = this.getNextPanel(focusedPanel, isUp ? -1 : 1);\n            if (next === focusedPanel) {\n                return;\n            }\n            next.header.innerElement.focus();\n        }\n        if (event.altKey && event.shiftKey) {\n            if (isUp) {\n                this._enabledPanels.forEach(p => p.collapse());\n            } else {\n                if (this.singleBranchExpand) {\n                    for (let i = 0; i < this._enabledPanels.length - 1; i++) {\n                        this._enabledPanels[i].collapse();\n                    }\n                    this._enabledPanels[this._enabledPanels.length - 1].expand();\n                    return;\n                }\n                this._enabledPanels.forEach(p => p.expand());\n            }\n        }\n    }\n\n    private getNextPanel(panel: IgxExpansionPanelComponent, dir: 1 | -1 = 1): IgxExpansionPanelComponent {\n        const panelIndex = this._enabledPanels.indexOf(panel);\n        return this._enabledPanels[panelIndex + dir] || panel;\n    }\n\n    private subToChanges(): void {\n        this._unsubChildren$.next();\n        this._panels.forEach(panel => {\n            panel.contentExpanded.pipe(takeUntil(this._unsubChildren$)).subscribe((args: IExpansionPanelEventArgs) => {\n                this._expandedPanels.add(args.owner);\n                this._expandingPanels.delete(args.owner);\n                const evArgs: IAccordionEventArgs = { ...args, owner: this, panel: args.owner };\n                this.panelExpanded.emit(evArgs);\n            });\n            panel.contentExpanding.pipe(takeUntil(this._unsubChildren$)).subscribe((args: IExpansionPanelCancelableEventArgs) => {\n                if (args.cancel) {\n                    return;\n                }\n                const evArgs: IAccordionCancelableEventArgs = { ...args, owner: this, panel: args.owner };\n                this.panelExpanding.emit(evArgs);\n                if (evArgs.cancel) {\n                    args.cancel = true;\n                    return;\n                }\n                if (this.singleBranchExpand) {\n                    this._expandedPanels.forEach(p => {\n                        if (!p.header.disabled) {\n                            p.collapse();\n                        }\n                    });\n                    this._expandingPanels.forEach(p => {\n                        if (!p.header.disabled) {\n                            if (!p.animationSettings.closeAnimation) {\n                                p.openAnimationPlayer?.reset();\n                            }\n                            if (!p.animationSettings.openAnimation) {\n                                p.closeAnimationPlayer?.reset();\n                            }\n                            p.collapse();\n                        }\n                    });\n                    this._expandingPanels.add(args.owner);\n                }\n            });\n            panel.contentCollapsed.pipe(takeUntil(this._unsubChildren$)).subscribe((args: IExpansionPanelEventArgs) => {\n                this._expandedPanels.delete(args.owner);\n                this._expandingPanels.delete(args.owner);\n                const evArgs: IAccordionEventArgs = { ...args, owner: this, panel: args.owner };\n                this.panelCollapsed.emit(evArgs);\n            });\n            panel.contentCollapsing.pipe(takeUntil(this._unsubChildren$)).subscribe((args: IExpansionPanelCancelableEventArgs) => {\n                const evArgs: IAccordionCancelableEventArgs = { ...args, owner: this, panel: args.owner };\n                this.panelCollapsing.emit(evArgs);\n                if (evArgs.cancel) {\n                    args.cancel = true;\n                }\n            });\n            fromEvent(panel.header.innerElement, 'keydown')\n                .pipe(takeUntil(this._unsubChildren$))\n                .subscribe((e: KeyboardEvent) => {\n                    this.handleKeydown(e, panel);\n                });\n        });\n    }\n\n    private updatePanelsAnimation(): void {\n        if (this.animationSettings !== undefined) {\n            this.panels?.forEach(panel => panel.animationSettings = this.animationSettings);\n        }\n    }\n}\n","<ng-content select=\"igx-expansion-panel\"></ng-content>\n","import { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component';\nimport { IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component';\nimport { IgxExpansionPanelComponent } from './expansion-panel.component';\nimport { IgxExpansionPanelDescriptionDirective, IgxExpansionPanelIconDirective, IgxExpansionPanelTitleDirective } from './expansion-panel.directives';\n\nexport { IExpansionPanelEventArgs } from './expansion-panel.common';\nexport { IgxExpansionPanelHeaderComponent } from './expansion-panel-header.component';\nexport { IgxExpansionPanelBodyComponent } from './expansion-panel-body.component';\nexport { IgxExpansionPanelComponent } from './expansion-panel.component';\nexport {\n    IgxExpansionPanelDescriptionDirective,\n    IgxExpansionPanelIconDirective,\n    IgxExpansionPanelTitleDirective\n} from './expansion-panel.directives';\nexport { ExpansionPanelHeaderIconPosition } from './expansion-panel-header.component';\n\n/* NOTE: Expansion panel directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_EXPANSION_PANEL_DIRECTIVES = [\n    IgxExpansionPanelComponent,\n    IgxExpansionPanelHeaderComponent,\n    IgxExpansionPanelBodyComponent,\n    IgxExpansionPanelDescriptionDirective,\n    IgxExpansionPanelTitleDirective,\n    IgxExpansionPanelIconDirective\n] as const;\n","import { IgxAccordionComponent } from './accordion.component';\n\nexport * from './accordion.component';\n\n/* Imports that cannot be resolved from IGX_EXPANSION_PANEL_DIRECTIVES spread\n    NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\n import {\n    IgxExpansionPanelComponent,\n    IgxExpansionPanelHeaderComponent,\n    IgxExpansionPanelBodyComponent,\n    IgxExpansionPanelDescriptionDirective,\n    IgxExpansionPanelTitleDirective,\n    IgxExpansionPanelIconDirective\n} from '../expansion-panel/public_api';\n\n/* Accordion directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_ACCORDION_DIRECTIVES = [\n    IgxAccordionComponent,\n    IgxExpansionPanelComponent,\n    IgxExpansionPanelHeaderComponent,\n    IgxExpansionPanelBodyComponent,\n    IgxExpansionPanelDescriptionDirective,\n    IgxExpansionPanelTitleDirective,\n    IgxExpansionPanelIconDirective\n] as const;\n","export interface IActionStripResourceStrings {\n    igx_action_strip_button_more_title?: string;\n}\n\nexport const ActionStripResourceStringsEN: IActionStripResourceStrings = {\n    igx_action_strip_button_more_title: 'More'\n};\n","import { Injectable } from '@angular/core';\n\n/** @hidden */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxSelectionAPIService {\n    /**\n     * If primaryKey is defined, then multiple selection is based on the primaryKey, and it is array of numbers, strings, etc.\n     * If the primaryKey is omitted, then selection is based on the item data\n     */\n    protected selection: Map<string,  Set<any>> = new Map<string, Set<any>>();\n\n    /**\n     * Get current component selection.\n     *\n     * @param componentID ID of the component.\n     */\n    public get(componentID: string): Set<any> {\n        return this.selection.get(componentID);\n    }\n\n    /**\n     * Set new component selection.\n     *\n     * @param componentID ID of the component.\n     * @param newSelection The new component selection to be set.\n     */\n    public set(componentID: string, newSelection: Set<any>) {\n        if (!componentID) {\n            throw Error('Invalid value for component id!');\n        }\n        this.selection.set(componentID, newSelection);\n    }\n\n    /**\n     * Clears selection for component.\n     *\n     * @param componentID ID of the component.\n     */\n    public clear(componentID: string) {\n        this.selection.set(componentID, this.get_empty());\n    }\n\n    /**\n     * Removes selection for a component.\n     * @param componentID\n     */\n      public delete(componentID: string) {\n        this.selection.delete(componentID);\n    }\n\n    /**\n     * Get current component selection length.\n     *\n     * @param componentID ID of the component.\n     */\n    public size(componentID: string): number {\n        const sel = this.get(componentID);\n        return sel ? sel.size : 0;\n    }\n\n    /**\n     * Creates new selection that consist of the new item added to the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the select_item() one.\n     *\n     * @param componentID ID of the component, which we add new item to.\n     * @param itemID ID of the item to add to component selection.\n     * @param sel Used internally only by the selection (add_items method) to accumulate selection for multiple items.\n     *\n     * @returns Selection after the new item is added.\n     */\n    public add_item(componentID: string, itemID, sel?: Set<any>): Set<any> {\n        if (!sel) {\n            sel = new Set(this.get(componentID));\n        }\n        if (sel === undefined) {\n            sel = this.get_empty();\n        }\n        sel.add(itemID);\n        return sel;\n    }\n\n    /**\n     * Creates new selection that consist of the new items added to the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the select_items() one.\n     *\n     * @param componentID ID of the component, which we add new items to.\n     * @param itemIDs Array of IDs of the items to add to component selection.\n     * @param clearSelection If true it will clear previous selection.\n     *\n     * @returns Selection after the new items are added.\n     */\n    public add_items(componentID: string, itemIDs: any[], clearSelection?: boolean): Set<any> {\n        let selection: Set<any>;\n        if (clearSelection) {\n            selection = this.get_empty();\n        } else if (itemIDs && itemIDs.length === 0) {\n            selection = new Set(this.get(componentID));\n        }\n        itemIDs.forEach((item) => selection = this.add_item(componentID, item, selection));\n        return selection;\n    }\n\n    /**\n     * Add item to the current component selection.\n     *\n     * @param componentID ID of the component, which we add new item to.\n     * @param itemID ID of the item to add to component selection.\n     * @param sel Used internally only by the selection (select_items method) to accumulate selection for multiple items.\n     */\n    public select_item(componentID: string, itemID, sel?: Set<any>) {\n        this.set(componentID, this.add_item(componentID, itemID, sel));\n    }\n\n    /**\n     * Add items to the current component selection.\n     *\n     * @param componentID ID of the component, which we add new items to.\n     * @param itemIDs Array of IDs of the items to add to component selection.\n     * @param clearSelection If true it will clear previous selection.\n     */\n    public select_items(componentID: string, itemID: any[], clearSelection?: boolean) {\n        this.set(componentID, this.add_items(componentID, itemID, clearSelection));\n    }\n\n    /**\n     * Creates new selection that consist of the new items excluded from the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the deselect_item() one.\n     *\n     * @param componentID ID of the component, which we remove items from.\n     * @param itemID ID of the item to remove from component selection.\n     * @param sel Used internally only by the selection (delete_items method) to accumulate deselected items.\n     *\n     * @returns Selection after the item is removed.\n     */\n    public delete_item(componentID: string, itemID, sel?: Set<any>) {\n        if (!sel) {\n            sel = new Set(this.get(componentID));\n        }\n        if (sel === undefined) {\n            return;\n        }\n        sel.delete(itemID);\n        return sel;\n    }\n\n    /**\n     * Creates new selection that consist of the new items removed to the current component selection.\n     * The returned collection is new Set,\n     * therefore if you want to update component selection you need to call in addition the set_selection() method\n     * or instead use the deselect_items() one.\n     *\n     * @param componentID ID of the component, which we remove items from.\n     * @param itemID ID of the items to remove from component selection.\n     *\n     * @returns Selection after the items are removed.\n     */\n    public delete_items(componentID: string, itemIDs: any[]): Set<any> {\n        let selection: Set<any>;\n        itemIDs.forEach((deselectedItem) => selection = this.delete_item(componentID, deselectedItem, selection));\n        return selection;\n    }\n\n    /**\n     * Remove item from the current component selection.\n     *\n     * @param componentID ID of the component, which we remove item from.\n     * @param itemID ID of the item to remove from component selection.\n     * @param sel Used internally only by the selection (deselect_items method) to accumulate selection for multiple items.\n     */\n    public deselect_item(componentID: string, itemID, sel?: Set<any>) {\n        this.set(componentID, this.delete_item(componentID, itemID, sel));\n    }\n\n    /**\n     * Remove items to the current component selection.\n     *\n     * @param componentID ID of the component, which we add new items to.\n     * @param itemIDs Array of IDs of the items to add to component selection.\n     */\n    public deselect_items(componentID: string, itemID: any[], _clearSelection?: boolean) {\n        this.set(componentID, this.delete_items(componentID, itemID));\n    }\n\n    /**\n     * Check if the item is selected in the component selection.\n     *\n     * @param componentID ID of the component.\n     * @param itemID ID of the item to search.\n     *\n     * @returns If item is selected.\n     */\n    public is_item_selected(componentID: string, itemID): boolean {\n        const sel = this.get(componentID);\n        if (!sel) {\n            return false;\n        }\n        return sel.has(itemID);\n    }\n\n    /**\n     * Get first element in the selection.\n     * This is correct when we have only one item in the collection (for single selection purposes)\n     * and the method returns that item.\n     *\n     * @param componentID ID of the component.\n     *\n     * @returns First element in the set.\n     */\n    public first_item(componentID: string) {\n        const sel = this.get(componentID);\n        if (sel && sel.size > 0) {\n            return sel.values().next().value;\n       }\n    }\n\n    /**\n     * Returns whether all items are selected.\n     *\n     * @param componentID ID of the component.\n     * @param dataCount: number Number of items in the data.\n     *\n     * @returns If all items are selected.\n     */\n    public are_all_selected(componentID: string, dataCount: number): boolean {\n        return dataCount > 0 && dataCount === this.size(componentID);\n    }\n\n    /**\n     * Returns whether any of the items is selected.\n     *\n     * @param componentID ID of the component.\n     * @param data Entire data array.\n     *\n     * @returns If there is any item selected.\n     */\n    public are_none_selected(componentID: string): boolean {\n        return this.size(componentID) === 0;\n    }\n\n    /**\n     * Get all primary key values from a data array. If there isn't a primary key defined that the entire data is returned instead.\n     *\n     * @param data Entire data array.\n     * @param primaryKey Data primary key.\n     *\n     * @returns Array of identifiers, either primary key values or the entire data array.\n     */\n    public get_all_ids(data, primaryKey?) {\n        // If primaryKey is 0, this should still map to the property\n        return primaryKey !== undefined && primaryKey !== null ? data.map((x) => x[primaryKey]) : data;\n    }\n\n    /**\n     * Returns empty selection collection.\n     *\n     * @returns empty set.\n     */\n    public get_empty() {\n        return new Set();\n    }\n}\n","import { Component, Input, HostBinding, booleanAttribute } from '@angular/core';\n\nlet NEXT_ID = 0;\n/**\n * The `<igx-drop-down-item>` is a container intended for row items in\n * a `<igx-drop-down>` container.\n */\n@Component({\n    selector: 'igx-drop-down-item-group',\n    template: `\n        <label id=\"{{labelId}}\">{{ label }}</label>\n        <ng-content select=\"igx-drop-down-item\"></ng-content>\n    `,\n    standalone: true\n})\nexport class IgxDropDownGroupComponent {\n    /**\n     * @hidden @internal\n     */\n    public get labelId(): string {\n        return `igx-item-group-label-${this._id}`;\n    }\n\n    @HostBinding(`attr.aria-labelledby`)\n    public get labelledBy(): string {\n        return this.labelId;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'group';\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-drop-down__group')\n    public groupClass = true;\n    /**\n     * Sets/gets if the item group is disabled\n     *\n     * ```typescript\n     * const myDropDownGroup: IgxDropDownGroupComponent = this.dropdownGroup;\n     * // get\n     * ...\n     * const groupState: boolean = myDropDownGroup.disabled;\n     * ...\n     * //set\n     * ...\n     * myDropDownGroup,disabled = false;\n     * ...\n     * ```\n     *\n     * ```html\n     * <igx-drop-down-item-group [label]=\"'My Items'\" [disabled]=\"true\">\n     *     <igx-drop-down-item *ngFor=\"let item of items[index]\" [value]=\"item.value\">\n     *         {{ item.text }}\n     *     </igx-drop-down-item>\n     * </igx-drop-down-item-group>\n     * ```\n     *\n     * **NOTE:** All items inside of a disabled drop down group will be treated as disabled\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding(`attr.aria-disabled`)\n    @HostBinding('class.igx-drop-down__group--disabled')\n    public disabled = false;\n\n    /**\n     * Sets/gets the label of the item group\n     *\n     * ```typescript\n     * const myDropDownGroup: IgxDropDownGroupComponent = this.dropdownGroup;\n     * // get\n     * ...\n     * const myLabel: string = myDropDownGroup.label;\n     * ...\n     * // set\n     * ...\n     * myDropDownGroup.label = 'My New Label';\n     * ...\n     * ```\n     *\n     * ```html\n     * <igx-drop-down-item-group [label]=\"'My new Label'\">\n     *      ...\n     * </igx-drop-down-item-group>\n     * ```\n     */\n    @Input()\n    public label: string;\n\n    private _id = NEXT_ID++;\n}\n","import { IDropDownBase, IGX_DROPDOWN_BASE } from './drop-down.common';\nimport { Directive, Input, HostBinding, HostListener, ElementRef, Optional, Inject, Output, EventEmitter, booleanAttribute, DoCheck } from '@angular/core';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { IgxDropDownGroupComponent } from './drop-down-group.component';\n\nlet NEXT_ID = 0;\n\n/**\n * An abstract class defining a drop-down item:\n * With properties / styles for selection, highlight, height\n * Bindable property for passing data (`value: any`)\n * Parent component (has to be used under a parent with type `IDropDownBase`)\n * Method for handling click on Host()\n */\n@Directive({\n    selector: '[igxDropDownItemBase]',\n    standalone: true\n})\nexport class IgxDropDownItemBaseDirective implements DoCheck {\n    /**\n     * Sets/gets the `id` of the item.\n     * ```html\n     * <igx-drop-down-item [id] = 'igx-drop-down-item-0'></igx-drop-down-item>\n     * ```\n     * ```typescript\n     * let itemId =  this.item.id;\n     * ```\n     *\n     * @memberof IgxSelectItemComponent\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-drop-down-item-${NEXT_ID++}`;\n\n    @HostBinding('attr.aria-label')\n    @Input()\n    public get ariaLabel(): string {\n        return this._label ? this._label : this.value ? this.value : this.id;\n    }\n\n    public set ariaLabel(value: string) {\n        this._label = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get itemID() {\n        return this;\n    }\n\n    /**\n     * The data index of the dropdown item.\n     *\n     * ```typescript\n     * // get the data index of the selected dropdown item\n     * let selectedItemIndex = this.dropdown.selectedItem.index\n     * ```\n     */\n    @Input()\n    public get index(): number {\n        if (this._index === null) {\n            return this.itemIndex;\n        }\n        return this._index;\n    }\n\n    public set index(value) {\n        this._index = value;\n    }\n\n    /**\n     * Gets/sets the value of the item if the item is databound\n     *\n     * ```typescript\n     * // usage in IgxDropDownItemComponent\n     * // get\n     * let mySelectedItemValue = this.dropdown.selectedItem.value;\n     *\n     * // set\n     * let mySelectedItem = this.dropdown.selectedItem;\n     * mySelectedItem.value = { id: 123, name: 'Example Name' }\n     *\n     * // usage in IgxComboItemComponent\n     * // get\n     * let myComboItemValue = this.combo.items[0].value;\n     * ```\n     */\n    @Input()\n    public value: any;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-drop-down__item')\n    public get itemStyle(): boolean {\n        return !this.isHeader;\n    }\n\n    /**\n     * Sets/Gets if the item is the currently selected one in the dropdown\n     *\n     * ```typescript\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let isMyItemSelected = mySelectedItem.selected; // true\n     * ```\n     *\n     * Two-way data binding\n     * ```html\n     * <igx-drop-down-item [(selected)]='model.isSelected'></igx-drop-down-item>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('attr.aria-selected')\n    @HostBinding('class.igx-drop-down__item--selected')\n    public get selected(): boolean {\n        return this._selected;\n    }\n\n    public set selected(value: boolean) {\n        if (this.isHeader) {\n            return;\n        }\n        this._selected = value;\n        this.selectedChange.emit(this._selected);\n    }\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public selectedChange = new EventEmitter<boolean>();\n\n    /**\n     * Sets/gets if the given item is focused\n     * ```typescript\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let isMyItemFocused = mySelectedItem.focused;\n     * ```\n     */\n    @HostBinding('class.igx-drop-down__item--focused')\n    public get focused(): boolean {\n        return this.isSelectable && this._focused;\n    }\n\n    /**\n     * ```html\n     *  <igx-drop-down-item *ngFor=\"let item of items\" focused={{!item.focused}}>\n     *      <div>\n     *          {{item.field}}\n     *      </div>\n     *  </igx-drop-down-item>\n     * ```\n     */\n    public set focused(value: boolean) {\n        this._focused = value;\n    }\n\n    /**\n     * Sets/gets if the given item is header\n     * ```typescript\n     *  // get\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let isMyItemHeader = mySelectedItem.isHeader;\n     * ```\n     *\n     * ```html\n     *  <!--set-->\n     *  <igx-drop-down-item *ngFor=\"let item of items\">\n     *      <div *ngIf=\"items.indexOf(item) === 5; then item.isHeader = true\">\n     *          {{item.field}}\n     *      </div>\n     *  </igx-drop-down-item>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-drop-down__header')\n    public isHeader: boolean;\n\n    /**\n     * Sets/gets if the given item is disabled\n     *\n     * ```typescript\n     *  // get\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let myItemIsDisabled = mySelectedItem.disabled;\n     * ```\n     *\n     * ```html\n     *  <igx-drop-down-item *ngFor=\"let item of items\" disabled={{!item.disabled}}>\n     *      <div>\n     *          {{item.field}}\n     *      </div>\n     *  </igx-drop-down-item>\n     * ```\n     * **NOTE:** Drop-down items inside of a disabled `IgxDropDownGroup` will always count as disabled\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('attr.aria-disabled')\n    @HostBinding('class.igx-drop-down__item--disabled')\n    public get disabled(): boolean {\n        return this.group ? this.group.disabled || this._disabled : this._disabled;\n    }\n\n    public set disabled(value: boolean) {\n        this._disabled = value;\n    }\n\n    /**\n     * Gets/sets the `role` attribute of the item. Default is 'option'.\n     *\n     * ```html\n     *  <igx-drop-down-item [role]=\"customRole\"></igx-drop-down-item>\n     * ```\n     */\n    @Input()\n    @HostBinding('attr.role')\n    public role = 'option';\n\n    /**\n     * Gets item index\n     *\n     * @hidden @internal\n     */\n    public get itemIndex(): number {\n        return this.dropDown.items.indexOf(this);\n    }\n\n    /**\n     * Gets item element height\n     *\n     * @hidden @internal\n     */\n    public get elementHeight(): number {\n        return this.elementRef.nativeElement.clientHeight;\n    }\n\n    /**\n     * Get item html element\n     *\n     * @hidden @internal\n     */\n    public get element(): ElementRef {\n        return this.elementRef;\n    }\n\n    protected get hasIndex(): boolean {\n        return this._index !== null && this._index !== undefined;\n    }\n\n    /**\n     * @hidden\n     */\n    protected _focused = false;\n    protected _selected = false;\n    protected _index = null;\n    protected _disabled = false;\n    protected _label = null;\n\n    constructor(\n        @Inject(IGX_DROPDOWN_BASE) protected dropDown: IDropDownBase,\n        protected elementRef: ElementRef,\n        @Optional() protected group: IgxDropDownGroupComponent,\n        @Optional() @Inject(IgxSelectionAPIService) protected selection?: IgxSelectionAPIService\n    ) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public clicked(event): void { // eslint-disable-line\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mousedown', ['$event'])\n    public handleMousedown(event: MouseEvent): void {\n        if (!this.dropDown.allowItemsFocus) {\n            event.preventDefault();\n        }\n    }\n\n    public ngDoCheck(): void {\n        if (this._selected) {\n            const dropDownSelectedItem = this.dropDown.selectedItem;\n            if (!dropDownSelectedItem) {\n                this.dropDown.selectItem(this, undefined, false);\n            } else if (this.hasIndex\n                ? this._index !== dropDownSelectedItem.index || this.value !== dropDownSelectedItem.value :\n                this !== dropDownSelectedItem) {\n                this.dropDown.selectItem(this, undefined, false);\n            }\n        }\n    }\n\n    /** Returns true if the items is not a header or disabled  */\n    protected get isSelectable(): boolean {\n        return !(this.disabled || this.isHeader);\n    }\n\n    /** If `allowItemsFocus` is enabled, keep the browser focus on the active item */\n    protected ensureItemFocus() {\n        if (this.dropDown.allowItemsFocus) {\n            const focusedItem = this.dropDown.items.find((item) => item.focused);\n            if (!focusedItem) {\n                return;\n            }\n            focusedItem.element.nativeElement.focus({ preventScroll: true });\n        }\n    }\n}\n","import {\n    Component,\n    HostBinding\n} from '@angular/core';\nimport { IgxDropDownItemBaseDirective } from './drop-down-item.base';\n\n/**\n * The `<igx-drop-down-item>` is a container intended for row items in\n * a `<igx-drop-down>` container.\n */\n@Component({\n    selector: 'igx-drop-down-item',\n    templateUrl: 'drop-down-item.component.html',\n    standalone: true\n})\nexport class IgxDropDownItemComponent extends IgxDropDownItemBaseDirective {\n    /**\n     * Sets/gets if the given item is focused\n     * ```typescript\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let isMyItemFocused = mySelectedItem.focused;\n     * ```\n     */\n    public override get focused(): boolean {\n        let focusedState = this._focused;\n        if (this.hasIndex) {\n            const focusedItem = this.selection.first_item(`${this.dropDown.id}-active`);\n            const focusedIndex = focusedItem ? focusedItem.index : -1;\n            focusedState = this._index === focusedIndex;\n        }\n        return this.isSelectable && focusedState;\n    }\n\n    /**\n     * Sets/gets if the given item is focused\n     * ```typescript\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let isMyItemFocused = mySelectedItem.focused;\n     * ```\n     */\n    public override set focused(value: boolean) {\n        this._focused = value;\n    }\n    /**\n     * Sets/Gets if the item is the currently selected one in the dropdown\n     *\n     * ```typescript\n     *  let mySelectedItem = this.dropdown.selectedItem;\n     *  let isMyItemSelected = mySelectedItem.selected; // true\n     * ```\n     *\n     * Two-way data binding\n     * ```html\n     * <igx-drop-down-item [(selected)]='model.isSelected'></igx-drop-down-item>\n     * ```\n     */\n    public override get selected(): boolean {\n        if (this.hasIndex) {\n            const item = this.selection.first_item(`${this.dropDown.id}`);\n            return item ? item.index === this._index && item.value === this.value : false;\n        }\n        return this._selected;\n    }\n\n    /**\n     * Sets/Gets if the item is the currently selected one in the dropdown\n     *\n     */\n    public override set selected(value: boolean) {\n        if (this.isHeader) {\n            return;\n        }\n        this._selected = value;\n        this.selectedChange.emit(this._selected);\n    }\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.tabindex')\n    public get setTabIndex() {\n        const shouldSetTabIndex = this.dropDown.allowItemsFocus && this.isSelectable;\n        if (shouldSetTabIndex) {\n            return 0;\n        } else {\n            return null;\n        }\n    }\n\n    public override clicked(event): void {\n        if (!this.isSelectable) {\n            this.ensureItemFocus();\n            return;\n        }\n        if (this.selection) {\n            this.dropDown.selectItem(this, event);\n        }\n    }\n}\n","<span class=\"igx-drop-down__content\">\n    <ng-content select=\"igx-prefix, [igxPrefix]\"></ng-content>\n    <span class=\"igx-drop-down__inner\">\n        <ng-content></ng-content>\n    </span>\n    <ng-content select=\"igx-suffix, [igxSuffix]\"></ng-content>\n    <ng-content select=\"igx-divider\"></ng-content>\n</span>\n","import {\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    ElementRef,\n    forwardRef,\n    QueryList,\n    OnChanges,\n    Input,\n    OnDestroy,\n    ViewChild,\n    ContentChild,\n    AfterViewInit,\n    Output,\n    EventEmitter,\n    SimpleChanges,\n    booleanAttribute,\n    Inject\n} from '@angular/core';\nimport { IgxToggleDirective, ToggleViewEventArgs } from '../directives/toggle/toggle.directive';\nimport { IgxDropDownItemComponent } from './drop-down-item.component';\nimport { IgxDropDownBaseDirective } from './drop-down.base';\nimport { DropDownActionKey, Navigate } from './drop-down.common';\nimport { IGX_DROPDOWN_BASE, IDropDownBase } from './drop-down.common';\nimport { ISelectionEventArgs } from './drop-down.common';\nimport { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { Subject } from 'rxjs';\nimport { IgxDropDownItemBaseDirective } from './drop-down-item.base';\nimport { IgxForOfToken } from '../directives/for-of/for_of.directive';\nimport { take } from 'rxjs/operators';\nimport { OverlaySettings } from '../services/overlay/utilities';\nimport { DOCUMENT } from '@angular/common';\nimport { ConnectedPositioningStrategy } from '../services/public_api';\n\n/**\n * **Ignite UI for Angular DropDown** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/drop-down)\n *\n * The Ignite UI for Angular Drop Down displays a scrollable list of items which may be visually grouped and\n * supports selection of a single item. Clicking or tapping an item selects it and closes the Drop Down\n *\n * Example:\n * ```html\n * <igx-drop-down>\n *   <igx-drop-down-item *ngFor=\"let item of items\" disabled={{item.disabled}} isHeader={{item.header}}>\n *     {{ item.value }}\n *   </igx-drop-down-item>\n * </igx-drop-down>\n * ```\n */\n\n@Component({\n    selector: 'igx-drop-down',\n    templateUrl: './drop-down.component.html',\n    providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxDropDownComponent }],\n    imports: [IgxToggleDirective]\n})\nexport class IgxDropDownComponent extends IgxDropDownBaseDirective implements IDropDownBase, OnChanges, AfterViewInit, OnDestroy {\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(forwardRef(() => IgxDropDownItemComponent), { descendants: true })\n    public override children: QueryList<IgxDropDownItemBaseDirective>;\n\n    /**\n     * Emitted before the dropdown is opened\n     *\n     * ```html\n     * <igx-drop-down (opening)='handleOpening($event)'></igx-drop-down>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is opened\n     *\n     * ```html\n     * <igx-drop-down (opened)='handleOpened($event)'></igx-drop-down>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted before the dropdown is closed\n     *\n     * ```html\n     * <igx-drop-down (closing)='handleClosing($event)'></igx-drop-down>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is closed\n     *\n     * ```html\n     * <igx-drop-down (closed)='handleClosed($event)'></igx-drop-down>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Gets/sets whether items take focus. Disabled by default.\n     * When enabled, drop down items gain tab index and are focused when active -\n     * this includes activating the selected item when opening the drop down and moving with keyboard navigation.\n     *\n     * Note: Keep that focus shift in mind when using the igxDropDownItemNavigation directive\n     * and ensure it's placed either on each focusable item or a common ancestor to allow it to handle keyboard events.\n     *\n     * ```typescript\n     * // get\n     * let dropDownAllowsItemFocus = this.dropdown.allowItemsFocus;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-drop-down [allowItemsFocus]='true'></igx-drop-down>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public allowItemsFocus = false;\n\n    /**\n     * Sets aria-labelledby attribute value.\n     * ```html\n     * <igx-drop-down [labelledby]=\"labelId\"></igx-drop-down>\n     * ```\n     */\n    @Input()\n    public labelledBy: string;\n\n    @ContentChild(IgxForOfToken)\n    protected virtDir: IgxForOfToken<any>;\n\n    @ViewChild(IgxToggleDirective, { static: true })\n    protected toggleDirective: IgxToggleDirective;\n\n    @ViewChild('scrollContainer', { static: true })\n    protected scrollContainerRef: ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    public override get focusedItem(): IgxDropDownItemBaseDirective {\n        if (this.virtDir) {\n            return this._focusedItem && this._focusedItem.index !== -1 ?\n                (this.children.find(e => e.index === this._focusedItem.index) || null) :\n                null;\n        }\n        return this._focusedItem;\n    }\n\n    public override set focusedItem(value: IgxDropDownItemBaseDirective) {\n        if (!value) {\n            this.selection.clear(`${this.id}-active`);\n            this._focusedItem = null;\n            return;\n        }\n        this._focusedItem = value;\n        if (this.virtDir) {\n            this._focusedItem = {\n                value: value.value,\n                index: value.index\n            } as IgxDropDownItemBaseDirective;\n        }\n        this.selection.set(`${this.id}-active`, new Set([this._focusedItem]));\n    }\n\n    public override get id(): string {\n        return this._id;\n    }\n    public override set id(value: string) {\n        this.selection.set(value, this.selection.get(this.id));\n        this.selection.clear(this.id);\n        this.selection.set(value, this.selection.get(`${this.id}-active`));\n        this.selection.clear(`${this.id}-active`);\n        this._id = value;\n    }\n\n    /** Id of the internal listbox of the drop down */\n    public get listId() {\n        return this.id + '-list';\n    }\n\n    /**\n     * Get currently selected item\n     *\n     * ```typescript\n     * let currentItem = this.dropdown.selectedItem;\n     * ```\n     */\n    public get selectedItem(): IgxDropDownItemBaseDirective {\n        const selectedItem = this.selection.first_item(this.id);\n        if (selectedItem) {\n            return selectedItem;\n        }\n        return null;\n    }\n\n    /**\n     * Gets if the dropdown is collapsed\n     *\n     * ```typescript\n     * let isCollapsed = this.dropdown.collapsed;\n     * ```\n     */\n    public get collapsed(): boolean {\n        return this.toggleDirective.collapsed;\n    }\n\n    /** @hidden @internal */\n    public override get scrollContainer(): HTMLElement {\n        return this.scrollContainerRef.nativeElement;\n    }\n\n    protected get collectionLength() {\n        if (this.virtDir) {\n            return this.virtDir.totalItemCount || this.virtDir.igxForOf.length;\n        }\n    }\n\n    protected destroy$ = new Subject<boolean>();\n    protected _scrollPosition: number;\n\n    constructor(\n        elementRef: ElementRef,\n        cdr: ChangeDetectorRef,\n        @Inject(DOCUMENT) document: any,\n        protected selection: IgxSelectionAPIService) {\n        super(elementRef, cdr, document);\n    }\n\n    /**\n     * Opens the dropdown\n     *\n     * ```typescript\n     * this.dropdown.open();\n     * ```\n     */\n    public open(overlaySettings?: OverlaySettings) {\n        const settings = { ... {}, ...this.getDefaultOverlaySettings(), ...overlaySettings };\n        this.toggleDirective.open(settings);\n        this.updateScrollPosition();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getDefaultOverlaySettings(): OverlaySettings {\n        return {\n            closeOnOutsideClick: true,\n            modal: false,\n            positionStrategy: new ConnectedPositioningStrategy()\n        };\n    }\n\n    /**\n     * Closes the dropdown\n     *\n     * ```typescript\n     * this.dropdown.close();\n     * ```\n     */\n    public close(event?: Event) {\n        this.toggleDirective.close(event);\n    }\n\n    /**\n     * Toggles the dropdown\n     *\n     * ```typescript\n     * this.dropdown.toggle();\n     * ```\n     */\n    public toggle(overlaySettings?: OverlaySettings) {\n        if (this.collapsed || this.toggleDirective.isClosing) {\n            this.open(overlaySettings);\n        } else {\n            this.close();\n        }\n    }\n\n    /**\n     * Select an item by index\n     *\n     * @param index of the item to select; If the drop down uses *igxFor, pass the index in data\n     */\n    public setSelectedItem(index: number) {\n        if (index < 0 || index >= this.items.length) {\n            return;\n        }\n        let newSelection: IgxDropDownItemBaseDirective;\n        if (this.virtDir) {\n            newSelection = {\n                value: this.virtDir.igxForOf[index],\n                index\n            } as IgxDropDownItemBaseDirective;\n        } else {\n            newSelection = this.items[index];\n        }\n        this.selectItem(newSelection);\n    }\n\n    /**\n     * Navigates to the item on the specified index\n     * If the data in the drop-down is virtualized, pass the index of the item in the virtualized data.\n     *\n     * @param newIndex number\n     */\n    public override navigateItem(index: number) {\n        if (this.virtDir) {\n            if (index === -1 || index >= this.collectionLength) {\n                return;\n            }\n            const direction = index > (this.focusedItem ? this.focusedItem.index : -1) ? Navigate.Down : Navigate.Up;\n            const subRequired = this.isIndexOutOfBounds(index, direction);\n            this.focusedItem = {\n                value: this.virtDir.igxForOf[index],\n                index\n            } as IgxDropDownItemBaseDirective;\n            if (subRequired) {\n                this.virtDir.scrollTo(index);\n            }\n            if (subRequired) {\n                this.virtDir.chunkLoad.pipe(take(1)).subscribe(() => {\n                    this.skipHeader(direction);\n                });\n            } else {\n                this.skipHeader(direction);\n            }\n        } else {\n            super.navigateItem(index);\n        }\n        if (this.allowItemsFocus && this.focusedItem) {\n            this.focusedItem.element.nativeElement.focus();\n            this.cdr.markForCheck();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public updateScrollPosition() {\n        if (!this.virtDir) {\n            return;\n        }\n        if (!this.selectedItem) {\n            this.virtDir.scrollTo(0);\n            return;\n        }\n        let targetScroll = this.virtDir.getScrollForIndex(this.selectedItem.index);\n        // TODO: This logic _cannot_ be right, those are optional user-provided inputs that can be strings with units, refactor:\n        const itemsInView = this.virtDir.igxForContainerSize / this.virtDir.igxForItemSize;\n        targetScroll -= (itemsInView / 2 - 1) * this.virtDir.igxForItemSize;\n        this.virtDir.getScroll().scrollTop = targetScroll;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onToggleOpening(e: IBaseCancelableBrowserEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: false };\n        this.opening.emit(args);\n        e.cancel = args.cancel;\n        if (e.cancel) {\n            return;\n        }\n\n        if (this.virtDir) {\n            this.virtDir.scrollPosition = this._scrollPosition;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onToggleContentAppended(_event: ToggleViewEventArgs) {\n        if (!this.virtDir && this.selectedItem) {\n            this.scrollToItem(this.selectedItem);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onToggleOpened() {\n        this.updateItemFocus();\n        this.opened.emit({ owner: this });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onToggleClosing(e: IBaseCancelableBrowserEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: false };\n        this.closing.emit(args);\n        e.cancel = args.cancel;\n        if (e.cancel) {\n            return;\n        }\n        if (this.virtDir) {\n            this._scrollPosition = this.virtDir.scrollPosition;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onToggleClosed() {\n        this.focusItem(false);\n        this.closed.emit({ owner: this });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        this.selection.delete(this.id);\n        this.selection.delete(`${this.id}-active`);\n    }\n\n    /** @hidden @internal */\n    public calculateScrollPosition(item: IgxDropDownItemBaseDirective): number {\n        if (!item) {\n            return 0;\n        }\n\n        const elementRect = item.element.nativeElement.getBoundingClientRect();\n        const parentRect = this.scrollContainer.getBoundingClientRect();\n        const scrollDelta = parentRect.top - elementRect.top;\n        let scrollPosition = this.scrollContainer.scrollTop - scrollDelta;\n\n        const dropDownHeight = this.scrollContainer.clientHeight;\n        scrollPosition -= dropDownHeight / 2;\n        scrollPosition += item.elementHeight / 2;\n\n        return Math.floor(scrollPosition);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.id) {\n            // temp workaround until fix --> https://github.com/angular/angular/issues/34992\n            this.toggleDirective.id = changes.id.currentValue;\n        }\n    }\n\n    public ngAfterViewInit() {\n        if (this.virtDir) {\n            this.virtDir.igxForItemSize = 28;\n        }\n    }\n\n    /** Keydown Handler */\n    public override onItemActionKey(key: DropDownActionKey, event?: Event) {\n        super.onItemActionKey(key, event);\n        this.close(event);\n    }\n\n    /**\n     * Virtual scroll implementation\n     *\n     * @hidden @internal\n     */\n    public override navigateFirst() {\n        if (this.virtDir) {\n            this.navigateItem(0);\n        } else {\n            super.navigateFirst();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override navigateLast() {\n        if (this.virtDir) {\n            this.navigateItem(this.virtDir.totalItemCount ? this.virtDir.totalItemCount - 1 : this.virtDir.igxForOf.length - 1);\n        } else {\n            super.navigateLast();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override navigateNext() {\n        if (this.virtDir) {\n            this.navigateItem(this._focusedItem ? this._focusedItem.index + 1 : 0);\n        } else {\n            super.navigateNext();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override navigatePrev() {\n        if (this.virtDir) {\n            this.navigateItem(this._focusedItem ? this._focusedItem.index - 1 : 0);\n        } else {\n            super.navigatePrev();\n        }\n    }\n\n    /**\n     * Handles the `selectionChanging` emit and the drop down toggle when selection changes\n     *\n     * @hidden\n     * @internal\n     * @param newSelection\n     * @param emit\n     * @param event\n     */\n    public override selectItem(newSelection?: IgxDropDownItemBaseDirective, event?: Event, emit = true) {\n        const oldSelection = this.selectedItem;\n        if (!newSelection) {\n            newSelection = this.focusedItem;\n        }\n        if (newSelection === null) {\n            return;\n        }\n        if (newSelection instanceof IgxDropDownItemBaseDirective && newSelection.isHeader) {\n            return;\n        }\n        if (this.virtDir) {\n            newSelection = {\n                value: newSelection.value,\n                index: newSelection.index\n            } as IgxDropDownItemBaseDirective;\n        }\n        const args: ISelectionEventArgs = { oldSelection, newSelection, cancel: false, owner: this };\n\n        if (emit) {\n            this.selectionChanging.emit(args);\n        }\n\n        if (!args.cancel) {\n            if (this.isSelectionValid(args.newSelection)) {\n                this.selection.set(this.id, new Set([args.newSelection]));\n                if (!this.virtDir) {\n                    if (oldSelection) {\n                        oldSelection.selected = false;\n                    }\n                    if (args.newSelection) {\n                        args.newSelection.selected = true;\n                    }\n                }\n                if (event) {\n                    this.toggleDirective.close(event);\n                }\n            } else {\n                throw new Error('Please provide a valid drop-down item for the selection!');\n            }\n        }\n    }\n\n    /**\n     * Clears the selection of the dropdown\n     * ```typescript\n     * this.dropdown.clearSelection();\n     * ```\n     */\n    public clearSelection() {\n        const oldSelection = this.selectedItem;\n        const newSelection: IgxDropDownItemBaseDirective = null;\n        const args: ISelectionEventArgs = { oldSelection, newSelection, cancel: false, owner: this };\n        this.selectionChanging.emit(args);\n        if (this.selectedItem && !args.cancel) {\n            this.selectedItem.selected = false;\n            this.selection.clear(this.id);\n        }\n    }\n\n    /**\n     * Checks whether the selection is valid\n     * `null` - the selection should be emptied\n     * Virtual? - the selection should at least have and `index` and `value` property\n     * Non-virtual? - the selection should be a valid drop-down item and **not** be a header\n     */\n    protected isSelectionValid(selection: any): boolean {\n        return selection === null\n            || (this.virtDir && selection.hasOwnProperty('value') && selection.hasOwnProperty('index'))\n            || (selection instanceof IgxDropDownItemComponent && !selection.isHeader);\n    }\n\n    protected scrollToItem(item: IgxDropDownItemBaseDirective) {\n        this.scrollContainer.scrollTop = this.calculateScrollPosition(item);\n    }\n\n    protected focusItem(value: boolean) {\n        if (value || this._focusedItem) {\n            this._focusedItem.focused = value;\n        }\n    }\n\n    protected updateItemFocus() {\n        if (this.selectedItem) {\n            this.focusedItem = this.selectedItem;\n            this.focusItem(true);\n        } else if (this.allowItemsFocus) {\n            this.navigateFirst();\n        }\n    }\n\n    protected skipHeader(direction: Navigate) {\n        if (!this.focusedItem) {\n            return;\n        }\n        if (this.focusedItem.isHeader || this.focusedItem.disabled) {\n            if (direction === Navigate.Up) {\n                this.navigatePrev();\n            } else {\n                this.navigateNext();\n            }\n        }\n    }\n\n    private isIndexOutOfBounds(index: number, direction: Navigate) {\n        const virtState = this.virtDir.state;\n        const currentPosition = this.virtDir.getScroll().scrollTop;\n        const itemPosition = this.virtDir.getScrollForIndex(index, direction === Navigate.Down);\n        const indexOutOfChunk = index < virtState.startIndex || index > virtState.chunkSize + virtState.startIndex;\n        const scrollNeeded = direction === Navigate.Down ? currentPosition < itemPosition : currentPosition > itemPosition;\n        const subRequired = indexOutOfChunk || scrollNeeded;\n        return subRequired;\n    }\n}\n\n","<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n    igxToggle\n    (appended)=\"onToggleContentAppended($event)\"\n    (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n    (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n    <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"listId\" role=\"listbox\" [attr.aria-labelledby]=\"labelledBy\"\n        [style.height]=\"height\"\n        [style.maxHeight]=\"maxHeight\">\n        @if (!collapsed) {\n            <ng-content></ng-content>\n        }\n    </div>\n</div>\n","import { Component, Input, TemplateRef, ViewChild, Output, EventEmitter, ElementRef, booleanAttribute } from '@angular/core';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxIconButtonDirective } from '../../directives/button/icon-button.directive';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-action-button */\n/* blazorIndirectRender */\n@Component({\n    selector: 'igx-grid-action-button',\n    templateUrl: 'grid-action-button.component.html',\n    imports: [IgxRippleDirective, IgxIconComponent, IgxIconButtonDirective]\n})\nexport class IgxGridActionButtonComponent {\n\n    /* blazorSuppress */\n    @ViewChild('container')\n    public container: ElementRef;\n\n    /* blazorSuppress */\n    /**\n     * Event emitted when action button is clicked.\n     *\n     * @example\n     * ```html\n     *  <igx-grid-action-button (actionClick)=\"startEdit($event)\"></igx-grid-action-button>\n     * ```\n     */\n    @Output()\n    public actionClick = new EventEmitter<Event>();\n\n    /**\n     * Reference to the current template.\n     *\n     * @hidden\n     * @internal\n     */\n    @ViewChild('menuItemTemplate')\n    public templateRef: TemplateRef<any>;\n\n    /**\n     * Whether button action is rendered in menu and should container text label.\n     */\n    @Input({ transform: booleanAttribute })\n    public asMenuItem = false;\n\n    /**\n     * Name of the icon to display in the button.\n     */\n    @Input()\n    public iconName: string;\n\n    /**\n     * Additional Menu item container element classes.\n     */\n    @Input()\n    public classNames: string;\n\n    /** @hidden @internal */\n    public get containerClass(): string {\n        return 'igx-action-strip__menu-button ' + (this.classNames || '');\n    }\n\n    /**\n     * The name of the icon set. Used in case the icon is from a different icon set.\n     */\n    @Input()\n    public iconSet: string;\n\n    /**\n     * The text of the label.\n     */\n    @Input()\n    public labelText: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public handleClick(event) {\n        this.actionClick.emit(event);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public preventEvent(event) {\n        if (event) {\n            event.stopPropagation();\n            event.preventDefault();\n        }\n    }\n}\n","@if (!asMenuItem) {\n    <button type=\"button\" [title]=\"labelText\" igxIconButton=\"flat\" igxRipple (click)=\"handleClick($event)\" (mousedown)=\"preventEvent($event)\">\n        @if (iconSet) {\n            <igx-icon [family]=\"iconSet\" [name]=\"iconName\">{{iconName}}</igx-icon>\n        }\n        @if (!iconSet) {\n            <igx-icon>{{iconName}}</igx-icon>\n        }\n    </button>\n}\n\n<ng-template #menuItemTemplate>\n    @if (asMenuItem) {\n        <div #container [className]=\"containerClass\">\n            @if (iconSet) {\n                <igx-icon [family]=\"iconSet\" [name]=\"iconName\">{{iconName}}</igx-icon>\n            }\n            @if (!iconSet) {\n                <igx-icon>{{iconName}}</igx-icon>\n            }\n            <label igxLabel>{{labelText}}</label>\n        </div>\n    }\n</ng-template>\n","import {\n    Component,\n    HostBinding,\n    Input,\n    AfterViewInit,\n    booleanAttribute,\n} from '@angular/core';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { CheckboxBaseDirective } from './checkbox-base.directive';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { EditorProvider, EDITOR_PROVIDER } from '../core/edit-provider';\n\n/**\n * Allows users to make a binary choice for a certain condition.\n *\n * @igxModule IgxCheckboxModule\n *\n * @igxTheme igx-checkbox-theme\n *\n * @igxKeywords checkbox, label\n *\n * @igxGroup Data entry and display\n *\n * @remarks\n * The Ignite UI Checkbox is a selection control that allows users to make a binary choice for a certain condition.It behaves similarly\n * to the native browser checkbox.\n *\n * @example\n * ```html\n * <igx-checkbox [checked]=\"true\">\n *   simple checkbox\n * </igx-checkbox>\n * ```\n */\n@Component({\n    selector: 'igx-checkbox',\n    providers: [\n        {\n            provide: EDITOR_PROVIDER,\n            useExisting: IgxCheckboxComponent,\n            multi: true,\n        },\n    ],\n    preserveWhitespaces: false,\n    templateUrl: 'checkbox.component.html',\n    imports: [IgxRippleDirective],\n})\nexport class IgxCheckboxComponent\n    extends CheckboxBaseDirective\n    implements AfterViewInit, ControlValueAccessor, EditorProvider {\n    /**\n     * Returns the class of the checkbox component.\n     *\n     * @example\n     * ```typescript\n     * let class = this.checkbox.cssClass;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox')\n    public override cssClass = 'igx-checkbox';\n\n    /**\n     * Returns if the component is of type `material`.\n     *\n     * @example\n     * ```typescript\n     * let checkbox = this.checkbox.material;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--material')\n    protected get material() {\n        return this.theme === 'material';\n    }\n\n    /**\n     * Returns if the component is of type `indigo`.\n     *\n     * @example\n     * ```typescript\n     * let checkbox = this.checkbox.indigo;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--indigo')\n    protected get indigo() {\n        return this.theme === 'indigo';\n    }\n\n    /**\n     * Returns if the component is of type `bootstrap`.\n     *\n     * @example\n     * ```typescript\n     * let checkbox = this.checkbox.bootstrap;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--bootstrap')\n    protected get bootstrap() {\n        return this.theme === 'bootstrap';\n    }\n\n    /**\n     * Returns if the component is of type `fluent`.\n     *\n     * @example\n     * ```typescript\n     * let checkbox = this.checkbox.fluent;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--fluent')\n    protected get fluent() {\n        return this.theme === 'fluent';\n    }\n\n    /**\n     * Sets/gets whether the checkbox component is on focus.\n     * Default value is `false`.\n     *\n     * @example\n     * ```typescript\n     * this.checkbox.focused =  true;\n     * ```\n     * ```typescript\n     * let isFocused = this.checkbox.focused;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--focused')\n    public override focused = false;\n\n    /**\n     * Sets/gets the checkbox indeterminate visual state.\n     * Default value is `false`;\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [indeterminate]=\"true\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isIndeterminate = this.checkbox.indeterminate;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--indeterminate')\n    @Input({ transform: booleanAttribute })\n    public override indeterminate = false;\n\n    /**\n     * Sets/gets whether the checkbox is checked.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [checked]=\"true\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isChecked =  this.checkbox.checked;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--checked')\n    @Input({ transform: booleanAttribute })\n    public override set checked(value: boolean) {\n        super.checked = value;\n    }\n    public override get checked() {\n        return super.checked;\n    }\n\n    /**\n     * Sets/gets whether the checkbox is disabled.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox disabled></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isDisabled = this.checkbox.disabled;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--disabled')\n    @Input({ transform: booleanAttribute })\n    public override disabled = false;\n\n    /**\n     * Sets/gets whether the checkbox is invalid.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox invalid></igx-checkbox>\n     * ```\n     * ```typescript\n     * let isInvalid = this.checkbox.invalid;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--invalid')\n    @Input({ transform: booleanAttribute })\n    public override invalid = false;\n\n    /**\n     * Sets/gets whether the checkbox is readonly.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [readonly]=\"true\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let readonly = this.checkbox.readonly;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public override readonly = false;\n\n    /**\n     * Sets/gets whether the checkbox should disable all css transitions.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-checkbox [disableTransitions]=\"true\"></igx-checkbox>\n     * ```\n     * ```typescript\n     * let disableTransitions = this.checkbox.disableTransitions;\n     * ```\n     */\n    @HostBinding('class.igx-checkbox--plain')\n    @Input({ transform: booleanAttribute })\n    public disableTransitions = false;\n}\n","<input #checkbox class=\"igx-checkbox__input\"\n    type=\"checkbox\"\n    [id]=\"inputId\"\n    [name]=\"name\"\n    [value]=\"value\"\n    [tabindex]=\"tabindex\"\n    [disabled]=\"disabled\"\n    [indeterminate]=\"indeterminate\"\n    [checked]=\"checked\"\n    [required]=\"required\"\n    [attr.aria-required]=\"required\"\n    [attr.aria-invalid]=\"invalid\"\n    [attr.aria-checked]=\"ariaChecked\"\n    [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n    [attr.aria-label]=\"ariaLabel\"\n    (change)=\"_onCheckboxChange($event)\"\n    (blur)=\"onBlur()\" />\n\n<div\n    igxRipple\n    igxRippleTarget=\".igx-checkbox__ripple\"\n    [igxRippleDisabled]=\"disableRipple\"\n    [igxRippleCentered]=\"true\"\n    [igxRippleDuration]=\"300\"\n    class=\"igx-checkbox__composite-wrapper\"\n>\n    <span #label class=\"igx-checkbox__composite\">\n        @if (theme === 'indigo') {\n            <svg class=\"igx-checkbox__composite-mark\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n                <rect width=\"18\" height=\"4\" x=\"2\" y=\"9\" rx=\"1.85\"/>\n                <path d=\"M19.033 5a1.966 1.966 0 0 0-1.418.586l-8.479 8.577-2.753-2.77a1.971 1.971 0 0 0-2.8 0 1.998 1.998 0 0 0 0 2.822l4.155 4.196a1.955 1.955 0 0 0 2.8 0l9.879-9.99a1.998 1.998 0 0 0 0-2.821 1.966 1.966 0 0 0-1.384-.6Z\"/>\n            </svg>\n        } @else {\n            <svg class=\"igx-checkbox__composite-mark\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n                <path d=\"M4.1,12.7 9,17.6 20.3,6.3\"/>\n            </svg>\n        }\n    </span>\n\n    <div class=\"igx-checkbox__ripple\"></div>\n</div>\n\n<span #placeholderLabel\n    [class]=\"labelClass\"\n    [id]=\"labelId\">\n    <ng-content></ng-content>\n</span>\n","import { Injectable } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { IGridEditDoneEventArgs, IGridEditEventArgs, IRowDataCancelableEventArgs, IRowDataEventArgs } from '../common/events';\nimport { GridType, RowType } from './grid.interface';\nimport { Subject } from 'rxjs';\nimport { copyDescriptors, isEqual, isDate } from '../../core/utils';\nimport { FormGroup } from '@angular/forms';\nimport { DateTimeUtil } from '../../date-common/util/date-time.util';\n\nexport class IgxEditRow {\n    public transactionState: any;\n    public state: any;\n    public newData: any;\n    public rowFormGroup = new FormGroup({});\n\n    constructor(public id: any, public index: number, public data: any, public grid: GridType) {\n        this.rowFormGroup = this.grid.validation.create(id, data);\n    }\n\n    public createRowEditEventArgs(includeNewValue = true, event?: Event): IGridEditEventArgs {\n        const args: IGridEditEventArgs = {\n            primaryKey: this.id,\n            rowID: this.id,\n            rowKey: this.id,\n            rowData: this.data,\n            oldValue: this.data,\n            cancel: false,\n            owner: this.grid,\n            isAddRow: false,\n            valid: this.rowFormGroup.valid,\n            event\n        };\n        if (includeNewValue) {\n            args.newValue = this.newData ?? this.data;\n        }\n        return args;\n    }\n\n    public createRowDataEventArgs(event?: Event): IRowDataCancelableEventArgs {\n        const args: IRowDataCancelableEventArgs = {\n            rowID: this.id,\n            primaryKey: this.id,\n            rowKey: this.id,\n            rowData: this.newData ?? this.data,\n            data: this.newData ?? this.data,\n            oldValue: this.data,\n            cancel: false,\n            owner: this.grid,\n            isAddRow: true,\n            valid: this.rowFormGroup.valid,\n            event\n        };\n        return args;\n    }\n\n    public createRowEditDoneEventArgs(cachedRowData: any, event?: Event): IGridEditDoneEventArgs {\n        const updatedData = this.grid.transactions.enabled ?\n            this.grid.transactions.getAggregatedValue(this.id, true) : this.grid.gridAPI.getRowData(this.id);\n        const rowData = updatedData ?? this.grid.gridAPI.getRowData(this.id);\n        const args: IGridEditDoneEventArgs = {\n            primaryKey: this.id,\n            rowID: this.id,\n            rowKey: this.id,\n            rowData,\n            oldValue: cachedRowData,\n            newValue: updatedData,\n            owner: this.grid,\n            isAddRow: false,\n            valid: true,\n            event\n        };\n\n        return args;\n    }\n\n    public getClassName() {\n        return this.constructor.name;\n    }\n}\n\nexport class IgxAddRow extends IgxEditRow {\n    public isAddRow = true;\n\n    constructor(id: any,\n        index: number,\n        data: any,\n        public recordRef: any,\n        grid: GridType) {\n        super(id, index, data, grid);\n    }\n\n    public override createRowEditEventArgs(includeNewValue = true, event?: Event): IGridEditEventArgs {\n        const args = super.createRowEditEventArgs(includeNewValue, event);\n        args.oldValue = null;\n        args.isAddRow = true;\n        args.rowData = this.newData ?? this.data;\n        return args;\n    }\n\n    public override createRowEditDoneEventArgs(cachedRowData: any, event?: Event): IGridEditDoneEventArgs {\n        const args = super.createRowEditDoneEventArgs(null, event);\n        args.isAddRow = true;\n        return args;\n    }\n}\n\nexport interface IgxAddRowParent {\n    /**\n     * @deprecated since version 17.1.0. Use `rowKey` instead\n     */\n    rowID: string;\n    rowKey: any;\n    index: number;\n    asChild: boolean;\n    isPinned: boolean;\n}\n\nexport class IgxCell {\n    public primaryKey: any;\n    public state: any;\n    public pendingValue: any;\n\n    constructor(\n        public id,\n        public rowIndex: number,\n        public column,\n        public value: any,\n        public _editValue: any,\n        public rowData: any,\n        public grid: GridType) {\n        this.grid.validation.create(id.rowID, rowData);\n    }\n\n    public get editValue() {\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n        if (formControl) {\n            return formControl.value;\n        }\n    }\n\n    public set editValue(value) {\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n\n        if (this.grid.validationTrigger === 'change') {\n            // in case trigger is change, mark as touched.\n            formControl.setValue(value);\n            formControl.markAsTouched();\n        } else {\n            this.pendingValue = value;\n        }\n    }\n\n    public castToNumber(value: any): any {\n        if (this.column.dataType === 'number' && !this.column.inlineEditorTemplate) {\n            const v = parseFloat(value);\n            return !isNaN(v) && isFinite(v) ? v : 0;\n        }\n        return value;\n    }\n\n    public createCellEditEventArgs(includeNewValue = true, event?: Event): IGridEditEventArgs {\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n        const args: IGridEditEventArgs = {\n            primaryKey: this.id.rowID,\n            rowID: this.id.rowID,\n            rowKey: this.id.rowID,\n            cellID: this.id,\n            rowData: this.rowData,\n            oldValue: this.value,\n            cancel: false,\n            column: this.column,\n            owner: this.grid,\n            valid: formControl ? formControl.valid : true,\n            event\n        };\n        if (includeNewValue) {\n            args.newValue = this.castToNumber(this.editValue);\n        }\n        return args;\n    }\n\n    public createCellEditDoneEventArgs(value: any, event?: Event): IGridEditDoneEventArgs {\n        const updatedData = this.grid.transactions.enabled ?\n            this.grid.transactions.getAggregatedValue(this.id.rowID, true) : this.rowData;\n        const rowData = updatedData === null ? this.grid.gridAPI.getRowData(this.id.rowID) : updatedData;\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n        const args: IGridEditDoneEventArgs = {\n            primaryKey: this.id.rowID,\n            rowID: this.id.rowID,\n            rowKey: this.id.rowID,\n            cellID: this.id,\n            // rowData - should be the updated/committed rowData - this effectively should be the newValue\n            // the only case we use this.rowData directly, is when there is no rowEditing or transactions enabled\n            rowData,\n            oldValue: this.value,\n            valid: formControl ? formControl.valid : true,\n            newValue: value,\n            column: this.column,\n            owner: this.grid,\n            event\n        };\n        return args;\n    }\n}\n\nexport class IgxCellCrudState {\n    public grid: GridType;\n    public cell: IgxCell | null = null;\n    public row: IgxEditRow | null = null;\n    public isInCompositionMode = false;\n\n    public createCell(cell): IgxCell {\n        return this.cell = new IgxCell(cell.cellID || cell.id, cell.row.index, cell.column, cell.value, cell.value,\n            cell.row.data, cell.grid);\n    }\n\n    public createRow(cell: IgxCell): IgxEditRow {\n        return this.row = new IgxEditRow(cell.id.rowID, cell.rowIndex, cell.rowData, cell.grid);\n    }\n\n    public sameRow(rowID): boolean {\n        return this.row && this.row.id === rowID;\n    }\n\n    public sameCell(cell: IgxCell): boolean {\n        return (this.cell.id.rowID === cell.id.rowID &&\n            this.cell.id.columnID === cell.id.columnID);\n    }\n\n    public get cellInEditMode(): boolean {\n        return !!this.cell;\n    }\n\n    public beginCellEdit(event?: Event) {\n        const args = this.cell.createCellEditEventArgs(false, event);\n        this.grid.cellEditEnter.emit(args);\n\n        if (args.cancel) {\n            this.endCellEdit();\n        }\n\n    }\n\n    public cellEdit(event?: Event) {\n        const args = this.cell.createCellEditEventArgs(true, event);\n        this.grid.cellEdit.emit(args);\n        return args;\n    }\n\n    public updateCell(exit: boolean, event?: Event): IGridEditEventArgs {\n        if (!this.cell) {\n            return;\n        }\n        // this is needed when we are not using ngModel to update the editValue\n        // so that the change event of the inlineEditorTemplate is hit before\n        // trying to update any cell\n        const cellNode = this.grid.gridAPI.get_cell_by_index(this.cell.id.rowIndex, this.cell.column.field)?.nativeElement;\n        let activeElement;\n        if (cellNode) {\n            const document = cellNode.getRootNode() as Document | ShadowRoot;\n            if (cellNode.contains(document.activeElement)) {\n                activeElement = document.activeElement as HTMLElement;\n                this.grid.tbody.nativeElement.focus();\n            }\n        }\n\n        const formControl = this.grid.validation.getFormControl(this.cell.id.rowID, this.cell.column.field);\n        if (this.grid.validationTrigger === 'blur' && this.cell.pendingValue !== undefined) {\n            // in case trigger is blur, update value if there's a pending one and mark as touched.\n            formControl.setValue(this.cell.pendingValue);\n            formControl.markAsTouched();\n        }\n\n        if (this.grid.validationTrigger === 'blur') {\n            this.grid.tbody.nativeElement.focus({ preventScroll: true });\n        }\n\n        let doneArgs;\n        if (this.cell.column.dataType === 'date' && !isDate(this.cell.value)) {\n            if (isEqual(DateTimeUtil.parseIsoDate(this.cell.value), this.cell.editValue)) {\n                doneArgs = this.exitCellEdit(event);\n                return doneArgs;\n            }\n        }\n        if (isEqual(this.cell.value, this.cell.editValue)) {\n            doneArgs = this.exitCellEdit(event);\n            return doneArgs;\n        }\n\n        const args = this.cellEdit(event);\n        if (args.cancel) {\n            // the focus is needed when we cancel the cellEdit so that the activeElement stays on the editor template\n            activeElement?.focus();\n            return args;\n        }\n\n        this.grid.gridAPI.update_cell(this.cell);\n\n        doneArgs = this.cellEditDone(event, false);\n        if (exit) {\n            doneArgs = this.exitCellEdit(event);\n        }\n\n        return { ...args, ...doneArgs };\n    }\n\n    public cellEditDone(event, addRow: boolean): IGridEditDoneEventArgs {\n        const newValue = this.cell.castToNumber(this.cell.editValue);\n        const doneArgs = this.cell.createCellEditDoneEventArgs(newValue, event);\n        this.grid.cellEditDone.emit(doneArgs);\n        if (addRow) {\n            doneArgs.rowData = this.row.data;\n        }\n        return doneArgs;\n    }\n\n    /** Exit cell edit mode */\n    public exitCellEdit(event?: Event): IGridEditDoneEventArgs {\n        if (!this.cell) {\n            return;\n        }\n        const newValue = this.cell.castToNumber(this.cell.editValue);\n        const args = this.cell?.createCellEditDoneEventArgs(newValue, event);\n\n        this.cell.value = newValue;\n        this.grid.cellEditExit.emit(args);\n        this.endCellEdit();\n        return args;\n    }\n\n\n    /** Clears cell editing state */\n    public endCellEdit() {\n        this.cell = null;\n    }\n\n    /** Returns whether the targeted cell is in edit mode */\n    public targetInEdit(rowIndex: number, columnIndex: number): boolean {\n        if (!this.cell) {\n            return false;\n        }\n        const res = this.cell.column.index === columnIndex && this.cell.rowIndex === rowIndex;\n        return res;\n    }\n}\nexport class IgxRowCrudState extends IgxCellCrudState {\n    public closeRowEditingOverlay = new Subject();\n\n    private _rowEditingBlocked = false;\n    private _rowEditingStarted = false;\n\n    public get primaryKey(): any {\n        return this.grid.primaryKey;\n    }\n\n    public get rowInEditMode(): RowType {\n        const editRowState = this.row;\n        return editRowState !== null ? this.grid.rowList.find(e => e.key === editRowState.id) : null;\n    }\n\n    public get rowEditing(): boolean {\n        return this.grid.rowEditable;\n    }\n\n    public get nonEditable(): boolean {\n        return this.grid.rowEditable && (this.grid.primaryKey === undefined || this.grid.primaryKey === null);\n    }\n\n    public get rowEditingBlocked() {\n        return this._rowEditingBlocked;\n    }\n\n    public set rowEditingBlocked(val: boolean) {\n        this._rowEditingBlocked = val;\n    }\n\n    /** Enters row edit mode */\n    public beginRowEdit(event?: Event) {\n        if (!this.row || !(this.row.getClassName() === IgxEditRow.name)) {\n            if (!this.row) {\n                this.createRow(this.cell);\n            }\n\n            if (!this._rowEditingStarted) {\n                const rowArgs = this.row.createRowEditEventArgs(false, event);\n\n                this.grid.rowEditEnter.emit(rowArgs);\n                if (rowArgs.cancel) {\n                    this.endEditMode();\n                    return true;\n                }\n\n                this._rowEditingStarted = true;\n            }\n\n            this.row.transactionState = this.grid.transactions.getAggregatedValue(this.row.id, true);\n            this.grid.transactions.startPending();\n            this.grid.openRowOverlay(this.row.id);\n        }\n    }\n\n    public rowEdit(event: Event): IGridEditEventArgs {\n        const args = this.row.createRowEditEventArgs(true, event);\n        this.grid.rowEdit.emit(args);\n        return args;\n    }\n\n    public updateRow(commit: boolean, event?: Event): IGridEditEventArgs {\n        if (!this.grid.rowEditable ||\n            this.grid.rowEditingOverlay &&\n            this.grid.rowEditingOverlay.collapsed || !this.row) {\n            return {} as IGridEditEventArgs;\n        }\n\n        let args;\n        if (commit) {\n            this.row.newData = this.grid.transactions.getAggregatedValue(this.row.id, true);\n            this.updateRowEditData(this.row, this.row.newData);\n            args = this.rowEdit(event);\n            if (args.cancel) {\n                return args;\n            }\n        }\n\n        args = this.endRowTransaction(commit, event);\n\n        return args;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public endRowTransaction(commit: boolean, event?: Event): IGridEditEventArgs | IRowDataCancelableEventArgs {\n        this.row.newData = this.grid.transactions.getAggregatedValue(this.row.id, true);\n        let rowEditArgs = this.row.createRowEditEventArgs(true, event);\n\n        let nonCancelableArgs;\n        if (!commit) {\n            this.grid.transactions.endPending(false);\n            const isAddRow = this.row && this.row.getClassName() === IgxAddRow.name;\n            const id = this.row ? this.row.id : this.cell.id.rowID;\n            if (isAddRow) {\n                this.grid.validation.clear(id);\n            } else {\n                this.grid.validation.update(id, rowEditArgs.oldValue);\n            }\n        } else if (this.row.getClassName() === IgxEditRow.name) {\n            rowEditArgs = this.grid.gridAPI.update_row(this.row, this.row.newData, event);\n            nonCancelableArgs = this.rowEditDone(rowEditArgs.oldValue, event);\n        } else {\n            const rowAddArgs = this.row.createRowDataEventArgs(event);\n            this.grid.rowAdd.emit(rowAddArgs);\n            if (rowAddArgs.cancel) {\n                return rowAddArgs;\n            }\n\n            this.grid.transactions.endPending(false);\n\n            const parentId = this.getParentRowId();\n            this.grid.gridAPI.addRowToData(this.row.newData ?? this.row.data, parentId);\n            this.grid.triggerPipes();\n\n            nonCancelableArgs = this.rowEditDone(null, event);\n        }\n\n        nonCancelableArgs = this.exitRowEdit(rowEditArgs.oldValue, event);\n\n        return { ...nonCancelableArgs, ...rowEditArgs };\n    }\n\n    public rowEditDone(cachedRowData, event: Event) {\n        const doneArgs = this.row.createRowEditDoneEventArgs(cachedRowData, event);\n        this.grid.rowEditDone.emit(doneArgs);\n        return doneArgs;\n    }\n\n\n    /** Exit row edit mode */\n    public exitRowEdit(cachedRowData, event?: Event): IGridEditDoneEventArgs {\n        const nonCancelableArgs = this.row.createRowEditDoneEventArgs(cachedRowData, event);\n        this.grid.rowEditExit.emit(nonCancelableArgs);\n        this.grid.closeRowEditingOverlay();\n\n        this.endRowEdit();\n        return nonCancelableArgs;\n    }\n\n    /** Clears row editing state */\n    public endRowEdit() {\n        this.row = null;\n        this.rowEditingBlocked = false;\n        this._rowEditingStarted = false;\n    }\n\n    /** Clears cell and row editing state and closes row editing template if it is open */\n    public endEditMode() {\n        this.endCellEdit();\n        if (this.grid.rowEditable) {\n            this.endRowEdit();\n            this.grid.closeRowEditingOverlay();\n        }\n    }\n\n    public updateRowEditData(row: IgxEditRow, value?: any) {\n        const grid = this.grid;\n\n        const rowInEditMode = grid.gridAPI.crudService.row;\n        row.newData = value ?? rowInEditMode.transactionState;\n\n\n        if (rowInEditMode && row.id === rowInEditMode.id) {\n            // do not use spread operator here as it will copy everything over an empty object with no descriptors\n            row.data = Object.assign(copyDescriptors(row.data), row.data, rowInEditMode.transactionState);\n            // TODO: Workaround for updating a row in edit mode through the API\n        } else if (this.grid.transactions.enabled) {\n            const state = grid.transactions.getState(row.id);\n            row.data = state ? Object.assign({}, row.data, state.value) : row.data;\n        }\n    }\n\n    protected getParentRowId() {\n        return null;\n    }\n}\n\nexport class IgxRowAddCrudState extends IgxRowCrudState {\n    public addRowParent: IgxAddRowParent = null;\n\n    /**\n     * @hidden @internal\n     */\n    public createAddRow(parentRow: RowType, asChild?: boolean) {\n        this.createAddRowParent(parentRow, asChild);\n\n        const newRec = this.grid.getEmptyRecordObjectFor(parentRow);\n        const addRowIndex = this.addRowParent.index + 1;\n        return this.row = new IgxAddRow(newRec.rowID, addRowIndex, newRec.data, newRec.recordRef, this.grid);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public createAddRowParent(row: RowType, newRowAsChild?: boolean) {\n        const rowIndex = row ? row.index : -1;\n        const rowId = row ? row.key : (rowIndex >= 0 ? this.grid.rowList.last.key : null);\n\n        const isInPinnedArea = this.grid.isRecordPinnedByViewIndex(rowIndex);\n        const pinIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowId);\n        const unpinIndex = this.grid.getUnpinnedIndexById(rowId);\n        this.addRowParent = {\n            rowID: rowId,\n            rowKey: rowId,\n            index: isInPinnedArea ? pinIndex : unpinIndex,\n            asChild: newRowAsChild,\n            isPinned: isInPinnedArea\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override endRowTransaction(commit: boolean, event?: Event): IGridEditEventArgs | IRowDataCancelableEventArgs {\n        const isAddRow = this.row && this.row.getClassName() === IgxAddRow.name;\n        if (isAddRow) {\n            this.grid.rowAdded.pipe(first()).subscribe((addRowArgs: IRowDataEventArgs) => {\n                const rowData = addRowArgs.data;\n                const pinnedIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowData[this.primaryKey]);\n                // A check whether the row is in the current view\n                const viewIndex = pinnedIndex !== -1 ? pinnedIndex : this._findRecordIndexInView(rowData);\n                const dataIndex = this.grid.filteredSortedData.findIndex(data => data[this.primaryKey] === rowData[this.primaryKey]);\n                const isInView = viewIndex !== -1 && !this.grid.navigation.shouldPerformVerticalScroll(viewIndex, 0);\n                const showIndex = isInView ? -1 : dataIndex;\n                this.grid.showSnackbarFor(showIndex);\n            });\n        }\n\n        const args = super.endRowTransaction(commit, event);\n        if (args.cancel) {\n            return args;\n        }\n\n        if (isAddRow) {\n            this.endAddRow();\n            if (commit) {\n                const rowAddedEventArgs: IRowDataEventArgs = {\n                    data: args.rowData,\n                    rowData: args.rowData,\n                    owner: this.grid,\n                    primaryKey: args.rowData[this.grid.primaryKey],\n                    rowKey: args.rowData[this.grid.primaryKey],\n                }\n                this.grid.rowAddedNotifier.next(rowAddedEventArgs);\n                this.grid.rowAdded.emit(rowAddedEventArgs);\n            }\n        }\n\n        return args;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public endAddRow() {\n        this.addRowParent = null;\n        this.grid.triggerPipes();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * TODO: consider changing modifier\n     */\n    public _findRecordIndexInView(rec) {\n        return this.grid.dataView.findIndex(data => data[this.primaryKey] === rec[this.primaryKey]);\n    }\n\n    protected override getParentRowId() {\n        if (this.addRowParent.asChild) {\n            return this.addRowParent.asChild ? this.addRowParent.rowID : undefined;\n        } else if (this.addRowParent.rowID !== null && this.addRowParent.rowID !== undefined) {\n            const spawnedForRecord = this.grid.gridAPI.get_rec_by_id(this.addRowParent.rowID);\n            return spawnedForRecord?.parent?.rowID;\n        }\n    }\n}\n\n@Injectable()\nexport class IgxGridCRUDService extends IgxRowAddCrudState {\n\n    public enterEditMode(cell, event?: Event) {\n        if (this.isInCompositionMode) {\n            return;\n        }\n\n        if (this.nonEditable) {\n            console.warn('The grid must have a `primaryKey` specified when using `rowEditable`!');\n            return;\n        }\n\n        if (this.cellInEditMode) {\n            // TODO: case solely for f2/enter nav that uses enterEditMode as toggle. Refactor.\n            const canceled = this.endEdit(true, event);\n\n            if (!canceled || !this.cell) {\n                this.grid.tbody.nativeElement.focus();\n            }\n        } else {\n            if (this.rowEditing) {\n                // TODO rowData\n                if (this.row && !this.sameRow(cell?.cellID?.rowID)) {\n                    this.rowEditingBlocked = this.endEdit(true, event);\n                    if (this.rowEditingBlocked) {\n                        return true;\n                    }\n\n                    this.rowEditingBlocked = false;\n                    this.endRowEdit();\n                }\n                this.createCell(cell);\n\n                const canceled = this.beginRowEdit(event);\n                if (!canceled) {\n                    this.beginCellEdit(event);\n                }\n\n            } else {\n                this.createCell(cell);\n                this.beginCellEdit(event);\n            }\n        }\n    }\n\n    /**\n     * Enters add row mode by creating temporary dummy so the user can fill in new row cells.\n     *\n     * @param parentRow Parent row after which the Add Row UI will be rendered.\n     *                  If `null` will show it at the bottom after all rows (or top if there are not rows).\n     * @param asChild Specifies if the new row should be added as a child to a tree row.\n     * @param event Base event that triggered the add row mode.\n     */\n    public enterAddRowMode(parentRow: RowType, asChild?: boolean, event?: Event) {\n        if (!this.rowEditing && (this.grid.primaryKey === undefined || this.grid.primaryKey === null)) {\n            console.warn('The grid must use row edit mode to perform row adding! Please set rowEditable to true.');\n            return;\n        }\n        this.endEdit(true, event);\n        // work with copy of original row, since context may change on collapse.\n        const parentRowCopy = parentRow ? Object.assign(copyDescriptors(parentRow), parentRow) : null;\n        if (parentRowCopy != null && this.grid.expansionStates.get(parentRowCopy.key)) {\n            this.grid.collapseRow(parentRowCopy.key);\n        }\n\n        this.createAddRow(parentRowCopy, asChild);\n\n        this.grid.transactions.startPending();\n        if (this.addRowParent.isPinned) {\n            // If parent is pinned, add the new row to pinned records\n            (this.grid as any)._pinnedRecordIDs.splice(this.row.index, 0, this.row.id);\n        }\n\n        this.grid.triggerPipes();\n        this.grid.notifyChanges(true);\n\n        this.grid.navigateTo(this.row.index, -1);\n        // when selecting the dummy row we need to adjust for top pinned rows\n        const indexAdjust = this.grid.isRowPinningToTop ?\n            (!this.addRowParent.isPinned ? this.grid.pinnedRows.length : 0) :\n            (!this.addRowParent.isPinned ? 0 : this.grid.unpinnedRecords.length);\n\n        // TODO: Type this without shoving a bunch of internal properties in the row type\n        const dummyRow = this.grid.gridAPI.get_row_by_index(this.row.index + indexAdjust) as any;\n        dummyRow.triggerAddAnimation();\n        dummyRow.cdr.detectChanges();\n        dummyRow.addAnimationEnd.pipe(first()).subscribe(() => {\n            const cell = dummyRow.cells.find(c => c.editable);\n            if (cell) {\n                this.grid.gridAPI.update_cell(this.cell);\n                this.enterEditMode(cell, event);\n                cell.activate();\n            }\n        });\n    }\n\n    /**\n     * Finishes the row transactions on the current row and returns whether the grid editing was canceled.\n     *\n     * @remarks\n     * If `commit === true`, passes them from the pending state to the data (or transaction service)\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton (click)=\"grid.endEdit(true)\">Commit Row</button>\n     * ```\n     * @param commit\n     */\n    // TODO: Implement the same representation of the method without evt emission.\n    public endEdit(commit = true, event?: Event): boolean {\n        if (!this.row && !this.cell) {\n            return;\n        }\n\n        let args;\n        if (commit) {\n            args = this.updateCell(true, event);\n            if (args && args.cancel) {\n                return args.cancel;\n            }\n        } else {\n            // needede because this.cell is null after exitCellEdit\n            // thus the next if is always false\n            const cell = this.cell;\n            this.exitCellEdit(event);\n            if (!this.grid.rowEditable && cell) {\n                const value = this.grid.transactions.getAggregatedValue(cell.id.rowID, true) || cell.rowData;\n                this.grid.validation.update(cell.id.rowID, value);\n            }\n        }\n\n        args = this.updateRow(commit, event);\n        this.rowEditingBlocked = args.cancel;\n        if (args.cancel) {\n            return true;\n        }\n\n        const activeCell = this.grid.selectionService.activeElement;\n        if (event && activeCell) {\n            const rowIndex = activeCell.row;\n            const visibleColIndex = activeCell.layout ? activeCell.layout.columnVisibleIndex : activeCell.column;\n            this.grid.navigateTo(rowIndex, visibleColIndex);\n        }\n\n        return false;\n    }\n}\n","import { ColumnPinningPosition, FilterMode, GridPagingMode, GridSelectionMode, GridSummaryCalculationMode, GridSummaryPosition, GridValidationTrigger, RowPinningPosition, Size } from './enums';\nimport {\n    ISearchInfo, IGridCellEventArgs, IRowSelectionEventArgs, IColumnSelectionEventArgs,\n    IPinColumnCancellableEventArgs, IColumnVisibilityChangedEventArgs, IColumnVisibilityChangingEventArgs,\n    IRowDragEndEventArgs, IColumnMovingStartEventArgs, IColumnMovingEndEventArgs,\n    IRowDataEventArgs, IGridKeydownEventArgs, IRowDragStartEventArgs,\n    IColumnMovingEventArgs, IPinColumnEventArgs,\n    IActiveNodeChangeEventArgs,\n    ICellPosition, IFilteringEventArgs, IColumnResizeEventArgs, IRowToggleEventArgs, IGridToolbarExportEventArgs, IPinRowEventArgs,\n    IGridRowEventArgs, IGridEditEventArgs, IRowDataCancelableEventArgs, IGridEditDoneEventArgs,\n    IGridContextMenuEventArgs\n} from '../common/events';\nimport { ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { IGridResourceStrings } from '../../core/i18n/grid-resources';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { IGroupByExpandState } from '../../data-operations/groupby-expand-state.interface';\nimport { IgxPaginatorComponent } from '../../paginator/paginator.component';\nimport { IgxCell, IgxEditRow } from './crud.service';\nimport { GridSelectionRange } from './types';\nimport { FilteringLogic } from '../../data-operations/filtering-expression.interface';\nimport { IFilteringStrategy } from '../../data-operations/filtering-strategy';\nimport { DropPosition, IgxColumnMovingService } from '../moving/moving.service';\nimport { IgxOverlayOutletDirective, IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { Observable, Subject } from 'rxjs';\nimport { ITreeGridRecord } from '../tree-grid/tree-grid.interfaces';\nimport { State, Transaction, TransactionService } from '../../services/transaction/transaction';\nimport { DataType, GridColumnDataType } from '../../data-operations/data-util';\nimport { IgxFilteringOperand } from '../../data-operations/filtering-condition';\nimport { IColumnEditorOptions, IColumnPipeArgs, IFieldEditorOptions, IFieldPipeArgs, ISortingOptions, MRLResizeColumnInfo } from '../columns/interfaces';\nimport { IgxSummaryResult } from '../summaries/grid-summary';\nimport { ISortingExpression, ISortingStrategy, SortingDirection } from '../../data-operations/sorting-strategy';\nimport { IGridGroupingStrategy, IGridSortingStrategy } from './strategy';\nimport { IForOfState, IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { OverlaySettings } from '../../services/overlay/utilities';\nimport { IDimensionsChange, IPivotConfiguration, IPivotDimension, IPivotKeys, IPivotValue, IValuesChange, PivotDimensionType, IPivotUISettings } from '../pivot-grid/pivot-grid.interface';\nimport { IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\nimport { FormControl, FormGroup, ValidationErrors } from '@angular/forms';\nimport { IgxGridValidationService } from '../grid/grid-validation.service';\n\nexport const IGX_GRID_BASE = /*@__PURE__*/new InjectionToken<GridType>('IgxGridBaseToken');\nexport const IGX_GRID_SERVICE_BASE = /*@__PURE__*/new InjectionToken<GridServiceType>('IgxGridServiceBaseToken');\n\n/** Interface representing a segment of a path in a hierarchical grid. */\nexport interface IPathSegment {\n    /**\n     * The unique identifier of the row within the segment.\n     * @deprecated since version 17.1.0. Use the `rowKey` property instead.\n     */\n    rowID: any;\n    rowKey: any;\n    /** The key representing the row's 'hierarchical level. */\n    rowIslandKey: string;\n}\n\nexport interface IGridDataBindable {\n    data: any[] | null;\n    get filteredData(): any[];\n}\n\n/* marshalByValue */\n/* jsonAPIComplexObject */\n/**\n * Interface representing a cell in the grid. It is essentially the blueprint to a cell object.\n * Contains definitions of properties and methods, relevant to a cell\n */\nexport interface CellType {\n    /** The current value of the cell. */\n    value: any;\n    /** The value to display when the cell is in edit mode. */\n    editValue: any;\n    /** Indicates whether the cell is currently selected. It is false, if the sell is not selected, and true, if it is. */\n    selected: boolean;\n    /** Indicates whether the cell is currently active (focused). */\n    active: boolean;\n    /** Indicates whether the cell can be edited. */\n    editable: boolean;\n    /** Indicates whether the cell is currently in edit mode. */\n    editMode: boolean;\n    /* blazorSuppress */\n    /** Represents the native HTML element of the cell itself */\n    nativeElement?: HTMLElement;\n    /** Represents the column that the cell belongs to. */\n    column: ColumnType;\n    /* blazorCSSuppress */\n    /** Represents the row that the cell belongs to */\n    row: RowType;\n    /** Represents the grid instance containing the cell */\n    grid: GridType;\n    /** Optional; An object identifying the cell. It contains rowID, columnID, and rowIndex of the cell. */\n    id?: { rowID: any; columnID: number; rowIndex: number };\n    /** Optional; The `cellID` is the unique key, used to identify the cell */\n    cellID?: any;\n    /**\n     * Optional; An object representing the validation state of the cell.\n     * Whether it's valid or invalid, and if it has errors\n     */\n    readonly validation?: IGridValidationState;\n    readonly?: boolean;\n    /** An optional title to display for the cell */\n    title?: any;\n    /** The CSS width of the cell as a string. */\n    width: string;\n    /** The index of the column that the cell belongs to. It counts only the visible (not hidden) columns */\n    visibleColumnIndex?: number;\n    /** A method definition to update the value of the cell. */\n    update: (value: any) => void;\n    /** A method definition to start or end the edit mode of the cell. It takes a boolean value as an argument*/\n    setEditMode?(value: boolean): void;\n    /**\n     * Optional;\n     * A method definition to calculate the size of the cell to fit the content\n     * The method can be used to calculate the size of the cell with the longest content and resize all cells to that size\n     */\n    calculateSizeToFit?(range: any): number;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to activate the cell.\n     * It takes a focus or keyboard event as an argument\n     */\n    activate?(event: FocusEvent | KeyboardEvent): void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle double-click events on the cell\n     * It takes a mouse event as an argument\n     */\n    onDoubleClick?(event: MouseEvent): void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle click events on the cell\n     * It takes a mouse event as an argument\n     */\n    onClick?(event: MouseEvent): void;\n}\n\n/**\n * Interface representing a header cell in the grid. It is essentially the blueprint to a header cell object.\n * Contains definitions of properties, relevant to the header\n */\nexport interface HeaderType {\n    /* blazorSuppress */\n    /** Represents the native HTML element of the cell itself */\n    nativeElement: HTMLElement;\n    /** The column that the header cell represents. */\n    column: ColumnType;\n    /** Indicates whether the column is currently sorted. */\n    sorted: boolean;\n    /** Indicates whether the cell can be selected */\n    selectable: boolean;\n    /** Indicates whether the cell is currently selected */\n    selected: boolean;\n    /** Indicates whether the column header is a title cell. */\n    title: boolean;\n    /** Represents the sorting direction of the column (ascending, descending or none). */\n    sortDirection: SortingDirection;\n}\n\n/* jsonAPIComplexObject */\n/* marshalByValue */\n/**\n * Interface representing a row in the grid. It is essentially the blueprint to a row object.\n * Contains definitions of properties and methods, relevant to a row\n */\nexport interface RowType {\n    /* blazorSuppress */\n    /** Represents the native HTML element of the row itself */\n    nativeElement?: HTMLElement;\n    /** The index of the row within the grid */\n    index: number;\n    viewIndex: number;\n    /** Indicates whether the row is grouped. */\n    isGroupByRow?: boolean;\n    isSummaryRow?: boolean;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A map of column field names to the summary results for the row.\n     */\n    summaries?: Map<string, IgxSummaryResult[]>;\n    groupRow?: IGroupByRecord;\n    key?: any;\n    readonly validation?: IGridValidationState;\n    data?: any;\n    /**\n     * Optional\n     * A list or an array of cells, that belong to the row\n     */\n    cells?: QueryList<CellType> | CellType[];\n    /**\n     * Optional\n     * Indicates whether the current row is disabled\n     */\n    disabled?: boolean;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * Virtualization state of data record added from cache\n     */\n    virtDirRow?: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n    /**\n     * Optional\n     * Indicates whether the current row is pinned.\n     */\n    pinned?: boolean;\n    /**\n     * Optional\n     * Indicates whether the current row is selected\n     */\n    selected?: boolean;\n    /**\n     * Optional\n     * Indicates whether the current row is expanded.\n     * The value is true, if the row is expanded and false, if it is collapsed\n     */\n    expanded?: boolean;\n    /**\n     * Optional\n     * Indicates whether the row is marked for deletion.\n     */\n    deleted?: boolean;\n     /**\n     * Optional\n     * Indicates whether the row is currently being edited.\n     */\n    inEditMode?: boolean;\n    /**\n     * Optional\n     * Contains the child rows of the current row, if there are any.\n     */\n    children?: RowType[];\n    /* blazorAlternateName: RowParent */\n    /**\n     * Optional\n     * Contains the parent row of the current row, if it has one.\n     * If the parent row exist, it means that the current row is a child row\n     */\n    parent?: RowType;\n    /**\n     * Optional\n     * Indicates whether the current row has any child rows\n     */\n    hasChildren?: boolean;\n    /**\n     * Optional\n     * Represents the hierarchical record associated with the row (for tree grids).\n     * It is of type ITreeGridRecord, which contains the data, children, the hierarchical level, etc.\n     */\n    treeRow?: ITreeGridRecord;\n    addRowUI?: boolean;\n    /**\n     * Optional\n     * Indicates whether the row is currently focused.\n     */\n    focused?: boolean;\n    /** Represent the grid instance, the row belongs to */\n    grid: GridType;\n    /* blazorSuppress */\n    onRowSelectorClick?: (event: MouseEvent) => void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle click event on the row\n     * It takes a `MouseEvent` as an argument\n     */\n    onClick?: (event: MouseEvent) => void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle adding a new row\n     */\n    beginAddRow?: () => void;\n    /**\n     * Optional\n     * A method to handle changing the value of elements of the row\n     * It takes the new value as an argument\n     */\n    update?: (value: any) => void;\n    /**\n     * Optional\n     * A method to handle deleting rows\n     */\n    delete?: () => any;\n    /**\n     * Optional\n     * A method to handle pinning a row\n     */\n    pin?: () => void;\n    /**\n     * Optional\n     * A method to handle unpinning a row, that has been pinned\n     */\n    unpin?: () => void;\n}\n\nexport interface FieldType {\n    label?: string;\n    field: string;\n    header?: string;\n    /* alternateType: GridColumnDataType */\n    dataType: DataType;\n    editorOptions?: IFieldEditorOptions;\n    filters?: IgxFilteringOperand;\n    pipeArgs?: IFieldPipeArgs;\n    defaultTimeFormat?: string;\n    defaultDateTimeFormat?: string;\n\n    formatter?(value: any, rowData?: any): any;\n}\n\n/**\n * Represents a column in the `GridType`. It is essentially the blueprint to a column object.\n * Contains definitions of properties and methods, relevant to a column\n */\nexport interface ColumnType extends FieldType {\n    /** Represents the instance of the parent `GridType` that contains this column. */\n    grid: GridType;\n    /**\n     * A list containing all the child columns under this column (if any).\n     * @deprecated in version 18.1.0. Use the `childColumns` property instead.\n     */\n    children: QueryList<ColumnType>;\n    /**\n     * A list containing all the child columns under this column (if any).\n     * Empty without children or if this column is not Group or Layout.\n     */\n    get childColumns(): ColumnType[];\n    /** @hidden @internal */\n    allChildren: ColumnType[];\n    /** @hidden @internal */\n    headerGroup: any;\n    /** @hidden @internal */\n    headerCell: any;\n    validators: any[];\n\n    /**\n     * The template reference for the custom header of the column\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headerTemplate: TemplateRef<any>;\n    /**\n     * The template reference for the collapsible indicator of the column.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    collapsibleIndicatorTemplate?: TemplateRef<any>;\n    /** Represents custom CSS classes applied to the header element. When added, they take different styling */\n    headerClasses: any;\n    /** Represents custom CSS styles applied to the header element. When added, they take different styling */\n    headerStyles: any;\n     /** Represents custom CSS classes applied to the header group. When added, they take different styling */\n    headerGroupClasses: any;\n     /** Represents custom CSS styles applied to the header group. When added, they take different styling */\n    headerGroupStyles: any;\n\n    /**\n     * Custom CSS styling, applied to every column\n     * calcWidth, minWidthPx, maxWidthPx, minWidth, maxWidth, minWidthPercent, maxWidthPercent, resolvedWidth\n     */\n    calcWidth: any;\n    minWidthPx: number;\n    maxWidthPx: number;\n    minWidth: string;\n    maxWidth: string;\n    minWidthPercent: number;\n    maxWidthPercent: number;\n    resolvedWidth: string;\n\n    /**\n     * Optional\n     * Represents the header text of the column\n     */\n    header?: string;\n    /**\n     * The index of the column within the grid.\n     * Includes the hidden columns when counting\n     */\n    index: number;\n    /**\n     * Represents the type of data for the column:\n     * string, number, boolean, currency, date, time, etc.\n     */\n    dataType: GridColumnDataType;\n    /**\n     * Sets properties on the default column editors\n     */\n    editorOptions: IColumnEditorOptions;\n    /**\n     * The template reference for the custom inline editor of the column\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    inlineEditorTemplate: TemplateRef<any>;\n    /**\n     * The index of the column within the grid.\n     * Does not include the hidden columns when counting\n     */\n    visibleIndex: number;\n    /** Optional\n     * Indicated whether the column can be collapsed. If the value is true, the column can be collapsed\n     * It is used in tree grid and for navigation\n     */\n    collapsible?: boolean;\n    /** Indicated whether the column can be edited. If the value is true, the column can be edited */\n    editable: boolean;\n    /** Specifies whether the column can be resized. If the value is true, the column can be resized */\n    resizable: boolean;\n    /** Specifies whether the data of the column can be searched. If the value is true, the column data can be searched */\n    searchable: boolean;\n    /** Specifies whether the column belongs to a group of columns. */\n    columnGroup: boolean;\n    /** Indicates whether a column can be put in a group. If the value is true, the column can be put in a group */\n    groupable: boolean;\n    /** Indicates whether a column can be sorted. If the value is true, the column can be sorted. */\n    sortable: boolean;\n    /** Indicates whether a column can be filtered. If the value is true, the column can be filtered */\n    filterable: boolean;\n    /** Indicates whether a column is currently hidden (not visible). If the value is true, the column is not visible */\n    hidden: boolean;\n    /** Indicates whether a column can be pinned. If the value is true, the column cannot be pinned */\n    disablePinning: boolean;\n    /** Indicates whether a column can be hidden. If the value is true, the column cannot be hidden */\n    disableHiding: boolean;\n    /**\n     * The sorting strategy used for sorting this column.\n     * The interface contains a method sort that sorts the provided data based on the given sorting expressions\n     */\n    sortStrategy: ISortingStrategy;\n     /**\n     * Indicates whether the search should match results, no matter the case of the letters (upper and lower)\n     * If the value is false, the result will depend on the case (example: `E` will not match `e`)\n     * If the value is true, the result will not depend on the case (example: `E` will match `e`)\n     */\n    sortingIgnoreCase: boolean;\n    /** @hidden @internal */\n    filterCell: any;\n    filteringIgnoreCase: boolean;\n    /**\n     * The filtering expressions for the column.\n     * The type contains properties and methods for filtering: filteringOperands, operator (logic), fieldName, etc.\n     */\n    filteringExpressionsTree: FilteringExpressionsTree;\n    hasSummary: boolean;\n    summaries: any;\n    disabledSummaries?: string[];\n    /**\n     * The template reference for a summary of the column\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    summaryTemplate: TemplateRef<any>;\n    /** Indicates if the column is currently pinned. If the value is true, the column is pinned */\n    pinned: boolean;\n    /** Indicates if the column is currently expanded or collapsed. If the value is true, the column is expanded */\n    expanded: boolean;\n    /** Indicates if the column is currently selected. If the value is true, the column is selected */\n    selected: boolean;\n    /** Indicates if the column can be selected. If the value is true, the column can be selected */\n    selectable: boolean;\n    columnLayout: boolean;\n    /** Represents the hierarchical level of the column in the column layout */\n    level: number;\n    rowStart: number;\n    rowEnd: number;\n    colStart: number;\n    colEnd: number;\n    /** @hidden @internal */\n    gridRowSpan: number;\n    /** @hidden @internal */\n    gridColumnSpan: number;\n    columnLayoutChild: boolean;\n    width: string;\n    /**\n     * Optional\n     * The root parent of this column (if any).\n     * If there is no root parent, that means the current column is the root parent\n     */\n    topLevelParent?: ColumnType;\n    /* alternateName: parentColumn */\n    /**\n     * Optional\n     * The immediate parent (right above) column of this column (if any).\n     * If there is no parent, that means the current column is the root parent\n     */\n    parent?: ColumnType;\n    pipeArgs: IColumnPipeArgs;\n    hasNestedPath: boolean;\n    additionalTemplateContext: any;\n    /** Indicates whether the current column is the last to be pinned.\n     * If the value is false, there are columns, that have been pinned after the current */\n    isLastPinned: boolean;\n    /** Indicates whether the current column is the first for the grid to be pinned.\n     * If the value is false, there are columns, that have been pinned before the current */\n    isFirstPinned: boolean;\n    applySelectableClass: boolean;\n    /** The title of the column, used for accessibility purposes */\n    title: string;\n    /* blazorSuppress */\n    /** Represents a method with custom grouping comparator to determine the members of the group. */\n    groupingComparer: (a: any, b: any) => number;\n\n    /**\n     * Represents a custom template for filtering\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    filterCellTemplate: TemplateRef<any>;\n\n    /**\n     * A method definition to move the column to the specified index.\n     * It takes the index of type number as a parameter\n    */\n    move(index: number): void;\n    /** A method definition to retrieve the set CSS size */\n    getAutoSize(): string;\n    getResizableColUnderEnd(): MRLResizeColumnInfo[];\n    /** A method definition to retrieve the set CSS width of the cells under the column */\n    getCellWidth(): string;\n    getGridTemplate(isRow: boolean): string;\n    /** A method definition to toggle column visibility (hidden or visible) */\n    toggleVisibility(value?: boolean): void;\n    populateVisibleIndexes?(): void;\n    /** Pins the column at the specified index (if not already pinned). */\n    pin(index?: number): boolean;\n    /** Unpins the column at the specified index (if not already unpinned). */\n    unpin(index?: number): boolean;\n}\n\n/**\n * Interface representing the event arguments when a form group is created in the grid.\n * - formGroup: The form group that is created.\n * - owner: The grid instance that owns the form group.\n */\nexport interface IGridFormGroupCreatedEventArgs {\n    /* blazorSuppress */\n    formGroup: FormGroup,\n    owner: GridType\n}\n\n/**\n * Interface representing the event arguments for the grid validation status change event.\n * - status: The validation status ('VALID' or 'INVALID').\n * - owner: The grid instance that owns the validation state.\n */\nexport interface IGridValidationStatusEventArgs {\n    status: ValidationStatus,\n    owner: GridType\n}\n\n/**\n * Type representing the validation status.\n * - 'VALID': The validation status is valid.\n * - 'INVALID': The validation status is invalid.\n */\nexport type ValidationStatus = 'VALID' | 'INVALID';\n\n/**\n * Interface representing the validation state of a grid.\n * - status: The validation status ('VALID' or 'INVALID').\n * - errors: The validation errors if any.\n */\nexport interface IGridValidationState {\n    readonly status: ValidationStatus;\n    readonly errors?: ValidationErrors;\n}\n\n/**\n * Interface representing the validation state of a record in the grid.\n * - `key`: The unique identifier of the record.\n * - `fields`: An array of the validation state of individual fields in the record.\n */\nexport interface IRecordValidationState extends IGridValidationState {\n    key: any;\n    fields: IFieldValidationState[];\n}\n\n/**\n * Interface representing the validation state of a field in the grid.\n * -`field`: The name of the field (property) being validated.\n */\nexport interface IFieldValidationState extends IGridValidationState {\n    field: string\n}\n\n/**\n * Represents the service interface for interacting with the grid.\n */\nexport interface GridServiceType {\n\n    /** The reference to the parent `GridType` that contains the service. */\n    grid: GridType;\n    /** Represents the type of the CRUD service (Create, Read, Update, Delete) operations on the grid data. */\n    crudService: any;\n    /** A service responsible for handling column moving within the grid. It contains a reference to the column, its icon, and indicator for cancelation. */\n    cms: IgxColumnMovingService;\n\n    /** Represents a method declaration for retrieving the data used in the grid. The returned values could be of any type */\n    get_data(): any[];\n    /**\n     * Represents a method declaration for retrieving all the data available in the grid, including any transactional data.\n     * `includeTransactions`: Optional parameter. Specifies whether to include transactional data if present.\n     * Returns an array containing all the data available in the grid.\n     */\n    get_all_data(includeTransactions?: boolean): any[];\n    /** Represents a method declaration for retrieving a column object by its name, taken as a parameter. */\n    get_column_by_name(name: string): ColumnType;\n    /** Represents a method declaration for retrieving the data associated with a specific row by its unique identifier (of any type, taken as a parameter). */\n    getRowData(id: any): any;\n    /** Represents a method declaration for retrieving the data associated with a specific record by its unique identifier (of any type, taken as a parameter). */\n    get_rec_by_id(id: any): any;\n    /** Represents a method declaration for retrieving the unique identifier of a specific row by its data. */\n    get_row_id(rowData: any): any;\n    /** Represents a method declaration for retrieving the row object associated with a specific index (taken as a parameter) in the grid */\n    get_row_by_index(rowSelector: any): RowType;\n    /** Represents a method declaration for retrieving the row object associated with a specific key (taken as a parameter) in the grid */\n    get_row_by_key(rowSelector: any): RowType;\n    /** Represents a method declaration for retrieving the index of a record in the grid's data collection using its unique identifier. */\n    get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number;\n    /** Represents a method declaration for retrieving the index of a record in the grid's data collection using its index. */\n    get_rec_id_by_index(index: number, dataCollection?: any[]): any;\n    get_row_index_in_data(rowID: any, dataCollection?: any[]): number;\n    /** Represents a method declaration for retrieving the cell object associated with a specific row and column in the grid. */\n    get_cell_by_key(rowSelector: any, field: string): CellType;\n    /** Represents a method declaration for retrieving the cell object associated with a specific row and column using their indexes. */\n    get_cell_by_index(rowIndex: number, columnID: number | string): CellType;\n    /**\n     * Represents a method declaration for retrieving the cell object associated with a specific row and column using their indexes.\n     * It counts only the indexes of the visible columns and rows\n     */\n    get_cell_by_visible_index(rowIndex: number, columnIndex: number);\n    /** Represents a method declaration that sets the expansion state of a group row (used for tree grids)\n     * It takes the value for the expansion as a parameter (expanded or collapsed)\n     */\n    set_grouprow_expansion_state?(groupRow: IGroupByRecord, value: boolean): void;\n    row_deleted_transaction(id: any): boolean;\n    /**\n     * Represents a method declaration for adding a new row to the grid.\n     * It takes the row's data and the identifier of the parent row if applicable (used for tree grids)\n     */\n    addRowToData(rowData: any, parentID?: any): void;\n    /** Represents a method declaration for deleting a row, specified by it's identifier (taken as a parameter) */\n    deleteRowById(id: any): any;\n    /** Represents a method declaration for retrieving the row's current state of expansion (used for tree grids)*/\n    get_row_expansion_state(id: any): boolean;\n    /** Represents a method declaration for setting a new expansion state. It can be triggered by an event */\n    set_row_expansion_state(id: any, expanded: boolean, event?: Event): void;\n    get_summary_data(): any[];\n\n    prepare_sorting_expression(stateCollections: Array<Array<any>>, expression: ISortingExpression): void;\n    /**\n     * Represents a method declaration for sorting by only one expression\n     * The expression contains fieldName, sorting directory, whether case should be ignored and optional sorting strategy\n     */\n    sort(expression: ISortingExpression): void;\n    /**\n     * Represents a method declaration for sorting by multiple expressions\n     * The expressions contains fieldName, sorting directory, whether case should be ignored and optional sorting strategy\n     */\n    sort_multiple(expressions: ISortingExpression[]): void;\n    /** Represents a method declaration for resetting the sorting */\n    clear_sort(fieldName: string): void;\n\n    /** Represents an event, triggered when the pin state is changed */\n    get_pin_row_event_args(rowID: any, index?: number, row?: RowType, pinned?: boolean): IPinRowEventArgs;\n\n    filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[];\n    sortDataByExpressions(data: any[], expressions: ISortingExpression[]): any[];\n\n    update_cell(cell: IgxCell): IGridEditEventArgs;\n    update_row(row: IgxEditRow, value: any, event?: Event): IGridEditEventArgs;\n\n    expand_path_to_record?(record: ITreeGridRecord): void;\n    get_selected_children?(record: ITreeGridRecord, selectedRowIDs: any[]): void;\n    get_groupBy_record_id?(gRow: IGroupByRecord): string;\n    remove_grouping_expression?(fieldName: string): void;\n    clear_groupby?(field: string | any): void;\n    getParentRowId?(child: GridType): any;\n    getChildGrids?(inDepth?: boolean): GridType[];\n    getChildGrid?(path: IPathSegment[]): GridType;\n\n    unsetChildRowIsland?(rowIsland: GridType): void;\n    registerChildRowIsland?(rowIsland: GridType): void;\n}\n\n\n/**\n * Interface representing a grid type. It is essentially the blueprint to a grid object.\n * Contains definitions of properties and methods, relevant to a grid\n * Extends `IGridDataBindable`\n */\nexport interface GridType extends IGridDataBindable {\n    /** Represents the locale of the grid: `USD`, `EUR`, `GBP`, `CNY`, `JPY`, etc. */\n    locale: string;\n    resourceStrings: IGridResourceStrings;\n    /* blazorSuppress */\n    /** Represents the native HTML element itself */\n    nativeElement: HTMLElement;\n    /** Indicates whether rows in the grid are editable. If te value is true, the rows can be edited */\n    rowEditable: boolean;\n    rootSummariesEnabled: boolean;\n    /** Indicates whether filtering in the grid is enabled. If te value is true, the grid can be filtered */\n    allowFiltering: boolean;\n     /** Indicates whether rows in the grid can be dragged. If te value is true, the rows can be dragged */\n    rowDraggable: boolean;\n    /** Represents the unique primary key used for identifying rows in the grid */\n    primaryKey: string;\n    /** Represents the unique identifier of the grid. */\n    id: string;\n    /** The height of the visible rows in the grid. */\n    renderedRowHeight: number;\n    pipeTrigger: number;\n    summaryPipeTrigger: number;\n    /** @hidden @internal */\n    groupablePipeTrigger: number;\n    filteringPipeTrigger: number;\n    /** @hidden @internal */\n    hasColumnLayouts: boolean;\n    /** Indicates whether the grid is currently in a moving state. */\n    moving: boolean;\n    isLoading: boolean;\n    /** @hidden @internal */\n    gridSize: Size;\n    /** @hidden @internal */\n    isColumnWidthSum: boolean;\n    /** @hidden @internal */\n    minColumnWidth: number;\n    /** Strategy, used for cloning the provided data. The type has one method, that takes any type of data */\n    dataCloneStrategy: IDataCloneStrategy;\n\n    /** Represents the grid service type providing API methods for the grid */\n    readonly gridAPI: GridServiceType;\n\n    /** The filter mode for the grid. It can be quick filter of excel-style filter */\n    filterMode: FilterMode;\n\n    // TYPE\n    /** @hidden @internal */\n    theadRow: any;\n    /** @hidden @internal */\n    groupArea: any;\n    /** @hidden @internal */\n    filterCellList: any[];\n    /** @hidden @internal */\n    filteringRow: any;\n    /** @hidden @internal */\n    actionStrip: any;\n    /** @hidden @internal */\n    resizeLine: any;\n\n    /** @hidden @internal */\n    tfoot: ElementRef<HTMLElement>;\n    /** @hidden @internal */\n    paginator: IgxPaginatorComponent;\n    /** @hidden @internal */\n    paginatorList?: QueryList<IgxPaginatorComponent>;\n    /** @hidden @internal */\n    crudService: any;\n    /** @hidden @internal */\n    summaryService: any;\n\n\n\n    /** Represents the state of virtualization for the grid. It has an owner, start index and chunk size */\n    virtualizationState: IForOfState;\n    // TYPE\n    /** @hidden @internal */\n    /** The service handling selection in the grid. Selecting, deselecting elements */\n    selectionService: any;\n    navigation: any;\n    /** @hidden @internal */\n    filteringService: any;\n    outlet: any;\n    /** Indicates whether the grid has columns that can be moved */\n    /** @hidden @internal */\n    hasMovableColumns: boolean;\n    /** Indicates whether the grid's rows can be selected */\n    isRowSelectable: boolean;\n    /** Indicates whether the selectors of the rows are visible */\n    showRowSelectors: boolean;\n    /** Indicates whether the grid's element is pinned to the start of the grid */\n    isPinningToStart: boolean;\n    /** Indicates if the column of the grid is in drag mode */\n    columnInDrag: any;\n    /** @hidden @internal */\n    /** The width of pinned element */\n    pinnedWidth: number;\n    /** @hidden @internal */\n    /** The width of unpinned element */\n    unpinnedWidth: number;\n    /** The CSS margin of the summaries */\n    summariesMargin: number;\n    headSelectorBaseAriaLabel: string;\n\n    /** Indicates whether the grid has columns that are shown */\n    hasVisibleColumns: boolean;\n    /**\n     * Optional\n     * Indicates whether the grid has expandable children (hierarchical and tree grid)\n     */\n    hasExpandableChildren?: boolean;\n    /**\n     * Optional\n     * Indicates whether collapsed grid elements should be expanded\n     */\n    showExpandAll?: boolean;\n\n    /** Represents the count of only the hidden (not visible) columns */\n    hiddenColumnsCount: number;\n    /** Represents the count of only the pinned columns */\n    pinnedColumnsCount: number;\n\n    /**\n     * Optional\n     * The template for grid icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    iconTemplate?: TemplateRef<any>;\n    /**\n     * Optional\n     * The template for group-by rows.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    groupRowTemplate?: TemplateRef<IgxGroupByRowTemplateContext>;\n    /**\n     * Optional\n     * The template for the group row selector.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    groupByRowSelectorTemplate?: TemplateRef<IgxGroupByRowSelectorTemplateContext>;\n    /**\n     * Optional\n     * The template for row loading indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowLoadingIndicatorTemplate?: TemplateRef<any>;\n    /**\n     * The template for the header selector.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headSelectorTemplate: TemplateRef<IgxHeadSelectorTemplateContext>;\n    /**\n     * The template for row selectors.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowSelectorTemplate: TemplateRef<IgxRowSelectorTemplateContext>;\n    /**\n     * The template for sort header icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    sortHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    /**\n     * The template for ascending sort header icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    sortAscendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    /**\n     * The template for descending sort header icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    sortDescendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    /**\n     * The template for header collapsed indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headerCollapsedIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    /**\n     * The template for header expanded indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headerExpandedIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    /** The template for drag indicator icons. Could be of any type */\n    dragIndicatorIconTemplate: any;\n    /** The base drag indicator icon. Could be of any type */\n    dragIndicatorIconBase: any;\n    /** Indicates whether transitions are disabled for the grid. */\n    disableTransitions: boolean;\n    /** Indicates whether the currency symbol is positioned to the left of values. */\n    currencyPositionLeft: boolean;\n\n    /** Indicates whether the width of the column is set by the user, or is configured automatically. */\n    columnWidthSetByUser: boolean;\n    headerFeaturesWidth: number;\n    /** CSS styling calculated for an element: calcHeight, calcWidth, outerWidth */\n    calcHeight: number;\n    calcWidth: number;\n    outerWidth: number;\n    /** The height of each row in the grid. Setting a constant height can solve problems with not showing all elements when scrolling */\n    rowHeight: number;\n    multiRowLayoutRowSize: number;\n    /** Minimal width for headers */\n    defaultHeaderGroupMinWidth: any;\n    maxLevelHeaderDepth: number;\n    defaultRowHeight: number;\n    /** The default font size, calculated for each element */\n    _baseFontSize?: number;\n    scrollSize: number;\n\n    /** The trigger for grid validation. It's value can either be `change` or `blur` */\n    validationTrigger: GridValidationTrigger;\n    /**\n     * The configuration for columns and rows pinning in the grid\n     * It's of type IPinningConfig, which can have value for columns (start, end) and for rows (top, bottom)\n    */\n    pinning: IPinningConfig;\n    /* blazorSuppress */\n    expansionStates: Map<any, boolean>;\n    parentVirtDir: any;\n    tbody: any;\n    verticalScrollContainer: any;\n    dataRowList: any;\n    rowList: any;\n    /** An unmodifiable list, containing all the columns of the grid. */\n    columnList: QueryList<ColumnType>;\n    columns: ColumnType[];\n    /** An array of columns, but it counts only the ones visible (not hidden) in the view */\n    visibleColumns: ColumnType[];\n    /** An array of columns, but it counts only the ones that are not pinned */\n    unpinnedColumns: ColumnType[];\n    /** An array of columns, but it counts only the ones that are pinned */\n    pinnedColumns: ColumnType[];\n    /** represents an array of the headers of the columns */\n    /** @hidden @internal */\n    headerCellList: any[];\n    /** @hidden @internal */\n    headerGroups: any[];\n    /** @hidden @internal */\n    headerGroupsList: any[];\n    summariesRowList: any;\n    /** @hidden @internal */\n    headerContainer: any;\n    /** Indicates whether cells are selectable in the grid */\n    isCellSelectable: boolean;\n    /** Indicates whether it is allowed to select more than one row in the grid */\n    isMultiRowSelectionEnabled: boolean;\n    hasPinnedRecords: boolean;\n    pinnedRecordsCount: number;\n    pinnedRecords: any[];\n    unpinnedRecords: any[];\n    /** @hidden @internal */\n    pinnedDataView: any[];\n    pinnedRows: any[];\n    dataView: any[];\n    _filteredUnpinnedData: any[];\n    _filteredSortedUnpinnedData: any[];\n    filteredSortedData: any[];\n    dataWithAddedInTransactionRows: any[];\n    /** Represents the transaction service for the grid. */\n    readonly transactions: TransactionService<Transaction, State>;\n    /** Represents the validation service for the grid. The type contains properties and methods (logic) for validating records */\n    readonly validation: IgxGridValidationService;\n    defaultSummaryHeight: number;\n    summaryRowHeight: number;\n    rowEditingOverlay: IgxToggleDirective;\n    totalRowsCountAfterFilter: number;\n    _totalRecords: number;\n    /**\n     * Represents the paging of the grid. It can be either 'Local' or 'Remote'\n     * - Local: Default value; The grid will paginate the data source based on the page\n     */\n    pagingMode: GridPagingMode;\n    /** The paging state for the grid; Used to configure how paging should be applied - which is the current page, records per page */\n    /** @hidden */\n    pagingState: any;\n\n    rowEditTabs: any;\n    /** Represents the last search in the grid\n     * It contains the search text (the user has entered), the match and some settings for the search\n     */\n    readonly lastSearchInfo: ISearchInfo;\n    /** @hidden @internal */\n    page: number;\n    /** @hidden @internal */\n    perPage: number;\n    /** The ID of the row currently being dragged in the grid. */\n    /** @hidden @internal */\n    dragRowID: any;\n    /** Indicates whether a row is currently being dragged */\n    rowDragging: boolean;\n\n    firstEditableColumnIndex: number;\n    lastEditableColumnIndex: number;\n    isRowPinningToTop: boolean;\n    hasDetails: boolean;\n    /** @hidden @internal */\n    hasSummarizedColumns: boolean;\n    /** @hidden @internal */\n    hasColumnGroups: boolean;\n    /** @hidden @internal */\n    hasEditableColumns: boolean;\n    /* blazorSuppress */\n    /** Property, that provides a callback for loading unique column values on demand.\n     * If this property is provided, the unique values it generates will be used by the Excel Style Filtering  */\n    uniqueColumnValuesStrategy: (column: ColumnType, tree: FilteringExpressionsTree, done: (values: any[]) => void) => void;\n    /* blazorSuppress */\n    /** Property, that gets the header cell inner width for auto-sizing. */\n    getHeaderCellWidth: (element: HTMLElement) => ISizeInfo;\n\n    /* blazorSuppress */\n    /**\n     * Provides change detection functionality.\n     * A change-detection tree collects all views that are to be checked for changes.\n     * The property cannot be changed (readonly) */\n    readonly cdr: ChangeDetectorRef;\n    /** @hidden @internal */\n    document: Document;\n     /**\n     * The template for expanded row indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowExpandedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    /**\n     * The template for collapsed row indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowCollapsedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    /**\n     * The template for header icon\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    excelStyleHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n\n    selectRowOnClick: boolean;\n    /** Represents the selection mode for cells: 'none','single', 'multiple', 'multipleCascade' */\n    cellSelection: GridSelectionMode;\n    /** Represents the selection mode for rows: 'none','single', 'multiple', 'multipleCascade' */\n    rowSelection: GridSelectionMode;\n    /** Represents the selection mode for columns: 'none','single', 'multiple', 'multipleCascade' */\n    columnSelection: GridSelectionMode;\n    /** Represents the calculation mode for summaries: 'rootLevelOnly', 'childLevelsOnly', 'rootAndChildLevels' */\n    summaryCalculationMode: GridSummaryCalculationMode;\n    /** Represents the position of summaries: 'top', 'bottom' */\n    summaryPosition: GridSummaryPosition;\n\n    // XXX: Work around till we fixed the injection tokens\n    lastChildGrid?: GridType;\n    /** @hidden @internal */\n    toolbarOutlet?: ViewContainerRef;\n    /** @hidden @internal */\n    paginatorOutlet?: ViewContainerRef;\n    flatData?: any[] | null;\n    /** @hidden @internal */\n    childRow?: any;\n    expansionDepth?: number;\n    childDataKey?: any;\n    foreignKey?: any;\n    cascadeOnDelete?: boolean;\n    /* blazorSuppress */\n    loadChildrenOnDemand?: (parentID: any, done: (children: any[]) => void) => void;\n    hasChildrenKey?: any;\n    /* blazorSuppress */\n    loadingRows?: Set<any>;\n    /* blazorAlternateName: GridParent */\n    parent?: GridType;\n    highlightedRowID?: any;\n    updateOnRender?: boolean;\n    childLayoutKeys?: any[];\n    childLayoutList?: QueryList<any>;\n    rootGrid?: GridType;\n    processedRootRecords?: ITreeGridRecord[];\n    rootRecords?: ITreeGridRecord[];\n    /* blazorSuppress */\n    records?: Map<any, ITreeGridRecord>;\n    processedExpandedFlatData?: any[] | null;\n    /* blazorSuppress */\n    processedRecords?: Map<any, ITreeGridRecord>;\n    treeGroupArea?: any;\n\n    activeNodeChange: EventEmitter<IActiveNodeChangeEventArgs>;\n    gridKeydown: EventEmitter<IGridKeydownEventArgs>;\n    cellClick: EventEmitter<IGridCellEventArgs>;\n    rowClick: EventEmitter<IGridRowEventArgs>;\n    doubleClick: EventEmitter<IGridCellEventArgs>;\n    contextMenu: EventEmitter<IGridContextMenuEventArgs>;\n    selected: EventEmitter<IGridCellEventArgs>;\n    rangeSelected: EventEmitter<GridSelectionRange>;\n    rowSelectionChanging: EventEmitter<IRowSelectionEventArgs>;\n    localeChange: EventEmitter<boolean>;\n    filtering: EventEmitter<IFilteringEventArgs>;\n    filteringDone: EventEmitter<IFilteringExpressionsTree>;\n    columnPinned: EventEmitter<IPinColumnEventArgs>;\n    columnResized: EventEmitter<IColumnResizeEventArgs>;\n    columnMovingEnd: EventEmitter<IColumnMovingEndEventArgs>;\n    columnSelectionChanging: EventEmitter<IColumnSelectionEventArgs>;\n    columnMoving: EventEmitter<IColumnMovingEventArgs>;\n    columnMovingStart: EventEmitter<IColumnMovingStartEventArgs>;\n    columnPin: EventEmitter<IPinColumnCancellableEventArgs>;\n    columnVisibilityChanging: EventEmitter<IColumnVisibilityChangingEventArgs>;\n    columnVisibilityChanged: EventEmitter<IColumnVisibilityChangedEventArgs>;\n    batchEditingChange?: EventEmitter<boolean>;\n    rowAdd: EventEmitter<IRowDataCancelableEventArgs>;\n    rowAdded: EventEmitter<IRowDataEventArgs>;\n    /* blazorSuppress */\n    rowAddedNotifier: Subject<IRowDataEventArgs>;\n    rowDelete: EventEmitter<IRowDataCancelableEventArgs>;\n    rowDeleted: EventEmitter<IRowDataEventArgs>;\n    /* blazorSuppress */\n    rowDeletedNotifier: Subject<IRowDataEventArgs>;\n    cellEditEnter: EventEmitter<IGridEditEventArgs>;\n    cellEdit: EventEmitter<IGridEditEventArgs>;\n    cellEditDone: EventEmitter<IGridEditDoneEventArgs>;\n    cellEditExit: EventEmitter<IGridEditDoneEventArgs>;\n    rowEditEnter: EventEmitter<IGridEditEventArgs>;\n    rowEdit: EventEmitter<IGridEditEventArgs>;\n    rowEditDone: EventEmitter<IGridEditDoneEventArgs>;\n    rowEditExit: EventEmitter<IGridEditDoneEventArgs>;\n    rowDragStart: EventEmitter<IRowDragStartEventArgs>;\n    rowDragEnd: EventEmitter<IRowDragEndEventArgs>;\n    rowToggle: EventEmitter<IRowToggleEventArgs>;\n    formGroupCreated: EventEmitter<IGridFormGroupCreatedEventArgs>;\n    validationStatusChange: EventEmitter<IGridValidationStatusEventArgs>;\n\n    toolbarExporting: EventEmitter<IGridToolbarExportEventArgs>;\n    /* blazorSuppress */\n    rendered$: Observable<boolean>;\n    /* blazorSuppress */\n    resizeNotify: Subject<void>;\n\n    sortStrategy: IGridSortingStrategy;\n    groupStrategy?: IGridGroupingStrategy;\n    filteringLogic: FilteringLogic;\n    filterStrategy: IFilteringStrategy;\n    allowAdvancedFiltering: boolean;\n    sortingExpressions: ISortingExpression[];\n    sortingExpressionsChange: EventEmitter<ISortingExpression[]>;\n    filteringExpressionsTree: IFilteringExpressionsTree;\n    filteringExpressionsTreeChange: EventEmitter<IFilteringExpressionsTree>;\n    advancedFilteringExpressionsTree: IFilteringExpressionsTree;\n    advancedFilteringExpressionsTreeChange: EventEmitter<IFilteringExpressionsTree>;\n    sortingOptions: ISortingOptions;\n\n    batchEditing: boolean;\n    groupingExpansionState?: IGroupByExpandState[];\n    groupingExpressions?: IGroupingExpression[];\n    groupingExpressionsChange?: EventEmitter<IGroupingExpression[]>;\n    groupsExpanded?: boolean;\n    readonly groupsRecords?: IGroupByRecord[];\n    groupingFlatResult?: any[];\n    groupingResult?: any[];\n    groupingMetadata?: any[];\n    selectedCells?: CellType[];\n    selectedRows: any[];\n    /** @hidden @internal */\n    activeDescendant?: string;\n    /** @hidden @internal */\n    readonly type: 'flat' | 'tree' | 'hierarchical' | 'pivot';\n\n    toggleGroup?(groupRow: IGroupByRecord): void;\n    clearGrouping?(field: string): void;\n    groupBy?(expression: IGroupingExpression | Array<IGroupingExpression>): void;\n    resolveOutlet?(): IgxOverlayOutletDirective;\n    updateColumns(columns: ColumnType[]): void;\n    getSelectedRanges(): GridSelectionRange[];\n    deselectAllColumns(): void;\n    deselectColumns(columns: string[] | ColumnType[]): void;\n    selectColumns(columns: string[] | ColumnType[]): void;\n    selectedColumns(): ColumnType[];\n    refreshSearch(): void;\n    getDefaultExpandState(record: any): boolean;\n    trackColumnChanges(index: number, column: any): any;\n    getPossibleColumnWidth(): string;\n    resetHorizontalVirtualization(): void;\n    hasVerticalScroll(): boolean;\n    getVisibleContentHeight(): number;\n    /* blazorSuppress */\n    getDragGhostCustomTemplate(): TemplateRef<any> | null;\n    openRowOverlay(id: any): void;\n    openAdvancedFilteringDialog(overlaySettings?: OverlaySettings): void;\n    showSnackbarFor(index: number): void;\n    getColumnByName(name: string): any;\n    getColumnByVisibleIndex(index: number): ColumnType;\n    getHeaderGroupWidth(column: ColumnType): string;\n    getRowByKey?(key: any): RowType;\n    getRowByIndex?(index: number): RowType;\n    setFilteredData(data: any, pinned: boolean): void;\n    setFilteredSortedData(data: any, pinned: boolean): void;\n    sort(expression: ISortingExpression | ISortingExpression[]): void;\n    clearSort(name?: string): void;\n    pinRow(id: any, index?: number, row?: RowType): boolean;\n    unpinRow(id: any, row?: RowType): boolean;\n    getUnpinnedIndexById(id: any): number;\n    getEmptyRecordObjectFor(inRow: RowType): any;\n    isSummaryRow(rec: any): boolean;\n    isRecordPinned(rec: any): boolean;\n    getInitialPinnedIndex(rec: any): number;\n    isRecordPinnedByViewIndex(rowIndex: number): boolean;\n    isColumnGrouped(fieldName: string): boolean;\n    isDetailRecord(rec: any): boolean;\n    isGroupByRecord(rec: any): boolean;\n    isGhostRecord(rec: any): boolean;\n    isTreeRow?(rec: any): boolean;\n    isChildGridRecord?(rec: any): boolean;\n    getChildGrids?(inDepth?: boolean): any[];\n    isHierarchicalRecord?(record: any): boolean;\n    columnToVisibleIndex(key: string | number): number;\n    moveColumn(column: ColumnType, target: ColumnType, pos: DropPosition): void;\n    /* blazorSuppress */\n    navigateTo(rowIndex: number, visibleColumnIndex: number, callback?: (e: any) => any): void;\n    /* blazorSuppress */\n    getPreviousCell(currRowIndex: number, curVisibleColIndex: number, callback: (c: ColumnType) => boolean): ICellPosition;\n    /* blazorSuppress */\n    getNextCell(currRowIndex: number, curVisibleColIndex: number, callback: (c: ColumnType) => boolean): ICellPosition;\n    clearCellSelection(): void;\n    selectRange(range: GridSelectionRange | GridSelectionRange[]): void;\n    selectRows(rowIDs: any[], clearCurrentSelection?: boolean): void;\n    deselectRows(rowIDs: any[]): void;\n    selectAllRows(onlyFilterData?: boolean): void;\n    deselectAllRows(onlyFilterData?: boolean): void;\n    setUpPaginator(): void;\n    createFilterDropdown(column: ColumnType, options: OverlaySettings): any;\n    updateCell(value: any, rowSelector: any, column: string): void;\n    // Type to RowType\n    createRow?(index: number, data?: any): RowType;\n    deleteRow(id: any): any;\n    deleteRowById(id: any): any;\n    updateRow(value: any, rowSelector: any): void;\n    collapseRow(id: any): void;\n    notifyChanges(repaint?: boolean): void;\n    resetColumnCollections(): void;\n    triggerPipes(): void;\n    repositionRowEditingOverlay(row: RowType): void;\n    closeRowEditingOverlay(): void;\n    reflow(): void;\n\n    // TODO: Maybe move them to FlatGridType, but then will we need another token?\n    isExpandedGroup(group: IGroupByRecord): boolean;\n    createColumnsList?(cols: ColumnType[]): void;\n    toggleAllGroupRows?(): void;\n    toggleAll?(): void;\n    generateRowPath?(rowId: any): any[];\n    preventHeaderScroll?(args: any): void;\n}\n\n/**\n * An interface describing a Flat Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface FlatGridType extends GridType {\n    groupingExpansionState: IGroupByExpandState[];\n    groupingExpressions: IGroupingExpression[];\n    groupingExpressionsChange: EventEmitter<IGroupingExpression[]>;\n\n    toggleGroup(groupRow: IGroupByRecord): void;\n    clearGrouping(field: string): void;\n    groupBy(expression: IGroupingExpression | Array<IGroupingExpression>): void;\n}\n\n/**\n * An interface describing a Tree Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface TreeGridType extends GridType {\n    /* blazorSuppress */\n    records: Map<any, ITreeGridRecord>;\n    isTreeRow(rec: any): boolean;\n}\n\n/**\n * An interface describing a Hierarchical Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface HierarchicalGridType extends GridType {\n    childLayoutKeys: any[];\n}\n\n/**\n * An interface describing a Pivot Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface PivotGridType extends GridType {\n    /**\n     * The configuration settings for the pivot grid.\n     * it includes dimension strategy for rows and columns, filters and data keys\n     */\n    pivotConfiguration: IPivotConfiguration;\n    /**\n     * An array of all dimensions (rows and columns) in the pivot grid.\n     * it includes hierarchical level, filters and sorting, dimensional level, etc.\n     */\n    allDimensions: IPivotDimension[],\n    /** Specifies whether to show the pivot configuration UI in the grid. */\n    pivotUI: IPivotUISettings;\n    /** @hidden @internal */\n    columnDimensions: IPivotDimension[];\n    /** @hidden @internal */\n    rowDimensions: IPivotDimension[];\n    rowDimensionResizing: boolean;\n    /** @hidden @internal */\n    visibleRowDimensions: IPivotDimension[];\n    /** @hidden @internal */\n    hasHorizontalLayout: boolean;\n    /** @hidden @internal */\n    values: IPivotValue[];\n    /** @hidden @internal */\n    filterDimensions: IPivotDimension[];\n    /** @hidden @internal */\n    dimensionDataColumns: ColumnType[];\n    pivotRowWidths: number;\n    getRowDimensionByName(name: string): IPivotDimension;\n    /** Represents a method declaration for setting up the columns for the pivot grid based on the pivot configuration */\n    setupColumns(): void;\n    /** Represents a method declaration that allows toggle of expansion state of a row (taken as a parameter) in the pivot grid */\n    toggleRow(rowID: any): void;\n    /**\n     * Represents a method declaration for resolving the data type for a specific field (column).\n     * It takes the field as a parameter and returns it's type\n     */\n    resolveDataTypes(field: any): GridColumnDataType;\n    /**\n     * Represents a method declaration for moving dimension from its currently collection to the specified target collection\n     * by type (Row, Column or Filter) at specified index or at the collection's end\n     */\n    moveDimension(dimension: IPivotDimension, targetCollectionType: PivotDimensionType, index?: number);\n    getDimensionsByType(dimension: PivotDimensionType);\n    /** Toggles the dimension's enabled state on or off. The dimension remains in its current collection */\n    toggleDimension(dimension: IPivotDimension);\n    /** Sort the dimension and its children in the provided direction (ascending, descending or none). */\n    sortDimension(dimension: IPivotDimension, sortDirection: SortingDirection);\n    /** Toggles the value's enabled state on or off. The value remains in its current collection. */\n    toggleValue(value: IPivotValue);\n    /** Move value from its currently at specified index or at the end.\n     * If the parameter is not set, it will add it to the end of the collection. */\n    moveValue(value: IPivotValue, index?: number);\n    rowDimensionWidth(dim: IPivotDimension): string;\n    rowDimensionWidthToPixels(dim: IPivotDimension): number;\n    /** Emits an event when the dimensions in the pivot grid change. */\n    dimensionsChange: EventEmitter<IDimensionsChange>;\n    /** Emits an event when the values in the pivot grid change. */\n    valuesChange: EventEmitter<IValuesChange>;\n    /** Emits an event when the a dimension is sorted. */\n    dimensionsSortingExpressionsChange: EventEmitter<ISortingExpression[]>;\n    /** @hidden @internal */\n    pivotKeys: IPivotKeys;\n    hasMultipleValues: boolean;\n    excelStyleFilterMaxHeight: string;\n    excelStyleFilterMinHeight: string;\n    valueChipTemplate: TemplateRef<any>;\n    rowDimensionHeaderTemplate: TemplateRef<IgxColumnTemplateContext>;\n}\n\nexport interface GridSVGIcon {\n    name: string;\n    value: string;\n}\n\nexport interface ISizeInfo {\n    width: number,\n    padding: number\n}\n\nexport interface IgxGridMasterDetailContext {\n    $implicit: any;\n    index: number;\n}\n\nexport interface IgxGroupByRowTemplateContext {\n    $implicit: IGroupByRecord;\n}\n\nexport interface IgxGridTemplateContext {\n    $implicit: GridType\n}\n\nexport interface IgxGridRowTemplateContext {\n    $implicit: RowType\n}\n\nexport interface IgxGridRowDragGhostContext {\n    $implicit: any, // this is the row data\n    data: any, // this is also the row data for some reason.\n    grid: GridType\n}\n\nexport interface IgxGridEmptyTemplateContext {\n    /* blazorSuppress */\n    $implicit: undefined\n}\n\nexport interface IgxGridRowEditTemplateContext {\n    $implicit: undefined,\n    rowChangesCount: number,\n    endEdit: (commit: boolean, event?: Event) => void\n}\n\nexport interface IgxGridRowEditTextTemplateContext {\n    $implicit: number\n}\n\nexport interface IgxGridRowEditActionsTemplateContext {\n    /* blazorCSSuppress */\n    /* blazorAlternateType: RowEditActionsImplicit */\n    $implicit: (commit: boolean, event?: Event) => void\n}\n\nexport interface IgxGridHeaderTemplateContext {\n    $implicit: HeaderType\n}\n\nexport interface IgxColumnTemplateContext {\n    $implicit: ColumnType,\n    column: ColumnType\n}\n\nexport interface IgxCellTemplateContext {\n    $implicit: any,\n    additionalTemplateContext: any,\n    /* blazorSuppress */\n    formControl?: FormControl<any>,\n    /* blazorSuppress */\n    defaultErrorTemplate?: TemplateRef<any>,\n    cell: CellType\n}\n\n/* jsonAPIComplexObject */\nexport interface IgxRowSelectorTemplateDetails {\n    index: number;\n    /**\n     * @deprecated in version 15.1.0. Use the `key` property instead.\n     */\n    rowID: any;\n    key: any;\n    selected: boolean;\n    select?: () => void;\n    deselect?: () => void;\n}\n\nexport interface IgxRowSelectorTemplateContext {\n    $implicit: IgxRowSelectorTemplateDetails;\n}\n\n/* jsonAPIComplexObject */\nexport interface IgxGroupByRowSelectorTemplateDetails {\n    selectedCount: number;\n    totalCount: number;\n    groupRow: IGroupByRecord;\n}\nexport interface IgxGroupByRowSelectorTemplateContext {\n    $implicit: IgxGroupByRowSelectorTemplateDetails;\n}\n\n/* jsonAPIComplexObject */\nexport interface IgxHeadSelectorTemplateDetails {\n    selectedCount: number;\n    totalCount: number;\n    selectAll?: () => void;\n    deselectAll?: () => void;\n}\nexport interface IgxHeadSelectorTemplateContext {\n    $implicit: IgxHeadSelectorTemplateDetails;\n}\n\nexport interface IgxSummaryTemplateContext {\n    $implicit: IgxSummaryResult[]\n}\n\nexport interface IgxGridPaginatorTemplateContext {\n    $implicit: GridType;\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\n/**\n * An interface describing settings for row/column pinning position.\n */\nexport interface IPinningConfig {\n    columns?: ColumnPinningPosition;\n    rows?: RowPinningPosition;\n}\n\n/**\n * An interface describing settings for clipboard options\n */\nexport interface IClipboardOptions {\n    /**\n     * Enables/disables the copy behavior\n     */\n    enabled: boolean;\n    /**\n     * Include the columns headers in the clipboard output.\n     */\n    copyHeaders: boolean;\n    /**\n     * Apply the columns formatters (if any) on the data in the clipboard output.\n     */\n    copyFormatters: boolean;\n    /**\n     * The separator used for formatting the copy output. Defaults to `\\t`.\n     */\n    separator: string;\n}\n\n/**\n * An interface describing entity\n */\nexport interface EntityType {\n    name: string;\n    fields: FieldType[];\n}\n","import { IGroupByRecord } from '../../data-operations/groupby-record.interface';\n\n/* tsPlainInterface */\n/* marshalByValue */\nexport interface ISummaryExpression {\n    fieldName: string;\n    /* blazorCSSuppress */\n    customSummary?: any;\n}\n\n/* tsPlainInterface */\n/* marshalByValue */\nexport interface IgxSummaryResult {\n    key: string;\n    label: string;\n    /* blazorAlternateName: Result */\n    summaryResult: any;\n    /**\n     * Apply default formatting based on the grid column type.\n     * ```typescript\n     * const result: IgxSummaryResult = {\n     *   key: 'key',\n     *   label: 'label',\n     *   defaultFormatting: true\n     * }\n     * ```\n     *\n     * @memberof IgxSummaryResult\n     */\n    defaultFormatting?: boolean;\n}\n\nexport interface ISummaryRecord {\n    summaries: Map<string, IgxSummaryResult[]>;\n    max?: number;\n    cellIndentation?: number;\n}\n\nconst clear = (el) => el === 0 || Boolean(el);\nconst first = (arr) => arr[0];\nconst last = (arr) => arr[arr.length - 1];\n\n/* blazorCSSuppress */\nexport class IgxSummaryOperand {\n    /**\n     * Counts all the records in the data source.\n     * If filtering is applied, counts only the filtered records.\n     * ```typescript\n     * IgxSummaryOperand.count(dataSource);\n     * ```\n     *\n     * @memberof IgxSummaryOperand\n     */\n    public static count(data: any[]): number {\n        return data.length;\n    }\n    /**\n     * Executes the static `count` method and returns `IgxSummaryResult[]`.\n     * ```typescript\n     * interface IgxSummaryResult {\n     *   key: string;\n     *   label: string;\n     *   summaryResult: any;\n     * }\n     * ```\n     * Can be overridden in the inherited classes to provide customization for the `summary`.\n     * ```typescript\n     * class CustomSummary extends IgxSummaryOperand {\n     *   constructor() {\n     *     super();\n     *   }\n     *   public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n     *     const result = [];\n     *     result.push({\n     *       key: \"test\",\n     *       label: \"Test\",\n     *       summaryResult: IgxSummaryOperand.count(data)\n     *     });\n     *     return result;\n     *   }\n     * }\n     * this.grid.getColumnByName('ColumnName').summaries = CustomSummary;\n     * ```\n     *\n     * @memberof IgxSummaryOperand\n     */\n    public operate(data: any[] = [], _allData: any[] = [], _fieldName?: string, _groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        return [{\n            key: 'count',\n            label: 'Count',\n            defaultFormatting: false,\n            summaryResult: IgxSummaryOperand.count(data)\n        }];\n    }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxNumberSummaryOperand extends IgxSummaryOperand {\n    /**\n     * Returns the minimum numeric value in the provided data records.\n     * If filtering is applied, returns the minimum value in the filtered data records.\n     * ```typescript\n     * IgxNumberSummaryOperand.min(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static min(data: any[]): number {\n        return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.min(a, b)) : 0;\n    }\n    /**\n     * Returns the maximum numeric value in the provided data records.\n     * If filtering is applied, returns the maximum value in the filtered data records.\n     * ```typescript\n     * IgxNumberSummaryOperand.max(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static max(data: any[]): number {\n        return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.max(a, b)) : 0;\n    }\n    /**\n     * Returns the sum of the numeric values in the provided data records.\n     * If filtering is applied, returns the sum of the numeric values in the data records.\n     * ```typescript\n     * IgxNumberSummaryOperand.sum(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static sum(data: any[]): number {\n        return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => +a + +b) : 0;\n    }\n    /**\n     * Returns the average numeric value in the data provided data records.\n     * If filtering is applied, returns the average numeric value in the filtered data records.\n     * ```typescript\n     * IgxSummaryOperand.average(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static average(data: any[]): number {\n        return data.length && data.filter(clear).length ? this.sum(data) / this.count(data) : 0;\n    }\n    /**\n     * Executes the static methods and returns `IgxSummaryResult[]`.\n     * ```typescript\n     * interface IgxSummaryResult {\n     *   key: string;\n     *   label: string;\n     *   summaryResult: any;\n     * }\n     * ```\n     * Can be overridden in the inherited classes to provide customization for the `summary`.\n     * ```typescript\n     * class CustomNumberSummary extends IgxNumberSummaryOperand {\n     *   constructor() {\n     *     super();\n     *   }\n     *   public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n     *     const result = super.operate(data, allData, fieldName, groupRecord);\n     *     result.push({\n     *       key: \"avg\",\n     *       label: \"Avg\",\n     *       summaryResult: IgxNumberSummaryOperand.average(data)\n     *     });\n     *     result.push({\n     *       key: 'mdn',\n     *       label: 'Median',\n     *       summaryResult: this.findMedian(data)\n     *     });\n     *     return result;\n     *   }\n     * }\n     * this.grid.getColumnByName('ColumnName').summaries = CustomNumberSummary;\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public override operate(data: any[] = [], allData: any[] = [], fieldName?: string, groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        const result = super.operate(data, allData, fieldName, groupRecord);\n        result.push({\n            key: 'min',\n            label: 'Min',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.min(data)\n        });\n        result.push({\n            key: 'max',\n            label: 'Max',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.max(data)\n        });\n        result.push({\n            key: 'sum',\n            label: 'Sum',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.sum(data)\n        });\n        result.push({\n            key: 'average',\n            label: 'Avg',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.average(data)\n        });\n        return result;\n    }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxDateSummaryOperand extends IgxSummaryOperand {\n    /**\n     * Returns the latest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxDateSummaryOperand.latest(data);\n     * ```\n     *\n     * @memberof IgxDateSummaryOperand\n     */\n    public static latest(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            first(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;\n    }\n    /**\n     * Returns the earliest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxDateSummaryOperand.earliest(data);\n     * ```\n     *\n     * @memberof IgxDateSummaryOperand\n     */\n    public static earliest(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            last(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;\n    }\n    /**\n     * Executes the static methods and returns `IgxSummaryResult[]`.\n     * ```typescript\n     * interface IgxSummaryResult {\n     *   key: string;\n     *   label: string;\n     *   summaryResult: any;\n     * }\n     * ```\n     * Can be overridden in the inherited classes to provide customization for the `summary`.\n     * ```typescript\n     * class CustomDateSummary extends IgxDateSummaryOperand {\n     *   constructor() {\n     *     super();\n     *   }\n     *   public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n     *     const result = super.operate(data, allData, fieldName, groupRecord);\n     *     result.push({\n     *       key: \"deadline\",\n     *       label: \"Deadline Date\",\n     *       summaryResult: this.calculateDeadline(data);\n     *     });\n     *     return result;\n     *   }\n     * }\n     * this.grid.getColumnByName('ColumnName').summaries = CustomDateSummary;\n     * ```\n     *\n     * @memberof IgxDateSummaryOperand\n     */\n    public override operate(data: any[] = [], allData: any[] = [],  fieldName?: string, groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        const result = super.operate(data, allData, fieldName, groupRecord);\n        result.push({\n            key: 'earliest',\n            label: 'Earliest',\n            defaultFormatting: true,\n            summaryResult: IgxDateSummaryOperand.earliest(data)\n        });\n        result.push({\n            key: 'latest',\n            label: 'Latest',\n            defaultFormatting: true,\n            summaryResult: IgxDateSummaryOperand.latest(data)\n        });\n        return result;\n    }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxTimeSummaryOperand extends IgxSummaryOperand {\n    /**\n     * Returns the latest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the latest time value in the filtered data records.\n     * ```typescript\n     * IgxTimeSummaryOperand.latestTime(data);\n     * ```\n     *\n     * @memberof IgxTimeSummaryOperand\n     */\n    public static latestTime(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            first(data.filter(clear).map(v => new Date(v)).sort((a, b) =>\n                new Date().setHours(b.getHours(), b.getMinutes(), b.getSeconds()) -\n                new Date().setHours(a.getHours(), a.getMinutes(), a.getSeconds()))) : undefined;\n    }\n\n    /**\n     * Returns the earliest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the earliest time value in the filtered data records.\n     * ```typescript\n     * IgxTimeSummaryOperand.earliestTime(data);\n     * ```\n     *\n     * @memberof IgxTimeSummaryOperand\n     */\n    public static earliestTime(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            last(data.filter(clear).map(v => new Date(v)).sort((a, b) => new Date().setHours(b.getHours(), b.getMinutes(), b.getSeconds()) -\n            new Date().setHours(a.getHours(), a.getMinutes(), a.getSeconds()))) : undefined;\n    }\n    /**\n     * @memberof IgxTimeSummaryOperand\n     */\n    public override operate(data: any[] = [], allData: any[] = [],  fieldName?: string, groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        const result = super.operate(data, allData, fieldName, groupRecord);\n        result.push({\n            key: 'earliest',\n            label: 'Earliest',\n            defaultFormatting: true,\n            summaryResult: IgxTimeSummaryOperand.earliestTime(data)\n        });\n        result.push({\n            key: 'latest',\n            label: 'Latest',\n            defaultFormatting: true,\n            summaryResult: IgxTimeSummaryOperand.latestTime(data)\n        });\n        return result;\n    }\n}\n","import { IgxDateSummaryOperand, IgxNumberSummaryOperand, IgxTimeSummaryOperand } from '../summaries/grid-summary';\nimport { IPivotAggregator } from './pivot-grid.interface';\n\n\nexport class IgxPivotAggregate {\n    /**\n     * Gets array with default aggregator function for base aggregation.\n     * ```typescript\n     * IgxPivotAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static aggregators(): Array<IPivotAggregator> {\n        return [{\n            key: 'COUNT',\n            label: 'Count',\n            aggregator: IgxPivotAggregate.count\n        }];\n    }\n    /**\n     * Counts all the records in the data source.\n     * If filtering is applied, counts only the filtered records.\n     * ```typescript\n     * IgxSummaryOperand.count(dataSource);\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static count(members: number[]): number {\n        return members.length;\n    }\n}\n\nexport class IgxPivotNumericAggregate extends IgxPivotAggregate {\n\n    /**\n     * Gets array with default aggregator function for numeric aggregation.\n     * ```typescript\n     * IgxPivotAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static override aggregators() {\n        let result: IPivotAggregator[] = [];\n        result = result.concat(super.aggregators());\n        result.push({\n            key: 'MIN',\n            label: 'Minimum',\n            aggregator: IgxPivotNumericAggregate.min\n        });\n        result.push({\n            key: 'MAX',\n            label: 'Maximum',\n            aggregator: IgxPivotNumericAggregate.max\n        });\n\n        result.push({\n            key: 'SUM',\n            label: 'Sum',\n            aggregator: IgxPivotNumericAggregate.sum\n        });\n\n        result.push({\n            key: 'AVG',\n            label: 'Average',\n            aggregator: IgxPivotNumericAggregate.average\n        });\n        return result;\n    }\n\n    /**\n     * Returns the minimum numeric value in the provided data records.\n     * If filtering is applied, returns the minimum value in the filtered data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.min(members, data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static min(members: number[]): number {\n        return IgxNumberSummaryOperand.min(members);\n    }\n\n    /**\n     * Returns the maximum numeric value in the provided data records.\n     * If filtering is applied, returns the maximum value in the filtered data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.max(data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static max(members: number[]): number {\n        return IgxNumberSummaryOperand.max(members);\n    }\n\n    /**\n     * Returns the sum of the numeric values in the provided data records.\n     * If filtering is applied, returns the sum of the numeric values in the data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.sum(data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static sum(members: number[]): number {\n        return IgxNumberSummaryOperand.sum(members);\n    }\n\n    /**\n     * Returns the average numeric value in the data provided data records.\n     * If filtering is applied, returns the average numeric value in the filtered data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.average(data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static average(members: number[]): number {\n        return IgxNumberSummaryOperand.average(members);\n    }\n}\n\nexport class IgxPivotDateAggregate extends IgxPivotAggregate {\n    /**\n     * Gets array with default aggregator function for date aggregation.\n     * ```typescript\n     * IgxPivotDateAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static override aggregators() {\n        let result: IPivotAggregator[] = [];\n        result = result.concat(super.aggregators());\n        result.push({\n            key: 'LATEST',\n            label: 'Latest Date',\n            aggregator: IgxPivotDateAggregate.latest\n        });\n        result.push({\n            key: 'EARLIEST',\n            label: 'Earliest Date',\n            aggregator: IgxPivotDateAggregate.earliest\n        });\n        return result;\n    }\n    /**\n     * Returns the latest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxPivotDateAggregate.latest(data);\n     * ```\n     *\n     * @memberof IgxPivotDateAggregate\n     */\n    public static latest(members: any[]) {\n        return IgxDateSummaryOperand.latest(members);\n    }\n\n    /**\n     * Returns the earliest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxPivotDateAggregate.earliest(data);\n     * ```\n     *\n     * @memberof IgxPivotDateAggregate\n     */\n    public static earliest(members: any[]) {\n        return IgxDateSummaryOperand.earliest(members);\n    }\n}\n\nexport class IgxPivotTimeAggregate extends IgxPivotAggregate {\n    /**\n     * Gets array with default aggregator function for time aggregation.\n     * ```typescript\n     * IgxPivotTimeAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static override aggregators() {\n        let result: IPivotAggregator[] = [];\n        result = result.concat(super.aggregators());\n        result.push({\n            key: 'LATEST',\n            label: 'Latest Time',\n            aggregator: IgxPivotTimeAggregate.latestTime\n        });\n        result.push({\n            key: 'EARLIEST',\n            label: 'Earliest Time',\n            aggregator: IgxPivotTimeAggregate.earliestTime\n        });\n        return result;\n    }\n\n    /**\n     * Returns the latest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the latest time value in the filtered data records.\n     * ```typescript\n     * IgxPivotTimeAggregate.latestTime(data);\n     * ```\n     *\n     * @memberof IgxPivotTimeAggregate\n     */\n    public static latestTime(members: any[]) {\n        return IgxTimeSummaryOperand.latestTime(members);\n    }\n\n    /**\n     * Returns the earliest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the earliest time value in the filtered data records.\n     * ```typescript\n     * IgxPivotTimeAggregate.earliestTime(data);\n     * ```\n     *\n     * @memberof IgxPivotTimeAggregate\n     */\n    public static earliestTime(members: any[]) {\n        return IgxTimeSummaryOperand.earliestTime(members);\n    }\n}\n","import { IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport { IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\nimport { ColumnType } from '../common/grid.interface';\n\n\n/**\n* Default pivot keys used for data processing in the pivot pipes.\n*/\nexport const DEFAULT_PIVOT_KEYS = {\n    aggregations: 'aggregations', records: 'records', children: 'children', level: 'level',\n    rowDimensionSeparator: '_', columnDimensionSeparator: '-'\n};\n\n/**\n * Event emitted when dimension collection for rows, columns of filters is changed.\n */\nexport interface IDimensionsChange {\n    /** The new list of dimensions. */\n    dimensions: IPivotDimension[],\n    /** The dimension list type - Row, Column or Filter. */\n    dimensionCollectionType: PivotDimensionType\n}\n\n/**\n* Event emitted when values list is changed.\n*/\nexport interface IValuesChange {\n    /** The new list of values. */\n    values: IPivotValue[]\n}\n\n/**\n * Event emitted when pivot configuration is changed.\n */\nexport interface IPivotConfigurationChangedEventArgs {\n    /** The new configuration. */\n    pivotConfiguration: IPivotConfiguration\n}\n\n/**\n* Interface describing Pivot data processing for dimensions.\n* Should contain a process method and return records hierarchy based on the provided dimensions.\n*/\nexport interface IPivotDimensionStrategy {\n    /* blazorCSSuppress */\n    process(collection: any,\n        dimensions: IPivotDimension[],\n        values: IPivotValue[],\n        cloneStrategy: IDataCloneStrategy,\n        pivotKeys?: IPivotKeys): any[];\n}\n\n/**\n* Interface describing a PivotAggregation function.\n* Accepts an array of extracted data members and a array of the original data records.\n*/\nexport type PivotAggregation = (members: any[], data: any[]) => any;\n\n/* marshalByValue */\n/**\n* Interface describing a IPivotAggregator class.\n* Used for specifying custom aggregator lists.\n*/\nexport interface IPivotAggregator {\n    /** Aggregation unique key. */\n    key: string;\n    /** Aggregation label to show in the UI. */\n    label: string;\n    /**\n     * Aggregation name that will be used from a list of predefined aggregations.\n     * If not set will use the specified aggregator function.\n     */\n    aggregatorName?: PivotAggregationType;\n\n    /* blazorAlternateType: AggregatorEventHandler */\n    /* blazorOnlyScript */\n    /**\n     * Aggregator function can be a custom implementation of `PivotAggregation`, or\n     * use predefined ones from `IgxPivotAggregate` and its variants.\n     */\n    aggregator?: (members: any[], data?: any[]) => any;\n}\n\n/* marshalByValue */\n/**\n* Configuration of the pivot grid.\n*/\nexport interface IPivotConfiguration {\n    /** A strategy to transform the rows. */\n    rowStrategy?: IPivotDimensionStrategy | null;\n    /** A strategy to transform the columns. */\n    columnStrategy?: IPivotDimensionStrategy | null;\n    /** A list of the rows. */\n    rows: IPivotDimension[] | null;\n    /** A list of the columns. */\n    columns: IPivotDimension[] | null;\n    /** A list of the values. */\n    values: IPivotValue[] | null;\n    /** Dimensions to be displayed in the filter area. */\n    filters?: IPivotDimension[] | null;\n    /** Pivot data keys used for data generation. Can be used for custom remote scenarios where the data is pre-populated. */\n    pivotKeys?: IPivotKeys;\n}\n\n/* blazorElement */\n/* marshalByValue */\n/**\n* Configuration of a pivot dimension.\n*/\nexport interface IPivotDimension {\n    /** Allows defining a hierarchy when multiple sub groups need to be extracted from single member. */\n    childLevel?: IPivotDimension;\n    /** Unique member to extract related data field value or the result of the memberFunction. */\n    memberName: string;\n\n    /* csTreatAsEvent: MemberFunctionHandler */\n    /* blazorOnlyScript */\n    /** Function that extracts the value */\n    memberFunction?: (data: any) => any;\n    /** Display name to show instead of the field name of this value. **/\n    displayName?: string;\n    /** Enables/Disables a particular dimension from pivot structure. */\n    enabled: boolean;\n    /**\n     * A predefined or defined via the `igxPivotSelector` filter expression tree for the current dimension to be applied in the filter pipe.\n     * */\n    filter?: IFilteringExpressionsTree | null;\n    /** Enable/disable sorting for a particular dimension. True by default. */\n    sortable?: boolean;\n    /**\n     * The sorting direction of the current dimension. Determines the order in which the values will appear in the related dimension.\n     */\n    sortDirection?: SortingDirection;\n    /**\n     * The dataType of the related data field.\n     */\n    dataType?: GridColumnDataType;\n    /** The width of the dimension cells to be rendered.Can be pixel, % or \"auto\". */\n    width?: string;\n    /** Level of the dimension. */\n    level?: number;\n    /** @hidden @internal */\n    autoWidth?: number;\n    horizontalSummary? : boolean;\n}\n\n/* marshalByValue */\n/**\n* Configuration of a pivot value aggregation.\n*/\nexport interface IPivotValue {\n    /** Unique member to extract related data field value for aggregations. */\n    member: string;\n    /** Display name to show instead of member for the column header of this value. **/\n    displayName?: string;\n    /**\n     * Active aggregator definition with key, label and aggregator.\n     */\n    aggregate: IPivotAggregator;\n    /**\n     * List of aggregates to show in aggregate drop-down.\n     */\n    aggregateList?: IPivotAggregator[];\n    /** Enables/Disables a particular value from pivot aggregation. */\n    enabled: boolean;\n    /**  Allow conditionally styling of the IgxPivotGrid cells. */\n    styles?: any;\n    /** Enables a data type specific template of the cells */\n    dataType?: GridColumnDataType;\n\n    /* csTreatAsEvent: PivotValueFormatterEventHandler */\n    /* blazorOnlyScript */\n    /** Applies display format to cell values. */\n    formatter?: (value: any, rowData?: IPivotGridRecord, columnData?: IPivotGridColumn) => any;\n}\n\n/** Interface describing the Pivot column data.\n*  Contains information on the related column dimensions and their values.\n*/\nexport interface IPivotGridColumn {\n        field: string,\n        /* blazorSuppress */\n        /** Gets/Sets the group value associated with the related column dimension by its memberName. **/\n        dimensionValues: Map<string, string>;\n        /** List of dimensions associated with the column.**/\n        dimensions: IPivotDimension[];\n        value: IPivotValue\n}\n\n/* marshalByValue */\n/** Interface describing the Pivot data keys used for data generation.\n*  Can be used for custom remote scenarios where the data is pre-populated.\n*/\nexport interface IPivotKeys {\n    /** Field that stores children for hierarchy building. */\n    children: string;\n    /** Field that stores reference to the original data records. */\n    records: string;\n    /** Field that stores aggregation values. */\n    aggregations: string;\n    /** Field that stores dimension level based on its hierarchy. */\n    level: string;\n    /** Separator used when generating the unique column field values. */\n    columnDimensionSeparator: string;\n    /** Separator used when generating the unique row field values. */\n    rowDimensionSeparator: string;\n}\n\n/* mustCoerceToInt */\n/** The dimension types - Row, Column or Filter. */\nexport enum PivotDimensionType {\n    Row,\n    Column,\n    Filter\n}\n\n\nexport enum PivotRowLayoutType {\n    Vertical = \"vertical\",\n    Horizontal = \"horizontal\"\n}\n\nexport enum PivotSummaryPosition {\n    Top = \"top\",\n    Bottom = \"bottom\"\n}\n\nexport interface IPivotUISettings {\n    showConfiguration?: boolean;\n    showRowHeaders?: boolean;\n    rowLayout?: PivotRowLayoutType;\n    horizontalSummariesPosition?: PivotSummaryPosition;\n}\n\nexport type PivotAggregationType = 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'LATEST' | 'EARLIEST' ;\n\n/** Interface describing the pivot dimension data.\n* Contains additional information needed to render dimension headers.\n*/\nexport interface IPivotDimensionData {\n    /** Associated column definition. */\n    column: ColumnType;\n    /** Associated dimension definition. */\n    dimension: IPivotDimension;\n    /** List of previous dimension groups. */\n    prevDimensions: IPivotDimension[];\n    /** Whether this a child dimension. */\n    isChild?: boolean;\n}\n\nexport interface PivotRowHeaderGroupType {\n    rowIndex: number;\n    parent: any;\n    header: any;\n    headerID: string;\n    grid: any;\n}\n\nexport interface DimensionValueType {\n    value: string;\n    children: Map<string, string | DimensionValueType>;\n}\n\nexport interface IPivotGridRecord {\n    /* blazorSuppress */\n    /** Gets/Sets the group value associated with the related row dimension by its memberName. **/\n    dimensionValues: Map<string, string>;\n    /* blazorSuppress */\n    /** Gets/Sets the aggregation value associated with the value path. Value path depends on configured column dimension hierarchy and values.**/\n    aggregationValues: Map<string, any>;\n    /* blazorSuppress */\n    /** List of children records in case any row dimension member contain a hierarchy. Each dimension member contains its own hierarchy, which you can get by its memberName. **/\n    children?: Map<string, IPivotGridRecord[]>;\n    /** List of original data records associated with the current pivoted data. **/\n    records?: any[];\n     /** Record level**/\n    level?: number;\n    /** List of dimensions associated with the record.**/\n    dimensions: IPivotDimension[];\n    /** If set, it specifies the name of the dimension, that has total record enabled. */\n    totalRecordDimensionName?: string;\n    /** The index of the record in the total view */\n    dataIndex?: number;\n}\n\nexport interface IPivotGridGroupRecord extends IPivotGridRecord {\n    height?: number;\n    rowSpan?: number;\n}\n\nexport interface IPivotGridHorizontalGroup {\n    value?: string;\n    rootDimension?: IPivotDimension;\n    dimensions?: IPivotDimension[];\n    records?: IPivotGridRecord[];\n    rowStart?: number;\n    rowSpan?: number;\n    colStart?: number;\n    colSpan?: number;\n}\n\nexport interface IgxPivotGridValueTemplateContext {\n    $implicit: IPivotValue;\n}\n","import { IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\nimport { DataUtil, GridColumnDataType } from '../../data-operations/data-util';\nimport { FilteringLogic } from '../../data-operations/filtering-expression.interface';\nimport { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { PivotGridType } from '../common/grid.interface';\nimport { IGridSortingStrategy, IgxSorting } from '../common/strategy';\nimport { IgxPivotAggregate, IgxPivotDateAggregate, IgxPivotNumericAggregate, IgxPivotTimeAggregate } from './pivot-grid-aggregate';\nimport { IPivotAggregator, IPivotConfiguration, IPivotDimension, IPivotGridRecord, IPivotKeys, IPivotValue, PivotDimensionType, PivotSummaryPosition } from './pivot-grid.interface';\n\nexport class PivotUtil {\n\n    // go through all children and apply new dimension groups as child\n    public static processGroups(recs: IPivotGridRecord[], dimension: IPivotDimension, pivotKeys: IPivotKeys, cloneStrategy: IDataCloneStrategy) {\n        for (const rec of recs) {\n            // process existing children\n            if (rec.children && rec.children.size > 0) {\n                // process hierarchy in dept\n                rec.children.forEach((values) => {\n                    this.processGroups(values, dimension, pivotKeys, cloneStrategy);\n                });\n            }\n            // add children for current dimension\n            const hierarchyFields = PivotUtil\n                .getFieldsHierarchy(rec.records, [dimension], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n            const siblingData = PivotUtil\n                .processHierarchy(hierarchyFields, pivotKeys, 0);\n            rec.children.set(dimension.memberName, siblingData);\n        }\n    }\n\n    public static flattenGroups(data: IPivotGridRecord[], dimension: IPivotDimension, expansionStates, defaultExpand: boolean, parent?: IPivotDimension, parentRec?: IPivotGridRecord) {\n        for (let i = 0; i < data.length; i++) {\n            const rec = data[i];\n            const field = dimension.memberName;\n            if (!field) {\n                continue;\n            }\n\n            let recordsData = rec.children.get(field);\n            if (!recordsData && parent) {\n                // check parent\n                recordsData = rec.children.get(parent.memberName);\n                if (recordsData) {\n                    dimension = parent;\n                }\n            }\n\n            if (parentRec) {\n                parentRec.dimensionValues.forEach((value, key) => {\n                    if (parent.memberName !== key) {\n                        rec.dimensionValues.set(key, value);\n                        const dim = parentRec.dimensions.find(x => x.memberName === key);\n                        rec.dimensions.unshift(dim);\n                    }\n\n                });\n            }\n\n\n            const expansionRowKey = PivotUtil.getRecordKey(rec, dimension);\n            const isExpanded = expansionStates.get(expansionRowKey) === undefined ?\n                defaultExpand :\n                expansionStates.get(expansionRowKey);\n            const shouldExpand = isExpanded || !dimension.childLevel || !rec.dimensionValues.get(dimension.memberName);\n            if (shouldExpand && recordsData) {\n                if (dimension.childLevel) {\n                    this.flattenGroups(recordsData, dimension.childLevel, expansionStates, defaultExpand, dimension, rec);\n                } else {\n                    // copy parent values and dims in child\n                    recordsData.forEach(x => {\n                        rec.dimensionValues.forEach((value, key) => {\n                            if (dimension.memberName !== key) {\n                                x.dimensionValues.set(key, value);\n                                const dim = rec.dimensions.find(y => y.memberName === key);\n                                x.dimensions.unshift(dim);\n                            }\n\n                        });\n                    });\n                }\n\n                data.splice(i + 1, 0, ...recordsData);\n                i += recordsData.length;\n\n            }\n        }\n    }\n\n    public static flattenGroupsHorizontally(data: IPivotGridRecord[],\n                                            dimension: IPivotDimension,\n                                            expansionStates,\n                                            defaultExpand: boolean,\n                                            visibleDimensions: IPivotDimension[],\n                                            summariesPosition: PivotSummaryPosition,\n                                            parent?: IPivotDimension,\n                                            parentRec?: IPivotGridRecord) {\n        for (let i = 0; i < data.length; i++) {\n            const rec = data[i];\n            const field = dimension.memberName;\n            if (!field) {\n                continue;\n            }\n\n            if (!visibleDimensions.find(recDim => recDim.memberName === rec.dimensions[0].memberName)) {\n                visibleDimensions.push(rec.dimensions[0]);\n            }\n\n            let recordsData = rec.children.get(field);\n            if (!recordsData && parent) {\n                // check parent\n                recordsData = rec.children.get(parent.memberName);\n                if (recordsData) {\n                    dimension = parent;\n                }\n            }\n\n            if (parentRec) {\n                parentRec.dimensionValues.forEach((value, key) => {\n                    rec.dimensionValues.set(key, value);\n                    const dim = parentRec.dimensions.find(x => x.memberName === key);\n                    rec.dimensions.unshift(dim);\n                });\n            }\n\n            const expansionRowKey = PivotUtil.getRecordKey(rec, dimension);\n            const isExpanded = expansionStates.get(expansionRowKey) === undefined ?\n                defaultExpand :\n                expansionStates.get(expansionRowKey);\n            const shouldExpand = isExpanded || !dimension.childLevel || !rec.dimensionValues.get(dimension.memberName);\n            if (shouldExpand && recordsData && !rec.totalRecordDimensionName) {\n                if (dimension.childLevel) {\n                    this.flattenGroupsHorizontally(recordsData, dimension.childLevel, expansionStates, defaultExpand, visibleDimensions, summariesPosition, dimension, rec);\n                } else {\n                    // copy parent values and dims in child\n                    recordsData.forEach(x => {\n                        rec.dimensionValues.forEach((value, key) => {\n                            if (dimension.memberName !== key) {\n                                x.dimensionValues.set(key, value);\n                                const dim = rec.dimensions.find(y => y.memberName === key);\n                                x.dimensions.unshift(dim);\n                            }\n\n                        });\n                    });\n                }\n\n                recordsData.forEach((childRec) => {\n                    if (childRec.dimensions.length === 1) {\n                        rec.dimensionValues.forEach((value: string, key) => {\n                            childRec.dimensionValues.set(key, value);\n                        });\n                    }\n\n                    childRec.dimensions.forEach((dim) => {\n                        if (!visibleDimensions.find(recDim => recDim.memberName === dim.memberName)) {\n                            visibleDimensions.push(dim);\n                        }\n                    });\n                });\n\n                const curDimValue = rec.dimensionValues.get(dimension.memberName);\n                if (dimension.horizontalSummary && curDimValue) {\n                    rec.totalRecordDimensionName = dimension.memberName;\n                    rec.dimensionValues.set(dimension.memberName, `${curDimValue} Total`);\n                    if (summariesPosition === PivotSummaryPosition.Top) {\n                        recordsData.unshift(rec);\n                    } else {\n                        recordsData.push(rec);\n                    }\n                }\n\n                data.splice(i, 1, ...recordsData);\n                i += recordsData.length - 1;\n\n            }\n        }\n    }\n\n    public static assignLevels(dims) {\n        for (const dim of dims) {\n            let currDim = dim;\n            let lvl = 0;\n            while (currDim.childLevel) {\n                currDim.level = lvl;\n                currDim = currDim.childLevel;\n                lvl++;\n            }\n            currDim.level = lvl;\n        }\n    }\n    public static getFieldsHierarchy(data: any[], dimensions: IPivotDimension[],\n        dimensionType: PivotDimensionType, pivotKeys: IPivotKeys, cloneStrategy: IDataCloneStrategy): Map<string, any> {\n        const hierarchy = new Map<string, any>();\n        for (const rec of data) {\n            const vals = dimensionType === PivotDimensionType.Column ?\n                this.extractValuesForColumn(dimensions, rec, pivotKeys) :\n                this.extractValuesForRow(dimensions, rec, pivotKeys, cloneStrategy);\n            for (const [_key, val] of vals) { // this should go in depth also vals.children\n                if (hierarchy.get(val.value) != null) {\n                    this.applyHierarchyChildren(hierarchy, val, rec, pivotKeys);\n                } else {\n                    hierarchy.set(val.value, cloneStrategy.clone(val));\n                    this.applyHierarchyChildren(hierarchy, val, rec, pivotKeys);\n                }\n            }\n        }\n        return hierarchy;\n    }\n\n    public static sort(data: IPivotGridRecord[], expressions: ISortingExpression[], sorting: IGridSortingStrategy = new IgxSorting()): any[] {\n        data.forEach(rec => {\n            const children = rec.children;\n            if (children) {\n                children.forEach(x => {\n                    this.sort(x, expressions, sorting);\n                });\n            }\n        });\n        return DataUtil.sort(data, expressions, sorting);\n    }\n\n    public static extractValueFromDimension(dim: IPivotDimension, recData: any) {\n        return dim.memberFunction ? dim.memberFunction.call(null, recData) : recData[dim.memberName];\n    }\n\n    public static getDimensionDepth(dim: IPivotDimension): number {\n        let lvl = 0;\n        while (dim.childLevel) {\n            lvl++;\n            dim = dim.childLevel;\n        }\n        return lvl;\n    }\n\n    public static extractValuesForRow(dims: IPivotDimension[], recData: any, pivotKeys: IPivotKeys, cloneStrategy: IDataCloneStrategy) {\n        const values = new Map<string, any>();\n        for (const col of dims) {\n            if (recData[pivotKeys.level] && recData[pivotKeys.level] > 0) {\n                const childData = recData[pivotKeys.records];\n                return this.getFieldsHierarchy(childData, [col], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n            }\n\n            const value = this.extractValueFromDimension(col, recData);\n            const objValue = {};\n            objValue['value'] = value;\n            objValue['dimension'] = col;\n            if (col.childLevel) {\n                const childValues = this.extractValuesForRow([col.childLevel], recData, pivotKeys, cloneStrategy);\n                objValue[pivotKeys.children] = childValues;\n            }\n            values.set(value, objValue);\n        }\n\n        return values;\n    }\n\n    public static extractValuesForColumn(dims: IPivotDimension[], recData: any, pivotKeys: IPivotKeys, path = []) {\n        const vals = new Map<string, any>();\n        let lvlCollection = vals;\n        const flattenedDims = this.flatten(dims);\n        for (const col of flattenedDims) {\n            const value = this.extractValueFromDimension(col, recData);\n            path.push(value);\n            const newValue = path.join(pivotKeys.columnDimensionSeparator);\n            const newObj = { value: newValue, expandable: col.expandable, children: null, dimension: col };\n            if (!newObj.children) {\n                newObj.children = new Map<string, any>();\n            }\n            lvlCollection.set(newValue, newObj);\n            lvlCollection = newObj.children;\n        }\n        return vals;\n    }\n\n    public static flatten(arr, lvl = 0) {\n        const newArr = arr.reduce((acc, item) => {\n            if (item) {\n                item.level = lvl;\n                acc.push(item);\n                if (item.childLevel) {\n                    item.expandable = true;\n                    acc = acc.concat(this.flatten([item.childLevel], lvl + 1));\n                }\n            }\n            return acc;\n        }, []);\n        return newArr;\n    }\n\n    public static applyAggregations(rec: IPivotGridRecord, hierarchies, values, pivotKeys: IPivotKeys) {\n        if (hierarchies.size === 0) {\n            // no column groups\n            const aggregationResult = this.aggregate(rec.records, values);\n            this.applyAggregationRecordData(aggregationResult, undefined, rec, pivotKeys);\n            return;\n        }\n        hierarchies.forEach((hierarchy) => {\n            const children = hierarchy[pivotKeys.children];\n            if (children && children.size > 0) {\n                this.applyAggregations(rec, children, values, pivotKeys);\n                const childRecords = this.collectRecords(children, pivotKeys);\n                hierarchy[pivotKeys.aggregations] = this.aggregate(childRecords, values);\n                this.applyAggregationRecordData(hierarchy[pivotKeys.aggregations], hierarchy.value, rec, pivotKeys);\n            } else if (hierarchy[pivotKeys.records]) {\n                hierarchy[pivotKeys.aggregations] = this.aggregate(hierarchy[pivotKeys.records], values);\n                this.applyAggregationRecordData(hierarchy[pivotKeys.aggregations], hierarchy.value, rec, pivotKeys);\n            }\n        });\n    }\n\n    protected static applyAggregationRecordData(aggregationData: any, groupName: string, rec: IPivotGridRecord, pivotKeys: IPivotKeys) {\n        const aggregationKeys = Object.keys(aggregationData);\n        if (aggregationKeys.length > 1) {\n            aggregationKeys.forEach((key) => {\n                const aggregationKey = groupName ? groupName + pivotKeys.columnDimensionSeparator + key : key;\n                rec.aggregationValues.set(aggregationKey, aggregationData[key]);\n            });\n        } else  if (aggregationKeys.length === 1) {\n            const aggregationKey = aggregationKeys[0];\n            rec.aggregationValues.set(groupName || aggregationKey, aggregationData[aggregationKey]);\n        }\n    }\n\n    public static aggregate(records, values: IPivotValue[]) {\n        const result = {};\n        for (const pivotValue of values) {\n            const aggregator = PivotUtil.getAggregatorForType(pivotValue.aggregate, pivotValue.dataType);\n            if (!aggregator) {\n                throw `No valid aggregator found for ${pivotValue.member}. Please set either a valid aggregatorName or aggregator`;\n            }\n            result[pivotValue.member] = aggregator(records.map(r => r[pivotValue.member]), records);\n        }\n\n        return result;\n    }\n\n    public static getAggregatorForType(aggregate: IPivotAggregator, dataType: GridColumnDataType) {\n        let aggregator = aggregate.aggregator;\n        if (aggregate.aggregatorName) {\n            let aggregators = IgxPivotNumericAggregate.aggregators();\n            if (!dataType || dataType === 'date' || dataType === 'dateTime') {\n                aggregators = aggregators.concat(IgxPivotDateAggregate.aggregators())\n            } else if (dataType === 'time') {\n                aggregators = aggregators.concat(IgxPivotTimeAggregate.aggregators());\n            }\n            aggregator = aggregators.find(x => x.key.toLocaleLowerCase() === aggregate.aggregatorName.toLocaleLowerCase())?.aggregator;\n        }\n        return aggregator;\n    }\n\n    public static processHierarchy(hierarchies, pivotKeys, level = 0, rootData = false): IPivotGridRecord[] {\n        const flatData: IPivotGridRecord[] = [];\n        hierarchies.forEach((h, key) => {\n            const field = h.dimension.memberName;\n            const rec: IPivotGridRecord = {\n                dimensionValues: new Map<string, string>(),\n                aggregationValues: new Map<string, string>(),\n                children: new Map<string, IPivotGridRecord[]>(),\n                dimensions: [h.dimension]\n            };\n            rec.dimensionValues.set(field, key);\n            if (h[pivotKeys.records]) {\n                rec.records = this.getDirectLeafs(h[pivotKeys.records]);\n            }\n            rec.level = level;\n            flatData.push(rec);\n            if (h[pivotKeys.children] && h[pivotKeys.children].size > 0) {\n                const nestedData = this.processHierarchy(h[pivotKeys.children],\n                    pivotKeys, level + 1, rootData);\n                rec.records = this.getDirectLeafs(nestedData);\n                rec.children.set(field, nestedData);\n            }\n        });\n\n        return flatData;\n    }\n\n    public static getDirectLeafs(records: IPivotGridRecord[]) {\n        let leafs = [];\n        for (const rec of records) {\n            if (rec.records) {\n                const data = rec.records.filter(x => !x.records && leafs.indexOf(x) === -1);\n                leafs = leafs.concat(data);\n            } else {\n                leafs.push(rec);\n            }\n        }\n        return leafs;\n    }\n\n    public static getRecordKey(rec: IPivotGridRecord, currentDim: IPivotDimension) {\n        const parentFields = [];\n\n        const currentDimIndex = rec.dimensions.findIndex(x => x.memberName === currentDim.memberName) + 1;\n        const prevDims = rec.dimensions.slice(0, currentDimIndex);\n        for (const prev of prevDims) {\n            const prevValue = rec.dimensionValues.get(prev.memberName);\n            parentFields.push(prevValue);\n        }\n\n        return parentFields.join('-');\n    }\n\n    public static buildExpressionTree(config: IPivotConfiguration) {\n        const allDimensions = (config?.rows || []).concat((config?.columns || [])).concat(config?.filters || []).filter(x => x !== null && x !== undefined);\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n\n        const expressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n        // add expression trees from all filters\n        PivotUtil.flatten(enabledDimensions).forEach((x: IPivotDimension) => {\n            if (x.filter && x.filter.filteringOperands) {\n                expressionsTree.filteringOperands.push(...x.filter.filteringOperands);\n            }\n        });\n\n        return expressionsTree;\n    }\n\n    private static collectRecords(children, pivotKeys: IPivotKeys) {\n        let result = [];\n        children.forEach(value => result = result.concat(value[pivotKeys.records]));\n        return result;\n    }\n\n    private static applyHierarchyChildren(hierarchy, val, rec, pivotKeys: IPivotKeys) {\n        const recordsKey = pivotKeys.records;\n        const childKey = pivotKeys.children;\n        const childCollection = val[childKey];\n        const hierarchyValue = hierarchy.get(val.value);\n        if (Array.isArray(hierarchyValue[childKey])) {\n            hierarchyValue[childKey] = new Map<string, any>();\n        }\n        if (!childCollection || childCollection.size === 0) {\n            const dim = hierarchyValue.dimension;\n            const isValid = this.extractValueFromDimension(dim, rec) === val.value;\n            if (isValid) {\n                if (hierarchyValue[recordsKey]) {\n                    hierarchyValue[recordsKey].push(rec);\n                } else {\n                    hierarchyValue[recordsKey] = [rec];\n                }\n            }\n        } else {\n            const hierarchyChild = hierarchyValue[childKey];\n            for (const [_key, child] of childCollection) {\n                let hierarchyChildValue = hierarchyChild.get(child.value);\n                if (!hierarchyChildValue) {\n                    hierarchyChild.set(child.value, child);\n                    hierarchyChildValue = child;\n                }\n\n                if (hierarchyChildValue[recordsKey]) {\n                    const copy = Object.assign({}, rec);\n                    if (rec[recordsKey]) {\n                        // not all nested children are valid\n                        const nestedValue = hierarchyChildValue.value;\n                        const dimension = hierarchyChildValue.dimension;\n                        const validRecs = rec[recordsKey].filter(x => this.extractValueFromDimension(dimension, x) === nestedValue);\n                        copy[recordsKey] = validRecs;\n                    }\n                    hierarchyChildValue[recordsKey].push(copy);\n                } else {\n                    hierarchyChildValue[recordsKey] = [rec];\n                }\n\n                if (child[childKey] && child[childKey].size > 0) {\n                    this.applyHierarchyChildren(hierarchyChild, child, rec, pivotKeys);\n                }\n            }\n        }\n    }\n\n    public static getAggregateList(val: IPivotValue, grid: PivotGridType): IPivotAggregator[] {\n        if (!val.aggregateList) {\n            let defaultAggr = this.getAggregatorsForValue(val, grid);\n            const isDefault = defaultAggr.find(\n                (x) => x.key === val.aggregate.key\n            );\n            // resolve custom aggregations\n            if (!isDefault && grid.data[0][val.member] !== undefined) {\n                // if field exists, then we can apply default aggregations and add the custom one.\n                defaultAggr.unshift(val.aggregate);\n            } else if (!isDefault) {\n                // otherwise this is a custom aggregation that is not compatible\n                // with the defaults, since it operates on field that is not in the data\n                // leave only the custom one.\n                defaultAggr = [val.aggregate];\n            }\n            val.aggregateList = defaultAggr;\n        }\n        return val.aggregateList;\n    }\n\n    public static getAggregatorsForValue(value: IPivotValue, grid: PivotGridType): IPivotAggregator[] {\n        const dataType = value.dataType || grid.resolveDataTypes(grid.data[0][value.member]);\n        switch (dataType) {\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n                return IgxPivotNumericAggregate.aggregators();\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n                return IgxPivotDateAggregate.aggregators();\n            case GridColumnDataType.Time:\n                return IgxPivotTimeAggregate.aggregators();\n            default:\n                return IgxPivotAggregate.aggregators();\n        }\n    }\n\n\n}\n","import { EventEmitter, Injectable, NgZone } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { PlatformUtil } from '../../core/utils';\nimport { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { IRowSelectionEventArgs } from '../common/events';\nimport { GridType } from '../common/grid.interface';\nimport {\n    GridSelectionRange,\n    IColumnSelectionState,\n    IMultiRowLayoutNode,\n    ISelectionKeyboardState,\n    ISelectionNode,\n    ISelectionPointerState,\n    SelectionState\n} from '../common/types';\nimport { PivotUtil } from '../pivot-grid/pivot-util';\n\n\n@Injectable()\nexport class IgxGridSelectionService {\n    public grid: GridType;\n    public dragMode = false;\n    public activeElement: ISelectionNode | null;\n    public keyboardState = {} as ISelectionKeyboardState;\n    public pointerState = {} as ISelectionPointerState;\n    public columnsState = {} as IColumnSelectionState;\n\n    public selection = new Map<number, Set<number>>();\n    public temp = new Map<number, Set<number>>();\n    public rowSelection: Set<any> = new Set<any>();\n    public indeterminateRows: Set<any> = new Set<any>();\n    public columnSelection: Set<string> = new Set<string>();\n    /**\n     * @hidden @internal\n     */\n    public selectedRowsChange = new Subject<any[]>();\n\n    /**\n     * Toggled when a pointerdown event is triggered inside the grid body (cells).\n     * When `false` the drag select behavior is disabled.\n     */\n    private pointerEventInGridBody = false;\n\n    private allRowsSelected: boolean;\n    private _lastSelectedNode: ISelectionNode;\n    private _ranges: Set<string> = new Set<string>();\n    private _selectionRange: Range;\n\n    /**\n     * Returns the current selected ranges in the grid from both\n     * keyboard and pointer interactions\n     */\n    public get ranges(): GridSelectionRange[] {\n\n        // The last action was keyboard + shift selection -> add it\n        this.addKeyboardRange();\n\n        const ranges = Array.from(this._ranges).map(range => JSON.parse(range));\n\n        // No ranges but we have a focused cell -> add it\n        if (!ranges.length && this.activeElement && this.grid.isCellSelectable) {\n            ranges.push(this.generateRange(this.activeElement));\n        }\n\n        return ranges;\n    }\n\n    public get primaryButton(): boolean {\n        return this.pointerState.primaryButton;\n    }\n\n    public set primaryButton(value: boolean) {\n        this.pointerState.primaryButton = value;\n    }\n\n    constructor(private zone: NgZone, protected platform: PlatformUtil) {\n        this.initPointerState();\n        this.initKeyboardState();\n        this.initColumnsState();\n    }\n\n    /**\n     * Resets the keyboard state\n     */\n    public initKeyboardState(): void {\n        this.keyboardState.node = null;\n        this.keyboardState.shift = false;\n        this.keyboardState.range = null;\n        this.keyboardState.active = false;\n    }\n\n    /**\n     * Resets the pointer state\n     */\n    public initPointerState(): void {\n        this.pointerState.node = null;\n        this.pointerState.ctrl = false;\n        this.pointerState.shift = false;\n        this.pointerState.range = null;\n        this.pointerState.primaryButton = true;\n    }\n\n    /**\n     * Resets the columns state\n     */\n    public initColumnsState(): void {\n        this.columnsState.field = null;\n        this.columnsState.range = [];\n    }\n\n    /**\n     * Adds a single node.\n     * Single clicks | Ctrl + single clicks on cells is the usual case.\n     */\n    public add(node: ISelectionNode, addToRange = true): void {\n        if (this.selection.has(node.row)) {\n            this.selection.get(node.row).add(node.column);\n        } else {\n            this.selection.set(node.row, new Set<number>()).get(node.row).add(node.column);\n        }\n\n        if (addToRange) {\n            this._ranges.add(JSON.stringify(this.generateRange(node)));\n        }\n    }\n\n    /**\n     * Adds the active keyboard range selection (if any) to the `ranges` meta.\n     */\n    public addKeyboardRange(): void {\n        if (this.keyboardState.range) {\n            this._ranges.add(JSON.stringify(this.keyboardState.range));\n        }\n    }\n\n    public remove(node: ISelectionNode): void {\n        if (this.selection.has(node.row)) {\n            this.selection.get(node.row).delete(node.column);\n        }\n        if (this.isActiveNode(node)) {\n            this.activeElement = null;\n        }\n        this._ranges.delete(JSON.stringify(this.generateRange(node)));\n    }\n\n    public isInMap(node: ISelectionNode): boolean {\n        return (this.selection.has(node.row) && this.selection.get(node.row).has(node.column)) ||\n            (this.temp.has(node.row) && this.temp.get(node.row).has(node.column));\n    }\n\n    public selected(node: ISelectionNode): boolean {\n        return (this.isActiveNode(node) && this.grid.isCellSelectable) || this.isInMap(node);\n    }\n\n    public isActiveNode(node: ISelectionNode): boolean {\n        if (this.activeElement) {\n            const isActive = this.activeElement.column === node.column && this.activeElement.row === node.row;\n            if (this.grid.hasColumnLayouts) {\n                const layout = this.activeElement.layout;\n                return isActive && this.isActiveLayout(layout, node.layout);\n            }\n            return isActive;\n        }\n        return false;\n    }\n\n    public isActiveLayout(current: IMultiRowLayoutNode, target: IMultiRowLayoutNode): boolean {\n        return current.columnVisibleIndex === target.columnVisibleIndex;\n    }\n\n    public addRangeMeta(node: ISelectionNode, state?: SelectionState): void {\n        this._ranges.add(JSON.stringify(this.generateRange(node, state)));\n    }\n\n    public removeRangeMeta(node: ISelectionNode, state?: SelectionState): void {\n        this._ranges.delete(JSON.stringify(this.generateRange(node, state)));\n    }\n\n    /**\n     * Generates a new selection range from the given `node`.\n     * If `state` is passed instead it will generate the range based on the passed `node`\n     * and the start node of the `state`.\n     */\n    public generateRange(node: ISelectionNode, state?: SelectionState): GridSelectionRange {\n        this._lastSelectedNode = node;\n\n        if (!state) {\n            return {\n                rowStart: node.row,\n                rowEnd: node.row,\n                columnStart: node.column,\n                columnEnd: node.column\n            };\n        }\n\n        const { row, column } = state.node;\n        const rowStart = Math.min(node.row, row);\n        const rowEnd = Math.max(node.row, row);\n        const columnStart = Math.min(node.column, column);\n        const columnEnd = Math.max(node.column, column);\n\n        return { rowStart, rowEnd, columnStart, columnEnd };\n    }\n\n    /**\n     *\n     */\n    public keyboardStateOnKeydown(node: ISelectionNode, shift: boolean, shiftTab: boolean): void {\n        this.keyboardState.active = true;\n        this.initPointerState();\n        this.keyboardState.shift = shift && !shiftTab;\n        if (!this.grid.navigation.isDataRow(node.row)) {\n            return;\n        }\n        // Kb navigation with shift and no previous node.\n        // Clear the current selection init the start node.\n        if (this.keyboardState.shift && !this.keyboardState.node) {\n            this.clear();\n            this.keyboardState.node = Object.assign({}, node);\n        }\n    }\n\n    public keyboardStateOnFocus(node: ISelectionNode, emitter: EventEmitter<GridSelectionRange>, dom): void {\n        const kbState = this.keyboardState;\n\n        // Focus triggered by keyboard navigation\n        if (kbState.active) {\n            if (this.platform.isChromium) {\n                this._moveSelectionChrome(dom);\n            }\n            // Start generating a range if shift is hold\n            if (kbState.shift) {\n                this.dragSelect(node, kbState);\n                kbState.range = this.generateRange(node, kbState);\n                emitter.emit(this.generateRange(node, kbState));\n                return;\n            }\n\n            this.initKeyboardState();\n            this.clear();\n            this.add(node);\n        }\n    }\n\n    public pointerDown(node: ISelectionNode, shift: boolean, ctrl: boolean): void {\n        this.addKeyboardRange();\n        this.initKeyboardState();\n        this.pointerState.ctrl = ctrl;\n        this.pointerState.shift = shift;\n        this.pointerEventInGridBody = true;\n        this.grid.document.body.addEventListener('pointerup', this.pointerOriginHandler);\n\n        // No ctrl key pressed - no multiple selection\n        if (!ctrl) {\n            this.clear();\n        }\n\n        if (shift) {\n            // No previously 'clicked' node. Use the last active node.\n            if (!this.pointerState.node) {\n                this.pointerState.node = this.activeElement || node;\n            }\n            this.pointerDownShiftKey(node);\n            this.clearTextSelection();\n            return;\n        }\n\n        this.removeRangeMeta(node);\n        this.pointerState.node = node;\n    }\n\n    public pointerDownShiftKey(node: ISelectionNode): void {\n        this.clear();\n        this.selectRange(node, this.pointerState);\n    }\n\n    public mergeMap(target: Map<number, Set<number>>, source: Map<number, Set<number>>): void {\n        const iterator = source.entries();\n        let pair = iterator.next();\n        let key: number;\n        let value: Set<number>;\n\n        while (!pair.done) {\n            [key, value] = pair.value;\n            if (target.has(key)) {\n                const newValue = target.get(key);\n                value.forEach(record => newValue.add(record));\n                target.set(key, newValue);\n            } else {\n                target.set(key, value);\n            }\n            pair = iterator.next();\n        }\n    }\n\n    public pointerEnter(node: ISelectionNode, event: PointerEvent): boolean {\n        // https://www.w3.org/TR/pointerevents/#the-button-property\n        this.dragMode = (event.buttons === 1 && (event.button === -1 || event.button === 0)) && this.pointerEventInGridBody;\n        if (!this.dragMode) {\n            return false;\n        }\n        this.clearTextSelection();\n\n        // If the users triggers a drag-like event by first clicking outside the grid cells\n        // and then enters in the grid body we may not have a initial pointer starting node.\n        // Assume the first pointerenter node is where we start.\n        if (!this.pointerState.node) {\n            this.pointerState.node = node;\n        }\n\n        if (this.pointerState.ctrl) {\n            this.selectRange(node, this.pointerState, this.temp);\n        } else {\n            this.dragSelect(node, this.pointerState);\n        }\n        return true;\n    }\n\n    public pointerUp(node: ISelectionNode, emitter: EventEmitter<GridSelectionRange>, firedOutsideGrid?: boolean): boolean {\n        if (this.dragMode || firedOutsideGrid) {\n            this.restoreTextSelection();\n            this.addRangeMeta(node, this.pointerState);\n            this.mergeMap(this.selection, this.temp);\n            this.zone.runTask(() => emitter.emit(this.generateRange(node, this.pointerState)));\n            this.temp.clear();\n            this.dragMode = false;\n            return true;\n        }\n\n        if (this.pointerState.shift) {\n            this.clearTextSelection();\n            this.restoreTextSelection();\n            this.addRangeMeta(node, this.pointerState);\n            emitter.emit(this.generateRange(node, this.pointerState));\n            return true;\n        }\n\n        if (this.pointerEventInGridBody && this.isActiveNode(node)) {\n            this.add(node);\n        }\n        return false;\n    }\n\n    public selectRange(node: ISelectionNode, state: SelectionState, collection: Map<number, Set<number>> = this.selection): void {\n        if (collection === this.temp) {\n            collection.clear();\n        }\n        const { rowStart, rowEnd, columnStart, columnEnd } = this.generateRange(node, state);\n        for (let i = rowStart; i <= rowEnd; i++) {\n            for (let j = columnStart as number; j <= (columnEnd as number); j++) {\n                if (collection.has(i)) {\n                    collection.get(i).add(j);\n                } else {\n                    collection.set(i, new Set<number>()).get(i).add(j);\n                }\n            }\n        }\n    }\n\n    public dragSelect(node: ISelectionNode, state: SelectionState): void {\n        if (!this.pointerState.ctrl) {\n            this.selection.clear();\n        }\n        this.selectRange(node, state);\n    }\n\n    public clear(clearAcriveEl = false): void {\n        if (clearAcriveEl) {\n            this.activeElement = null;\n        }\n        this.selection.clear();\n        this.temp.clear();\n        this._ranges.clear();\n    }\n\n    public clearTextSelection(): void {\n        const selection = window.getSelection();\n        if (selection.rangeCount) {\n            this._selectionRange = selection.getRangeAt(0);\n            this._selectionRange.collapse(true);\n            selection.removeAllRanges();\n        }\n    }\n\n    public restoreTextSelection(): void {\n        const selection = window.getSelection();\n        if (!selection.rangeCount) {\n            selection.addRange(this._selectionRange || this.grid.document.createRange());\n        }\n    }\n\n    public getSelectedRowsData() {\n        if (this.grid.type === 'pivot') {\n            return this.grid.dataView.filter(r => {\n                const keys = r.dimensions.map(d => PivotUtil.getRecordKey(r, d));\n                return keys.some(k => this.isPivotRowSelected(k));\n            });\n        }\n        if (!this.grid.primaryKey) {\n            return Array.from(this.rowSelection);\n        }\n        const selection = [];\n        const gridDataMap = {};\n        this.grid.gridAPI.get_all_data(true).forEach(row => gridDataMap[this.getRecordKey(row)] = row);\n        this.rowSelection.forEach(rID => {\n            const rData = gridDataMap[rID];\n            const partialRowData = {};\n            partialRowData[this.grid.primaryKey] = rID;\n            selection.push(rData ? rData : partialRowData);\n        });\n        return selection;\n    }\n\n    /** Returns array of the selected row id's. */\n    public getSelectedRows(): Array<any> {\n        return this.rowSelection.size ? Array.from(this.rowSelection.keys()) : [];\n    }\n\n    /** Returns array of the rows in indeterminate state. */\n    public getIndeterminateRows(): Array<any> {\n        return this.indeterminateRows.size ? Array.from(this.indeterminateRows.keys()) : [];\n    }\n\n    /** Clears row selection, if filtering is applied clears only selected rows from filtered data. */\n    public clearRowSelection(event?): void {\n        const selectedRows = this.getSelectedRowsData();\n        const removedRec = this.isFilteringApplied() ?\n            this.allData.filter(row => this.isRowSelected(this.getRecordKey(row))) : selectedRows;\n        let newSelection;\n        if (this.grid.primaryKey) {\n            newSelection = this.isFilteringApplied() ? selectedRows.filter(x => {\n                return !removedRec.some(item => item[this.grid.primaryKey] === x[this.grid.primaryKey]);\n            }) : [];\n        } else {\n            newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : [];\n        }\n        this.emitRowSelectionEvent(newSelection, [], removedRec, event, selectedRows);\n    }\n\n    /** Select all rows, if filtering is applied select only from filtered data. */\n    public selectAllRows(event?) {\n        const addedRows = this.allData.filter((row) => !this.rowSelection.has(this.getRecordKey(row)));\n        const selectedRows = this.getSelectedRowsData();\n        const newSelection = this.rowSelection.size ? selectedRows.concat(addedRows) : addedRows;\n        this.indeterminateRows.clear();\n        this.emitRowSelectionEvent(newSelection, addedRows, [], event, selectedRows);\n    }\n\n    /** Select the specified row and emit event. */\n    public selectRowById(rowID, clearPrevSelection?, event?): void {\n        if (!(this.grid.isRowSelectable || this.grid.type === 'pivot') || this.isRowDeleted(rowID)) {\n            return;\n        }\n        clearPrevSelection = !this.grid.isMultiRowSelectionEnabled || clearPrevSelection;\n        if (this.grid.type === 'pivot') {\n            this.selectPivotRowById(rowID, clearPrevSelection, event);\n            return;\n        }\n        const selectedRows = this.getSelectedRowsData();\n        const newSelection = clearPrevSelection ? [this.getRowDataById(rowID)] : this.rowSelection.has(rowID) ?\n            selectedRows : [...selectedRows, this.getRowDataById(rowID)];\n        const removed = clearPrevSelection ? selectedRows : [];\n        this.emitRowSelectionEvent(newSelection, [this.getRowDataById(rowID)], removed, event, selectedRows);\n    }\n\n    public selectPivotRowById(rowID, clearPrevSelection: boolean, event?): void {\n        const selectedRows = this.getSelectedRows();\n        const newSelection = clearPrevSelection ? [rowID] : this.rowSelection.has(rowID) ? selectedRows : [...selectedRows, rowID];\n        const added = this.getPivotRowsByIds([rowID]);\n        const removed = this.getPivotRowsByIds(clearPrevSelection ? selectedRows : []);\n        this.emitRowSelectionEventPivotGrid(selectedRows, newSelection, added, removed, event);\n    }\n\n    /** Deselect the specified row and emit event. */\n    public deselectRow(rowID, event?): void {\n        if (!this.isRowSelected(rowID)) {\n            return;\n        }\n        if(this.grid.type === 'pivot') {\n            this.deselectPivotRowByID(rowID, event);\n            return;\n        }\n        const selectedRows = this.getSelectedRowsData();\n        const newSelection = selectedRows.filter(r =>  this.getRecordKey(r) !== rowID);\n        if (this.rowSelection.size && this.rowSelection.has(rowID)) {\n            this.emitRowSelectionEvent(newSelection, [], [this.getRowDataById(rowID)], event, selectedRows);\n        }\n    }\n\n    public deselectPivotRowByID(rowID, event?) {\n        if (this.rowSelection.size && this.rowSelection.has(rowID)) {\n            const currSelection = this.getSelectedRows();\n            const newSelection = currSelection.filter(r => r !== rowID);\n            const removed  = this.getPivotRowsByIds([rowID]);\n            this.emitRowSelectionEventPivotGrid(currSelection, newSelection, [], removed, event);\n        }\n    }\n\n    private emitRowSelectionEventPivotGrid(currSelection, newSelection, added, removed, event) {\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n        const currSelectedRows = this.getSelectedRowsData();\n        const args: IRowSelectionEventArgs = {\n            owner: this.grid,\n            oldSelection: currSelectedRows,\n            newSelection: this.getPivotRowsByIds(newSelection),\n            added,\n            removed,\n            event,\n            cancel: false,\n            allRowsSelected: this.areAllRowSelected(newSelection)\n        };\n        this.grid.rowSelectionChanging.emit(args);\n        if (args.cancel) {\n            this.clearHeaderCBState();\n            return;\n        }\n        this.selectRowsWithNoEvent(newSelection, true);\n    }\n\n    /** Select the specified rows and emit event. */\n    public selectRows(keys: any[], clearPrevSelection?: boolean, event?): void {\n        if (!this.grid.isMultiRowSelectionEnabled) {\n            return;\n        }\n\n        let rowsToSelect = keys.filter(x => !this.isRowDeleted(x) && !this.rowSelection.has(x));\n        if (!rowsToSelect.length && !clearPrevSelection) {\n            // no valid/additional rows to select and no clear\n            return;\n        }\n\n        const selectedRows = this.getSelectedRowsData();\n        rowsToSelect = this.grid.primaryKey ? rowsToSelect.map(r => this.getRowDataById(r)) : rowsToSelect;\n        const newSelection = clearPrevSelection ? rowsToSelect : [...selectedRows, ...rowsToSelect];\n        const keysAsSet = new Set(rowsToSelect);\n        const removed = clearPrevSelection ? selectedRows.filter(x => !keysAsSet.has(x)) : [];\n        this.emitRowSelectionEvent(newSelection, rowsToSelect, removed, event, selectedRows);\n    }\n\n    public deselectRows(keys: any[], event?): void {\n        if (!this.rowSelection.size) {\n            return;\n        }\n        let rowsToDeselect = keys.filter(x => this.rowSelection.has(x));\n        if (!rowsToDeselect.length) {\n            return;\n        }\n        const selectedRows = this.getSelectedRowsData();\n        rowsToDeselect = this.grid.primaryKey ? rowsToDeselect.map(r => this.getRowDataById(r)) : rowsToDeselect;\n        const keysAsSet = new Set(rowsToDeselect);\n        const newSelection = selectedRows.filter(r => !keysAsSet.has(r));\n        this.emitRowSelectionEvent(newSelection, [], rowsToDeselect, event, selectedRows);\n    }\n\n    /** Select specified rows. No event is emitted. */\n    public selectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?): void {\n        if (clearPrevSelection) {\n            this.rowSelection.clear();\n        }\n        rowIDs.forEach(rowID => this.rowSelection.add(rowID));\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next(rowIDs);\n    }\n\n    /** Deselect specified rows. No event is emitted. */\n    public deselectRowsWithNoEvent(rowIDs: any[]): void {\n        this.clearHeaderCBState();\n        rowIDs.forEach(rowID => this.rowSelection.delete(rowID));\n        this.selectedRowsChange.next(this.getSelectedRows());\n    }\n\n    public isRowSelected(rowID): boolean {\n        return this.rowSelection.size > 0 && this.rowSelection.has(rowID);\n    }\n\n    public isPivotRowSelected(rowID): boolean {\n        let contains = false;\n        this.rowSelection.forEach(x => {\n            const correctRowId = rowID.replace(x,'');\n            if (rowID.includes(x) && (correctRowId === '' || correctRowId.startsWith('_')) ) {\n                contains = true;\n                return;\n            }\n        });\n        return this.rowSelection.size > 0 && contains;\n    }\n\n    public isRowInIndeterminateState(rowID): boolean {\n        return this.indeterminateRows.size > 0 && this.indeterminateRows.has(rowID);\n    }\n\n    /** Select range from last selected row to the current specified row. */\n    public selectMultipleRows(rowID, rowData, event?): void {\n        this.clearHeaderCBState();\n        if (!this.rowSelection.size || this.isRowDeleted(rowID)) {\n            this.selectRowById(rowID);\n            return;\n        }\n        const gridData = this.allData;\n        const lastRowID = this.getSelectedRows()[this.rowSelection.size - 1];\n        const currIndex = gridData.indexOf(this.getRowDataById(lastRowID));\n        const newIndex = gridData.indexOf(rowData);\n        const rows = gridData.slice(Math.min(currIndex, newIndex), Math.max(currIndex, newIndex) + 1);\n        const currSelection = this.getSelectedRowsData();\n        const added = rows.filter(r => !this.isRowSelected(this.getRecordKey(r)));\n        const newSelection = currSelection.concat(added);\n        this.emitRowSelectionEvent(newSelection, added, [], event, currSelection);\n    }\n\n    public areAllRowSelected(newSelection?): boolean {\n        if (!this.grid.data && !newSelection) {\n            return false;\n        }\n        if (this.allRowsSelected !== undefined && !newSelection) {\n            return this.allRowsSelected;\n        }\n        const selectedData = new Set(this.getRowIDs(newSelection || this.rowSelection));\n        return this.allRowsSelected = this.allData.length > 0 && this.allData.every(row => selectedData.has(this.getRecordKey(row)));\n    }\n\n    public hasSomeRowSelected(): boolean {\n        const filteredData = this.isFilteringApplied() ?\n            this.getRowIDs(this.grid.filteredData).some(rID => this.isRowSelected(rID)) : true;\n        return this.rowSelection.size > 0 && filteredData && !this.areAllRowSelected();\n    }\n\n    public get filteredSelectedRowIds(): any[] {\n        return this.isFilteringApplied() ?\n            this.getRowIDs(this.allData).filter(rowID => this.isRowSelected(rowID)) :\n            this.getSelectedRows().filter(rowID => !this.isRowDeleted(rowID));\n    }\n\n    public emitRowSelectionEvent(newSelection, added, removed, event?, currSelection?): boolean {\n        currSelection = currSelection ?? this.getSelectedRowsData();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n        \n        const args: IRowSelectionEventArgs = {\n            owner: this.grid,\n            oldSelection: currSelection,\n            newSelection,\n            added,\n            removed,\n            event,\n            cancel: false,\n            allRowsSelected: this.areAllRowSelected(newSelection)\n        };\n\n        this.grid.rowSelectionChanging.emit(args);\n        if (args.cancel) {\n            this.clearHeaderCBState();\n            return;\n        }\n        this.selectRowsWithNoEvent(args.newSelection.map(r => this.getRecordKey(r)), true);\n    }\n\n    public getPivotRowsByIds(ids: any[]) {\n        return this.grid.dataView.filter(r => {\n            const keys = r.dimensions.map(d => PivotUtil.getRecordKey(r, d));\n            return new Set(ids.concat(keys)).size < ids.length + keys.length;\n        });\n    }\n\n    public getRowDataById(rowID): any {\n        if (!this.grid.primaryKey) {\n            return rowID;\n        }\n        const rowIndex = this.getRowIDs(this.grid.gridAPI.get_all_data(true)).indexOf(rowID);\n        return rowIndex < 0 ? rowID : this.grid.gridAPI.get_all_data(true)[rowIndex];\n    }\n\n    public clearHeaderCBState(): void {\n        this.allRowsSelected = undefined;\n    }\n\n    public getRowIDs(data): Array<any> {\n        return this.grid.primaryKey && data.length ? data.map(rec => rec[this.grid.primaryKey]) : data;\n    }\n\n    public getRecordKey(record) {\n        return this.grid.primaryKey ? record[this.grid.primaryKey] : record;\n    }\n\n    /** Clear rowSelection and update checkbox state */\n    public clearAllSelectedRows(): void {\n        this.rowSelection.clear();\n        this.indeterminateRows.clear();\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next([]);\n    }\n\n    /** Returns all data in the grid, with applied filtering and sorting and without deleted rows. */\n    public get allData(): Array<any> {\n        let allData;\n        // V.T. Jan 17th, 2024 #13757 Adding an additional conditional check to take account WITHIN range of groups\n        if (this.isFilteringApplied() || this.grid.sortingExpressions.length || this.grid.groupingExpressions?.length) {\n            allData = this.grid.pinnedRecordsCount ? this.grid._filteredSortedUnpinnedData : this.grid.filteredSortedData;\n        } else {\n            allData = this.grid.gridAPI.get_all_data(true);\n        }\n        return allData.filter(rData => !this.isRowDeleted(this.grid.gridAPI.get_row_id(rData)));\n    }\n\n    /** Returns array of the selected columns fields. */\n    public getSelectedColumns(): Array<any> {\n        return this.columnSelection.size ? Array.from(this.columnSelection.keys()) : [];\n    }\n\n    public isColumnSelected(field: string): boolean {\n        return this.columnSelection.size > 0 && this.columnSelection.has(field);\n    }\n\n    /** Select the specified column and emit event. */\n    public selectColumn(field: string, clearPrevSelection?, selectColumnsRange?, event?): void {\n        const stateColumn = this.columnsState.field ? this.grid.getColumnByName(this.columnsState.field) : null;\n        if (!event || !stateColumn || stateColumn.visibleIndex < 0 || !selectColumnsRange) {\n            this.columnsState.field = field;\n            this.columnsState.range = [];\n\n            const newSelection = clearPrevSelection ? [field] : this.getSelectedColumns().indexOf(field) !== -1 ?\n                this.getSelectedColumns() : [...this.getSelectedColumns(), field];\n            const removed = clearPrevSelection ? this.getSelectedColumns().filter(colField => colField !== field) : [];\n            const added = this.isColumnSelected(field) ? [] : [field];\n            this.emitColumnSelectionEvent(newSelection, added, removed, event);\n        } else if (selectColumnsRange) {\n            this.selectColumnsRange(field, event);\n        }\n    }\n\n    /** Select specified columns. And emit event. */\n    public selectColumns(fields: string[], clearPrevSelection?, selectColumnsRange?, event?): void {\n        const columns = fields.map(f => this.grid.getColumnByName(f)).sort((a, b) => a.visibleIndex - b.visibleIndex);\n        const stateColumn = this.columnsState.field ? this.grid.getColumnByName(this.columnsState.field) : null;\n        if (!stateColumn || stateColumn.visibleIndex < 0 || !selectColumnsRange) {\n            this.columnsState.field = columns[0] ? columns[0].field : null;\n            this.columnsState.range = [];\n\n            const added = fields.filter(colField => !this.isColumnSelected(colField));\n            const removed = clearPrevSelection ? this.getSelectedColumns().filter(colField => fields.indexOf(colField) === -1) : [];\n            const newSelection = clearPrevSelection ? fields : this.getSelectedColumns().concat(added);\n\n            this.emitColumnSelectionEvent(newSelection, added, removed, event);\n        } else {\n            const filedStart = stateColumn.visibleIndex >\n                columns[columns.length - 1].visibleIndex ? columns[0].field : columns[columns.length - 1].field;\n            this.selectColumnsRange(filedStart, event);\n        }\n    }\n\n    /** Select range from last clicked column to the current specified column. */\n    public selectColumnsRange(field: string, event): void {\n        const currIndex = this.grid.getColumnByName(this.columnsState.field).visibleIndex;\n        const newIndex = this.grid.columnToVisibleIndex(field);\n        const columnsFields = this.grid.visibleColumns\n            .filter(c => !c.columnGroup)\n            .sort((a, b) => a.visibleIndex - b.visibleIndex)\n            .slice(Math.min(currIndex, newIndex), Math.max(currIndex, newIndex) + 1)\n            .filter(col => col.selectable).map(col => col.field);\n        const removed = [];\n        const oldAdded = [];\n        const added = columnsFields.filter(colField => !this.isColumnSelected(colField));\n        this.columnsState.range.forEach(f => {\n            if (columnsFields.indexOf(f) === -1) {\n                removed.push(f);\n            } else {\n                oldAdded.push(f);\n            }\n        });\n        this.columnsState.range = columnsFields.filter(colField => !this.isColumnSelected(colField) || oldAdded.indexOf(colField) > -1);\n        const newSelection = this.getSelectedColumns().concat(added).filter(c => removed.indexOf(c) === -1);\n        this.emitColumnSelectionEvent(newSelection, added, removed, event);\n    }\n\n    /** Select specified columns. No event is emitted. */\n    public selectColumnsWithNoEvent(fields: string[], clearPrevSelection?): void {\n        if (clearPrevSelection) {\n            this.columnSelection.clear();\n        }\n        fields.forEach(field => {\n            this.columnSelection.add(field);\n        });\n    }\n\n    /** Deselect the specified column and emit event. */\n    public deselectColumn(field: string, event?): void {\n        this.initColumnsState();\n        const newSelection = this.getSelectedColumns().filter(c => c !== field);\n        this.emitColumnSelectionEvent(newSelection, [], [field], event);\n    }\n\n    /** Deselect specified columns. No event is emitted. */\n    public deselectColumnsWithNoEvent(fields: string[]): void {\n        fields.forEach(field => this.columnSelection.delete(field));\n    }\n\n    /** Deselect specified columns. And emit event. */\n    public deselectColumns(fields: string[], event?): void {\n        const removed = this.getSelectedColumns().filter(colField => fields.indexOf(colField) > -1);\n        const newSelection = this.getSelectedColumns().filter(colField => fields.indexOf(colField) === -1);\n\n        this.emitColumnSelectionEvent(newSelection, [], removed, event);\n    }\n\n    public emitColumnSelectionEvent(newSelection, added, removed, event?): boolean {\n        const currSelection = this.getSelectedColumns();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args = {\n            oldSelection: currSelection, newSelection,\n            added, removed, event, cancel: false\n        };\n        this.grid.columnSelectionChanging.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.selectColumnsWithNoEvent(args.newSelection, true);\n    }\n\n    /** Clear columnSelection */\n    public clearAllSelectedColumns(): void {\n        this.columnSelection.clear();\n    }\n\n    protected areEqualCollections(first, second): boolean {\n        return first.length === second.length && new Set(first.concat(second)).size === first.length;\n    }\n\n    /**\n     * (╯°□°）╯︵ ┻━┻\n     * Chrome and Chromium don't care about the active\n     * range after keyboard navigation, thus this.\n     */\n    private _moveSelectionChrome(node: Node) {\n        const selection = window.getSelection();\n        selection.removeAllRanges();\n        const range = new Range();\n        range.selectNode(node);\n        range.collapse(true);\n        selection.addRange(range);\n    }\n\n    private isFilteringApplied(): boolean {\n        return !FilteringExpressionsTree.empty(this.grid.filteringExpressionsTree) ||\n            !FilteringExpressionsTree.empty(this.grid.advancedFilteringExpressionsTree);\n    }\n\n    private isRowDeleted(rowID): boolean {\n        return this.grid.gridAPI.row_deleted_transaction(rowID);\n    }\n\n    private pointerOriginHandler = (event) => {\n        this.pointerEventInGridBody = false;\n        this.grid.document.body.removeEventListener('pointerup', this.pointerOriginHandler);\n\n        const targetTagName = event.target.tagName.toLowerCase();\n        if (targetTagName !== 'igx-grid-cell' && targetTagName !== 'igx-tree-grid-cell') {\n            this.pointerUp(this._lastSelectedNode, this.grid.rangeSelected, true);\n        }\n    };\n}\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    Output,\n    QueryList,\n    ViewChild,\n    ViewChildren\n} from '@angular/core';\nimport { IgxCheckboxComponent } from '../checkbox/checkbox.component';\nimport { IgxGridForOfDirective } from '../directives/for-of/for_of.directive';\nimport { TransactionType } from '../services/transaction/transaction';\nimport { IgxGridSelectionService } from './selection/selection.service';\nimport { IgxAddRow, IgxEditRow } from './common/crud.service';\nimport { CellType, ColumnType, GridType, IGX_GRID_BASE } from './common/grid.interface';\nimport { mergeWith } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { trackByIdentity } from '../core/utils';\n\n@Directive({\n    selector: '[igxRowBaseComponent]',\n    standalone: true\n})\nexport class IgxRowDirective implements DoCheck, AfterViewInit, OnDestroy {\n    /**\n     * @hidden\n     */\n    @Output()\n    public addAnimationEnd = new EventEmitter<IgxRowDirective>();\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.role')\n    public role = 'row';\n\n    /**\n     *  The data passed to the row component.\n     *\n     * ```typescript\n     * // get the row data for the first selected row\n     * let selectedRowData = this.grid.selectedRows[0].data;\n     * ```\n     */\n    @Input()\n    public get data(): any {\n        if (this.inEditMode) {\n            return mergeWith(this.grid.dataCloneStrategy.clone(this._data), this.grid.transactions.getAggregatedValue(this.key, false),\n                (objValue, srcValue) => {\n                    if (Array.isArray(srcValue)) {\n                        return objValue = srcValue;\n                    }\n                });\n        }\n        return this._data;\n    }\n\n    public set data(v: any) {\n        this._data = v;\n    }\n    /**\n     * The index of the row.\n     *\n     * ```typescript\n     * // get the index of the second selected row\n     * let selectedRowIndex = this.grid.selectedRows[1].index;\n     * ```\n     */\n    @Input()\n    public index: number;\n\n    /**\n     * Sets whether this specific row has disabled functionality for editing and row selection.\n     * Default value is `false`.\n     * ```typescript\n     * this.grid.selectedRows[0].pinned = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('attr.aria-disabled')\n    @HostBinding('class.igx-grid__tr--disabled')\n    public disabled = false;\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * this.grid.selectedRows[0].pinned = true;\n     * ```\n     */\n    public set pinned(value: boolean) {\n        if (value) {\n            this.grid.pinRow(this.key);\n        } else {\n            this.grid.unpinRow(this.key);\n        }\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     * ```typescript\n     * let isPinned = row.pinned;\n     * ```\n     */\n    public get pinned(): boolean {\n        return this.grid.isRecordPinned(this.data);\n    }\n\n    /**\n     * Gets the expanded state of the row.\n     * ```typescript\n     * let isExpanded = row.expanded;\n     * ```\n     */\n    public get expanded(): boolean {\n        return this.grid.gridAPI.get_row_expansion_state(this.data);\n    }\n\n    /**\n     * Expands/collapses the current row.\n     *\n     * ```typescript\n     * this.grid.selectedRows[2].expanded = true;\n     * ```\n     */\n    public set expanded(val: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this.key, val);\n    }\n\n    public get addRowUI(): any {\n        return !!this.grid.crudService.row &&\n            this.grid.crudService.row.getClassName() === IgxAddRow.name &&\n            this.grid.crudService.row.id === this.key;\n    }\n\n    @HostBinding('style.min-height.px')\n    public get rowHeight() {\n        let height = this.grid.rowHeight || 32;\n        if (this.grid.hasColumnLayouts) {\n            const maxRowSpan = this.grid.multiRowLayoutRowSize;\n            height = height * maxRowSpan;\n        }\n        return this.addRowUI ? height : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public gridID: string;\n\n    /**\n     * @hidden\n     */\n    @ViewChildren('igxDirRef', { read: IgxGridForOfDirective })\n    public _virtDirRow: QueryList<IgxGridForOfDirective<ColumnType, ColumnType[]>>;\n\n    /* blazorSuppress */\n    public get virtDirRow(): IgxGridForOfDirective<ColumnType, ColumnType[]> {\n        return this._virtDirRow ? this._virtDirRow.first : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @ViewChild(forwardRef(() => IgxCheckboxComponent), { read: IgxCheckboxComponent })\n    public checkboxElement: IgxCheckboxComponent;\n\n    @ViewChildren('cell')\n    protected _cells: QueryList<CellType>;\n\n    /**\n     * Gets the rendered cells in the row component.\n     *\n     * ```typescript\n     * // get the cells of the third selected row\n     * let selectedRowCells = this.grid.selectedRows[2].cells;\n     * ```\n     */\n    public get cells() {\n        const res = new QueryList<CellType>();\n        if (!this._cells) {\n            return res;\n        }\n        const cList = this._cells.filter((item) => item.nativeElement.parentElement !== null)\n            .sort((item1, item2) => item1.column.visibleIndex - item2.column.visibleIndex);\n        res.reset(cList);\n        return res;\n    }\n\n    @HostBinding('attr.data-rowIndex')\n    public get dataRowIndex() {\n        return this.index;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('attr.aria-selected')\n    public get selected(): boolean {\n        return this.selectionService.isRowSelected(this.key);\n    }\n\n    public set selected(value: boolean) {\n        if (value) {\n            this.selectionService.selectRowsWithNoEvent([this.key]);\n        } else {\n            this.selectionService.deselectRowsWithNoEvent([this.key]);\n        }\n        this.grid.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    public get columns(): ColumnType[] {\n        return this.grid.visibleColumns;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get viewIndex(): number {\n        if ((this.grid as any).groupingExpressions.length) {\n            return this.grid.filteredSortedData.indexOf(this.data);\n        }\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnedColumns(): ColumnType[] {\n        return this.grid.pinnedColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get isRoot(): boolean {\n        return true;\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasChildren(): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden\n     */\n    public get unpinnedColumns(): ColumnType[] {\n        return this.grid.unpinnedColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get showRowSelectors(): boolean {\n        return this.grid.showRowSelectors;\n    }\n\n    /** @hidden */\n    public get dirty(): boolean {\n        const row = this.grid.transactions.getState(this.key);\n        if (row) {\n            return row.type === TransactionType.ADD || row.type === TransactionType.UPDATE;\n        }\n\n        return false;\n    }\n\n    /**\n     * @hidden\n     */\n    public get rowDraggable(): boolean {\n        return this.grid.rowDraggable;\n    }\n\n    /** @hidden */\n    public get added(): boolean {\n        const row = this.grid.transactions.getState(this.key);\n        if (row) {\n            return row.type === TransactionType.ADD;\n        }\n\n        return false;\n    }\n\n    /** @hidden */\n    public get deleted(): boolean {\n        return this.grid.gridAPI.row_deleted_transaction(this.key);\n    }\n\n    /**\n     * @hidden\n     */\n    public get dragging() {\n        return this.grid.dragRowID === this.key;\n    }\n\n    // TODO: Refactor\n    public get inEditMode(): boolean {\n        if (this.grid.rowEditable) {\n            const editRowState = this.grid.crudService.row;\n            return (editRowState && editRowState.id === this.key) || false;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Gets the ID of the row.\n     * A row in the grid is identified either by:\n     * - primaryKey data value,\n     * - the whole data, if the primaryKey is omitted.\n     *\n     * ```typescript\n     * let rowID = this.grid.selectedRows[2].key;\n     * ```\n     */\n    public get key() {\n        const primaryKey = this.grid.primaryKey;\n        if (this._data) {\n            return primaryKey ? this._data[primaryKey] : this._data;\n        } else {\n            return undefined;\n        }\n    }\n\n    /**\n     * The native DOM element representing the row. Could be null in certain environments.\n     *\n     * ```typescript\n     * // get the nativeElement of the second selected row\n     * let selectedRowNativeElement = this.grid.selectedRows[1].nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public focused = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public defaultCssClass = 'igx-grid__tr';\n\n    /**\n     * @hidden\n     */\n    public triggerAddAnimationClass = false;\n\n    protected destroy$ = new Subject<any>();\n    protected _data: any;\n    protected _addRow: boolean;\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public grid: GridType,\n        public selectionService: IgxGridSelectionService,\n        public element: ElementRef<HTMLElement>,\n        public cdr: ChangeDetectorRef) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        this.grid.rowClick.emit({\n            row: this,\n            event\n        });\n\n        if (this.grid.rowSelection === 'none' || this.deleted || !this.grid.selectRowOnClick) {\n            return;\n        }\n        if (event.shiftKey && this.grid.isMultiRowSelectionEnabled) {\n            this.selectionService.selectMultipleRows(this.key, this.data, event);\n            return;\n        }\n\n        const clearSelection = !(+event.ctrlKey ^ +event.metaKey);\n        if (this.selected && !clearSelection) {\n            this.selectionService.deselectRow(this.key, event);\n        } else {\n            this.selectionService.selectRowById(this.key, clearSelection, event);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('contextmenu', ['$event'])\n    public onContextMenu(event: MouseEvent) {\n        const cell = (event.target as HTMLElement).closest('.igx-grid__td');\n        this.grid.contextMenu.emit({\n            row: this,\n            cell: this.cells.find(c => c.nativeElement === cell),\n            event\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mouseenter')\n    public showActionStrip() {\n        if (this.grid.actionStrip) {\n            this.grid.actionStrip.show(this);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mouseleave')\n    public hideActionStrip() {\n        if (this.grid.actionStrip && this.grid.actionStrip.hideOnRowLeave) {\n            this.grid.actionStrip.hide();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        // If the template of the row changes, the forOf in it is recreated and is not detected by the grid and rows can't be scrolled.\n        this._virtDirRow.changes.pipe(takeUntil(this.destroy$)).subscribe(() => this.grid.resetHorizontalVirtualization());\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public onRowSelectorClick(event) {\n        event.stopPropagation();\n        if (event.shiftKey && this.grid.isMultiRowSelectionEnabled) {\n            this.selectionService.selectMultipleRows(this.key, this.data, event);\n            return;\n        }\n        if (this.selected) {\n            this.selectionService.deselectRow(this.key, event);\n        } else {\n            this.selectionService.selectRowById(this.key, false, event);\n        }\n    }\n\n    /**\n     * Updates the specified row object and the data source record with the passed value.\n     *\n     * ```typescript\n     * // update the second selected row's value\n     * let newValue = \"Apple\";\n     * this.grid.selectedRows[1].update(newValue);\n     * ```\n     */\n    public update(value: any) {\n        const crudService = this.grid.crudService;\n        if (crudService.cellInEditMode && crudService.cell.id.key === this.key) {\n            this.grid.transactions.endPending(false);\n        }\n        const row = new IgxEditRow(this.key, this.index, this.data, this.grid);\n        this.grid.gridAPI.update_row(row, value);\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * Removes the specified row from the grid's data source.\n     * This method emits `rowDeleted` event.\n     *\n     * ```typescript\n     * // delete the third selected row from the grid\n     * this.grid.selectedRows[2].delete();\n     * ```\n     */\n    public delete() {\n        this.grid.deleteRowById(this.key);\n    }\n\n    public isCellActive(visibleColumnIndex) {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === this.index && node.column === visibleColumnIndex : false;\n    }\n\n    /**\n     * Pins the specified row.\n     * This method emits `rowPinning`\\`rowPinned` event.\n     *\n     * ```typescript\n     * // pin the selected row from the grid\n     * this.grid.selectedRows[0].pin();\n     * ```\n     */\n    public pin() {\n        return this.grid.pinRow(this.key);\n    }\n\n    /**\n     * Unpins the specified row.\n     * This method emits `rowPinning`\\`rowPinned` event.\n     *\n     * ```typescript\n     * // unpin the selected row from the grid\n     * this.grid.selectedRows[0].unpin();\n     * ```\n     */\n    public unpin() {\n        return this.grid.unpinRow(this.key);\n    }\n\n    /**\n     * @hidden\n     */\n    public get rowCheckboxAriaLabel() {\n        return this.grid.primaryKey ?\n            this.selected ? 'Deselect row with key ' + this.key : 'Select row with key ' + this.key :\n            this.selected ? 'Deselect row' : 'Select row';\n    }\n\n    /**\n     * @hidden\n     */\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    public shouldDisplayPinnedChip(visibleColumnIndex: number): boolean {\n        return this.pinned && this.disabled && visibleColumnIndex === 0;\n    }\n\n    /**\n     * Spawns the add row UI for the specific row.\n     *\n     * @example\n     * ```typescript\n     * const row = this.grid1.getRowByIndex(1);\n     * row.beginAddRow();\n     * ```\n     */\n    public beginAddRow() {\n        this.grid.crudService.enterAddRowMode(this);\n    }\n\n    /**\n     * @hidden\n     */\n    public triggerAddAnimation() {\n        this.triggerAddAnimationClass = true;\n    }\n\n    /**\n     * @hidden\n     */\n    public animationEndHandler() {\n        this.triggerAddAnimationClass = false;\n        this.addAnimationEnd.emit(this);\n    }\n\n    /**\n     * @hidden\n     */\n    public get resolveDragIndicatorClasses(): string {\n        const defaultDragIndicatorCssClass = 'igx-grid__drag-indicator';\n        const dragIndicatorOff = this.grid.rowDragging && !this.dragging ? 'igx-grid__drag-indicator--off' : '';\n        return `${defaultDragIndicatorCssClass} ${dragIndicatorOff}`;\n    }\n\n    /**\n     * - state persistence switching all pinned columns resets collection\n     * - MRL unpinnedColumns igxFor modes entire child loop on unpin\n     */\n    protected trackPinnedColumn = trackByIdentity;\n}\n","import { IgxGridActionButtonComponent } from './grid-action-button.component';\nimport { Directive, Input, AfterViewInit, QueryList, ViewChildren, IterableDiffers, booleanAttribute } from '@angular/core';\nimport { IgxActionStripComponent } from '../action-strip.component';\nimport { IgxRowDirective } from '../../grids/row.directive';\nimport { IgxIconService } from '../../icon/icon.service';\n\n/* blazorElement */\n/* contentParent: ActionStrip */\n/* wcElementTag: igc-grid-action-base-directive */\n/* jsonAPIManageCollectionInMarkup */\n/* blazorIndirectRender */\n@Directive({\n    selector: '[igxGridActionsBase]',\n    standalone: true\n})\nexport class IgxGridActionsBaseDirective implements AfterViewInit {\n    /** @hidden @internal **/\n    @ViewChildren(IgxGridActionButtonComponent)\n    public buttons: QueryList<IgxGridActionButtonComponent>;\n\n    /**\n     * Gets/Sets if the action buttons will be rendered as menu items. When in menu, items will be rendered with text label.\n     *\n     * @example\n     * ```html\n     *  <igx-grid-pinning-actions [asMenuItems]='true'></igx-grid-pinning-actions>\n     *  <igx-grid-editing-actions [asMenuItems]='true'></igx-grid-editing-actions>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public asMenuItems = false;\n\n    /** @hidden @internal **/\n    public strip: IgxActionStripComponent;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get grid() {\n        return this.strip.context.grid;\n    }\n\n    /**\n     * Getter to be used in template\n     *\n     * @hidden\n     * @internal\n     */\n    public get isRowContext(): boolean {\n        return this.isRow(this.strip?.context) && !this.strip.context.inEditMode;\n    }\n\n    constructor(protected iconService: IgxIconService,\n        protected differs: IterableDiffers) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        if (this.asMenuItems) {\n            this.buttons.changes.subscribe(() => {\n                this.strip.cdr.detectChanges();\n            });\n        }\n    }\n\n    /**\n     * Check if the param is a row from a grid\n     *\n     * @hidden\n     * @internal\n     * @param context\n     */\n    protected isRow(context): context is IgxRowDirective {\n        return context && context instanceof IgxRowDirective;\n    }\n}\n","import { OverlaySettings } from '../services/public_api';\n\n/* csSuppress */\n/** @hidden @internal */\nexport abstract class IgxActionStripToken {\n    public abstract context: any;\n    public abstract menuOverlaySettings: OverlaySettings;\n    public abstract get hideOnRowLeave(): boolean;\n\n    public abstract show(context?: any): void;\n    public abstract hide(): void;\n}\n","import {\n    Component,\n    Directive,\n    HostBinding,\n    Input,\n    Renderer2,\n    ViewContainerRef,\n    ContentChildren,\n    QueryList,\n    ViewChild,\n    TemplateRef,\n    AfterContentInit,\n    ChangeDetectorRef,\n    AfterViewInit,\n    ElementRef,\n    booleanAttribute\n} from '@angular/core';\nimport { ActionStripResourceStringsEN, IActionStripResourceStrings } from '../core/i18n/action-strip-resources';\nimport { IgxDropDownComponent } from '../drop-down/drop-down.component';\nimport { CloseScrollStrategy, OverlaySettings } from '../services/public_api';\nimport { IgxGridActionsBaseDirective } from './grid-actions/grid-actions-base.directive';\nimport { IgxDropDownItemComponent } from '../drop-down/drop-down-item.component';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive';\nimport { IgxToggleActionDirective } from '../directives/toggle/toggle.directive';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { IgxIconButtonDirective } from '../directives/button/icon-button.directive';\nimport { IgxActionStripToken } from './token';\nimport { trackByIdentity } from '../core/utils';\n\n@Directive({\n    selector: '[igxActionStripMenuItem]',\n    standalone: true\n})\nexport class IgxActionStripMenuItemDirective {\n    constructor(public templateRef: TemplateRef<any>) {}\n}\n\n/* blazorElement */\n/* jsonAPIManageItemInMarkup */\n/* jsonAPIManageCollectionInMarkup */\n/* wcElementTag: igc-action-strip */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/* contentParent: GridBaseDirective */\n/* contentParent: RowIsland */\n/* contentParent: HierarchicalGrid */\n/**\n * Action Strip provides templatable area for one or more actions.\n *\n * @igxModule IgxActionStripModule\n *\n * @igxTheme igx-action-strip-theme\n *\n * @igxKeywords action, strip, actionStrip, pinning, editing\n *\n * @igxGroup Data Entry & Display\n *\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxRowIslandComponent, *\n *\n * @remarks\n * The Ignite UI Action Strip is a container, overlaying its parent container,\n * and displaying action buttons with action applicable to the parent component the strip is instantiated or shown for.\n *\n * @example\n * ```html\n * <igx-action-strip #actionStrip>\n *     <igx-icon (click)=\"doSomeAction()\"></igx-icon>\n * </igx-action-strip>\n */\n@Component({\n    selector: 'igx-action-strip',\n    templateUrl: 'action-strip.component.html',\n    imports: [\n        NgTemplateOutlet,\n        IgxIconButtonDirective,\n        IgxRippleDirective,\n        IgxToggleActionDirective,\n        IgxDropDownItemNavigationDirective,\n        IgxIconComponent,\n        IgxDropDownComponent,\n        IgxDropDownItemComponent\n    ],\n    providers: [{ provide: IgxActionStripToken, useExisting: IgxActionStripComponent }]\n})\nexport class IgxActionStripComponent implements IgxActionStripToken, AfterContentInit, AfterViewInit {\n\n    /* blazorSuppress */\n    /**\n     * Sets the context of an action strip.\n     * The context should be an instance of a @Component, that has element property.\n     * This element will be the placeholder of the action strip.\n     *\n     * @example\n     * ```html\n     * <igx-action-strip [context]=\"cell\"></igx-action-strip>\n     * ```\n     */\n    @Input()\n    public context: any;\n\n    /**\n     * Menu Items ContentChildren inside the Action Strip\n     *\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxActionStripMenuItemDirective)\n    public _menuItems: QueryList<IgxActionStripMenuItemDirective>;\n\n\n    /* blazorInclude */\n    /* contentChildren */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: GridActionsBaseDirectiveCollection */\n    /**\n     * ActionButton as ContentChildren inside the Action Strip\n     *\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxGridActionsBaseDirective)\n    public actionButtons: QueryList<IgxGridActionsBaseDirective>;\n\n    /**\n     * Gets/Sets the visibility of the Action Strip.\n     * Could be used to set if the Action Strip will be initially hidden.\n     *\n     * @example\n     * ```html\n     *  <igx-action-strip [hidden]=\"false\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hidden = false;\n\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IActionStripResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    public get resourceStrings(): IActionStripResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Hide or not the Action Strip based on if it is a menu.\n     *\n     * @hidden\n     * @internal\n     */\n    public get hideOnRowLeave(): boolean {\n        if (this.menu.items.length === 0) {\n            return true;\n        } else if (this.menu.items.length > 0) {\n            if (this.menu.collapsed) {\n                return true;\n            } else {\n                return false;\n            }\n        }\n    }\n\n    /**\n     * Reference to the menu\n     *\n     * @hidden\n     * @internal\n     */\n    @ViewChild('dropdown')\n    public menu: IgxDropDownComponent;\n\n    /**\n     * Getter for menu overlay settings\n     *\n     * @hidden\n     * @internal\n     */\n    public menuOverlaySettings: OverlaySettings = { scrollStrategy: new CloseScrollStrategy() };\n\n    private _hidden = false;\n    private _resourceStrings = getCurrentResourceStrings(ActionStripResourceStringsEN);\n    private _originalParent!: HTMLElement;\n\n    constructor(\n        private _viewContainer: ViewContainerRef,\n        private renderer: Renderer2,\n        protected el: ElementRef,\n        /** @hidden @internal **/\n        public cdr: ChangeDetectorRef,\n    ) { }\n\n    /**\n     * Menu Items list.\n     *\n     * @hidden\n     * @internal\n     */\n    public get menuItems() {\n        const actions = [];\n        this.actionButtons.forEach(button => {\n            if (button.asMenuItems) {\n                const children = button.buttons;\n                if (children) {\n                    children.toArray().forEach(x => actions.push(x));\n                }\n            }\n        });\n        return [... this._menuItems.toArray(), ...actions];\n    }\n\n\n    /**\n     * Getter for the 'display' property of the current `IgxActionStrip`\n     */\n    @HostBinding('style.display')\n    private get display(): string {\n        return this.hidden ? 'none' : 'flex';\n    }\n\n    /**\n     * Host `attr.class` binding.\n     */\n    @HostBinding('class.igx-action-strip')\n    protected hostClass = 'igx-action-strip';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterContentInit() {\n        this.actionButtons.forEach(button => {\n            button.strip = this;\n        });\n        this.actionButtons.changes.subscribe(() => {\n            this.actionButtons.forEach(button => {\n                button.strip = this;\n            });\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        this.menu.selectionChanging.subscribe(($event) => {\n            const newSelection = ($event.newSelection as any).elementRef.nativeElement;\n            let allButtons = [];\n            this.actionButtons.forEach(actionButtons => {\n                if (actionButtons.asMenuItems) {\n                    allButtons = [...allButtons, ...actionButtons.buttons.toArray()];\n                }\n            });\n            const button = allButtons.find(x => newSelection.contains(x.container.nativeElement));\n            if (button) {\n                button.actionClick.emit();\n            }\n        });\n        this._originalParent = this._viewContainer.element.nativeElement?.parentElement;\n    }\n\n    /**\n     * Showing the Action Strip and appending it the specified context element.\n     *\n     * @param context\n     * @example\n     * ```typescript\n     * this.actionStrip.show(row);\n     * ```\n     */\n    public show(context?: any): void {\n        this.hidden = false;\n        if (!context) {\n            return;\n        }\n        // when shown for different context make sure the menu won't stay opened\n        if (this.context !== context) {\n            this.closeMenu();\n        }\n        this.context = context;\n        if (this.context && this.context.element) {\n            this.renderer.appendChild(context.element.nativeElement, this._viewContainer.element.nativeElement);\n        }\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Hiding the Action Strip and removing it from its current context element.\n     *\n     * @example\n     * ```typescript\n     * this.actionStrip.hide();\n     * ```\n     */\n    public hide(): void {\n        this.hidden = true;\n        this.closeMenu();\n        if (this._originalParent) {\n            // D.P. fix(elements) don't detach native DOM, instead move back. Might not matter for Angular, but Elements will destroy\n            this.renderer.appendChild(this._originalParent, this._viewContainer.element.nativeElement);\n        } else if (this.context && this.context.element) {\n            this.renderer.removeChild(this.context.element.nativeElement, this._viewContainer.element.nativeElement);\n        }\n    }\n\n    /** pin swapping w/ unpin resets the menuItems collection */\n    protected trackMenuItem = trackByIdentity;\n\n    /**\n     * Close the menu if opened\n     *\n     * @hidden\n     * @internal\n     */\n    private closeMenu(): void {\n        if (this.menu && !this.menu.collapsed) {\n            this.menu.close();\n        }\n    }\n}\n","<div class=\"igx-action-strip__actions\">\n    <ng-content #content></ng-content>\n    @if (menuItems.length > 0) {\n        <button\n            type=\"button\"\n            igxIconButton=\"flat\"\n            igxRipple\n            [igxToggleAction]=\"dropdown\"\n            [overlaySettings]=\"menuOverlaySettings\"\n            (click)=\"$event.stopPropagation()\"\n            [title]=\"resourceStrings.igx_action_strip_button_more_title\"\n            [igxDropDownItemNavigation]=\"dropdown\"\n        >\n            <igx-icon family=\"default\" name=\"more_vert\"></igx-icon>\n        </button>\n    }\n    <igx-drop-down #dropdown>\n        @for (item of menuItems; track trackMenuItem(item)) {\n            <igx-drop-down-item\n                class=\"igx-action-strip__menu-item\"\n            >\n                <div class=\"igx-drop-down__item-template\">\n                    <ng-container\n                        *ngTemplateOutlet=\"\n                            item.templateRef;\n                            context: { $implicit: item }\n                        \"\n                    ></ng-container>\n                </div>\n            </igx-drop-down-item>\n        }\n    </igx-drop-down>\n</div>\n","import { Component, HostBinding, Input, booleanAttribute } from '@angular/core';\nimport { IgxGridActionsBaseDirective } from './grid-actions-base.directive';\nimport { showMessage } from '../../core/utils';\nimport { addRow, addChild } from '@igniteui/material-icons-extended';\nimport { IgxGridActionButtonComponent } from './grid-action-button.component';\n\n\n/* blazorElement */\n/* wcElementTag: igc-grid-editing-actions */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/**\n * Grid Editing Actions for the Action Strip\n *\n * @igxParent IgxActionStripComponent\n */\n@Component({\n    selector: 'igx-grid-editing-actions',\n    templateUrl: 'grid-editing-actions.component.html',\n    providers: [{ provide: IgxGridActionsBaseDirective, useExisting: IgxGridEditingActionsComponent }],\n    imports: [IgxGridActionButtonComponent]\n})\n\nexport class IgxGridEditingActionsComponent extends IgxGridActionsBaseDirective {\n\n    /**\n     * Host `class.igx-action-strip` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-action-strip__editing-actions')\n    public cssClass = 'igx-action-strip__editing-actions';\n\n    /**\n     * An input to enable/disable action strip row adding button\n     */\n    @Input({ transform: booleanAttribute })\n    public set addRow(value: boolean) {\n        this._addRow = value;\n    }\n    public get addRow(): boolean {\n        if (!this.iconsRendered) {\n            this.registerIcons();\n            this.iconsRendered = true;\n        }\n        return this._addRow;\n    }\n\n    /**\n     * An input to enable/disable action strip row editing button\n     */\n    @Input({ transform: booleanAttribute })\n    public editRow = true;\n\n    /**\n    * An input to enable/disable action strip row deleting button\n    */\n    @Input({ transform: booleanAttribute })\n    public deleteRow = true;\n\n    /**\n     * Getter if the row is disabled\n     *\n     * @hidden\n     * @internal\n     */\n    public get disabled(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        return this.strip.context.disabled;\n    }\n\n    /**\n     * Getter if the row is root.\n     *\n     * @hidden\n     * @internal\n     */\n    public get isRootRow(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return false;\n        }\n        return this.strip.context.isRoot;\n    }\n\n    public get hasChildren(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return false;\n        }\n        return this.strip.context.hasChildren;\n    }\n\n    /**\n     * An input to enable/disable action strip child row adding button\n     */\n    @Input({ transform: booleanAttribute })\n    public addChild = false;\n\n    private isMessageShown = false;\n    private _addRow = false;\n    private iconsRendered = false;\n\n    /**\n     * Enter row or cell edit mode depending the grid rowEditable option\n     *\n     * @example\n     * ```typescript\n     * this.gridEditingActions.startEdit();\n     * ```\n     */\n    public startEdit(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const row = this.strip.context;\n        const firstEditable = row.cells.filter(cell => cell.editable)[0];\n        const grid = row.grid;\n        if (!grid.hasEditableColumns) {\n            this.isMessageShown = showMessage(\n                'The grid should be editable in order to use IgxGridEditingActionsComponent',\n                this.isMessageShown);\n            return;\n        }\n        // be sure row is in view\n        if (grid.rowList.filter(r => r === row).length !== 0) {\n            grid.gridAPI.crudService.enterEditMode(firstEditable, event);\n            if (!grid.gridAPI.crudService.nonEditable) {\n                firstEditable.activate(event);\n            }\n        }\n        this.strip.hide();\n    }\n\n    /** @hidden @internal **/\n    public deleteRowHandler(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        grid.deleteRow(context.key);\n\n        this.strip.hide();\n    }\n\n    /** @hidden @internal **/\n    public addRowHandler(event?, asChild?: boolean): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        if (!grid.rowEditable) {\n            console.warn('The grid must use row edit mode to perform row adding! Please set rowEditable to true.');\n            return;\n        }\n        grid.gridAPI.crudService.enterAddRowMode(context, asChild, event);\n        this.strip.hide();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private registerIcons() {\n        this.iconService.addSvgIconFromText(addRow.name, addRow.value, 'imx-icons', true,);\n        this.iconService.addSvgIconFromText(addChild.name, addChild.value, 'imx-icons', true);\n    }\n}\n","\n@if (isRowContext) {\n    @if (!disabled && editRow) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconName=\"edit\" [labelText]=\"grid.resourceStrings.igx_grid_actions_edit_label\" (actionClick)=\"startEdit($event)\"></igx-grid-action-button>\n    }\n    @if (addRow && isRootRow) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconName=\"add_row\" iconSet=\"default\" [labelText]=\"grid.resourceStrings.igx_grid_actions_add_label\" (actionClick)=\"addRowHandler($event)\"></igx-grid-action-button>\n    }\n    @if (addChild && hasChildren) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconName=\"add_child\" iconSet=\"default\" [labelText]=\"grid.resourceStrings.igx_grid_actions_add_child_label\" (actionClick)=\"addRowHandler($event, true)\"></igx-grid-action-button>\n    }\n    @if (!disabled && deleteRow) {\n        <igx-grid-action-button class=\"igx-action-strip__delete\" classNames='igx-action-strip__menu-item--danger' [asMenuItem]=\"asMenuItems\" iconName=\"delete\" [labelText]=\"grid.resourceStrings.igx_grid_actions_delete_label\" (actionClick)=\"deleteRowHandler($event)\"></igx-grid-action-button>\n    }\n}\n\n","import { Component, HostBinding } from '@angular/core';\nimport { IgxGridActionsBaseDirective } from './grid-actions-base.directive';\nimport { pinLeft, unpinLeft, jumpDown, jumpUp } from '@igniteui/material-icons-extended';\nimport { IgxGridActionButtonComponent } from './grid-action-button.component';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-pinning-actions */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/**\n * Grid Pinning Actions for the Action Strip\n *\n * @igxParent IgxActionStripComponent\n */\n@Component({\n    selector: 'igx-grid-pinning-actions',\n    templateUrl: 'grid-pinning-actions.component.html',\n    providers: [{ provide: IgxGridActionsBaseDirective, useExisting: IgxGridPinningActionsComponent }],\n    imports: [IgxGridActionButtonComponent]\n})\n\nexport class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective {\n    /**\n     * Host `class.igx-action-strip` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-action-strip__pinning-actions')\n    public cssClass = 'igx-action-strip__pinning-actions';\n\n    private iconsRendered = false;\n\n    /**\n     * Getter to know if the row is pinned\n     *\n     * @hidden\n     * @internal\n     */\n    public get pinned(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        if (context && !this.iconsRendered) {\n            this.registerSVGIcons();\n            this.iconsRendered = true;\n        }\n        return context && context.pinned;\n    }\n\n    /**\n     * Getter to know if the row is in pinned and ghost\n     *\n     * @hidden\n     * @internal\n     */\n    public get inPinnedArea(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        return this.pinned && !context.disabled;\n    }\n\n    /**\n     * Getter to know if the row pinning is set to top or bottom\n     *\n     * @hidden\n     * @internal\n     */\n    public get pinnedTop(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        return this.strip.context.grid.isRowPinningToTop;\n    }\n\n    /**\n     * Pin the row according to the context.\n     *\n     * @example\n     * ```typescript\n     * this.gridPinningActions.pin();\n     * ```\n     */\n    public pin(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const row = this.strip.context;\n        const grid = row.grid;\n        grid.pinRow(row.key, grid.pinnedRecords.length);\n        this.strip.hide();\n    }\n\n    /**\n     * Unpin the row according to the context.\n     *\n     * @example\n     * ```typescript\n     * this.gridPinningActions.unpin();\n     * ```\n     */\n    public unpin(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const row = this.strip.context;\n        const grid = row.grid;\n        grid.unpinRow(row.key);\n        this.strip.hide();\n    }\n\n    public scrollToRow(event) {\n        if (event) {\n            event.stopPropagation();\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        grid.scrollTo(context.data, 0);\n        this.strip.hide();\n    }\n\n    private registerSVGIcons(): void {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        if (grid) {\n            this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons', true);\n            this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons', true);\n            this.iconService.addSvgIconFromText(jumpDown.name, jumpDown.value, 'imx-icons', true);\n            this.iconService.addSvgIconFromText(jumpUp.name, jumpUp.value, 'imx-icons', true);\n        }\n    }\n}\n","@if (isRowContext) {\n    @if (inPinnedArea && pinnedTop) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"jump_down\" [labelText]=\"grid.resourceStrings.igx_grid_actions_jumpDown_label\" (actionClick)=\"scrollToRow($event)\"></igx-grid-action-button>\n    }\n    @if (inPinnedArea && !pinnedTop) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"jump_up\" [labelText]=\"grid.resourceStrings.igx_grid_actions_jumpUp_label\" (actionClick)=\"scrollToRow($event)\"></igx-grid-action-button>\n    }\n    @if (!pinned) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"pin\" [labelText]=\"grid.resourceStrings.igx_grid_actions_pin_label\" (actionClick)=\"pin($event)\"></igx-grid-action-button>\n    }\n    @if (pinned) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"unpin\" [labelText]=\"grid.resourceStrings.igx_grid_actions_unpin_label\" (actionClick)=\"unpin($event)\"></igx-grid-action-button>\n    }\n}\n","import { IgxActionStripComponent, IgxActionStripMenuItemDirective } from './action-strip.component';\nimport { IgxGridActionButtonComponent } from './grid-actions/grid-action-button.component';\nimport { IgxGridActionsBaseDirective } from './grid-actions/grid-actions-base.directive';\nimport { IgxGridEditingActionsComponent } from './grid-actions/grid-editing-actions.component';\nimport { IgxGridPinningActionsComponent } from './grid-actions/grid-pinning-actions.component';\n\nexport { IgxGridActionsBaseDirective } from './grid-actions/grid-actions-base.directive';\nexport { IgxGridEditingActionsComponent } from './grid-actions/grid-editing-actions.component';\nexport { IgxGridPinningActionsComponent } from './grid-actions/grid-pinning-actions.component';\nexport { IgxActionStripComponent, IgxActionStripMenuItemDirective } from './action-strip.component';\nexport { IgxGridActionButtonComponent } from './grid-actions/grid-action-button.component';\n\n/* Action-strip outside of grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_ACTION_STRIP_DIRECTIVES = [\n    IgxActionStripComponent,\n    IgxActionStripMenuItemDirective\n] as const;\n\n/* Action-strip in grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_GRID_ACTION_STRIP_DIRECTIVES = [\n    IgxActionStripComponent,\n    IgxActionStripMenuItemDirective,\n    IgxGridPinningActionsComponent,\n    IgxGridEditingActionsComponent,\n    IgxGridActionsBaseDirective,\n    IgxGridActionButtonComponent\n] as const;\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    Component,\n    ElementRef,\n    HostBinding,\n    Input,\n    OnInit,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\n\nimport { mkenum, normalizeURI } from '../core/utils';\nimport { IgxIconComponent } from '../icon/icon.component';\n\nlet NEXT_ID = 0;\nexport const IgxAvatarSize = /*@__PURE__*/mkenum({\n    SMALL: 'small',\n    MEDIUM: 'medium',\n    LARGE: 'large'\n});\nexport type IgxAvatarSize = (typeof IgxAvatarSize)[keyof typeof IgxAvatarSize];\n\nexport const IgxAvatarType = /*@__PURE__*/mkenum({\n    INITIALS: 'initials',\n    IMAGE: 'image',\n    ICON: 'icon',\n    CUSTOM: 'custom'\n});\nexport type IgxAvatarType = (typeof IgxAvatarType)[keyof typeof IgxAvatarType];\n\n/**\n * Avatar provides a way to display an image, icon or initials to the user.\n *\n * @igxModule IgxAvatarModule\n *\n * @igxTheme igx-avatar-theme, igx-icon-theme\n *\n * @igxKeywords avatar, profile, picture, initials\n *\n * @igxGroup Layouts\n *\n * @remarks\n *\n * The Ignite UI Avatar provides an easy way to add an avatar icon to your application.  This icon can be an\n * image, someone's initials or a material icon from the Google Material icon set.\n *\n * @example\n * ```html\n * <igx-avatar initials=\"MS\" shape=\"rounded\" size=\"large\">\n * </igx-avatar>\n * ```\n */\n@Component({\n    selector: 'igx-avatar',\n    templateUrl: 'avatar.component.html',\n    imports: [IgxIconComponent, NgTemplateOutlet]\n})\nexport class IgxAvatarComponent implements OnInit {\n    /**\n     * Returns the `aria-label` attribute of the avatar.\n     *\n     * @example\n     * ```typescript\n     * let ariaLabel = this.avatar.ariaLabel;\n     * ```\n     *\n     */\n    @HostBinding('attr.aria-label')\n    public ariaLabel = 'avatar';\n\n    /**\n     * Returns the `role` attribute of the avatar.\n     *\n     * @example\n     * ```typescript\n     * let avatarRole = this.avatar.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    public role = 'img';\n\n    /**\n     * Host `class.igx-avatar` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-avatar')\n    public cssClass = 'igx-avatar';\n\n    /**\n     * Returns the type of the avatar.\n     * The avatar can be:\n     * - `\"initials type avatar\"`\n     * - `\"icon type avatar\"`\n     * - `\"image type avatar\"`.\n     * - `\"custom type avatar\"`.\n     *\n     * @example\n     * ```typescript\n     * let avatarDescription = this.avatar.roleDescription;\n     * ```\n     */\n    @HostBinding('attr.aria-roledescription')\n    public roleDescription: string;\n\n    /**\n     * Sets the `id` of the avatar. If not set, the first avatar component will have `id` = `\"igx-avatar-0\"`.\n     *\n     * @example\n     * ```html\n     * <igx-avatar id=\"my-first-avatar\"></igx-avatar>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-avatar-${NEXT_ID++}`;\n\n    /**\n     * Sets square, rounded or circular shape to the avatar.\n     * By default the shape of the avatar is square.\n     *\n     * @example\n     * ```html\n     * <igx-avatar shape=\"rounded\"></igx-avatar>\n     * ```\n     */\n    @Input()\n    public shape: 'square' | 'rounded' | 'circle' = 'square';\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-avatar--rounded')\n    public get isRounded(): boolean {\n        return this.shape === 'rounded';\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-avatar--circle')\n    public get isCircle(): boolean {\n        return this.shape === 'circle';\n    }\n\n    /**\n     * Sets the color of the avatar's initials or icon.\n     *\n     * @example\n     * ```html\n     * <igx-avatar color=\"blue\"></igx-avatar>\n     * ```\n     * @deprecated in version 17.2.0.\n     */\n\n    @HostBinding('style.color')\n    @Input()\n    public color: string;\n\n    /**\n     * Sets the background color of the avatar.\n     *\n     * @example\n     * ```html\n     * <igx-avatar bgColor=\"yellow\"></igx-avatar>\n     * ```\n     * @igxFriendlyName Background color\n     * @deprecated in version 17.2.0.\n     */\n\n    @HostBinding('style.background')\n    @Input()\n    public bgColor: string;\n\n    /**\n     * Sets initials to the avatar.\n     *\n     * @example\n     * ```html\n     * <igx-avatar initials=\"MN\"></igx-avatar>\n     * ```\n     */\n    @Input()\n    public initials: string;\n\n    /**\n     * Sets an icon to the avatar. All icons from the material icon set are supported.\n     *\n     * @example\n     * ```html\n     * <igx-avatar icon=\"phone\"></igx-avatar>\n     * ```\n     */\n    @Input()\n    public icon: string;\n\n    /**\n     * Sets the image source of the avatar.\n     *\n     * @example\n     * ```html\n     * <igx-avatar src=\"images/picture.jpg\"></igx-avatar>\n     * ```\n     * @igxFriendlyName Image URL\n     */\n    @Input()\n    public set src(value: string) {\n        this._src = normalizeURI(value);\n    }\n\n    public get src() {\n        return this._src;\n    }\n\n    /** @hidden @internal */\n    @ViewChild('defaultTemplate', { read: TemplateRef, static: true })\n    protected defaultTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('imageTemplate', { read: TemplateRef, static: true })\n    protected imageTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('initialsTemplate', { read: TemplateRef, static: true })\n    protected initialsTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('iconTemplate', { read: TemplateRef, static: true })\n    protected iconTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _size: string | IgxAvatarSize;\n    private _src: string;\n\n    /**\n     * Returns the size of the avatar.\n     *\n     * @example\n     * ```typescript\n     * let avatarSize = this.avatar.size;\n     * ```\n     */\n    @Input()\n    public get size(): string | IgxAvatarSize {\n        return this._size || IgxAvatarSize.SMALL;\n    }\n\n    /**\n     * Sets the size  of the avatar.\n     * By default, the size is `\"small\"`. It can be set to `\"medium\"` or `\"large\"`.\n     *\n     * @example\n     * ```html\n     * <igx-avatar size=\"large\"></igx-avatar>\n     * ```\n     */\n    public set size(value: string | IgxAvatarSize) {\n        switch (value) {\n            case 'small':\n            case 'medium':\n            case 'large':\n                this._size = value;\n                break;\n            default:\n                this._size = 'small';\n        }\n    }\n\n    /**\n     * Returns the type of the avatar.\n     *\n     * @example\n     * ```typescript\n     * let avatarType = this.avatar.type;\n     * ```\n     */\n    public get type(): IgxAvatarType {\n        if (this.src) {\n            return IgxAvatarType.IMAGE;\n        }\n\n        if (this.icon) {\n            return IgxAvatarType.ICON;\n        }\n\n        if (this.initials) {\n            return IgxAvatarType.INITIALS;\n        }\n\n        return IgxAvatarType.CUSTOM;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-avatar--image')\n    public get _isImageType(): boolean {\n        return this.type === IgxAvatarType.IMAGE;\n    }\n    /** @hidden @internal */\n    @HostBinding('class.igx-avatar--icon')\n    public get _isIconType(): boolean {\n        return this.type === IgxAvatarType.ICON;\n    }\n    /** @hidden @internal */\n    @HostBinding('class.igx-avatar--initials')\n    public get _isInitialsType(): boolean {\n        return this.type === IgxAvatarType.INITIALS;\n    }\n\n    @HostBinding('style.--component-size')\n    protected get componentSize() {\n        if (this._size) {\n            return `var(--ig-size-${this._size})`;\n        }\n    }\n\n    /**\n     * Returns the template of the avatar.\n     *\n     * @hidden\n     * @internal\n     */\n    public get template(): TemplateRef<any> {\n        switch (this.type) {\n            case IgxAvatarType.IMAGE:\n                return this.imageTemplate;\n            case IgxAvatarType.INITIALS:\n                return this.initialsTemplate;\n            case IgxAvatarType.ICON:\n                return this.iconTemplate;\n            default:\n                return this.defaultTemplate;\n        }\n    }\n\n    constructor(public elementRef: ElementRef) { }\n\n    /**\n     * Returns the css url of the image.\n     *\n     * @hidden\n     * @internal\n     */\n    public getSrcUrl() {\n        return `url(\"${this.src}\")`;\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        this.roleDescription = this.getRole();\n    }\n\n    /** @hidden @internal */\n    private getRole(): string {\n        switch (this.type) {\n            case IgxAvatarType.IMAGE:\n                return 'image avatar';\n            case IgxAvatarType.ICON:\n                return 'icon avatar';\n            case IgxAvatarType.INITIALS:\n                return 'initials avatar';\n            default:\n                return 'custom avatar';\n        }\n    }\n}\n\n","<ng-template #defaultTemplate>\n    <ng-content></ng-content>\n</ng-template>\n\n<ng-template #imageTemplate>\n    <div #image class=\"igx-avatar__image\" [style.backgroundImage]=\"getSrcUrl()\"></div>\n</ng-template>\n\n<ng-template #initialsTemplate>\n    <span>{{initials.substring(0, 2)}}</span>\n</ng-template>\n\n<ng-template #iconTemplate>\n     <igx-icon>{{icon}}</igx-icon>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template\"></ng-container>\n","import { booleanAttribute, Component, HostBinding, Input } from '@angular/core';\nimport { mkenum } from '../core/utils';\nimport { IgxIconComponent } from '../icon/icon.component';\n\nlet NEXT_ID = 0;\n\n/**\n * Determines the igxBadge type\n */\nexport const IgxBadgeType = /*@__PURE__*/mkenum({\n    PRIMARY: 'primary',\n    INFO: 'info',\n    SUCCESS: 'success',\n    WARNING: 'warning',\n    ERROR: 'error'\n});\nexport type IgxBadgeType = (typeof IgxBadgeType)[keyof typeof IgxBadgeType];\n/**\n * Badge provides visual notifications used to decorate avatars, menus, etc.\n *\n * @igxModule IgxBadgeModule\n *\n * @igxTheme igx-badge-theme\n *\n * @igxKeywords badge, icon, notification\n *\n * @igxGroup Data Entry & Display\n *\n * @remarks\n * The Ignite UI Badge is used to decorate avatars, navigation menus, or other components in the\n * application when visual notification is needed. They are usually designed as icons with a predefined\n * style to communicate information, success, warnings, or errors.\n *\n * @example\n * ```html\n * <igx-avatar>\n *   <igx-badge icon=\"check\" type=\"success\"></igx-badge>\n * </igx-avatar>\n */\n@Component({\n    selector: 'igx-badge',\n    templateUrl: 'badge.component.html',\n    imports: [IgxIconComponent]\n})\nexport class IgxBadgeComponent {\n\n   /**\n    * Sets/gets the `id` of the badge.\n    *\n    * @remarks\n    * If not set, the `id` will have value `\"igx-badge-0\"`.\n    *\n    * @example\n    * ```html\n    * <igx-badge id=\"igx-badge-2\"></igx-badge>\n    * ```\n    */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-badge-${NEXT_ID++}`;\n\n   /**\n    * Sets/gets the type of the badge.\n    *\n    * @remarks\n    * Allowed values are `primary`, `info`, `success`, `warning`, `error`.\n    * Providing an invalid value won't display a badge.\n    *\n    * @example\n    * ```html\n    * <igx-badge type=\"success\"></igx-badge>\n    * ```\n    */\n    @Input()\n    public type: string | IgxBadgeType = IgxBadgeType.PRIMARY;\n\n   /**\n    * Sets/gets the value to be displayed inside the badge.\n    *\n    * @remarks\n    * If an `icon` property is already set the `icon` will be displayed.\n    * If neither a `value` nor an `icon` is set the content of the badge will be empty.\n    *\n    * @example\n    * ```html\n    * <igx-badge value=\"11\"></igx-badge>\n    * ```\n    */\n    @Input()\n    public value: string | number = '';\n\n    /**\n     * Sets/gets an icon for the badge from the material icons set.\n     *\n     * @remarks\n     * Has priority over the `value` property.\n     * If neither a `value` nor an `icon` is set the content of the badge will be empty.\n     * Providing an invalid value won't display anything.\n     *\n     * @example\n     * ```html\n     * <igx-badge icon=\"check\"></igx-badge>\n     * ```\n     */\n    @Input()\n    public icon: string;\n\n    /**\n     * The name of the icon set. Used in case the icon is from a different icon set.\n     */\n    @Input()\n    public iconSet: string;\n\n    /**\n     * Sets/gets the role attribute value.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyBadge\", { read: IgxBadgeComponent })\n     * public badge: IgxBadgeComponent;\n     *\n     * badge.role = 'status';\n     * ```\n     */\n    @HostBinding('attr.role')\n    public role = 'status';\n\n    /**\n     * Sets/gets the css class to use on the badge.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyBadge\", { read: IgxBadgeComponent })\n     * public badge: IgxBadgeComponent;\n     *\n     * badge.cssClass = 'my-badge-class';\n     * ```\n     */\n    @HostBinding('class.igx-badge')\n    public cssClass = 'igx-badge';\n\n    /**\n     * Sets a square shape to the badge, if `shape` is set to `square`.\n     * By default the shape of the badge is rounded.\n     *\n     * @example\n     * ```html\n     * <igx-badge shape=\"square\"></igx-badge>\n     * ```\n     */\n    @Input()\n    public shape: 'rounded' | 'square' = 'rounded';\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-badge--square')\n    public get _squareShape(): boolean {\n        return this.shape === 'square';\n    }\n\n    /**\n     * Sets/gets the aria-label attribute value.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild(\"MyBadge\", { read: IgxBadgeComponent })\n     * public badge: IgxBadgeComponent;\n     *\n     * badge.label = 'badge';\n     * ```\n     */\n    @HostBinding('attr.aria-label')\n    public label = 'badge';\n\n    /**\n     * Sets/gets whether the badge is outlined.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-badge outlined></igx-badge>\n     * ```\n     */\n    @Input({transform: booleanAttribute})\n    @HostBinding('class.igx-badge--outlined')\n    public outlined = false;\n\n    /**\n     * Defines a human-readable, accessor, author-localized description for\n     * the `type` and the `icon` or `value` of the element.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('attr.aria-roledescription')\n    public get roleDescription() {\n        if (this.icon) {\n            return this.type + ' type badge with icon type ' + this.icon;\n        } else if (this.value || this.value === 0) {\n            return this.type + ' badge type with value ' + this.value;\n        }\n        return this.type + ' badge type without value';\n    }\n\n    @HostBinding('class.igx-badge--info')\n    public get infoClass() {\n        return this.type === IgxBadgeType.INFO;\n    }\n\n    @HostBinding('class.igx-badge--success')\n    public get successClass() {\n        return this.type === IgxBadgeType.SUCCESS;\n    }\n\n    @HostBinding('class.igx-badge--warning')\n    public get warningClass() {\n        return this.type === IgxBadgeType.WARNING;\n    }\n\n    @HostBinding('class.igx-badge--error')\n    public get errorClass() {\n        return this.type === IgxBadgeType.ERROR;\n    }\n}\n","@if (value || value === 0 && !icon) {\n    <span class=\"igx-badge__value\">{{value}}</span>\n}\n@if (icon && !iconSet) {\n    <igx-icon>{{icon}}</igx-icon>\n}\n@if (icon && iconSet) {\n    <igx-icon [family]=\"iconSet\" [name]=\"icon\">{{icon}}</igx-icon>\n}\n<ng-content></ng-content>\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: 'igx-banner-actions',\n    standalone: true\n})\nexport class IgxBannerActionsDirective { }\n","export interface IBannerResourceStrings {\n    igx_banner_button_dismiss?: string;\n}\n\nexport const BannerResourceStringsEN: IBannerResourceStrings = {\n    igx_banner_button_dismiss: 'Dismiss'\n};\n","import {\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    ViewChild\n} from '@angular/core';\n\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IToggleView } from '../core/navigation';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { IgxBannerActionsDirective } from './banner.directives';\nimport { CancelableEventArgs, IBaseEventArgs } from '../core/utils';\nimport { ToggleAnimationSettings } from '../expansion-panel/toggle-animation-component';\nimport { IgxExpansionPanelBodyComponent } from '../expansion-panel/expansion-panel-body.component';\nimport { IgxExpansionPanelComponent } from '../expansion-panel/expansion-panel.component';\nimport { BannerResourceStringsEN, IBannerResourceStrings } from '../core/i18n/banner-resources';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\n\nexport interface BannerEventArgs extends IBaseEventArgs {\n    event?: Event;\n}\n\nexport interface BannerCancelEventArgs extends BannerEventArgs, CancelableEventArgs {\n}\n/**\n * **Ignite UI for Angular Banner** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/banner.html)\n *\n * The Ignite UI Banner provides a highly template-able and easy to use banner that can be shown in your application.\n *\n * Usage:\n *\n * ```html\n * <igx-banner #banner>\n *   Our privacy settings have changed.\n *  <igx-banner-actions>\n *      <button type=\"button\" igxButton=\"contained\">Read More</button>\n *      <button type=\"button\" igxButton=\"contained\">Accept and Continue</button>\n *  </igx-banner-actions>\n * </igx-banner>\n * ```\n */\n@Component({\n    selector: 'igx-banner',\n    templateUrl: 'banner.component.html',\n    imports: [IgxExpansionPanelComponent, IgxExpansionPanelBodyComponent, IgxButtonDirective, IgxRippleDirective]\n})\nexport class IgxBannerComponent implements IToggleView {\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxIconComponent)\n    public bannerIcon: IgxIconComponent;\n\n    /**\n     * Fires after the banner shows up\n     * ```typescript\n     * public handleOpened(event) {\n     *  ...\n     * }\n     * ```\n     * ```html\n     * <igx-banner (opened)=\"handleOpened($event)\"></igx-banner>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<BannerEventArgs>();\n\n    /**\n     * Fires before the banner shows up\n     * ```typescript\n     * public handleOpening(event) {\n     *  ...\n     * }\n     * ```\n     * ```html\n     * <igx-banner (opening)=\"handleOpening($event)\"></igx-banner>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<BannerCancelEventArgs>();\n\n    /**\n     * Fires after the banner hides\n     * ```typescript\n     * public handleClosed(event) {\n     *  ...\n     * }\n     * ```\n     * ```html\n     * <igx-banner (closed)=\"handleClosed($event)\"></igx-banner>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<BannerEventArgs>();\n\n    /**\n     * Fires before the banner hides\n     * ```typescript\n     * public handleClosing(event) {\n     *  ...\n     * }\n     * ```\n     * ```html\n     * <igx-banner (closing)=\"handleClosing($event)\"></igx-banner>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<BannerCancelEventArgs>();\n\n    /** @hidden */\n    public get useDefaultTemplate(): boolean {\n        return !this._bannerActionTemplate;\n    }\n\n    /**\n     * Set the animation settings used by the banner open/close methods\n     * ```typescript\n     * import { slideInLeft, slideOutRight } from 'igniteui-angular';\n     * ...\n     * banner.animationSettings: ToggleAnimationSettings = { openAnimation: slideInLeft, closeAnimation: slideOutRight };\n     * ```\n     */\n    public set animationSettings(settings: ToggleAnimationSettings) {\n        this._animationSettings = settings;\n    }\n\n    /**\n     * Get the animation settings used by the banner open/close methods\n     * ```typescript\n     * let currentAnimations: ToggleAnimationSettings = banner.animationSettings\n     * ```\n     */\n    @Input()\n    public get animationSettings(): ToggleAnimationSettings {\n        return this._animationSettings ? this._animationSettings : this._expansionPanel.animationSettings;\n    }\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IBannerResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    public get resourceStrings(): IBannerResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Gets/Sets whether the banner is expanded (visible) or collapsed (hidden).\n     * Defaults to `false`.\n     * Setting to `true` opens the banner, while `false` closes it.\n     *\n     * @example\n     * // Expand the banner\n     * banner.expanded = true;\n     *\n     * @example\n     * // Collapse the banner\n     * banner.expanded = false;\n     *\n     * @example\n     * // Check if the banner is expanded\n     * const isExpanded = banner.expanded;\n     */\n    @Input()\n    public get expanded(): boolean {\n        return this._expanded;\n    }\n\n    public set expanded(value: boolean) {\n        if (value === this._expanded) {\n            return;\n        }\n\n        this._expanded = value;\n        this._shouldFireEvent = true;\n\n        if (value) {\n            this._expansionPanel.open();\n        } else {\n            this._expansionPanel.close();\n        }\n    }\n\n    /**\n     * Gets whether the banner is collapsed.\n     *\n     * ```typescript\n     * const isCollapsed: boolean = banner.collapsed;\n     * ```\n     */\n    public get collapsed(): boolean {\n        return this._expansionPanel.collapsed;\n    }\n\n    /**\n     * Returns the native element of the banner component\n     * ```typescript\n     *  const myBannerElement: HTMLElement = banner.element;\n     * ```\n     */\n    public get element() {\n        return this.elementRef.nativeElement;\n    }\n\n    @HostBinding('class')\n    public cssClass = 'igx-banner-host';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.display')\n    public get displayStyle(): string {\n        return this.collapsed ? '' : 'block';\n    }\n\n    @ViewChild('expansionPanel', { static: true })\n    private _expansionPanel: IgxExpansionPanelComponent;\n\n    @ContentChild(IgxBannerActionsDirective)\n    private _bannerActionTemplate: IgxBannerActionsDirective;\n\n    private _expanded: boolean = false;\n    private _shouldFireEvent: boolean = false;\n    private _bannerEvent: BannerEventArgs;\n    private _animationSettings: ToggleAnimationSettings;\n    private _resourceStrings = getCurrentResourceStrings(BannerResourceStringsEN);\n\n    constructor(public elementRef: ElementRef<HTMLElement>) { }\n\n    /**\n     * Opens the banner\n     *\n     * ```typescript\n     *  myBanner.open();\n     * ```\n     *\n     * ```html\n     * <igx-banner #banner>\n     * ...\n     * </igx-banner>\n     * <button type=\"button\" (click)=\"banner.open()\">Open Banner</button>\n     * ```\n     */\n    public open(event?: Event) {\n        this._bannerEvent = { owner: this, event };\n        const openingArgs: BannerCancelEventArgs = {\n            owner: this,\n            event,\n            cancel: false\n        };\n        this.opening.emit(openingArgs);\n        if (openingArgs.cancel) {\n            return;\n        }\n        this._expansionPanel.open(event);\n        this._expanded = true;\n        this._shouldFireEvent = false;\n    }\n\n    /**\n     * Closes the banner\n     *\n     * ```typescript\n     *  myBanner.close();\n     * ```\n     *\n     * ```html\n     * <igx-banner #banner>\n     * ...\n     * </igx-banner>\n     * <button type=\"button\" (click)=\"banner.close()\">Close Banner</button>\n     * ```\n     */\n    public close(event?: Event) {\n        this._bannerEvent = { owner: this, event};\n        const closingArgs: BannerCancelEventArgs = {\n            owner: this,\n            event,\n            cancel: false\n        };\n        this.closing.emit(closingArgs);\n        if (closingArgs.cancel) {\n            return;\n        }\n        this._expansionPanel.close(event);\n        this._expanded = false;\n        this._shouldFireEvent = false;\n    }\n\n    /**\n     * Toggles the banner\n     *\n     * ```typescript\n     *  myBanner.toggle();\n     * ```\n     *\n     * ```html\n     * <igx-banner #banner>\n     * ...\n     * </igx-banner>\n     * <button type=\"button\" (click)=\"banner.toggle()\">Toggle Banner</button>\n     * ```\n     */\n    public toggle(event?: Event) {\n        if (this.collapsed) {\n            this.open(event);\n        } else {\n            this.close(event);\n        }\n    }\n\n    /** @hidden */\n    public onExpansionPanelOpen() {\n        if (this._shouldFireEvent) {\n            return;\n        }\n        this.opened.emit(this._bannerEvent);\n    }\n\n    /** @hidden */\n    public onExpansionPanelClose() {\n        if (this._shouldFireEvent) {\n            return;\n        }\n        this.closed.emit(this._bannerEvent);\n    }\n}\n","<igx-expansion-panel #expansionPanel [animationSettings]=\"animationSettings\" (contentCollapsed)=\"onExpansionPanelClose()\" (contentExpanded)=\"onExpansionPanelOpen()\"\n    [collapsed]=\"collapsed\" role=\"status\" aria-live=\"polite\" [attr.aria-hidden]=\"collapsed\">\n    <igx-expansion-panel-body>\n        <div class=\"igx-banner\">\n            <div class=\"igx-banner__message\">\n                @if (bannerIcon) {\n                    <div class=\"igx-banner__illustration\">\n                        <ng-content select=\"igx-icon\"></ng-content>\n                    </div>\n                }\n                <span class=\"igx-banner__text\">\n                    <ng-content></ng-content>\n                </span>\n            </div>\n            <div class=\"igx-banner__actions\">\n                @if (useDefaultTemplate) {\n                    <button type=\"button\" igxButton=\"flat\" igxRipple (click)=\"close()\">\n                        {{ resourceStrings.igx_banner_button_dismiss }}\n                    </button>\n                } @else {\n                    <ng-content select=\"igx-banner-actions\"></ng-content>\n                }\n            </div>\n        </div>\n    </igx-expansion-panel-body>\n</igx-expansion-panel>\n","import { IgxBannerComponent } from './banner.component';\nimport { IgxBannerActionsDirective } from './banner.directives';\n\nexport * from './banner.component';\nexport * from './banner.directives';\n\n/* Banner directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_BANNER_DIRECTIVES = [\n    IgxBannerComponent,\n    IgxBannerActionsDirective\n] as const;\n","import {\n    AfterViewInit,\n    Component,\n    ContentChildren,\n    ChangeDetectorRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    QueryList,\n    Renderer2,\n    ViewChildren,\n    OnDestroy,\n    ElementRef,\n    booleanAttribute\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\n\nimport { takeUntil } from 'rxjs/operators';\nimport { IBaseEventArgs } from '../core/utils';\nimport { mkenum } from '../core/utils';\nimport { IgxIconComponent } from '../icon/icon.component';\n\n/**\n * Determines the Button Group alignment\n */\nexport const ButtonGroupAlignment = mkenum({\n    horizontal: 'horizontal',\n    vertical: 'vertical'\n});\nexport type ButtonGroupAlignment = typeof ButtonGroupAlignment[keyof typeof ButtonGroupAlignment];\n\nlet NEXT_ID = 0;\n\n/**\n * **Ignite UI for Angular Button Group** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/buttongroup.html)\n *\n * The Ignite UI Button Group displays a group of buttons either vertically or horizontally. The group supports\n * single, multi and singleRequired selection.\n *\n * Example:\n * ```html\n * <igx-buttongroup selectionMode=\"multi\" [values]=\"fontOptions\">\n * </igx-buttongroup>\n * ```\n * The `fontOptions` value shown above is defined as:\n * ```typescript\n * this.fontOptions = [\n *   { icon: 'format_bold', selected: false },\n *   { icon: 'format_italic', selected: false },\n *   { icon: 'format_underlined', selected: false }];\n * ```\n */\n@Component({\n    selector: 'igx-buttongroup',\n    templateUrl: 'buttongroup-content.component.html',\n    imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent]\n})\nexport class IgxButtonGroupComponent implements AfterViewInit, OnDestroy {\n    /**\n     * A collection containing all buttons inside the button group.\n     */\n    public get buttons(): IgxButtonDirective[] {\n        return [...this.viewButtons.toArray(), ...this.templateButtons.toArray()];\n    }\n\n    /**\n     * Gets/Sets the value of the `id` attribute. If not set it will be automatically generated.\n     * ```html\n     *  <igx-buttongroup [id]=\"'igx-dialog-56'\" [selectionMode]=\"'multi'\" [values]=\"alignOptions\">\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-buttongroup-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.zIndex')\n    public zIndex = 0;\n\n    /**\n     * Allows you to set a style using the `itemContentCssClass` input.\n     * The value should be the CSS class name that will be applied to the button group.\n     * ```typescript\n     * public style1 = \"styleClass\";\n     *  //..\n     * ```\n     *  ```html\n     * <igx-buttongroup [itemContentCssClass]=\"style1\" [selectionMode]=\"'multi'\" [values]=\"alignOptions\">\n     * ```\n     */\n    @Input()\n    public set itemContentCssClass(value: string) {\n        this._itemContentCssClass = value || this._itemContentCssClass;\n    }\n\n    /**\n     * Returns the CSS class of the item content of the `IgxButtonGroup`.\n     * ```typescript\n     *  @ViewChild(\"MyChild\")\n     * public buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let buttonSelect = this.buttonG.itemContentCssClass;\n     * }\n     * ```\n     */\n    public get itemContentCssClass(): string {\n        return this._itemContentCssClass;\n    }\n\n    /**\n     * Enables selecting multiple buttons. By default, multi-selection is false.\n     *\n     * @deprecated in version 16.1.0. Use the `selectionMode` property instead.\n     */\n    @Input()\n    public get multiSelection() {\n        if (this.selectionMode === 'multi') {\n            return true;\n        } else {\n            return false;\n        }\n    }\n    public set multiSelection(selectionMode: boolean) {\n        if (selectionMode) {\n            this.selectionMode = 'multi';\n        } else {\n            this.selectionMode = 'single';\n        }\n    }\n\n    /**\n     * Gets/Sets the selection mode to 'single', 'singleRequired' or 'multi' of the buttons. By default, the selection mode is 'single'.\n     * ```html\n     * <igx-buttongroup [selectionMode]=\"'multi'\" [alignment]=\"alignment\"></igx-buttongroup>\n     * ```\n     */\n    @Input()\n    public get selectionMode() {\n        return this._selectionMode;\n    }\n    public set selectionMode(selectionMode: 'single' | 'singleRequired' | 'multi') {\n        if (this.viewButtons && selectionMode !== this._selectionMode) {\n            this.buttons.forEach((b,i) => {\n                this.deselectButton(i);\n            });\n            this._selectionMode = selectionMode;\n        } else {\n            this._selectionMode = selectionMode;\n        }\n    }\n\n    /**\n     * Property that configures the buttons in the button group using a collection of `Button` objects.\n     * ```typescript\n     *  public ngOnInit() {\n     *      this.cities = [\n     *        new Button({\n     *          label: \"Sofia\"\n     *      }),\n     *        new Button({\n     *          label: \"London\"\n     *      }),\n     *        new Button({\n     *          label: \"New York\",\n     *          selected: true\n     *      }),\n     *        new Button({\n     *          label: \"Tokyo\"\n     *      })\n     *  ];\n     *  }\n     *  //..\n     * ```\n     * ```html\n     *  <igx-buttongroup [selectionMode]=\"'single'\" [values]=\"cities\"></igx-buttongroup>\n     * ```\n     */\n    @Input() public values: any;\n\n    /**\n     * Disables the `igx-buttongroup` component. By default it's false.\n     * ```html\n     * <igx-buttongroup [disabled]=\"true\" [selectionMode]=\"'multi'\" [values]=\"fontOptions\"></igx-buttongroup>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n    public set disabled(value: boolean) {\n        if (this._disabled !== value) {\n            this._disabled = value;\n\n            if (this.viewButtons && this.templateButtons) {\n                this.buttons.forEach((b) => (b.disabled = this._disabled));\n            }\n        }\n    }\n\n    /**\n     * Allows you to set the button group alignment.\n     * Available options are `ButtonGroupAlignment.horizontal` (default) and `ButtonGroupAlignment.vertical`.\n     * ```typescript\n     * public alignment = ButtonGroupAlignment.vertical;\n     * //..\n     * ```\n     * ```html\n     * <igx-buttongroup [selectionMode]=\"'single'\" [values]=\"cities\" [alignment]=\"alignment\"></igx-buttongroup>\n     * ```\n     */\n    @Input()\n    public set alignment(value: ButtonGroupAlignment) {\n        this._isVertical = value === ButtonGroupAlignment.vertical;\n    }\n    /**\n     * Returns the alignment of the `igx-buttongroup`.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * public buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let buttonAlignment = this.buttonG.alignment;\n     * }\n     * ```\n     */\n    public get alignment(): ButtonGroupAlignment {\n        return this._isVertical ? ButtonGroupAlignment.vertical : ButtonGroupAlignment.horizontal;\n    }\n\n    /**\n     * An @Ouput property that emits an event when a button is selected.\n     * ```typescript\n     * @ViewChild(\"toast\")\n     * private toast: IgxToastComponent;\n     * public selectedHandler(buttongroup) {\n     *     this.toast.open()\n     * }\n     *  //...\n     * ```\n     * ```html\n     * <igx-buttongroup #MyChild [selectionMode]=\"'multi'\" (selected)=\"selectedHandler($event)\"></igx-buttongroup>\n     * <igx-toast #toast>You have made a selection!</igx-toast>\n     * ```\n     */\n    @Output()\n    public selected = new EventEmitter<IButtonGroupEventArgs>();\n\n    /**\n     * An @Ouput property that emits an event when a button is deselected.\n     * ```typescript\n     *  @ViewChild(\"toast\")\n     *  private toast: IgxToastComponent;\n     *  public deselectedHandler(buttongroup){\n     *     this.toast.open()\n     * }\n     *  //...\n     * ```\n     * ```html\n     * <igx-buttongroup> #MyChild [selectionMode]=\"'multi'\" (deselected)=\"deselectedHandler($event)\"></igx-buttongroup>\n     * <igx-toast #toast>You have deselected a button!</igx-toast>\n     * ```\n     */\n    @Output()\n    public deselected = new EventEmitter<IButtonGroupEventArgs>();\n\n    @ViewChildren(IgxButtonDirective) private viewButtons: QueryList<IgxButtonDirective>;\n    @ContentChildren(IgxButtonDirective) private templateButtons: QueryList<IgxButtonDirective>;\n\n    /**\n     * Returns true if the `igx-buttongroup` alignment is vertical.\n     * Note that in order for the accessor to work correctly the property should be set explicitly.\n     * ```html\n     * <igx-buttongroup #MyChild [alignment]=\"alignment\" [values]=\"alignOptions\">\n     * ```\n     * ```typescript\n     * //...\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let orientation = this.buttonG.isVertical;\n     * }\n     * ```\n     */\n    public get isVertical(): boolean {\n        return this._isVertical;\n    }\n\n    /**\n     * @hidden\n     */\n    public selectedIndexes: number[] = [];\n\n    protected buttonClickNotifier$ = new Subject<void>();\n    protected queryListNotifier$ = new Subject<void>();\n\n    private _isVertical: boolean;\n    private _itemContentCssClass: string;\n    private _disabled = false;\n    private _selectionMode: 'single' | 'singleRequired' | 'multi' = 'single';\n\n    private mutationObserver: MutationObserver;\n    private observerConfig: MutationObserverInit = {\n      attributeFilter: [\"data-selected\"],\n      childList: true,\n      subtree: true,\n    };\n\n    constructor(\n        private _cdr: ChangeDetectorRef,\n        private _renderer: Renderer2,\n        private _el: ElementRef\n    ) {}\n\n    /**\n     * Gets the selected button/buttons.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let selectedButton = this.buttonG.selectedButtons;\n     * }\n     * ```\n     */\n    public get selectedButtons(): IgxButtonDirective[] {\n        return this.buttons.filter((_, i) => this.selectedIndexes.indexOf(i) !== -1);\n    }\n\n    /**\n     * Selects a button by its index.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    this.buttonG.selectButton(2);\n     *    this.cdr.detectChanges();\n     * }\n     * ```\n     *\n     * @memberOf {@link IgxButtonGroupComponent}\n     */\n    public selectButton(index: number) {\n        if (index >= this.buttons.length || index < 0) {\n            return;\n        }\n\n        const button = this.buttons[index];\n        button.select();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public updateSelected(index: number) {\n        const button = this.buttons[index];\n\n        if (this.selectedIndexes.indexOf(index) === -1) {\n            this.selectedIndexes.push(index);\n        }\n\n        this._renderer.setAttribute(button.nativeElement, 'aria-pressed', 'true');\n        this._renderer.addClass(button.nativeElement, 'igx-button-group__item--selected');\n\n        const indexInViewButtons = this.viewButtons.toArray().indexOf(button);\n        if (indexInViewButtons !== -1) {\n            this.values[indexInViewButtons].selected = true;\n        }\n\n        // deselect other buttons if selectionMode is not multi\n        if (this.selectionMode !== 'multi' && this.selectedIndexes.length > 1) {\n            this.buttons.forEach((_, i) => {\n                if (i !== index && this.selectedIndexes.indexOf(i) !== -1) {\n                    this.deselectButton(i);\n                    this.updateDeselected(i);\n                }\n            });\n        }\n\n    }\n\n    public updateDeselected(index: number) {\n        const button = this.buttons[index];\n        if (this.selectedIndexes.indexOf(index) !== -1) {\n            this.selectedIndexes.splice(this.selectedIndexes.indexOf(index), 1);\n        }\n\n        this._renderer.setAttribute(button.nativeElement, 'aria-pressed', 'false');\n        this._renderer.removeClass(button.nativeElement, 'igx-button-group__item--selected');\n\n        const indexInViewButtons = this.viewButtons.toArray().indexOf(button);\n        if (indexInViewButtons !== -1) {\n            this.values[indexInViewButtons].selected = false;\n        }\n    }\n\n    /**\n     * Deselects a button by its index.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    this.buttonG.deselectButton(2);\n     *    this.cdr.detectChanges();\n     * }\n     * ```\n     *\n     * @memberOf {@link IgxButtonGroupComponent}\n     */\n    public deselectButton(index: number) {\n        if (index >= this.buttons.length || index < 0) {\n            return;\n        }\n\n        const button = this.buttons[index];\n        button.deselect();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        const initButtons = () => {\n            // Cancel any existing buttonClick subscriptions\n            this.buttonClickNotifier$.next();\n\n            this.selectedIndexes.splice(0, this.selectedIndexes.length);\n\n            // initial configuration\n            this.buttons.forEach((button, index) => {\n                const buttonElement = button.nativeElement;\n                this._renderer.addClass(buttonElement, 'igx-button-group__item');\n\n                if (this.disabled) {\n                    button.disabled = true;\n                }\n\n                if (button.selected) {\n                    this.updateSelected(index);\n                }\n\n                button.buttonClick.pipe(takeUntil(this.buttonClickNotifier$)).subscribe((_) => this._clickHandler(index));\n            });\n        };\n\n        this.mutationObserver = this.setMutationsObserver();\n\n        this.viewButtons.changes.pipe(takeUntil(this.queryListNotifier$)).subscribe(() => {\n            this.mutationObserver.disconnect();\n            initButtons();\n            this.mutationObserver?.observe(this._el.nativeElement, this.observerConfig);\n        });\n        this.templateButtons.changes.pipe(takeUntil(this.queryListNotifier$)).subscribe(() => {\n            this.mutationObserver.disconnect();\n            initButtons();\n            this.mutationObserver?.observe(this._el.nativeElement, this.observerConfig);\n        });\n\n        initButtons();\n        this._cdr.detectChanges();\n        this.mutationObserver?.observe(this._el.nativeElement, this.observerConfig);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.buttonClickNotifier$.next();\n        this.buttonClickNotifier$.complete();\n\n        this.queryListNotifier$.next();\n        this.queryListNotifier$.complete();\n\n        this.mutationObserver?.disconnect();\n    }\n\n    /**\n     * @hidden\n     */\n    public _clickHandler(index: number) {\n        const button = this.buttons[index];\n        const args: IButtonGroupEventArgs = { owner: this, button, index };\n\n        if (this.selectionMode !== 'multi') {\n            this.buttons.forEach((b, i) => {\n                if (i !== index && this.selectedIndexes.indexOf(i) !== -1) {\n                    this.deselected.emit({ owner: this, button: b, index: i });\n                }\n            });\n        }\n\n        if (this.selectedIndexes.indexOf(index) === -1) {\n            this.selectButton(index);\n            this.selected.emit(args);\n        } else {\n            if (this.selectionMode !== 'singleRequired') {\n                this.deselectButton(index);\n                this.deselected.emit(args);\n            }\n        }\n    }\n\n    private setMutationsObserver() {\n        if (typeof MutationObserver !== 'undefined') {\n            return new MutationObserver((records, observer) => {\n                // Stop observing while handling changes\n                observer.disconnect();\n\n                const updatedButtons = this.getUpdatedButtons(records);\n\n                if (updatedButtons.length > 0) {\n                    updatedButtons.forEach((button) => {\n                        const index = this.buttons.map((b) => b.nativeElement).indexOf(button);\n\n                        this.updateButtonSelectionState(index);\n                    });\n                }\n\n                // Watch for changes again\n                observer.observe(this._el.nativeElement, this.observerConfig);\n            });\n        }\n    }\n\n    private getUpdatedButtons(records: MutationRecord[]) {\n        const updated: HTMLButtonElement[] = [];\n\n        records\n          .filter((x) => x.type === 'attributes')\n          .reduce((prev, curr) => {\n            prev.push(\n              curr.target as HTMLButtonElement\n            );\n            return prev;\n          }, updated);\n\n        return updated;\n    }\n\n    private updateButtonSelectionState(index: number) {\n        if (this.buttons[index].selected) {\n            this.updateSelected(index);\n        } else {\n            this.updateDeselected(index);\n        }\n    }\n}\n\nexport interface IButtonGroupEventArgs extends IBaseEventArgs {\n    owner: IgxButtonGroupComponent;\n    button: IgxButtonDirective;\n    index: number;\n}\n","<div class=\"igx-button-group\" role=\"group\" [class.igx-button-group--vertical]=\"isVertical\">\n    @for (button of values; track button) {\n        <button\n            type=\"button\"\n            igxButton=\"flat\"\n            [selected]=\"button.selected\"\n            [attr.data-togglable]=\"button.togglable\"\n            [disabled]=\"disabled || button.disabled\"\n            [igxLabel]=\"button.label\"\n            [igxRipple]=\"button.ripple\"\n        >\n            <span class=\"igx-button-group__item-content {{ itemContentCssClass }}\">\n                @if (button.icon) {\n                    <igx-icon>{{button.icon}}</igx-icon>\n                }\n                @if (button.label) {\n                    <span class=\"igx-button-group__button-text\">{{button.label}}</span>\n                }\n            </span>\n        </button>\n    }\n    <ng-content></ng-content>\n</div>\n","import { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxButtonGroupComponent } from './buttonGroup.component';\n\nexport * from './buttonGroup.component';\n\n/* Button group directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_BUTTON_GROUP_DIRECTIVES = [\n    IgxButtonGroupComponent,\n    IgxButtonDirective\n] as const;\n","import { isDate } from \"../../core/utils\";\n\n/* eslint-disable @typescript-eslint/consistent-type-definitions */\nexport type DayParameter = CalendarDay | Date;\n\nexport type CalendarRangeParams = {\n    start: DayParameter;\n    end: DayParameter | number;\n    unit?: DayInterval;\n};\n\ntype CalendarDayParams = {\n    year: number;\n    month: number;\n    date?: number;\n};\n\nexport type DayInterval = \"year\" | \"quarter\" | \"month\" | \"week\" | \"day\";\n\nexport const daysInWeek = 7;\nconst millisecondsInDay = 86400000;\n\nexport function toCalendarDay(date: DayParameter) {\n    return isDate(date) ? CalendarDay.from(date) : date;\n}\n\nfunction checkRollover(original: CalendarDay, modified: CalendarDay) {\n    return original.date !== modified.date\n        ? modified.set({ date: 0 })\n        : modified;\n}\n\nexport class CalendarDay {\n    private _date!: Date;\n\n    /** Constructs and returns the current day. */\n    public static get today() {\n        return CalendarDay.from(new Date());\n    }\n\n    /** Constructs a new CalendarDay instance from a Date object. */\n    public static from(date: Date) {\n        return new CalendarDay({\n            year: date.getFullYear(),\n            month: date.getMonth(),\n            date: date.getDate(),\n        });\n    }\n\n    constructor(args: CalendarDayParams) {\n        this._date = new Date(args.year, args.month, args.date ?? 1);\n    }\n\n    /** Returns a copy of this instance. */\n    public clone() {\n        return CalendarDay.from(this._date);\n    }\n\n    /**\n     * Returns a new instance with values replaced.\n     */\n    public set(args: Partial<CalendarDayParams>) {\n        return new CalendarDay({\n            year: args.year ?? this.year,\n            month: args.month ?? this.month,\n            date: args.date ?? this.date,\n        });\n    }\n\n    public add(unit: DayInterval, value: number) {\n        const result = this.clone();\n        switch (unit) {\n            case \"year\":\n                result._date.setFullYear(result.year + value);\n                return checkRollover(this, result);\n            case \"quarter\":\n                result._date.setMonth(result.month + 3 * value);\n                return checkRollover(this, result);\n            case \"month\":\n                result._date.setMonth(result.month + value);\n                return checkRollover(this, result);\n            case \"week\":\n                result._date.setDate(result.date + 7 * value);\n                return result;\n            case \"day\":\n                result._date.setDate(result.date + value);\n                return result;\n            default:\n                throw new Error(\"Invalid interval\");\n        }\n    }\n\n    /** Returns the day of the week (Sunday = 0). */\n    public get day() {\n        return this._date.getDay();\n    }\n\n    /** Returns the full year. */\n    public get year() {\n        return this._date.getFullYear();\n    }\n\n    /** Returns the month. */\n    public get month() {\n        return this._date.getMonth();\n    }\n\n    /** Returns the date */\n    public get date() {\n        return this._date.getDate();\n    }\n\n    /** Returns the timestamp since epoch in milliseconds. */\n    public get timestamp() {\n        return this._date.getTime();\n    }\n\n    /** Returns the current week number. */\n    public get week() {\n        const firstDay = new CalendarDay({ year: this.year, month: 0 })\n            .timestamp;\n        const currentDay =\n            (this.timestamp - firstDay + millisecondsInDay) / millisecondsInDay;\n        return Math.ceil(currentDay / daysInWeek);\n    }\n\n    /** Returns the underlying native date instance. */\n    public get native() {\n        return new Date(this._date);\n    }\n\n    /**\n     * Whether the current date is a weekend day.\n     *\n     * @remarks\n     * This is naive, since it does not account for locale specifics.\n     */\n    public get weekend() {\n        return this.day < 1 || this.day > 5;\n    }\n\n    public equalTo(value: DayParameter) {\n        return this.timestamp === toCalendarDay(value).timestamp;\n    }\n\n    public greaterThan(value: DayParameter) {\n        return this.timestamp > toCalendarDay(value).timestamp;\n    }\n\n    public lessThan(value: DayParameter) {\n        return this.timestamp < toCalendarDay(value).timestamp;\n    }\n\n    public toString() {\n        return `${this.native}`;\n    }\n}\n","/**\n * This file contains all the directives used by the @link IgxCalendarComponent.\n * Except for the directives which are used for templating the calendar itself\n * you should generally not use them directly.\n *\n * @preferred\n */\nimport {\n    Directive,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Input,\n    InjectionToken,\n    Output,\n    TemplateRef,\n    ElementRef,\n    AfterViewInit,\n    OnDestroy,\n    NgZone\n} from '@angular/core';\nimport { fromEvent, Subject, interval } from 'rxjs';\nimport { takeUntil, debounce, tap } from 'rxjs/operators';\nimport { PlatformUtil } from '../core/utils';\nimport { CalendarDay } from './common/model';\n\nexport const IGX_CALENDAR_VIEW_ITEM =\n    new InjectionToken<IgxCalendarMonthDirective | IgxCalendarYearDirective>('IgxCalendarViewItem');\n\n@Directive()\nexport abstract class IgxCalendarViewBaseDirective {\n    @Input()\n    public value: Date;\n\n    @Input()\n    public date: Date;\n\n    @Input()\n    public showActive = false;\n\n    @Output()\n    public itemSelection = new EventEmitter<Date>();\n\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    constructor(public elementRef: ElementRef) { }\n\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event: MouseEvent) {\n        event.preventDefault();\n        this.itemSelection.emit(this.value);\n    }\n\n    public abstract get isCurrent(): boolean;\n    public abstract get isSelected(): boolean;\n    public abstract get isActive(): boolean;\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxCalendarYear]',\n    providers: [\n        { provide: IGX_CALENDAR_VIEW_ITEM, useExisting: IgxCalendarYearDirective }\n    ],\n    exportAs: 'igxCalendarYear',\n    standalone: true\n})\nexport class IgxCalendarYearDirective extends IgxCalendarViewBaseDirective {\n    @HostBinding('class.igx-calendar-view__item--current')\n    public get isCurrent(): boolean {\n        return CalendarDay.today.year === this.value.getFullYear();\n    }\n\n    @HostBinding('class.igx-calendar-view__item--selected')\n    public get isSelected(): boolean {\n        return this.value.getFullYear() === this.date.getFullYear();\n    }\n\n    @HostBinding('class.igx-calendar-view__item--active')\n    public get isActive(): boolean {\n        return this.isSelected && this.showActive;\n    }\n}\n\n@Directive({\n    selector: '[igxCalendarMonth]',\n    providers: [\n        { provide: IGX_CALENDAR_VIEW_ITEM, useExisting: IgxCalendarMonthDirective }\n    ],\n    exportAs: 'igxCalendarMonth',\n    standalone: true\n})\nexport class IgxCalendarMonthDirective extends IgxCalendarViewBaseDirective {\n    @HostBinding('class.igx-calendar-view__item--current')\n    public get isCurrent(): boolean {\n        const today = CalendarDay.today;\n        const date = CalendarDay.from(this.value);\n        return date.year === today.year && date.month === today.month;\n    }\n\n    @HostBinding('class.igx-calendar-view__item--selected')\n    public get isSelected(): boolean {\n        return (this.value.getFullYear() === this.date.getFullYear() &&\n            this.value.getMonth() === this.date.getMonth()\n        );\n    }\n\n    @HostBinding('class.igx-calendar-view__item--active')\n    public get isActive(): boolean {\n        return this.isSelected && this.showActive;\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxCalendarHeaderTitle]',\n    standalone: true\n})\nexport class IgxCalendarHeaderTitleTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxCalendarHeader]',\n    standalone: true\n})\nexport class IgxCalendarHeaderTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxCalendarSubheader]',\n    standalone: true\n})\nexport class IgxCalendarSubheaderTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxCalendarScrollPage]',\n    standalone: true\n})\nexport class IgxCalendarScrollPageDirective implements AfterViewInit, OnDestroy {\n    /**\n     * A callback function to be invoked when increment/decrement page is triggered.\n     *\n     * @hidden\n     */\n    @Input()\n    public startScroll: (keydown?: boolean) => void;\n\n    /**\n     * A callback function to be invoked when increment/decrement page stops.\n     *\n     * @hidden\n     */\n    @Input()\n    public stopScroll: (event: any) => void;\n\n    /**\n     * @hidden\n     */\n    private destroy$ = new Subject<boolean>();\n\n    constructor(private element: ElementRef, private zone: NgZone, protected platform: PlatformUtil) { }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event: MouseEvent) {\n        event.preventDefault();\n        this.startScroll();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mouseup', ['$event'])\n    public onMouseUp(event: MouseEvent) {\n        this.stopScroll(event);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        fromEvent(this.element.nativeElement, 'keyup').pipe(\n            debounce(() => interval(100)),\n            takeUntil(this.destroy$)\n        ).subscribe((event: KeyboardEvent) => {\n            this.stopScroll(event);\n        });\n\n        this.zone.runOutsideAngular(() => {\n            fromEvent(this.element.nativeElement, 'keydown').pipe(\n                tap((event: KeyboardEvent) => {\n                    if (this.platform.isActivationKey(event)) {\n                        event.preventDefault();\n                        event.stopPropagation();\n                    }\n                }),\n                debounce(() => interval(100)),\n                takeUntil(this.destroy$)\n            ).subscribe((event: KeyboardEvent) => {\n                if (this.platform.isActivationKey(event)) {\n                    this.zone.run(() => this.startScroll(true));\n                }\n            });\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n}\n","import { mkenum } from '../core/utils';\n\n/**\n * Sets the selection type - single, multi or range.\n */\nexport const CalendarSelection = /*@__PURE__*/mkenum({\n    SINGLE: 'single',\n    MULTI: 'multi',\n    RANGE: 'range'\n});\nexport type CalendarSelection = (typeof CalendarSelection)[keyof typeof CalendarSelection];\n\nexport const enum ScrollDirection {\n    PREV = 'prev',\n    NEXT = 'next',\n    NONE = 'none'\n}\n\nexport interface IViewDateChangeEventArgs {\n    previousValue: Date;\n    currentValue: Date;\n}\n\nexport const IgxCalendarView = /*@__PURE__*/mkenum({\n    Month: 'month',\n    Year: 'year',\n    Decade: 'decade'\n});\n\n/**\n * Determines the Calendar active view - days, months or years.\n */\nexport type IgxCalendarView = (typeof IgxCalendarView)[keyof typeof IgxCalendarView];\n\nconst MDAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst FEBRUARY = 1;\n\nexport const range = (start = 0, stop: number, step = 1) => {\n    const res = [];\n    const cur = (stop === undefined) ? 0 : start;\n    const max = (stop === undefined) ? start : stop;\n    for (let i = cur; step < 0 ? i > max : i < max; i += step) {\n        res.push(i);\n    }\n    return res;\n};\n\n/**\n * Returns true for leap years, false for non-leap years.\n *\n * @export\n * @param year\n * @returns\n */\nexport const isLeap = (year: number): boolean => (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0));\n\nexport const weekDay = (year: number, month: number, day: number): number => new Date(year, month, day).getDay();\n\n/**\n * Return weekday and number of days for year, month.\n *\n * @export\n * @param year\n * @param month\n * @returns\n */\nexport const monthRange = (year: number, month: number): number[] => {\n    if ((month < 0) || (month > 11)) {\n        throw new Error('Invalid month specified');\n    }\n    const day = weekDay(year, month, 1);\n    let nDays = MDAYS[month];\n    if ((month === FEBRUARY) && (isLeap(year))) {\n        nDays++;\n    }\n    return [day, nDays];\n};\n\nexport interface IFormattedParts {\n    value: string;\n    literal?: string;\n    combined: string;\n}\n\nexport interface IFormattingOptions {\n    day?: 'numeric' | '2-digit';\n    month?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow';\n    weekday?: 'long' | 'short' | 'narrow';\n    year?: 'numeric' | '2-digit';\n}\n\nexport interface IFormattingViews {\n    day?: boolean;\n    month?: boolean;\n    year?: boolean;\n}\n\nexport enum WEEKDAYS {\n    SUNDAY,\n    MONDAY,\n    TUESDAY,\n    WEDNESDAY,\n    THURSDAY,\n    FRIDAY,\n    SATURDAY\n}\n\nexport class Calendar {\n    public timedelta(date: Date, interval: string, units: number): Date {\n        const ret = new Date(date);\n\n        const checkRollover = () => {\n            if (ret.getDate() !== date.getDate()) {\n                ret.setDate(0);\n            }\n        };\n\n        switch (interval.toLowerCase()) {\n            case 'year':\n                ret.setFullYear(ret.getFullYear() + units);\n                checkRollover();\n                break;\n            case 'quarter':\n                ret.setMonth(ret.getMonth() + 3 * units);\n                checkRollover();\n                break;\n            case 'month':\n                ret.setMonth(ret.getMonth() + units);\n                checkRollover();\n                break;\n            case 'week':\n                ret.setDate(ret.getDate() + 7 * units);\n                break;\n            case 'day':\n                ret.setDate(ret.getDate() + units);\n                break;\n            case 'hour':\n                ret.setTime(ret.getTime() + units * 3600000);\n                break;\n            case 'minute':\n                ret.setTime(ret.getTime() + units * 60000);\n                break;\n            case 'second':\n                ret.setTime(ret.getTime() + units * 1000);\n                break;\n            default:\n                throw new Error('Invalid interval specifier');\n        }\n\n        return ret;\n    }\n}\n","export enum DateRangeType {\n  After,\n  Before,\n  Between,\n  Specific,\n  Weekdays,\n  Weekends,\n}\n\n/* creationType: DateRangeDescriptor */\nexport interface DateRangeDescriptor {\n  type: DateRangeType;\n  dateRange?: Date[];\n}\n\nexport type WeekDays =\n  | 'sunday'\n  | 'monday'\n  | 'tuesday'\n  | 'wednesday'\n  | 'thursday'\n  | 'friday'\n  | 'saturday';\n\nexport interface IgcCalendarBaseEventMap {\n  igcChange: CustomEvent<Date | Date[]>;\n}\n","import {\n    CalendarDay,\n    CalendarRangeParams,\n    DayParameter,\n    daysInWeek,\n    toCalendarDay,\n} from \"./model\";\nimport { DateRangeDescriptor, DateRangeType } from \"./types\";\nimport { first, last, modulo } from \"../../core/utils\";\n\ninterface IFormattedParts {\n    value: string;\n    literal: string;\n    combined: string;\n}\n\nexport function areSameMonth(\n    firstMonth: DayParameter,\n    secondMonth: DayParameter,\n) {\n    const [a, b] = [toCalendarDay(firstMonth), toCalendarDay(secondMonth)];\n    return a.year === b.year && a.month === b.month;\n}\n\nexport function isNextMonth(target: DayParameter, origin: DayParameter) {\n    const [a, b] = [toCalendarDay(target), toCalendarDay(origin)];\n    return a.year === b.year ? a.month > b.month : a.year > b.year;\n}\n\nexport function isPreviousMonth(target: DayParameter, origin: DayParameter) {\n    const [a, b] = [toCalendarDay(target), toCalendarDay(origin)];\n    return a.year === b.year ? a.month < b.month : a.year < b.year;\n}\n\n/** Returns the next date starting from `start` that does not match the `disabled` descriptors */\nexport function getNextActiveDate(\n    start: CalendarDay,\n    disabled: DateRangeDescriptor[] = [],\n) {\n    while (isDateInRanges(start, disabled)) {\n        start = start.add(\"day\", 1);\n    }\n\n    return start;\n}\n\n/** Returns the previous date starting from `start` that does not match the `disabled` descriptors */\nexport function getPreviousActiveDate(\n    start: CalendarDay,\n    disabled: DateRangeDescriptor[] = [],\n) {\n    while (isDateInRanges(start, disabled)) {\n        start = start.add(\"day\", -1);\n    }\n\n    return start;\n}\n\nexport function getClosestActiveDate(\n    start: CalendarDay,\n    delta: number,\n    disabled: DateRangeDescriptor[] = [],\n): CalendarDay {\n    // TODO: implement a more robust logic for max attempts,\n    // i.e. the amount of days to jump between before giving up\n    // currently it will try to find the closest date for a year\n    const maxAttempts = 366;\n    let date = start;\n    let attempts = 0;\n\n    while (attempts < maxAttempts) {\n        date = start.add(\"day\", delta * (attempts + 1));\n\n        if (!isDateInRanges(date, disabled)) {\n            return date;\n        }\n\n        attempts++;\n    }\n\n    return date;\n}\n\n/**\n * Returns a generator yielding day values between `start` and `end` (non-inclusive)\n * by a given `unit` as a step.\n *\n * @remarks\n * By default, `unit` is set to 'day'.\n */\nexport function* calendarRange(options: CalendarRangeParams) {\n    let low = toCalendarDay(options.start);\n    const unit = options.unit ?? \"day\";\n    const high =\n        typeof options.end === \"number\"\n            ? low.add(unit, options.end)\n            : toCalendarDay(options.end);\n\n    const reverse = high.lessThan(low);\n    const step = reverse ? -1 : 1;\n\n    while (!reverse ? low.lessThan(high) : low.greaterThan(high)) {\n        yield low;\n        low = low.add(unit, step);\n    }\n}\n\nexport function* generateMonth(value: DayParameter, firstWeekDay: number) {\n    const { year, month } = toCalendarDay(value);\n\n    const start = new CalendarDay({ year, month });\n    const offset = modulo(start.day - firstWeekDay, daysInWeek);\n    yield* calendarRange({\n        start: start.add(\"day\", -offset),\n        end: 42,\n    });\n}\n\nexport function getYearRange(current: DayParameter, range: number) {\n    const year = toCalendarDay(current).year;\n    const start = Math.floor(year / range) * range;\n    return { start, end: start + range - 1 };\n}\n\nexport function isDateInRanges(\n    date: DayParameter,\n    ranges: DateRangeDescriptor[],\n) {\n    const value = toCalendarDay(date);\n\n    return ranges.some((range) => {\n        const days = (range.dateRange ?? []).map((day) => toCalendarDay(day));\n\n        switch (range.type) {\n            case DateRangeType.After:\n                return value.greaterThan(first(days));\n\n            case DateRangeType.Before:\n                return value.lessThan(first(days));\n\n            case DateRangeType.Between: {\n                const min = Math.min(\n                    first(days).timestamp,\n                    last(days).timestamp,\n                );\n                const max = Math.max(\n                    first(days).timestamp,\n                    last(days).timestamp,\n                );\n                return value.timestamp >= min && value.timestamp <= max;\n            }\n\n            case DateRangeType.Specific:\n                return days.some((day) => day.equalTo(value));\n\n            case DateRangeType.Weekdays:\n                return !value.weekend;\n\n            case DateRangeType.Weekends:\n                return value.weekend;\n\n            default:\n                return false;\n        }\n    });\n}\n\nexport function formatToParts(\n    date: Date,\n    locale: string,\n    options: Intl.DateTimeFormatOptions,\n    parts: string[],\n): Record<string, any> {\n    const formatter = new Intl.DateTimeFormat(locale, options);\n    const result: Record<string, any> = {\n        date,\n        full: formatter.format(date),\n    };\n\n    const getFormattedPart = (\n        formattedParts: Intl.DateTimeFormatPart[],\n        partType: string,\n    ): IFormattedParts => {\n        const part = formattedParts.find(({ type }) => type === partType);\n        const nextPart = formattedParts[formattedParts.indexOf(part) + 1];\n        const value = part?.value || \"\";\n        const literal = nextPart?.type === \"literal\" ? nextPart.value : \"\";\n        return {\n            value,\n            literal,\n            combined: value + literal,\n        };\n    };\n\n    if (\"formatToParts\" in formatter) {\n        const formattedParts = formatter.formatToParts(date);\n        parts.forEach(\n            (part) => (result[part] = getFormattedPart(formattedParts, part)),\n        );\n    } else {\n        parts.forEach(\n            (part) => (result[part] = { value: \"\", literal: \"\", combined: \"\" }),\n        );\n    }\n\n    return result;\n}\n","export interface DateRangeDescriptor {\n    type: DateRangeType;\n    dateRange?: Date[];\n}\n\nexport enum DateRangeType {\n    After,\n    Before,\n    Between,\n    Specific,\n    Weekdays,\n    Weekends\n}\n","import {\n    Output,\n    EventEmitter,\n    Input,\n    HostListener,\n    ViewChildren,\n    QueryList,\n    booleanAttribute,\n    Directive,\n    HostBinding,\n    InjectionToken,\n    Inject,\n} from \"@angular/core\";\nimport { noop } from \"rxjs\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport {\n    IGX_CALENDAR_VIEW_ITEM,\n    IgxCalendarMonthDirective,\n    IgxCalendarYearDirective,\n} from \"../calendar.directives\";\nimport { CalendarDay, DayInterval } from \"../common/model\";\nimport { getNextActiveDate, isDateInRanges } from \"./helpers\";\nimport { DateRangeType } from \"../../core/dates\";\nimport { isDate } from \"../../core/utils\";\n\nexport enum Direction {\n    NEXT = 1,\n    PREV = -1,\n}\n\nexport const DAY_INTERVAL_TOKEN = new InjectionToken<DayInterval>(\n    \"DAY_INTERVAL\",\n);\n\n@Directive({\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxCalendarViewDirective,\n            multi: true,\n        },\n    ],\n    standalone: true,\n})\nexport abstract class IgxCalendarViewDirective implements ControlValueAccessor {\n    @HostBinding(\"attr.role\")\n    @Input()\n    public role = 'grid';\n\n    @HostBinding(\"attr.tabIndex\")\n    @Input()\n    public tabIndex = 0;\n\n    @HostBinding('attr.aria-activeDescendant')\n    protected get activeDescendant() {\n        if (this.tabIndex === -1) return;\n\n        return this.date.getTime();\n    }\n\n    /**\n     * Gets/sets whether the view should be rendered\n     * according to the locale and format, if any.\n     */\n    @Input({ transform: booleanAttribute })\n    public formatView: boolean;\n\n    /**\n     * Applies styles to the active item on view focus.\n     */\n    @Input({ transform: booleanAttribute })\n    public showActive = false;\n\n    /**\n     * Emits an event when a selection is made in the view.\n     * Provides reference the `date` property in the component.\n     * @memberof IgxCalendarViewDirective\n     */\n    @Output()\n    public selected = new EventEmitter<Date>();\n\n    /**\n     * Emits an event when a page changes in the view.\n     * Provides reference the `date` property in the component.\n     * @memberof IgxCalendarViewDirective\n     * @hidden @internal\n     */\n    @Output()\n    public pageChanged = new EventEmitter<Date>();\n\n    /**\n     * Emits an event when the active date has changed.\n     * @memberof IgxCalendarViewDirective\n     * @hidden @internal\n     */\n    @Output()\n    public activeDateChanged = new EventEmitter<Date>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChildren(IGX_CALENDAR_VIEW_ITEM, { read: IGX_CALENDAR_VIEW_ITEM })\n    public viewItems: QueryList<\n        IgxCalendarMonthDirective | IgxCalendarYearDirective\n    >;\n\n    /**\n     * @hidden\n     */\n    protected _formatter: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected _locale = \"en\";\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _date = new Date();\n\n    /**\n     * @hidden\n     */\n    protected _onTouchedCallback: () => void = noop;\n\n    /**\n     * @hidden\n     */\n    protected _onChangeCallback: (_: Date) => void = noop;\n\n    /**\n     * Gets/sets the selected date of the view.\n     * By default it's the current date.\n     * ```typescript\n     * let date = this.view.date;\n     * ```\n     *\n     * @memberof IgxYearsViewComponent\n     */\n    @Input()\n    public set date(value: Date) {\n        if (!isDate(value)) return;\n\n        this._date = value;\n    }\n\n    public get date() {\n        return this._date;\n    }\n\n    /**\n     * Gets the `locale` of the view.\n     * Default value is `\"en\"`.\n     * ```typescript\n     * let locale = this.view.locale;\n     * ```\n     *\n     * @memberof IgxCalendarViewDirective\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale;\n    }\n\n    /**\n     * Sets the `locale` of the view.\n     * Expects a valid BCP 47 language tag.\n     * Default value is `\"en\"`.\n     *\n     * @memberof IgxCalendarViewDirective\n     */\n    public set locale(value: string) {\n        this._locale = value;\n        this.initFormatter();\n    }\n\n    constructor(@Inject(DAY_INTERVAL_TOKEN) protected dayInterval?: DayInterval) {\n        this.initFormatter();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.arrowdown\", [\"$event\"])\n    public onKeydownArrowDown(event: KeyboardEvent) {\n        this.navigateTo(event, Direction.NEXT, 3);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.arrowup\", [\"$event\"])\n    public onKeydownArrowUp(event: KeyboardEvent) {\n        this.navigateTo(event, Direction.PREV, 3);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.arrowright\", [\"$event\"])\n    public onKeydownArrowRight(event: KeyboardEvent) {\n        this.navigateTo(event, Direction.NEXT, 1);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.arrowleft\", [\"$event\"])\n    public onKeydownArrowLeft(event: KeyboardEvent) {\n        this.navigateTo(event, Direction.PREV, 1);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.home\", [\"$event\"])\n    public onKeydownHome(event: KeyboardEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.date = this.range.at(0);\n        this.activeDateChanged.emit(this.date);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.end\", [\"$event\"])\n    public onKeydownEnd(event: KeyboardEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        this.date = this.range.at(-1);\n        this.activeDateChanged.emit(this.date);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.enter\", [\"$event\"])\n    public onKeydownEnter(event: KeyboardEvent) {\n        event.stopPropagation();\n\n        this.selected.emit(this.date);\n        this._onChangeCallback(this.date);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"focus\")\n    protected handleFocus() {\n        this.showActive = true;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"blur\")\n    protected handleBlur() {\n        this.showActive = false;\n    }\n\n    /**\n     * @hidden\n     */\n    public selectDate(value: Date) {\n        this.date = value;\n\n        this.selected.emit(this.date);\n        this._onChangeCallback(this.date);\n    }\n\n    /**\n     * @hidden\n     */\n    public registerOnChange(fn: (v: Date) => void) {\n        this._onChangeCallback = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    public registerOnTouched(fn: () => void) {\n        this._onTouchedCallback = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    public writeValue(value: Date) {\n        if (value) {\n            this.date = value;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected navigateTo(\n        event: KeyboardEvent,\n        direction: Direction,\n        delta: number,\n    ) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const date = getNextActiveDate(\n            CalendarDay.from(this.date).add(this.dayInterval, direction * delta),\n            [],\n        );\n\n        const outOfRange = !isDateInRanges(date, [\n            {\n                type: DateRangeType.Between,\n                dateRange: [this.range.at(0), this.range.at(-1)],\n            },\n        ]);\n\n        if (outOfRange) {\n            this.pageChanged.emit(date.native);\n        }\n\n        this.date = date.native;\n        this.activeDateChanged.emit(this.date);\n    }\n\n    /**\n     * @hidden\n     */\n    protected abstract initFormatter(): void;\n\n    /**\n     * @hidden\n     */\n    protected abstract get range(): Date[];\n}\n","import {\n    Component,\n    Input,\n    HostBinding,\n    ElementRef,\n    booleanAttribute,\n    Inject,\n} from \"@angular/core\";\nimport { IgxCalendarMonthDirective } from \"../calendar.directives\";\nimport { TitleCasePipe } from \"@angular/common\";\nimport {\n    IgxCalendarViewDirective,\n    DAY_INTERVAL_TOKEN,\n} from \"../common/calendar-view.directive\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { CalendarDay } from \"../common/model\";\nimport type { DayInterval } from \"../common/model\";\nimport { calendarRange } from \"../common/helpers\";\n\nlet NEXT_ID = 0;\n\n@Component({\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxMonthsViewComponent,\n            multi: true,\n        },\n        {\n            provide: DAY_INTERVAL_TOKEN,\n            useValue: \"month\",\n        },\n    ],\n    selector: \"igx-months-view\",\n    templateUrl: \"months-view.component.html\",\n    imports: [IgxCalendarMonthDirective, TitleCasePipe]\n})\nexport class IgxMonthsViewComponent extends IgxCalendarViewDirective implements ControlValueAccessor {\n    #standalone = true;\n\n    /**\n     * Sets/gets the `id` of the months view.\n     * If not set, the `id` will have value `\"igx-months-view-0\"`.\n     * ```html\n     * <igx-months-view id=\"my-months-view\"></igx-months-view>\n     * ```\n     * ```typescript\n     * let monthsViewId =  this.monthsView.id;\n     * ```\n     *\n     * @memberof IgxMonthsViewComponent\n     */\n    @HostBinding(\"attr.id\")\n    @Input()\n    public id = `igx-months-view-${NEXT_ID++}`;\n\n    /**\n     * The default css class applied to the component.\n     *\n     * @hidden\n     */\n    @HostBinding(\"class.igx-calendar-view\")\n    public readonly viewClass = true;\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    @HostBinding(\"class.igx-calendar-view--standalone\")\n    public get standalone() {\n        return this.#standalone;\n    }\n\n    public set standalone(value: boolean) {\n        this.#standalone = value;\n    }\n\n    /**\n     * Gets the month format option of the months view.\n     * ```typescript\n     * let monthFormat = this.monthsView.monthFormat.\n     * ```\n     */\n    @Input()\n    public get monthFormat(): any {\n        return this._monthFormat;\n    }\n\n    /**\n     * Sets the month format option of the months view.\n     * ```html\n     * <igx-months-view> [monthFormat]=\"short'\"</igx-months-view>\n     * ```\n     *\n     * @memberof IgxMonthsViewComponent\n     */\n    public set monthFormat(value: any) {\n        this._monthFormat = value;\n        this.initFormatter();\n    }\n\n    /**\n     * Gets/sets whether the view should be rendered\n     * according to the locale and format, if any.\n     */\n    @Input({ transform: booleanAttribute })\n    public override formatView = true;\n\n    /**\n     * Returns an array of date objects which are then used to\n     * properly render the month names.\n     *\n     * Used in the template of the component\n     *\n     * @hidden @internal\n     */\n    public get range(): Date[] {\n        const start = CalendarDay.from(this.date).set({ date: 1, month: 0 });\n        const end = start.add(this.dayInterval, 12);\n\n        return Array.from(\n            calendarRange({ start, end, unit: this.dayInterval }),\n        ).map((m) => m.native);\n    }\n\n    /**\n     * @hidden\n     */\n    private _monthFormat = \"short\";\n\n    constructor(\n        public el: ElementRef,\n        @Inject(DAY_INTERVAL_TOKEN) dayInterval: DayInterval,\n    ) {\n        super(dayInterval);\n    }\n\n    /**\n     * @hidden\n     */\n    protected onMouseDown() {\n        if (this.tabIndex !== -1) {\n            this.el.nativeElement.focus();\n        }\n    }\n\n    /**\n     * Returns the locale representation of the month in the months view.\n     *\n     * @hidden\n     */\n    public formattedMonth(value: Date): { long: string; formatted: string } {\n        const rawFormatter = new Intl.DateTimeFormat(this.locale, {\n            month: \"long\",\n            year: \"numeric\",\n        });\n\n        if (this.formatView) {\n            return {\n                long: rawFormatter.format(value),\n                formatted: this._formatter.format(value),\n            };\n        }\n\n        return {\n            long: rawFormatter.format(value),\n            formatted: `${value.getMonth()}`,\n        };\n    }\n\n    /**\n     * @hidden\n     */\n    public monthTracker(_: number, item: Date): string {\n        return `${item.getMonth()}}`;\n    }\n\n    /**\n     * @hidden\n     */\n    protected initFormatter() {\n        this._formatter = new Intl.DateTimeFormat(this._locale, {\n            month: this.monthFormat,\n        });\n    }\n}\n","<div class=\"igx-calendar-view__items\" role=\"row\">\n    @for (month of range; track monthTracker($index, month)) {\n        <span\n            igxCalendarMonth\n            #item=\"igxCalendarMonth\"\n            class=\"igx-calendar-view__item\"\n            role=\"gridcell\"\n            [attr.id]=\"month.getTime()\"\n            [attr.aria-label]=\"formattedMonth(month).long\"\n            [attr.aria-selected]=\"item.isSelected\"\n            [value]=\"month\"\n            [date]=\"date\"\n            [showActive]=\"showActive\"\n            (itemSelection)=\"selectDate($event)\"\n            (mousedown)=\"onMouseDown()\"\n        >\n            <span class=\"igx-calendar-view__item-inner\" aria-hidden=\"true\">\n                {{ formattedMonth(month).formatted | titlecase }}\n            </span>\n        </span>\n    }\n</div>\n","import {\n    Component,\n    Input,\n    HostBinding,\n    ElementRef,\n    Inject,\n} from \"@angular/core\";\nimport { IgxCalendarYearDirective } from \"../calendar.directives\";\nimport {\n    IgxCalendarViewDirective,\n    DAY_INTERVAL_TOKEN,\n} from \"../common/calendar-view.directive\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { CalendarDay } from \"../common/model\";\nimport type { DayInterval } from \"../common/model\";\nimport { calendarRange } from \"../common/helpers\";\n\n@Component({\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxYearsViewComponent,\n            multi: true,\n        },\n        {\n            provide: DAY_INTERVAL_TOKEN,\n            useValue: \"year\",\n        },\n    ],\n    selector: \"igx-years-view\",\n    templateUrl: \"years-view.component.html\",\n    imports: [IgxCalendarYearDirective]\n})\nexport class IgxYearsViewComponent extends IgxCalendarViewDirective implements ControlValueAccessor {\n    #standalone = true;\n\n    /**\n     * The default css class applied to the component.\n     *\n     * @hidden\n     */\n    @HostBinding(\"class.igx-calendar-view\")\n    public readonly viewClass = true;\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n\t@HostBinding('class.igx-calendar-view--standalone')\n\tpublic get standalone() {\n        return this.#standalone;\n    }\n\n\tpublic set standalone(value: boolean) {\n        this.#standalone = value;\n    }\n\n    /**\n     * @hidden\n     */\n    private _yearFormat = \"numeric\";\n\n    /**\n     * @hidden\n     */\n    private _yearsPerPage = 15;\n\n    /**\n     * Gets the year format option of the years view.\n     * ```typescript\n     * let yearFormat = this.yearsView.yearFormat.\n     * ```\n     */\n    @Input()\n    public get yearFormat(): any {\n        return this._yearFormat;\n    }\n\n    /**\n     * Sets the year format option of the years view.\n     * ```html\n     * <igx-years-view [yearFormat]=\"numeric\"></igx-years-view>\n     * ```\n     *\n     * @memberof IgxYearsViewComponent\n     */\n    public set yearFormat(value: any) {\n        this._yearFormat = value;\n        this.initFormatter();\n    }\n\n    /**\n     * Returns an array of date objects which are then used to properly\n     * render the years.\n     *\n     * Used in the template of the component.\n     *\n     * @hidden @internal\n     */\n    public get range(): Date[] {\n        const year = this.date.getFullYear();\n        const start = new CalendarDay({\n            year: Math.floor(year / this._yearsPerPage) * this._yearsPerPage,\n            month: this.date.getMonth(),\n        });\n        const end = start.add(this.dayInterval, this._yearsPerPage);\n\n        return Array.from(calendarRange({ start, end, unit: this.dayInterval })).map(\n            (m) => m.native,\n        );\n    }\n\n    constructor(\n        public el: ElementRef,\n        @Inject(DAY_INTERVAL_TOKEN) dayInterval: DayInterval,\n    ) {\n        super(dayInterval);\n    }\n\n    /**\n     * Returns the locale representation of the year in the years view.\n     *\n     * @hidden\n     */\n    public formattedYear(value: Date): {long: string, formatted: string} {\n        const rawFormatter = new Intl.DateTimeFormat(this.locale, { year: 'numeric' });\n\n        if (this.formatView) {\n            return {\n                long: rawFormatter.format(value),\n                formatted: this._formatter.format(value)\n            }\n        }\n\n        return {\n            long: rawFormatter.format(value),\n            formatted: `${value.getFullYear()}`\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public yearTracker(_: number, item: Date): string {\n        return `${item.getFullYear()}}`;\n    }\n\n    /**\n     * @hidden\n     */\n    protected initFormatter() {\n        this._formatter = new Intl.DateTimeFormat(this._locale, {\n            year: this.yearFormat,\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    protected onMouseDown() {\n        if (this.tabIndex !== -1) {\n            this.el.nativeElement.focus();\n        }\n    }\n}\n","<div class=\"igx-calendar-view__items\" role=\"row\">\n    @for (year of range; track yearTracker($index, year)) {\n        <span\n            igxCalendarYear\n            #item=\"igxCalendarYear\"\n            class=\"igx-calendar-view__item\"\n            role=\"gridcell\"\n            [attr.id]=\"year.getTime()\"\n            [attr.aria-label]=\"formattedYear(year).long\"\n            [attr.aria-selected]=\"item.isSelected\"\n            [attr.aria-current]=\"item.isCurrent\"\n            [value]=\"year\"\n            [date]=\"date\"\n            [showActive]=\"showActive\"\n            (itemSelection)=\"selectDate($event)\"\n            (mousedown)=\"onMouseDown()\"\n        >\n            <span class=\"igx-calendar-view__item-inner\" aria-hidden=\"true\">\n                {{ formattedYear(year).formatted }}\n            </span>\n        </span>\n    }\n</div>\n","import { Component, Input, Output, EventEmitter, HostBinding, ElementRef, booleanAttribute, ChangeDetectionStrategy } from '@angular/core';\nimport { CalendarSelection } from '../calendar';\nimport { DateRangeDescriptor } from '../../core/dates';\nimport { CalendarDay } from '../common/model'\nimport { areSameMonth, isNextMonth, isPreviousMonth, isDateInRanges } from '../common/helpers';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-day-item',\n    templateUrl: 'day-item.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true\n})\nexport class IgxDayItemComponent {\n    @Input()\n    public date: CalendarDay;\n\n    @Input()\n    public viewDate: Date;\n\n    @Input()\n    public selection: string;\n\n    /**\n     * Returns boolean indicating if the day is selected\n     *\n     */\n    @Input()\n    public get selected(): any {\n        return this._selected;\n    }\n\n    /**\n     * Selects the day\n     */\n    public set selected(value: any) {\n        this._selected = value;\n    }\n\n    @Input()\n    public disabledDates: DateRangeDescriptor[];\n\n    @Input()\n    public specialDates: DateRangeDescriptor[];\n\n    @Input({ transform: booleanAttribute })\n    public hideOutsideDays = false;\n\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-days-view__date--last')\n    public isLastInRange = false;\n\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-days-view__date--first')\n    public isFirstInRange = false;\n\n    @Input({ transform: booleanAttribute })\n    public isWithinRange = false;\n\n    @Input({ transform: booleanAttribute })\n    public isWithinPreviewRange = false;\n\n    @Input({ transform: booleanAttribute })\n    public hideLeadingDays = false;\n\n    @Input({ transform: booleanAttribute })\n    public hideTrailingDays = false;\n\n    private get hideLeading() {\n        return this.hideLeadingDays && this.isPreviousMonth;\n    }\n\n    private get hideTrailing() {\n        return this.hideTrailingDays && this.isNextMonth;\n    }\n\n    @Output()\n    public dateSelection = new EventEmitter<CalendarDay>();\n\n    @Output()\n    public mouseEnter = new EventEmitter<void>();\n\n    @Output()\n    public mouseLeave = new EventEmitter<void>();\n\n    @Output()\n    public mouseDown = new EventEmitter<void>();\n\n    public get isCurrentMonth(): boolean {\n        return areSameMonth(this.date, this.viewDate);\n    }\n\n    public get isPreviousMonth(): boolean {\n        return isPreviousMonth(this.date, this.viewDate);\n    }\n\n    public get isNextMonth(): boolean {\n        return isNextMonth(this.date, this.viewDate);\n    }\n\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-days-view__date--active')\n    public isActive = false;\n\n    @HostBinding('class.igx-days-view__date--selected')\n    public get isSelectedCSS(): boolean {\n    const selectable =\n        !this.isInactive || this.isWithinPreviewRange ||\n        (this.isWithinRange && this.selection === \"range\");\n    return !this.isDisabled && selectable && this.selected;\n    }\n\n    @HostBinding('class.igx-days-view__date--inactive')\n    public get isInactive(): boolean {\n        return !this.isCurrentMonth;\n    }\n\n    @HostBinding('class.igx-days-view__date--hidden')\n    public get isHidden(): boolean {\n        return (this.hideLeading || this.hideTrailing) && this.isInactive;\n    }\n\n    @HostBinding('class.igx-days-view__date--current')\n    public get isToday(): boolean {\n        return !this.isInactive && this.date.equalTo(CalendarDay.today);\n    }\n\n    @HostBinding('class.igx-days-view__date--weekend')\n    public get isWeekend(): boolean {\n        return this.date.weekend;\n    }\n\n    public get isDisabled(): boolean {\n        if (!this.disabledDates) {\n            return false;\n        }\n\n        return isDateInRanges(this.date, this.disabledDates);\n    }\n\n    public get isFocusable(): boolean {\n        return this.isCurrentMonth && !this.isHidden && !this.isDisabled;\n    }\n\n    protected onMouseEnter() {\n        this.mouseEnter.emit();\n    }\n\n    protected onMouseLeave() {\n        this.mouseLeave.emit();\n    }\n\n    protected onMouseDown(event: MouseEvent) {\n        event.preventDefault();\n        this.mouseDown.emit();\n    }\n\n    @HostBinding('class.igx-days-view__date--range')\n    public get isWithinRangeCSS(): boolean {\n        return !this.isSingleSelection && this.isWithinRange;\n    }\n\n    @HostBinding('class.igx-days-view__date--range-preview')\n    public get isWithinPreviewRangeCSS(): boolean {\n        return !this.isSingleSelection && this.isWithinPreviewRange;\n    }\n\n    @HostBinding('class.igx-days-view__date--special')\n    public get isSpecial(): boolean {\n        if (!this.specialDates) {\n            return false;\n        }\n\n        return !this.isInactive && isDateInRanges(this.date, this.specialDates);\n    }\n\n    @HostBinding('class.igx-days-view__date--disabled')\n    public get isDisabledCSS(): boolean {\n        return this.isHidden || this.isDisabled;\n    }\n\n    @HostBinding('class.igx-days-view__date--single')\n    public get isSingleSelection(): boolean {\n        return this.selection !== CalendarSelection.RANGE;\n    }\n\n    private _selected = false;\n\n    constructor(private elementRef: ElementRef) { }\n}\n","<span\n    aria-hidden=\"true\"\n    class=\"igx-days-view__date-inner\"\n    (mouseenter)=\"onMouseEnter()\"\n    (mouseleave)=\"onMouseLeave()\"\n    (mousedown)=\"onMouseDown($event)\"\n>\n    <ng-content></ng-content>\n</span>\n","export interface ICalendarResourceStrings {\n igx_calendar_previous_month?: string;\n igx_calendar_next_month?: string;\n igx_calendar_previous_year?: string;\n igx_calendar_next_year?: string;\n igx_calendar_previous_years?: string;\n igx_calendar_next_years?: string;\n igx_calendar_select_date?: string;\n igx_calendar_select_month?: string;\n igx_calendar_select_year?: string;\n igx_calendar_range_start?: string;\n igx_calendar_range_end?: string;\n igx_calendar_range_label_start?: string;\n igx_calendar_range_label_end?: string;\n igx_calendar_range_placeholder?: string;\n igx_calendar_selected_month_is?: string;\n igx_calendar_first_picker_of?: string;\n igx_calendar_multi_selection?: string;\n igx_calendar_range_selection?: string;\n igx_calendar_single_selection?: string;\n igx_calendar_singular_multi_selection?: string;\n igx_calendar_singular_range_selection?: string;\n igx_calendar_singular_single_selection?: string;\n}\n\nexport const CalendarResourceStringsEN: ICalendarResourceStrings = {\n igx_calendar_previous_month: 'Previous Month',\n igx_calendar_next_month: 'Next Month',\n igx_calendar_previous_year: 'Previous Year',\n igx_calendar_next_year: 'Next Year',\n igx_calendar_previous_years: 'Previous {0} Years',\n igx_calendar_next_years: 'Next {0} Years',\n igx_calendar_select_date: 'Select Date',\n igx_calendar_select_month: 'Select Month',\n igx_calendar_select_year: 'Select Year',\n igx_calendar_range_start: 'Range start',\n igx_calendar_range_end: 'Range end',\n igx_calendar_range_label_start: 'Start',\n igx_calendar_range_label_end: 'End',\n igx_calendar_range_placeholder: 'Select Range',\n igx_calendar_selected_month_is: 'Selected month is ',\n igx_calendar_first_picker_of: 'First picker of {0} starts from',\n igx_calendar_multi_selection: 'Multi selection calendar with {0} date pickers',\n igx_calendar_range_selection: 'Range selection calendar with {0} date pickers',\n igx_calendar_single_selection: 'Calendar with {0} date pickers',\n igx_calendar_singular_multi_selection: 'Multi selection calendar',\n igx_calendar_singular_range_selection: 'Range selection calendar',\n igx_calendar_singular_single_selection: 'Calendar',\n};\n","import { Injectable, ElementRef, NgZone } from \"@angular/core\";\nimport { EventManager } from \"@angular/platform-browser\";\n\n@Injectable()\nexport class KeyboardNavigationService {\n    private keyHandlers = new Map<string, (event: KeyboardEvent) => void>();\n    private eventUnsubscribeFn: Function | null = null;\n\n    constructor(\n        private eventManager: EventManager,\n        private ngZone: NgZone,\n    ) {}\n\n    public attachKeyboardHandlers(elementRef: ElementRef, context: any) {\n        this.detachKeyboardHandlers(); // Clean up any existing listeners\n\n        this.ngZone.runOutsideAngular(() => {\n            this.eventUnsubscribeFn = this.eventManager.addEventListener(\n                elementRef.nativeElement,\n                'keydown',\n                (event: KeyboardEvent) => {\n                    const handler = this.keyHandlers.get(event.key);\n\n                    if (handler) {\n                        this.ngZone.run(handler.bind(context, event));\n                    }\n                }\n            );\n        });\n\n        return this;\n    }\n\n    public detachKeyboardHandlers() {\n        if (this.eventUnsubscribeFn) {\n            this.eventUnsubscribeFn();\n            this.eventUnsubscribeFn = null;\n        }\n\n        this.keyHandlers.clear();\n    }\n\n    public set(key : string, handler: (event: KeyboardEvent) => void) {\n        this.keyHandlers.set(key, handler);\n        return this;\n    }\n\n    public unset(key: string) {\n        this.keyHandlers.delete(key);\n        return this;\n    }\n}\n","import { Input, Output, EventEmitter, Directive, Inject, LOCALE_ID, HostListener, booleanAttribute, ViewChildren, QueryList, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { WEEKDAYS, IFormattingOptions, IFormattingViews, IViewDateChangeEventArgs, ScrollDirection, IgxCalendarView, CalendarSelection } from './calendar';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { DateRangeDescriptor } from '../core/dates';\nimport { noop, Subject } from 'rxjs';\nimport { isDate, isEqual, PlatformUtil } from '../core/utils';\nimport { CalendarResourceStringsEN, ICalendarResourceStrings } from '../core/i18n/calendar-resources';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { getLocaleFirstDayOfWeek } from \"@angular/common\";\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { KeyboardNavigationService } from './calendar.services';\nimport { getYearRange, isDateInRanges } from './common/helpers';\nimport { CalendarDay } from './common/model';\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxCalendarBase]',\n    standalone: true,\n    providers: [KeyboardNavigationService]\n})\nexport class IgxCalendarBaseDirective implements ControlValueAccessor {\n    /**\n     * Holds month view index we are operating on.\n     */\n    protected activeViewIdx = 0;\n\n    /**\n     * @hidden\n     */\n    private _activeView: IgxCalendarView = IgxCalendarView.Month;\n\n    /**\n     * @hidden\n     */\n    private activeViewSubject = new Subject<IgxCalendarView>();\n\n    /**\n     * @hidden\n     */\n    protected activeView$ = this.activeViewSubject.asObservable();\n\n    /**\n     * Sets/gets whether the outside dates (dates that are out of the current month) will be hidden.\n     * Default value is `false`.\n     * ```html\n     * <igx-calendar [hideOutsideDays]=\"true\"></igx-calendar>\n     * ```\n     * ```typescript\n     * let hideOutsideDays = this.calendar.hideOutsideDays;\n     * ```\n     */\n\n    @Input({ transform: booleanAttribute })\n    public hideOutsideDays = false;\n\n    /**\n     * Emits an event when a date is selected.\n     * Provides reference the `selectedDates` property.\n     */\n    @Output()\n    public selected = new EventEmitter<Date | Date[]>();\n\n    /**\n     * Emits an event when the month in view is changed.\n     * ```html\n     * <igx-calendar (viewDateChanged)=\"viewDateChanged($event)\"></igx-calendar>\n     * ```\n     * ```typescript\n     * public viewDateChanged(event: IViewDateChangeEventArgs) {\n     *  let viewDate = event.currentValue;\n     * }\n     * ```\n     */\n    @Output()\n    public viewDateChanged = new EventEmitter<IViewDateChangeEventArgs>();\n\n    /**\n     * Emits an event when the active view is changed.\n     * ```html\n     * <igx-calendar (activeViewChanged)=\"activeViewChanged($event)\"></igx-calendar>\n     * ```\n     * ```typescript\n     * public activeViewChanged(event: CalendarView) {\n     *  let activeView = event;\n     * }\n     * ```\n     */\n    @Output()\n    public activeViewChanged = new EventEmitter<IgxCalendarView>();\n\n    /**\n     * @hidden\n     */\n    public rangeStarted = false;\n\n    /**\n     * @hidden\n     */\n    public pageScrollDirection = ScrollDirection.NONE;\n\n    /**\n     * @hidden\n     */\n    public scrollPage$ = new Subject<void>();\n\n    /**\n     * @hidden\n     */\n    public stopPageScroll$ = new Subject<boolean>();\n\n    /**\n     * @hidden\n     */\n    public startPageScroll$ = new Subject<void>();\n\n    /**\n     * @hidden\n     */\n    public selectedDates: Date[];\n\n    /**\n     * @hidden\n     */\n    public shiftKey = false;\n\n    /**\n    * @hidden\n    */\n    public lastSelectedDate: Date;\n\n    /**\n     * @hidden\n     */\n    protected formatterWeekday: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected formatterDay: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected formatterMonth: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected formatterYear: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected formatterMonthday: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected formatterRangeday: Intl.DateTimeFormat;\n\n    /**\n     * @hidden\n     */\n    protected _onTouchedCallback: () => void = noop;\n    /**\n     * @hidden\n     */\n    protected _onChangeCallback: (_: Date | Date[]) => void = noop;\n\n    /**\n      * @hidden\n      */\n    protected _deselectDate: boolean;\n\n    /**\n     * @hidden\n     */\n    private initialSelection: Date | Date[];\n\n    /**\n     * @hidden\n     */\n    private _locale: string;\n\n    /**\n     * @hidden\n     */\n    private _weekStart: WEEKDAYS | number;\n\n    /**\n     * @hidden\n     */\n    private _viewDate: Date;\n\n    /**\n     * @hidden\n     */\n    private _startDate: Date;\n\n    /**\n     * @hidden\n     */\n    private _endDate: Date;\n\n    /**\n     * @hidden\n     */\n    private _disabledDates: DateRangeDescriptor[] = [];\n\n    /**\n     * @hidden\n     */\n    private _specialDates: DateRangeDescriptor[] = [];\n\n    /**\n     * @hidden\n     */\n    private _selection: CalendarSelection | string = CalendarSelection.SINGLE;\n\n    /** @hidden @internal */\n    private _resourceStrings = getCurrentResourceStrings(CalendarResourceStringsEN);\n\n    /**\n     * @hidden\n     */\n    private _formatOptions: IFormattingOptions = {\n        day: 'numeric',\n        month: 'long',\n        weekday: 'narrow',\n        year: 'numeric'\n    };\n\n    /**\n     * @hidden\n     */\n    private _formatViews: IFormattingViews = {\n        day: false,\n        month: true,\n        year: false\n    };\n\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: ICalendarResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): ICalendarResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Gets the start day of the week.\n     * Can return a numeric or an enum representation of the week day.\n     * If not set, defaults to the first day of the week for the application locale.\n     */\n    @Input()\n    public get weekStart(): WEEKDAYS | number {\n        return this._weekStart;\n    }\n\n    /**\n     * Sets the start day of the week.\n     * Can be assigned to a numeric value or to `WEEKDAYS` enum value.\n     */\n    public set weekStart(value: WEEKDAYS | number) {\n        this._weekStart = value;\n    }\n\n    /**\n     * Gets the `locale` of the calendar.\n     * If not set, defaults to application's locale.\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale;\n    }\n\n    /**\n     * Sets the `locale` of the calendar.\n     * Expects a valid BCP 47 language tag.\n     */\n    public set locale(value: string) {\n        this._locale = value;\n\n        // if value is not a valid BCP 47 tag, set it back to _localeId\n        try {\n            getLocaleFirstDayOfWeek(this._locale);\n        } catch (e) {\n            this._locale = this._localeId;\n        }\n\n        // changing locale runtime needs to update the `weekStart` too, if `weekStart` is not explicitly set\n        if (!this.weekStart) {\n            this.weekStart = getLocaleFirstDayOfWeek(this._locale);\n        }\n\n        this.initFormatters();\n    }\n\n    /**\n     * Gets the date format options of the views.\n     */\n    @Input()\n    public get formatOptions(): IFormattingOptions {\n        return this._formatOptions;\n    }\n\n    /**\n     * Sets the date format options of the views.\n     * Default is { day: 'numeric', month: 'short', weekday: 'short', year: 'numeric' }\n     */\n    public set formatOptions(formatOptions: IFormattingOptions) {\n        this._formatOptions = {...this._formatOptions, ...formatOptions};\n        this.initFormatters();\n    }\n\n    /**\n     * Gets whether the `day`, `month` and `year` should be rendered\n     * according to the locale and formatOptions, if any.\n     */\n    @Input()\n    public get formatViews(): IFormattingViews {\n        return this._formatViews;\n    }\n\n    /**\n     * Sets whether the `day`, `month` and `year` should be rendered\n     * according to the locale and formatOptions, if any.\n     */\n    public set formatViews(formatViews: IFormattingViews) {\n        this._formatViews = Object.assign(this._formatViews, formatViews);\n    }\n\n    /**\n     * Gets the current active view.\n     * ```typescript\n     * this.activeView = calendar.activeView;\n     * ```\n     */\n    @Input()\n    public get activeView(): IgxCalendarView {\n        return this._activeView;\n    }\n\n    /**\n     * Sets the current active view.\n     * ```html\n     * <igx-calendar [activeView]=\"year\" #calendar></igx-calendar>\n     * ```\n     * ```typescript\n     * calendar.activeView = IgxCalendarView.YEAR;\n     * ```\n     */\n    public set activeView(val: IgxCalendarView) {\n        this._activeView = val;\n        this.activeViewSubject.next(val);\n    }\n\n    /**\n     * @hidden\n     */\n    public get isDefaultView(): boolean {\n        return this._activeView === IgxCalendarView.Month;\n    }\n\n    /**\n     * @hidden\n     */\n    public get isDecadeView(): boolean {\n        return this._activeView === IgxCalendarView.Decade;\n    }\n\n    /**\n     * @hidden\n     */\n    public activeViewDecade(activeViewIdx = 0): void {\n        this.activeView = IgxCalendarView.Decade;\n        this.activeViewIdx = activeViewIdx;\n    }\n\n    /**\n     * @hidden\n     */\n    public activeViewDecadeKB(event: KeyboardEvent, activeViewIdx = 0) {\n        event.stopPropagation();\n\n        if (this.platform.isActivationKey(event)) {\n            event.preventDefault();\n            this.activeViewDecade(activeViewIdx);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @ViewChildren('yearsBtn')\n    public yearsBtns: QueryList<ElementRef>;\n\n    /**\n     * @hidden @internal\n     */\n    public previousViewDate: Date;\n\n    /**\n     * @hidden\n     */\n    public changeYear(date: Date) {\n        this.previousViewDate = this.viewDate;\n        this.viewDate = CalendarDay.from(date).add('month', -this.activeViewIdx).native;\n        this.activeView = IgxCalendarView.Month;\n    }\n\n    /**\n     * Returns the locale representation of the year in the year view if enabled,\n     * otherwise returns the default `Date.getFullYear()` value.\n     *\n     * @hidden\n     */\n    public formattedYear(value: Date | Date[]): string {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn;\n\t\t}\n\n        if (this.formatViews.year) {\n            return this.formatterYear.format(value);\n        }\n\n\t    return `${value.getFullYear()}`;\n    }\n\n\tpublic formattedYears(value: Date) {\n\t\tconst dates = value as unknown as Date[];\n\t\treturn dates.map(date => this.formattedYear(date)).join(' - ');\n\t}\n\n    protected prevNavLabel(detail?: string): string {\n        switch (this.activeView) {\n            case 'month':\n                return `${this.resourceStrings.igx_calendar_previous_month}, ${detail}`\n            case 'year':\n                return this.resourceStrings.igx_calendar_previous_year.replace('{0}', '15');\n            case 'decade':\n                return this.resourceStrings.igx_calendar_previous_years.replace('{0}', '15');\n        }\n    }\n\n    protected nextNavLabel(detail?: string): string {\n        switch (this.activeView) {\n            case 'month':\n                return `${this.resourceStrings.igx_calendar_next_month}, ${detail}`\n            case 'year':\n                return this.resourceStrings.igx_calendar_next_year.replace('{0}', '15');\n            case 'decade':\n                return this.resourceStrings.igx_calendar_next_years.replace('{0}', '15');\n        }\n    }\n\n\tprotected getDecadeRange(): { start: string; end: string } {\n        const range = getYearRange(this.viewDate, 15);\n        const start = CalendarDay.from(this.viewDate).set({ date: 1, year: range.start });\n        const end = CalendarDay.from(this.viewDate).set({ date: 1, year: range.end });\n\n\t\treturn {\n\t\t\tstart: this.formatterYear.format(start.native),\n\t\t\tend: this.formatterYear.format(end.native)\n\t\t}\n\t}\n    /**\n     *\n     * Gets the selection type.\n     * Default value is `\"single\"`.\n     * Changing the type of selection resets the currently\n     * selected values if any.\n     */\n    @Input()\n    public get selection(): string {\n        return this._selection;\n    }\n\n    /**\n     * Sets the selection.\n     */\n    public set selection(value: string) {\n        switch (value) {\n            case CalendarSelection.SINGLE:\n                this.selectedDates = null;\n                break;\n            case CalendarSelection.MULTI:\n            case CalendarSelection.RANGE:\n                this.selectedDates = [];\n                break;\n            default:\n                throw new Error('Invalid selection value');\n        }\n        this._onChangeCallback(this.selectedDates);\n        this.rangeStarted = false;\n        this._selection = value;\n    }\n\n    /**\n     * Gets the date that is presented. By default it is the current date.\n     */\n    @Input()\n    public get viewDate(): Date {\n        return this._viewDate;\n    }\n\n    /**\n     * Sets the date that will be presented in the default view when the component renders.\n     */\n    public set viewDate(value: Date | string) {\n        if (Array.isArray(value)) {\n            return;\n        }\n\n        if (typeof value === 'string') {\n            value = DateTimeUtil.parseIsoDate(value);\n        }\n\n        const validDate = this.validateDate(value);\n\n        if (this._viewDate) {\n            this.initialSelection = validDate;\n        }\n\n        const date = this.getDateOnly(validDate).setDate(1);\n        this._viewDate = new Date(date);\n    }\n\n    /**\n     * Gets the disabled dates descriptors.\n     */\n    @Input()\n    public get disabledDates(): DateRangeDescriptor[] {\n        return this._disabledDates;\n    }\n\n    /**\n     * Sets the disabled dates' descriptors.\n     * ```typescript\n     * @ViewChild(\"MyCalendar\")\n     * public calendar: IgxCalendarComponent;\n     * ngOnInit(){\n     *    this.calendar.disabledDates = [\n     *     {type: DateRangeType.Between, dateRange: [new Date(\"2020-1-1\"), new Date(\"2020-1-15\")]},\n     *     {type: DateRangeType.Weekends}];\n     * }\n     * ```\n     */\n    public set disabledDates(value: DateRangeDescriptor[]) {\n        this._disabledDates = value;\n    }\n\n    /**\n     * Checks whether a date is disabled.\n     *\n     * @hidden\n     */\n    public isDateDisabled(date: Date | string) {\n        if (!this.disabledDates) {\n            return false;\n        }\n\n        if (typeof date === 'string') {\n            date = DateTimeUtil.parseIsoDate(date);\n        }\n\n        return isDateInRanges(date, this.disabledDates);\n    }\n\n    /**\n     * Gets the special dates descriptors.\n     */\n    @Input()\n    public get specialDates(): DateRangeDescriptor[] {\n        return this._specialDates;\n    }\n\n    /**\n     * Sets the special dates' descriptors.\n     * ```typescript\n     * @ViewChild(\"MyCalendar\")\n     * public calendar: IgxCalendarComponent;\n     * ngOnInit(){\n     *    this.calendar.specialDates = [\n     *     {type: DateRangeType.Between, dateRange: [new Date(\"2020-1-1\"), new Date(\"2020-1-15\")]},\n     *     {type: DateRangeType.Weekends}];\n     * }\n     * ```\n     */\n    public set specialDates(value: DateRangeDescriptor[]) {\n        this._specialDates = value;\n    }\n\n    /**\n     * Gets the selected date(s).\n     *\n     * When selection is set to `single`, it returns\n     * a single `Date` object.\n     * Otherwise it is an array of `Date` objects.\n     */\n    @Input()\n    public get value(): Date | Date[] {\n        if (this.selection === CalendarSelection.SINGLE) {\n            return this.selectedDates?.at(0);\n        }\n\n        return this.selectedDates;\n    }\n\n    /**\n     * Sets the selected date(s).\n     *\n     * When selection is set to `single`, it accepts\n     * a single `Date` object.\n     * Otherwise it is an array of `Date` objects.\n     */\n    public set value(value: Date | Date[] | string) {\n        // Validate the date if it is of type string and it is IsoDate\n        if (typeof value === 'string') {\n            value = DateTimeUtil.parseIsoDate(value);\n        }\n\n        // Check if value is set initially by the user,\n        // if it's not set the initial selection to the current date\n        if (!value || (Array.isArray(value) && value.length === 0)) {\n            this.initialSelection = new Date();\n            return;\n        }\n\n        // Value is provided, but there's no initial selection, set the initial selection to the passed value\n        if (!this.initialSelection) {\n            this.viewDate = Array.isArray(value) ? new Date(Math.min(...value as unknown as number[])) : value;\n        }\n\n        // we then call selectDate with either a single date or an array of dates\n        // we also set the initial selection to the provided value\n        this.selectDate(value);\n        this.initialSelection = value;\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(\n        protected platform: PlatformUtil,\n        @Inject(LOCALE_ID)\n        protected _localeId: string,\n        protected keyboardNavigation?: KeyboardNavigationService,\n        protected cdr?: ChangeDetectorRef,\n    ) {\n        this.locale = _localeId;\n        this.viewDate = this.viewDate ? this.viewDate : new Date();\n        this.initFormatters();\n    }\n\n    /**\n     * Multi/Range selection with shift key\n     *\n     * @hidden\n     * @internal\n     */\n    @HostListener('pointerdown', ['$event'])\n    public onPointerdown(event: MouseEvent) {\n        this.shiftKey = event.button === 0 && event.shiftKey;\n    }\n\n    /**\n     * @hidden\n     */\n    public registerOnChange(fn: (v: Date | Date[]) => void) {\n        this._onChangeCallback = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    public registerOnTouched(fn: () => void) {\n        this._onTouchedCallback = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    public writeValue(value: Date | Date[]) {\n        this.value = value;\n    }\n\n    /**\n     * Selects date(s) (based on the selection type).\n     */\n    public selectDate(value: Date | Date[] | string) {\n        if (typeof value === 'string') {\n            value = DateTimeUtil.parseIsoDate(value);\n        }\n\n        if (value === null || value === undefined || (Array.isArray(value) && value.length === 0)) {\n            return;\n        }\n\n        switch (this.selection) {\n            case CalendarSelection.SINGLE:\n                if (isDate(value) && !this.isDateDisabled(value as Date)) {\n                    this.selectSingle(value as Date);\n                }\n                break;\n            case CalendarSelection.MULTI:\n                this.selectMultiple(value);\n                break;\n            case CalendarSelection.RANGE:\n                this.selectRange(value, true);\n                break;\n        }\n    }\n\n    /**\n     * Deselects date(s) (based on the selection type).\n     */\n    public deselectDate(value?: Date | Date[] | string) {\n        if (!this.selectedDates || this.selectedDates.length === 0) {\n            return;\n        }\n\n        if (typeof value === 'string') {\n            value = DateTimeUtil.parseIsoDate(value);\n        }\n\n        if (value === null || value === undefined) {\n            this.selectedDates = this.selection === CalendarSelection.SINGLE ? null : [];\n            this.rangeStarted = false;\n            this._onChangeCallback(this.selectedDates);\n            return;\n        }\n\n        switch (this.selection) {\n            case CalendarSelection.SINGLE:\n                this.deselectSingle(value as Date);\n                break;\n            case CalendarSelection.MULTI:\n                this.deselectMultiple(value as Date[]);\n                break;\n            case CalendarSelection.RANGE:\n                this.deselectRange(value as Date[]);\n                break;\n        }\n    }\n\n    /**\n     * Performs a single selection.\n     *\n     * @hidden\n     */\n    private selectSingle(value: Date) {\n        if (!isEqual(this.selectedDates?.at(0), value)) {\n            this.selectedDates = [this.getDateOnly(value)];\n            this._onChangeCallback(this.selectedDates.at(0));\n        }\n    }\n\n    /**\n     * Performs a single deselection.\n     *\n     * @hidden\n     */\n    private deselectSingle(value: Date) {\n        if (this.selectedDates !== null &&\n            this.getDateOnlyInMs(value as Date) === this.getDateOnlyInMs(this.selectedDates.at(0))) {\n            this.selectedDates = null;\n            this._onChangeCallback(this.selectedDates);\n        }\n    }\n\n    /**\n     * Performs a multiple selection\n     *\n     * @hidden\n     */\n    private selectMultiple(value: Date | Date[]) {\n        if (Array.isArray(value)) {\n            const newDates = value.map(v => this.getDateOnly(v).getTime());\n            const selDates = this.selectedDates.map(v => this.getDateOnly(v).getTime());\n\n            if (JSON.stringify(newDates) === JSON.stringify(selDates)) {\n                return;\n            }\n\n            if (selDates.length === 0 || selDates.length > newDates.length) {\n                // deselect the dates that are part of currently selectedDates and not part of updated new values\n                this.selectedDates = newDates.map(v => new Date(v));\n            } else {\n                this.selectedDates = Array.from(new Set([...newDates, ...selDates])).map(v => new Date(v));\n            }\n        } else {\n            let newSelection = [];\n\n            if (this.shiftKey && this.lastSelectedDate) {\n\n                [this._startDate, this._endDate] = this.lastSelectedDate.getTime() < value.getTime()\n                    ? [this.lastSelectedDate, value]\n                    : [value, this.lastSelectedDate];\n\n                const unselectedDates = [this._startDate, ...this.generateDateRange(this._startDate, this._endDate)]\n                    .filter(date => !this.isDateDisabled(date)\n                        && this.selectedDates.every((d: Date) => d.getTime() !== date.getTime())\n                    );\n\n                // select all dates from last selected to shift clicked date\n                if (this.selectedDates.some((date: Date) => date.getTime() === this.lastSelectedDate.getTime())\n                    && unselectedDates.length) {\n\n                    newSelection = unselectedDates;\n                } else {\n                    // delesect all dates from last clicked to shift clicked date (excluding)\n                    this.selectedDates = this.selectedDates.filter((date: Date) =>\n                        date.getTime() < this._startDate.getTime() || date.getTime() > this._endDate.getTime()\n                    );\n\n                    this.selectedDates.push(value);\n                    this._deselectDate = true;\n                }\n\n                this._startDate = this._endDate = undefined;\n\n            } else if (this.selectedDates.every((date: Date) => date.getTime() !== value.getTime())) {\n                newSelection.push(value);\n\n            } else {\n                this.selectedDates = this.selectedDates.filter(\n                    (date: Date) => date.getTime() !== value.getTime()\n                );\n\n                this._deselectDate = true;\n            }\n\n            if (newSelection.length > 0) {\n                this.selectedDates = this.selectedDates.concat(newSelection);\n                this._deselectDate = false;\n            }\n\n            this.lastSelectedDate = value;\n        }\n\n        this.selectedDates = this.selectedDates.filter(d => !this.isDateDisabled(d));\n        this.selectedDates.sort((a: Date, b: Date) => a.valueOf() - b.valueOf());\n        this._onChangeCallback(this.selectedDates);\n    }\n\n    /**\n     * Performs a multiple deselection.\n     *\n     * @hidden\n     */\n    private deselectMultiple(value: Date[]) {\n        value = value.filter(v => v !== null);\n        const selectedDatesCount = this.selectedDates.length;\n        const datesInMsToDeselect: Set<number> = new Set<number>(\n            value.map(v => this.getDateOnlyInMs(v)));\n\n        for (let i = this.selectedDates.length - 1; i >= 0; i--) {\n            if (datesInMsToDeselect.has(this.getDateOnlyInMs(this.selectedDates[i]))) {\n                this.selectedDates.splice(i, 1);\n            }\n        }\n\n        if (this.selectedDates.length !== selectedDatesCount) {\n            this._onChangeCallback(this.selectedDates);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    private selectRange(value: Date | Date[], excludeDisabledDates = false) {\n        if (Array.isArray(value)) {\n            value.sort((a: Date, b: Date) => a.valueOf() - b.valueOf());\n            this._startDate = this.getDateOnly(value[0]);\n            this._endDate = this.getDateOnly(value[value.length - 1]);\n        } else {\n\n            if (this.shiftKey && this.lastSelectedDate) {\n\n                if (this.lastSelectedDate.getTime() === value.getTime()) {\n                    this.selectedDates = this.selectedDates.length === 1 ? [] : [value];\n                    this.rangeStarted = !!this.selectedDates.length;\n                    this._onChangeCallback(this.selectedDates);\n                    return;\n                }\n\n                // shortens the range when selecting a date inside of it\n                if (this.selectedDates.some((date: Date) => date.getTime() === value.getTime())) {\n\n                    this.lastSelectedDate.getTime() < value.getTime()\n                        ? this._startDate = value\n                        : this._endDate = value;\n\n                } else {\n                    // extends the range when selecting a date outside of it\n                    // allows selection from last deselected to current selected date\n                    if (this.lastSelectedDate.getTime() < value.getTime()) {\n                        this._startDate = this._startDate ?? this.lastSelectedDate;\n                        this._endDate = value;\n                    } else {\n                        this._startDate = value;\n                        this._endDate = this._endDate ?? this.lastSelectedDate;\n                    }\n                }\n\n                this.rangeStarted = false;\n\n            } else if (!this.rangeStarted) {\n                this.rangeStarted = true;\n                this.selectedDates = [value];\n                this._startDate = this._endDate = undefined;\n            } else {\n                this.rangeStarted = false;\n\n                if (this.selectedDates?.at(0)?.getTime() === value.getTime()) {\n                    this.selectedDates = [];\n                    this._onChangeCallback(this.selectedDates);\n                    return;\n                }\n\n                [this._startDate, this._endDate] = this.lastSelectedDate.getTime() < value.getTime()\n                    ? [this.lastSelectedDate, value]\n                    : [value, this.lastSelectedDate];\n            }\n\n            this.lastSelectedDate = value;\n        }\n\n        if (this._startDate && this._endDate) {\n            this.selectedDates = [this._startDate, ...this.generateDateRange(this._startDate, this._endDate)];\n        }\n\n        if (excludeDisabledDates) {\n            this.selectedDates = this.selectedDates.filter(d => !this.isDateDisabled(d));\n        }\n\n        this._onChangeCallback(this.selectedDates);\n    }\n\n    /**\n     * Performs a range deselection.\n     *\n     * @hidden\n     */\n    private deselectRange(value: Date[]) {\n        value = value.filter(v => v !== null);\n\n        if (value.length < 1) {\n            return;\n        }\n\n        value.sort((a: Date, b: Date) => a.valueOf() - b.valueOf());\n\n        const valueStart = this.getDateOnlyInMs(value[0]);\n        const valueEnd = this.getDateOnlyInMs(value[value.length - 1]);\n\n        this.selectedDates.sort((a: Date, b: Date) => a.valueOf() - b.valueOf());\n\n        const selectedDatesStart = this.getDateOnlyInMs(this.selectedDates[0]);\n        const selectedDatesEnd = this.getDateOnlyInMs(this.selectedDates[this.selectedDates.length - 1]);\n\n        if (!(valueEnd < selectedDatesStart) && !(valueStart > selectedDatesEnd)) {\n            this.selectedDates = [];\n            this.rangeStarted = false;\n            this._onChangeCallback(this.selectedDates);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected initFormatters() {\n        this.formatterDay = new Intl.DateTimeFormat(this._locale, { day: this._formatOptions.day });\n        this.formatterWeekday = new Intl.DateTimeFormat(this._locale, { weekday: this._formatOptions.weekday });\n        this.formatterMonth = new Intl.DateTimeFormat(this._locale, { month: this._formatOptions.month });\n        this.formatterYear = new Intl.DateTimeFormat(this._locale, { year: this._formatOptions.year });\n        this.formatterMonthday = new Intl.DateTimeFormat(this._locale, { month: this._formatOptions.month, day: this._formatOptions.day });\n\t\tthis.formatterRangeday = new Intl.DateTimeFormat(this._locale, { day: this._formatOptions.day, month: 'short' });\n    }\n\n    /**\n     * @hidden\n     */\n    protected getDateOnly(date: Date) {\n        const validDate = this.validateDate(date);\n        return new Date(validDate.getFullYear(), validDate.getMonth(), validDate.getDate());\n    }\n\n    /**\n     * @hidden\n     */\n    private getDateOnlyInMs(date: Date) {\n        return this.getDateOnly(date).getTime();\n    }\n\n    /**\n     * @hidden\n     */\n    private generateDateRange(start: Date, end: Date): Date[] {\n        const result = [];\n        start = this.getDateOnly(start);\n        end = this.getDateOnly(end);\n\n        while (start.getTime() < end.getTime()) {\n            start = CalendarDay.from(start).add('day', 1).native;\n            result.push(start);\n        }\n\n        return result;\n    }\n\n    private validateDate(value: Date) {\n        return DateTimeUtil.isValidDate(value) ? value : new Date();\n    }\n}\n","import {\n    Component,\n    Output,\n    EventEmitter,\n    Input,\n    HostListener,\n    ViewChildren,\n    QueryList,\n    HostBinding,\n    Inject,\n    LOCALE_ID,\n    booleanAttribute,\n    ElementRef,\n    ChangeDetectorRef,\n    ChangeDetectionStrategy,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TitleCasePipe } from '@angular/common';\nimport { CalendarSelection, ScrollDirection } from '../../calendar/calendar';\nimport { IgxDayItemComponent } from './day-item.component';\nimport { DateRangeType } from '../../core/dates';\nimport { IgxCalendarBaseDirective } from '../calendar-base';\nimport { PlatformUtil, intoChunks } from '../../core/utils';\nimport { IViewChangingEventArgs } from './days-view.interface';\nimport {\n    areSameMonth,\n    generateMonth,\n    getClosestActiveDate,\n    getNextActiveDate,\n    getPreviousActiveDate,\n    isDateInRanges,\n} from \"../common/helpers\";\nimport { CalendarDay } from '../common/model';\n\nlet NEXT_ID = 0;\n\n@Component({\n    providers: [\n        {\n            multi: true,\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxDaysViewComponent\n        },\n    ],\n    selector: 'igx-days-view',\n    templateUrl: 'days-view.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [IgxDayItemComponent, TitleCasePipe]\n})\nexport class IgxDaysViewComponent extends IgxCalendarBaseDirective {\n    #standalone = true;\n\n    /**\n     * Sets/gets the `id` of the days view.\n     * If not set, the `id` will have value `\"igx-days-view-0\"`.\n     * ```html\n     * <igx-days-view id=\"my-days-view\"></igx-days-view>\n     * ```\n     * ```typescript\n     * let daysViewId = this.daysView.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-days-view-${NEXT_ID++}`;\n\n    @HostBinding('attr.tabIndex')\n    @Input()\n    public tabIndex = 0;\n\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'grid';\n\n\t@HostBinding('class.igx-days-view')\n\tpublic readonly viewClass = true;\n\n    @Input()\n\t@HostBinding('class.igx-days-view--standalone')\n\tpublic get standalone() {\n        return this.#standalone;\n    }\n\n\tpublic set standalone(value: boolean) {\n        this.#standalone = value;\n    }\n\n    @HostBinding('attr.aria-activeDescendant')\n    protected get activeDescendant() {\n        if (this.tabIndex === -1) return;\n\n        return this.activeDate.getTime();\n    }\n\n    /**\n     * Show/hide week numbers\n     *\n     * @example\n     * ```html\n     * <igx-days-view [showWeekNumbers]=\"true\"></igx-days-view>\n     * ``\n     */\n    @Input({ transform: booleanAttribute })\n    public showWeekNumbers: boolean;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public set activeDate(value: Date) {\n        this._activeDate = value;\n        this.changePreviewRange(value);\n        this.activeDateChange.emit(this._activeDate);\n    }\n\n    public get activeDate(): Date {\n        return this._activeDate ?? this.viewDate;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public set previewRangeDate(value: Date) {\n        this._previewRangeDate = value;\n        this.previewRangeDateChange.emit(value);\n    }\n\n    public get previewRangeDate() {\n        return this._previewRangeDate;\n    }\n\n    @Input({ transform: booleanAttribute })\n    public set hideLeadingDays(value: boolean) {\n        this._hideLeadingDays = value;\n        this.cdr.detectChanges();\n    }\n\n    public get hideLeadingDays() {\n        return this._hideLeadingDays ?? this.hideOutsideDays;\n    }\n\n    @Input({ transform: booleanAttribute })\n    public set hideTrailingDays(value: boolean) {\n        this._hideTrailingDays = value;\n        this.cdr.detectChanges();\n    }\n\n    public get hideTrailingDays() {\n        return this._hideTrailingDays ?? this.hideOutsideDays;\n    }\n\n    @Input({ transform: booleanAttribute })\n    public set showActiveDay(value: boolean) {\n        this._showActiveDay = value;\n    }\n\n    public get showActiveDay() {\n        return this._showActiveDay;\n    }\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public dateSelected = new EventEmitter<Date>();\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public pageChanged = new EventEmitter<IViewChangingEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public activeDateChange = new EventEmitter<Date>();\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public previewRangeDateChange = new EventEmitter<any>();\n\n    /**\n     * @hidden\n     */\n    @ViewChildren(IgxDayItemComponent, { read: IgxDayItemComponent })\n    public dates: QueryList<IgxDayItemComponent>;\n\n    private _activeDate: Date;\n    private _previewRangeDate: Date;\n    private _hideLeadingDays: boolean;\n    private _hideTrailingDays: boolean;\n    private _showActiveDay: boolean;\n\n    /**\n     * @hidden\n     */\n    constructor(\n        platform: PlatformUtil,\n        @Inject(LOCALE_ID) _localeId: string,\n        protected el: ElementRef,\n        public override cdr: ChangeDetectorRef,\n    ) {\n        super(platform, _localeId, null, cdr);\n    }\n\n    /**\n     * @hidden\n     */\n    private handleArrowKeydown(event: KeyboardEvent, delta: number) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const date = getClosestActiveDate(\n            CalendarDay.from(this.activeDate),\n            delta,\n            this.disabledDates,\n        );\n\n        if (!areSameMonth(this.activeDate, date.native)) {\n            this.pageChanged.emit({\n                monthAction: delta > 0 ? ScrollDirection.NEXT : ScrollDirection.PREV,\n                key: event.key,\n                nextDate: date.native\n            });\n        }\n\n        this.activeDate = date.native;\n        this.viewDate = date.native;\n        this.clearPreviewRange();\n        this.changePreviewRange(date.native);\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowright', ['$event'])\n    protected onArrowRight(event: KeyboardEvent) {\n        this.handleArrowKeydown(event, 1);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowleft', ['$event'])\n    protected onArrowLeft(event: KeyboardEvent) {\n        this.handleArrowKeydown(event, -1);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowup', ['$event'])\n    protected onArrowUp(event: KeyboardEvent) {\n        this.handleArrowKeydown(event, -7);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowdown', ['$event'])\n    protected onArrowDown(event: KeyboardEvent) {\n        this.handleArrowKeydown(event, 7);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.Space', ['$event'])\n    @HostListener('keydown.enter', ['$event'])\n    protected onKeydownEnter(event: KeyboardEvent) {\n        event.stopPropagation();\n        this.selectActiveDate();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.home', ['$event'])\n    protected onKeydownHome(event: KeyboardEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const first = CalendarDay.from(this.activeDate);\n        this.activeDate = getNextActiveDate(\n            first.set({ date: 1 }),\n            this.disabledDates,\n        ).native;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.end', ['$event'])\n    protected onKeydownEnd(event: KeyboardEvent) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const last = CalendarDay.from(this.activeDate);\n        this.activeDate = getPreviousActiveDate(\n            last.set({ month: last.month + 1, date: 0 }),\n            this.disabledDates,\n        ).native;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('focus')\n    protected handleFocus() {\n        this._showActiveDay = true;\n        this.changePreviewRange(this.activeDate);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('blur')\n    protected handleBlur() {\n        this._showActiveDay = false;\n        this.clearPreviewRange();\n    }\n\n    /**\n     * @hidden\n     */\n    protected handleDateClick(item: IgxDayItemComponent) {\n        const date = item.date.native;\n\n        if (item.isPreviousMonth) {\n            this.pageChanged.emit({\n                monthAction: ScrollDirection.PREV,\n                key: '',\n                nextDate: date\n            });\n        }\n\n        if (item.isNextMonth) {\n            this.pageChanged.emit({\n                monthAction: ScrollDirection.NEXT,\n                key: '',\n                nextDate: date\n            });\n        }\n\n        if (this.tabIndex !== -1) {\n            this.el.nativeElement.focus();\n        }\n\n        this.activeDate = item.date.native;\n        this.selectActiveDate();\n    }\n\n    private selectActiveDate() {\n        this.selectDate(this.activeDate);\n        this.dateSelected.emit(this.activeDate);\n        this.selected.emit(this.selectedDates);\n        this.clearPreviewRange();\n    }\n\n    protected get calendarMonth(): CalendarDay[] {\n        return Array.from(generateMonth(this.viewDate, this.weekStart));\n    }\n\n    protected get monthWeeks(): CalendarDay[][] {\n        return Array.from(intoChunks(this.calendarMonth, 7));\n    }\n\n    /**\n     * Returns the week number by date\n     *\n     * @hidden\n     */\n    public getWeekNumber(date: CalendarDay): number {\n        return date.week;\n    }\n\n    /**\n     * Returns the locale representation of the date in the days view.\n     *\n     * @hidden\n     */\n    public formattedDate(value: Date): string {\n        if (this.formatViews.day) {\n            return this.formatterDay.format(value);\n        }\n\n        return `${value.getDate()}`;\n    }\n\n    /**\n     * @hidden\n     */\n    public get weekHeaderLabels(): {long: string, formatted: string}[] {\n        const weekdays = [];\n        const rawFormatter = new Intl.DateTimeFormat(this.locale, { weekday: 'long' });\n\n        for (const day of this.monthWeeks.at(0)) {\n            weekdays.push({\n                long: rawFormatter.format(day.native),\n                formatted: this.formatterWeekday.format(day.native)\n            });\n        }\n\n        return weekdays;\n    }\n\n    protected get weekNumberHeader(): { short: string, long: string } {\n        const weekOfYear = (style: 'narrow' | 'long') => {\n            const dn = new Intl.DisplayNames(this.locale, {\n                type: 'dateTimeField',\n                style,\n            });\n\n            return dn.of('weekOfYear');\n        }\n\n        return {\n            short: weekOfYear('narrow').substring(0, 1),\n            long: weekOfYear('long'),\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public rowTracker(_: number, item: CalendarDay[]): string {\n        return `${item[0].month}${item[0].date}`;\n    }\n\n    /**\n     * @hidden\n     */\n    public dateTracker(_: number, item: CalendarDay): string {\n        return `${item.month}--${item.date}`;\n    }\n\n    /**\n     * @hidden\n     */\n    public isSelected(date: CalendarDay): boolean {\n        const dates = this.value as Date[];\n        const hasValue = this.value || (Array.isArray(this.value) && this.value.length === 1);\n\n        if (isDateInRanges(date, this.disabledDates)) {\n            return false;\n        }\n\n        if (this.selection === CalendarSelection.SINGLE) {\n            return !!this.value && date.equalTo(this.value as Date);\n        }\n\n        if (!hasValue) {\n            return false;\n        }\n\n        if (this.selection === CalendarSelection.MULTI && dates.length > 0) {\n            return isDateInRanges(date, [\n                {\n                    type: DateRangeType.Specific,\n                    dateRange: dates,\n                },\n            ]);\n        }\n\n        if (this.selection === CalendarSelection.RANGE && dates.length > 0) {\n            return isDateInRanges(date, [\n                {\n                    type: DateRangeType.Between,\n                    dateRange: [dates.at(0), dates.at(-1)],\n                },\n            ]);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected isFirstInRange(date: CalendarDay): boolean {\n        const dates = this.selectedDates;\n\n        if (this.isSingleSelection || dates.length === 0) {\n            return false;\n        }\n\n        let target = dates.at(0);\n\n        if (this.previewRangeDate && this.previewRangeDate < target) {\n            target = this.previewRangeDate;\n        }\n\n        return date.equalTo(target);\n    }\n\n    /**\n     * @hidden\n     */\n    protected isLastInRange(date: CalendarDay): boolean {\n        const dates = this.selectedDates;\n\n        if (this.isSingleSelection || dates.length === 0) {\n            return false;\n        }\n\n        let target = dates.at(-1);\n\n        if (this.previewRangeDate && this.previewRangeDate > target) {\n            target = this.previewRangeDate;\n        }\n\n        return date.equalTo(target);\n    }\n\n    /**\n     * @hidden\n     */\n    protected isActiveDate(day: CalendarDay): boolean {\n        return this._showActiveDay && day.equalTo(this.activeDate);\n    }\n\n    /**\n     * @hidden\n     */\n    protected isWithinRange(date: Date, checkForRange: boolean, min?: Date, max?: Date): boolean {\n        const dates = this.selectedDates;\n\n        if (checkForRange && !(Array.isArray(dates) && dates.length > 1)) {\n            return false;\n        }\n\n        min = min ? min : dates.at(0);\n        max = max ? max : dates.at(-1);\n\n        return isDateInRanges(date,\n            [\n                {\n                    type: DateRangeType.Between,\n                    dateRange: [min, max]\n                }\n            ]\n        );\n    }\n\n    protected isWithinPreviewRange(date: Date): boolean {\n        if (this.selection !== 'range') return false;\n\n        const dates = this.selectedDates;\n\n        if (!(dates.length > 0 && this.previewRangeDate)) {\n            return false;\n        }\n\n        return isDateInRanges(date, [\n          {\n            type: DateRangeType.Between,\n            dateRange: [dates.at(0), this.previewRangeDate],\n          },\n        ]);\n    }\n\n    /**\n     * @hidden\n     */\n    private get isSingleSelection(): boolean {\n        return this.selection !== CalendarSelection.RANGE;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public changePreviewRange(date: Date) {\n        const dates = this.value as Date[];\n\n        if (this.selection === 'range' && dates.length === 1) {\n            const first = CalendarDay.from(dates.at(0));\n\n            if (!first.equalTo(date)) {\n              this.setPreviewRangeDate(date);\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public clearPreviewRange() {\n        if (this.previewRangeDate) {\n            this.setPreviewRangeDate(undefined);\n        }\n    }\n\n    private setPreviewRangeDate(value?: Date) {\n        this.previewRangeDate = value;\n    }\n}\n","<div\n    role=\"row\"\n    class=\"igx-days-view__row\"\n    [title]=\"weekNumberHeader.long | titlecase\"\n>\n    @if (showWeekNumbers) {\n        <div\n            role=\"columnheader\"\n            class=\"igx-days-view__label igx-days-view__label--week-number\"\n        >\n            <span>\n                <i>{{ weekNumberHeader.short | titlecase }}</i>\n            </span>\n        </div>\n    }\n    @for (dayName of weekHeaderLabels; track dayName.long) {\n        <span\n            role=\"columnheader\"\n            [attr.aria-label]=\"dayName.long\"\n            class=\"igx-days-view__label\"\n        >\n            <span class=\"igx-days-view__label-inner\">\n                {{ dayName.formatted | titlecase }}\n            </span>\n        </span>\n    }\n</div>\n\n@for (\n    week of monthWeeks; track rowTracker(i, week);\n    let isLast = $last; let i = $index\n) {\n    <div\n        class=\"igx-days-view__row\"\n        role=\"row\"\n    >\n        @if (showWeekNumbers) {\n            <div class=\"igx-days-view__date igx-days-view__date--week-number\">\n                <span\n                    role=\"rowheader\"\n                    class=\"igx-days-view__date-inner igx-days-view__date-inner--week-number\"\n                >\n                    {{ getWeekNumber(week[0]) }}\n                </span>\n            </div>\n        }\n        @for (day of week; track dateTracker($index, day)) {\n            <igx-day-item\n                #item\n                class=\"igx-days-view__date\"\n                role=\"gridcell\"\n                [attr.id]=\"item.isCurrentMonth && day.timestamp\"\n                [attr.aria-selected]=\"isSelected(day)\"\n                [attr.aria-disabled]=\"isDateDisabled(day.native)\"\n                [attr.aria-label]=\"\n                    isFirstInRange(day)\n                        ? day.native.toDateString() +\n                          ', ' +\n                          resourceStrings.igx_calendar_range_start\n                        : isLastInRange(day)\n                          ? day.native.toDateString() +\n                            ', ' +\n                            resourceStrings.igx_calendar_range_end\n                          : day.native.toDateString()\n                \"\n                [date]=\"day\"\n                [viewDate]=\"viewDate\"\n                [selection]=\"selection\"\n                [selected]=\"isSelected(day)\"\n                [isActive]=\"isActiveDate(day)\"\n                [isLastInRange]=\"isLastInRange(day)\"\n                [isFirstInRange]=\"isFirstInRange(day)\"\n                [isWithinRange]=\"isWithinRange(day.native, true)\"\n                [isWithinPreviewRange]=\"isWithinPreviewRange(day.native)\"\n                [disabledDates]=\"disabledDates\"\n                [specialDates]=\"specialDates\"\n                [hideLeadingDays]=\"hideLeadingDays\"\n                [hideTrailingDays]=\"hideTrailingDays\"\n                [attr.tabindex]=\"-1\"\n                (click)=\"handleDateClick(item)\"\n                (mouseEnter)=\"changePreviewRange(day.native)\"\n                (mouseLeave)=\"clearPreviewRange()\"\n            >\n                {{ formattedDate(day.native) }}\n            </igx-day-item>\n        }\n    </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Calendar } from './calendar';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'IgxMonthViewSlots',\n    standalone: true\n})\nexport class IgxMonthViewSlotsCalendar implements PipeTransform {\n    public transform(monthViews: number) {\n        return new Array(monthViews);\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'IgxGetViewDate',\n    standalone: true\n})\nexport class IgxGetViewDateCalendar implements PipeTransform {\n    private calendar: Calendar;\n    constructor() {\n        this.calendar = new Calendar();\n    }\n\n    public transform(index: number, viewDate: Date): Date;\n    public transform(index: number, viewDate: Date, wholeDate: false): number;\n    public transform(index: number, viewDate: Date, wholeDate = true) {\n        const date = this.calendar.timedelta(viewDate, 'month', index);\n        return wholeDate ? date : date.getMonth();\n    }\n}\n","import {\n\tComponent,\n\tContentChild,\n\tforwardRef,\n\tHostBinding,\n\tInput,\n\tViewChild,\n\tElementRef,\n\tAfterViewInit,\n\tViewChildren,\n\tQueryList,\n\tOnDestroy,\n\tbooleanAttribute,\n    HostListener,\n} from '@angular/core';\nimport { NgTemplateOutlet, DatePipe } from '@angular/common';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n\tIgxCalendarHeaderTemplateDirective,\n    IgxCalendarHeaderTitleTemplateDirective,\n\tIgxCalendarSubheaderTemplateDirective,\n    IgxCalendarScrollPageDirective,\n} from './calendar.directives';\nimport { IgxCalendarView, ScrollDirection } from './calendar';\nimport { IgxMonthsViewComponent } from './months-view/months-view.component';\nimport { IgxYearsViewComponent } from './years-view/years-view.component';\nimport { IgxDaysViewComponent } from './days-view/days-view.component';\nimport { interval } from 'rxjs';\nimport { takeUntil, debounce, skipLast, switchMap } from 'rxjs/operators';\nimport { IgxMonthViewSlotsCalendar, IgxGetViewDateCalendar } from './months-view.pipe';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { areSameMonth, formatToParts, getClosestActiveDate, isDateInRanges } from './common/helpers';\nimport { CalendarDay } from './common/model';\nimport { IgxCalendarBaseDirective } from './calendar-base';\nimport { KeyboardNavigationService } from './calendar.services';\n\nlet NEXT_ID = 0;\n\n/**\n * Calendar provides a way to display date information.\n *\n * @igxModule IgxCalendarModule\n *\n * @igxTheme igx-calendar-theme, igx-icon-theme\n *\n * @igxKeywords calendar, datepicker, schedule, date\n *\n * @igxGroup Scheduling\n *\n * @remarks\n * The Ignite UI Calendar provides an easy way to display a calendar and allow users to select dates using single, multiple\n * or range selection.\n *\n * @example:\n * ```html\n * <igx-calendar selection=\"range\"></igx-calendar>\n * ```\n */\n@Component({\n    providers: [\n        {\n            multi: true,\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxCalendarComponent,\n        },\n        {\n            multi: false,\n            provide: KeyboardNavigationService,\n        },\n    ],\n    selector: 'igx-calendar',\n    templateUrl: 'calendar.component.html',\n    imports: [NgTemplateOutlet, IgxCalendarScrollPageDirective, IgxIconComponent, IgxDaysViewComponent, IgxMonthsViewComponent, IgxYearsViewComponent, DatePipe, IgxMonthViewSlotsCalendar, IgxGetViewDateCalendar]\n})\nexport class IgxCalendarComponent extends IgxCalendarBaseDirective implements AfterViewInit, OnDestroy {\n    /**\n     * @hidden\n     * @internal\n     */\n    private _activeDescendant: number;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild(\"wrapper\")\n    public wrapper: ElementRef;\n\n\t/**\n\t * Sets/gets the `id` of the calendar.\n\t *\n\t * @remarks\n\t * If not set, the `id` will have value `\"igx-calendar-0\"`.\n\t *\n\t * @example\n\t * ```html\n\t * <igx-calendar id=\"my-first-calendar\"></igx-calendar>\n\t * ```\n\t * @memberof IgxCalendarComponent\n\t */\n\t@HostBinding('attr.id')\n\t@Input()\n\tpublic id = `igx-calendar-${ NEXT_ID++ }`;\n\n    /**\n     * Sets/gets whether the calendar has header.\n     * Default value is `true`.\n     *\n     * @example\n     * ```html\n     * <igx-calendar [hasHeader]=\"false\"></igx-calendar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hasHeader = true;\n\n    /**\n     * Sets/gets whether the calendar header will be in vertical position.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-calendar [vertical]=\"true\"></igx-calendar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public vertical = false;\n\n    @Input()\n    public orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n    @Input()\n    public headerOrientation: 'horizontal' | 'vertical' = 'horizontal';\n\n\t/**\n\t * Sets/gets the number of month views displayed.\n\t * Default value is `1`.\n\t *\n\t * @example\n\t * ```html\n\t * <igx-calendar [monthsViewNumber]=\"2\"></igx-calendar>\n\t * ```\n\t */\n\t@Input()\n\tpublic get monthsViewNumber() {\n\t\treturn this._monthsViewNumber;\n\t}\n\n    public set monthsViewNumber(val: number) {\n        if (val < 1) {\n            return;\n        }\n\n\t\tthis._monthsViewNumber = val;\n\t}\n\n    /**\n     * Show/hide week numbers\n     *\n     * @example\n     * ```html\n     * <igx-calendar [showWeekNumbers]=\"true\"></igx-calendar>\n     * ``\n     */\n    @Input({ transform: booleanAttribute })\n    public showWeekNumbers = false;\n\n\t/**\n\t * The default css class applied to the component.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@HostBinding('class.igx-calendar--vertical')\n\tpublic get styleVerticalClass(): boolean {\n\t\treturn this.headerOrientation === 'vertical';\n\t}\n\n\t/**\n\t * The default css class applied to the component.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@HostBinding('class.igx-calendar')\n\tpublic styleClass = true;\n\n\t/**\n\t * Month button, that displays the months view.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChildren('monthsBtn')\n\tpublic monthsBtns: QueryList<ElementRef>;\n\n\t/**\n\t * ViewChild that represents the decade view.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChild('decade', { read: IgxYearsViewComponent })\n\tpublic dacadeView: IgxYearsViewComponent;\n\n\t/**\n\t * ViewChild that represents the months view.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChild('months', { read: IgxMonthsViewComponent })\n\tpublic monthsView: IgxMonthsViewComponent;\n\n\t/**\n\t * ViewChild that represents the days view.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChild('days', { read: IgxDaysViewComponent })\n\tpublic daysView: IgxDaysViewComponent;\n\n\t/**\n\t * ViewChildrenden representing all of the rendered days views.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChildren('days', { read: IgxDaysViewComponent })\n\tpublic monthViews: QueryList<IgxDaysViewComponent>;\n\n\t/**\n\t * Button for previous month.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChild('prevPageBtn')\n\tpublic prevPageBtn: ElementRef;\n\n\t/**\n\t * Button for next month.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\t@ViewChild('nextPageBtn')\n\tpublic nextPageBtn: ElementRef;\n\n\t/**\n\t * Denote if the year view is active.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic get isYearView(): boolean {\n\t\treturn this.activeView === IgxCalendarView.Year;\n\t}\n\n\t/**\n\t * Gets the header template.\n\t *\n\t * @example\n\t * ```typescript\n\t * let headerTitleTemplate = this.calendar.headerTitleTeamplate;\n\t * ```\n\t * @memberof IgxCalendarComponent\n\t */\n\tpublic get headerTitleTemplate(): any {\n\t\tif (this.headerTitleTemplateDirective) {\n\t\t\treturn this.headerTitleTemplateDirective.template;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Sets the header template.\n\t *\n\t * @example\n\t * ```html\n\t * <igx-calendar headerTitleTemplateDirective=\"igxCalendarHeaderTitle\"></igx-calendar>\n\t * ```\n\t * @memberof IgxCalendarComponent\n\t */\n\tpublic set headerTitleTemplate(directive: any) {\n\t\tthis.headerTitleTemplateDirective = directive;\n\t}\n\n\t/**\n\t * Gets the header template.\n\t *\n\t * @example\n\t * ```typescript\n\t * let headerTemplate =  this.calendar.headerTeamplate;\n\t * ```\n\t * @memberof IgxCalendarComponent\n\t */\n\tpublic get headerTemplate(): any {\n\t\tif (this.headerTemplateDirective) {\n\t\t\treturn this.headerTemplateDirective.template;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Sets the header template.\n\t *\n\t * @example\n\t * ```html\n\t * <igx-calendar headerTemplateDirective=\"igxCalendarHeader\"></igx-calendar>\n\t * ```\n\t * @memberof IgxCalendarComponent\n\t */\n\tpublic set headerTemplate(directive: any) {\n\t\tthis.headerTemplateDirective = directive;\n\t}\n\n\t/**\n\t * Gets the subheader template.\n\t *\n\t * @example\n\t * ```typescript\n\t * let subheaderTemplate = this.calendar.subheaderTemplate;\n\t * ```\n\t */\n\tpublic get subheaderTemplate(): any {\n\t\tif (this.subheaderTemplateDirective) {\n\t\t\treturn this.subheaderTemplateDirective.template;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Sets the subheader template.\n\t *\n\t * @example\n\t * ```html\n\t * <igx-calendar subheaderTemplate=\"igxCalendarSubheader\"></igx-calendar>\n\t * ```\n\t * @memberof IgxCalendarComponent\n\t */\n\tpublic set subheaderTemplate(directive: any) {\n\t\tthis.subheaderTemplateDirective = directive;\n\t}\n\n\t/**\n\t * Gets the context for the template marked with the `igxCalendarHeader` directive.\n\t *\n\t * @example\n\t * ```typescript\n\t * let headerContext =  this.calendar.headerContext;\n\t * ```\n\t */\n\tpublic get headerContext() {\n\t\treturn this.generateContext(this.headerDate);\n\t}\n\n\t/**\n\t * Gets the context for the template marked with either `igxCalendarSubHeaderMonth`\n\t * or `igxCalendarSubHeaderYear` directive.\n\t *\n\t * @example\n\t * ```typescript\n\t * let context =  this.calendar.context;\n\t * ```\n\t */\n\tpublic get context() {\n\t\tconst date: Date = this.viewDate;\n\t\treturn this.generateContext(date);\n\t}\n\n\t/**\n\t * Date displayed in header\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic get headerDate(): Date {\n\t\treturn this.selectedDates?.at(0) ?? new Date();\n\t}\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(forwardRef(() => IgxCalendarHeaderTemplateDirective), { read: IgxCalendarHeaderTemplateDirective, static: true })\n    private headerTemplateDirective: IgxCalendarHeaderTemplateDirective;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(forwardRef(() => IgxCalendarHeaderTitleTemplateDirective), { read: IgxCalendarHeaderTitleTemplateDirective, static: true })\n    private headerTitleTemplateDirective: IgxCalendarHeaderTitleTemplateDirective;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(forwardRef(() => IgxCalendarSubheaderTemplateDirective), { read: IgxCalendarSubheaderTemplateDirective, static: true })\n    private subheaderTemplateDirective: IgxCalendarSubheaderTemplateDirective;\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic activeDate = CalendarDay.today.native;\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tprotected previewRangeDate: Date;\n\n\t/**\n\t * Used to apply the active date when the calendar view is changed\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic nextDate: Date;\n\n\t/**\n\t * Denote if the calendar view was changed with the keyboard\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic isKeydownTrigger = false;\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tprivate _monthsViewNumber = 1;\n\n    @HostListener('mousedown', ['$event'])\n    protected onMouseDown(event: MouseEvent) {\n        event.stopPropagation();\n        this.wrapper.nativeElement.focus();\n    }\n\n    private _showActiveDay: boolean;\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n    protected set showActiveDay(value: boolean) {\n        this._showActiveDay = value;\n        this.cdr.detectChanges();\n    }\n\n    protected get showActiveDay() {\n        return this._showActiveDay;\n    }\n\n    protected get activeDescendant(): number {\n        if (this.activeView === 'month') {\n            return this.activeDate.getTime();\n        }\n\n        return this._activeDescendant ?? this.viewDate.getTime();\n    }\n\n    protected set activeDescendant(date: Date) {\n        this._activeDescendant = date.getTime();\n    }\n\n\tpublic ngAfterViewInit() {\n        this.keyboardNavigation\n            .attachKeyboardHandlers(this.wrapper, this)\n            .set(\"ArrowUp\", this.onArrowUp)\n            .set(\"ArrowDown\", this.onArrowDown)\n            .set(\"ArrowLeft\", this.onArrowLeft)\n            .set(\"ArrowRight\", this.onArrowRight)\n            .set(\"Enter\", this.onEnter)\n            .set(\" \", this.onEnter)\n            .set(\"Home\", this.onHome)\n            .set(\"End\", this.onEnd)\n            .set(\"PageUp\", this.handlePageUp)\n            .set(\"PageDown\", this.handlePageDown);\n\n        this.wrapper.nativeElement.addEventListener('focus', (event: FocusEvent) => this.onWrapperFocus(event));\n        this.wrapper.nativeElement.addEventListener('blur', (event: FocusEvent) => this.onWrapperBlur(event));\n\n        this.startPageScroll$.pipe(\n            takeUntil(this.stopPageScroll$),\n            switchMap(() => this.scrollPage$.pipe(\n                skipLast(1),\n                debounce(() => interval(300)),\n                takeUntil(this.stopPageScroll$)\n            ))).subscribe(() => {\n                switch (this.pageScrollDirection) {\n                    case ScrollDirection.PREV:\n                        this.previousPage();\n                        break;\n                    case ScrollDirection.NEXT:\n                        this.nextPage();\n                        break;\n                    case ScrollDirection.NONE:\n                    default:\n                        break;\n                }\n            });\n\n        this.activeView$.subscribe((view) => {\n\t\t\tthis.activeViewChanged.emit(view);\n\n            this.viewDateChanged.emit({\n                previousValue: this.previousViewDate,\n                currentValue: this.viewDate\n            });\n        });\n    }\n\n    private onWrapperFocus(_event: FocusEvent) {\n        this.showActiveDay = true;\n        this.monthViews.forEach(view => view.changePreviewRange(this.activeDate));\n    }\n\n    private onWrapperBlur(_event: FocusEvent) {\n        this.showActiveDay = false;\n        this.monthViews.forEach(view => view.clearPreviewRange());\n        this._onTouchedCallback();\n    }\n\n    private handleArrowKeydown(event: KeyboardEvent, delta: number) {\n        event.preventDefault();\n\n        const date = getClosestActiveDate(\n            CalendarDay.from(this.activeDate),\n            delta,\n            this.disabledDates,\n        );\n\n        this.activeDate = date.native;\n\n        const dates = this.viewDates;\n        const isDateInView = dates.some(d => d.date.equalTo(this.activeDate));\n        this.monthViews.forEach(view => view.clearPreviewRange());\n\n        if (!isDateInView) {\n            delta > 0 ? this.nextPage(true) : this.previousPage(true);\n        }\n    }\n\n    private handlePageUpDown(event: KeyboardEvent, delta: number) {\n        event.preventDefault();\n\n        const dir = delta > 0 ? ScrollDirection.NEXT : ScrollDirection.PREV;\n\n        if (this.activeView === IgxCalendarView.Month && event.shiftKey) {\n            this.viewDate = CalendarDay.from(this.viewDate).add('year', delta).native;\n            this.resetActiveDate(this.viewDate);\n            this.cdr.detectChanges();\n        } else {\n            this.changePage(false, dir);\n        }\n    }\n\n    private handlePageUp(event: KeyboardEvent) {\n        this.handlePageUpDown(event, -1);\n    }\n\n    private handlePageDown(event: KeyboardEvent) {\n        this.handlePageUpDown(event, 1);\n    }\n\n    private onArrowUp(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            this.handleArrowKeydown(event, -7);\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownArrowUp(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownArrowUp(event);\n        }\n    }\n\n    private onArrowDown(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            this.handleArrowKeydown(event, 7);\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownArrowDown(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownArrowDown(event);\n        }\n    }\n\n    private onArrowLeft(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            this.handleArrowKeydown(event, -1);\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownArrowLeft(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownArrowLeft(event);\n        }\n    }\n\n    private onArrowRight(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            this.handleArrowKeydown(event, 1);\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownArrowRight(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownArrowRight(event);\n        }\n    }\n\n    private onEnter(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            this.handleDateSelection(this.activeDate);\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownEnter(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownEnter(event);\n        }\n\n        this.monthViews.forEach(view => view.clearPreviewRange());\n    }\n\n    private onHome(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            const dates = this.monthViews.toArray()\n                .flatMap((view) => view.dates.toArray())\n                .filter((d) => d.isCurrentMonth && d.isFocusable);\n\n            this.activeDate = dates.at(0).date.native;\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownHome(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownHome(event);\n        }\n    }\n\n    private onEnd(event: KeyboardEvent) {\n        if (this.activeView === IgxCalendarView.Month) {\n            const dates = this.monthViews.toArray()\n                .flatMap((view) => view.dates.toArray())\n                .filter((d) => d.isCurrentMonth && d.isFocusable);\n\n            this.activeDate = dates.at(-1).date.native;\n            this.cdr.detectChanges();\n        }\n\n        if (this.activeView === IgxCalendarView.Year) {\n            this.monthsView.onKeydownEnd(event);\n        }\n\n        if (this.activeView === IgxCalendarView.Decade) {\n            this.dacadeView.onKeydownEnd(event);\n        }\n    }\n\n\t/**\n\t * Returns the locale representation of the month in the month view if enabled,\n\t * otherwise returns the default `Date.getMonth()` value.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic formattedMonth(value: Date): string {\n\t\tif (this.formatViews.month) {\n\t\t\treturn this.formatterMonth.format(value);\n\t\t}\n\n\t\treturn `${ value.getMonth() }`;\n\t}\n\n\t/**\n\t * Change to previous page\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic previousPage(isKeydownTrigger = false) {\n\t\tif (isKeydownTrigger && this.pageScrollDirection === ScrollDirection.NEXT) {\n\t\t\treturn;\n\t\t}\n\n        this.changePage(isKeydownTrigger, ScrollDirection.PREV);\n\t}\n\n\t/**\n\t * Change to next page\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic nextPage(isKeydownTrigger = false) {\n\t\tif (isKeydownTrigger && this.pageScrollDirection === ScrollDirection.PREV) {\n\t\t\treturn;\n\t\t}\n\n        this.changePage(isKeydownTrigger, ScrollDirection.NEXT);\n\t}\n\n\t/**\n\t * Changes the current page\n\t *\n\t * @hidden\n\t * @internal\n\t */\n    protected changePage(isKeydownTrigger = false, direction: ScrollDirection) {\n\t\tthis.previousViewDate = this.viewDate;\n\t\tthis.isKeydownTrigger = isKeydownTrigger;\n\n        switch (this.activeView) {\n            case \"month\":\n                if (direction === ScrollDirection.PREV) {\n                    this.viewDate = CalendarDay.from(this.viewDate).add('month', -1).native;\n                }\n\n                if (direction === ScrollDirection.NEXT) {\n                    this.viewDate = CalendarDay.from(this.viewDate).add('month', 1).native;\n                }\n\n                this.viewDateChanged.emit({\n                    previousValue: this.previousViewDate,\n                    currentValue: this.viewDate\n                });\n\n                break;\n\n            case \"year\":\n                if (direction === ScrollDirection.PREV) {\n                    this.viewDate = CalendarDay.from(this.viewDate).add('year', -1).native;\n                }\n\n                if (direction === ScrollDirection.NEXT) {\n                    this.viewDate = CalendarDay.from(this.viewDate).add('year', 1).native;\n                }\n\n                break;\n\n            case \"decade\":\n                if (direction === ScrollDirection.PREV) {\n                    this.viewDate = CalendarDay.from(this.viewDate).add('year', -15).native;\n                }\n\n                if (direction === ScrollDirection.NEXT) {\n                    this.viewDate = CalendarDay.from(this.viewDate).add('year', 15).native;\n                }\n\n                break;\n        }\n\n        // XXX: Why only when it's not triggered by keyboard?\n        if (!this.isKeydownTrigger) this.resetActiveDate(this.viewDate);\n    }\n\n\t/**\n\t * Continious navigation through the previous pages\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic startPrevPageScroll = (isKeydownTrigger = false) => {\n\t\tthis.startPageScroll$.next();\n\t\tthis.pageScrollDirection = ScrollDirection.PREV;\n\t\tthis.previousPage(isKeydownTrigger);\n\t}\n\n\t/**\n\t * Continious navigation through the next pages\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic startNextPageScroll = (isKeydownTrigger = false) => {\n\t\tthis.startPageScroll$.next();\n\t\tthis.pageScrollDirection = ScrollDirection.NEXT;\n\t\tthis.nextPage(isKeydownTrigger);\n\t}\n\n\t/**\n\t * Stop continuous navigation\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic stopPageScroll = (event: KeyboardEvent) => {\n\t\tevent.stopPropagation();\n\n\t\tthis.stopPageScroll$.next(true);\n\t\tthis.stopPageScroll$.complete();\n\n\t\tif (this.platform.isActivationKey(event)) {\n\t\t\tthis.resetActiveDate(this.viewDate);\n\t\t}\n\n\t\tthis.pageScrollDirection = ScrollDirection.NONE;\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic onActiveViewDecade(event: MouseEvent, date: Date, activeViewIdx: number): void {\n        event.preventDefault();\n\n\t\tsuper.activeViewDecade(activeViewIdx);\n        this.viewDate = date;\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic onActiveViewDecadeKB(date: Date, event: KeyboardEvent, activeViewIdx: number) {\n\t\tsuper.activeViewDecadeKB(event, activeViewIdx);\n\n\t\tif (this.platform.isActivationKey(event)) {\n            this.viewDate = date;\n            this.wrapper.nativeElement.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n    public onYearsViewClick(event: MouseEvent) {\n        const path = event.composed ? event.composedPath() : [event.target];\n        const years = this.dacadeView.viewItems.toArray();\n        const validTarget = years.some(year => path.includes(year.nativeElement));\n\n        if (validTarget) {\n            this.activeView = IgxCalendarView.Year;\n        }\n    }\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n    public onYearsViewKeydown(event: KeyboardEvent) {\n        if (this.platform.isActivationKey(event)) {\n            this.activeView = IgxCalendarView.Year;\n        }\n    }\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tprotected getFormattedDate(): { weekday: string; monthday: string } {\n\t\tconst date = this.headerDate;\n        const monthFormatter = new Intl.DateTimeFormat(this.locale, { month: 'short', day: 'numeric' })\n        const dayFormatter = new Intl.DateTimeFormat(this.locale, { weekday: 'short' })\n\n\t\treturn {\n\t\t\tmonthday: monthFormatter.format(date),\n\t\t\tweekday: dayFormatter.format(date),\n\t\t};\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tprotected getFormattedRange(): { start: string; end: string } {\n\t\tconst dates = this.selectedDates as Date[];\n\n\t\treturn {\n\t\t\tstart: this.formatterRangeday.format(dates.at(0)),\n\t\t\tend: this.formatterRangeday.format(dates.at(-1))\n\t\t};\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n    protected get viewDates() {\n        return this.monthViews.toArray()\n            .flatMap(view => view.dates.toArray())\n            .filter(d => d.isCurrentMonth);\n    }\n\n\t/**\n\t * Handles invoked on date selection\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tprotected handleDateSelection(date: Date) {\n        const outOfRange = !this.viewDates.some(d => {\n            return d.date.equalTo(date)\n        });\n\n        if (outOfRange) {\n            this.viewDate = date;\n        }\n\n\t\tthis.selectDate(date);\n\n        // keep views in sync\n\t\tthis.monthViews.forEach((m) => {\n\t\t\tm.shiftKey = this.shiftKey;\n            m.selectedDates = this.selectedDates;\n            m.cdr.markForCheck();\n\t\t});\n\n        if (this.selection !== 'single') {\n\t\t    this.selected.emit(this.selectedDates);\n        } else {\n\t\t    this.selected.emit(this.selectedDates.at(0));\n        }\n\t}\n\n\t/**\n\t * @hidden\n\t * @intenal\n\t */\n\tpublic changeMonth(date: Date) {\n\t\tthis.previousViewDate = this.viewDate;\n        this.viewDate = CalendarDay.from(date).add('month', -this.activeViewIdx).native;\n\t\tthis.activeView = IgxCalendarView.Month;\n        this.resetActiveDate(date);\n\t}\n\n\t/**\n\t * @hidden\n\t * @intenal\n\t */\n    public override changeYear(date: Date) {\n        this.previousViewDate = this.viewDate;\n        this.viewDate = CalendarDay.from(date).add('month', -this.activeViewIdx).native;\n\t\tthis.activeView = IgxCalendarView.Year;\n    }\n\n\t/**\n\t * @hidden\n\t * @intenal\n\t */\n\tpublic updateYear(date: Date) {\n\t\tthis.previousViewDate = this.viewDate;\n        this.viewDate = CalendarDay.from(date).add('year', -this.activeViewIdx).native;\n\t}\n\n    public updateActiveDescendant(date: Date) {\n        this.activeDescendant = date;\n    }\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic onActiveViewYear(event: MouseEvent, date: Date, activeViewIdx: number): void {\n        event.preventDefault();\n\n\t\tthis.activeView = IgxCalendarView.Year;\n\t\tthis.activeViewIdx = activeViewIdx;\n        this.viewDate = date;\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic onActiveViewYearKB(date: Date, event: KeyboardEvent, activeViewIdx: number): void {\n        event.stopPropagation();\n\n\t\tif (this.platform.isActivationKey(event)) {\n\t\t    event.preventDefault();\n            this.activeView = IgxCalendarView.Year;\n            this.activeViewIdx = activeViewIdx;\n            this.viewDate = date;\n\n            this.wrapper.nativeElement.focus();\n\t\t}\n\t}\n\n\t/**\n\t * Deselects date(s) (based on the selection type).\n\t *\n\t * @example\n\t * ```typescript\n\t *  this.calendar.deselectDate(new Date(`2018-06-12`));\n\t * ````\n\t */\n\tpublic override deselectDate(value?: Date | Date[] | string) {\n\t\tsuper.deselectDate(value);\n\n\t\tthis.monthViews.forEach((m) => {\n\t\t\tm.selectedDates = this.selectedDates;\n\t\t\tm.rangeStarted = false;\n            m.cdr.markForCheck();\n\t\t});\n\n\t\tthis._onChangeCallback(this.selectedDates);\n\t}\n\n\n\t/**\n\t * Getter for the context object inside the calendar templates.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic getContext(i: number) {\n        const date = CalendarDay.from(this.viewDate).add('month', i).native;\n\t\treturn this.generateContext(date, i);\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n    // TODO: See if this can be incorporated in the DaysView directly\n\tpublic resetActiveDate(date: Date) {\n        const target = CalendarDay.from(this.activeDate).set({\n            month: date.getMonth(),\n            year: date.getFullYear(),\n       });\n        const outOfRange =\n            !areSameMonth(date, target) ||\n            isDateInRanges(target, this.disabledDates);\n\n        this.activeDate = outOfRange ? date : target.native;\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic ngOnDestroy(): void {\n        this.keyboardNavigation.detachKeyboardHandlers();\n        this.wrapper?.nativeElement.removeEventListener('focus', this.onWrapperFocus);\n        this.wrapper?.nativeElement.removeEventListener('blur', this.onWrapperBlur);\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic getPrevMonth(date: Date): Date {\n\t\treturn CalendarDay.from(date).add('month', -1).native;\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic getNextMonth(date: Date, viewIndex: number): Date {\n        return CalendarDay.from(date).add('month', viewIndex).native;\n\t}\n\n\t/**\n\t * Helper method building and returning the context object inside the calendar templates.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tprivate generateContext(value: Date | Date[], i?: number) {\n        const construct = (date: Date, index: number) => ({\n            index: index,\n            date,\n            ...formatToParts(date, this.locale, this.formatOptions, [\n                \"era\",\n                \"year\",\n                \"month\",\n                \"day\",\n                \"weekday\",\n            ]),\n        });\n\n        const formatObject = Array.isArray(value)\n            ? value.map((date, index) => construct(date, index))\n            : construct(value, i);\n\n        return { $implicit: formatObject };\n\t}\n}\n","<ng-template let-result #defaultHeaderTitle>\n    @if (selection === 'single') {\n        <span>{{ resourceStrings.igx_calendar_select_date }}</span>\n    }\n    @if (selection === 'range') {\n        <span>{{ resourceStrings.igx_calendar_range_placeholder }}</span>\n    }\n</ng-template>\n\n<ng-template let-result #defaultHeaderDate>\n    @if (selection === 'single') {\n        <span>{{ getFormattedDate().weekday }},&nbsp;</span>\n        <span>{{ getFormattedDate().monthday }}</span>\n    }\n    @if (selection === 'range') {\n        <span>{{ selectedDates.length === 0 ? 'Start' : getFormattedRange().start}}</span>\n        <span>&nbsp;-&nbsp;</span>\n        <span>{{ selectedDates.length <= 1 ? 'End' : getFormattedRange().end}}</span>\n    }\n</ng-template>\n\n<!-- Month -->\n<ng-template #defaultMonth let-obj>\n    <span\n        #monthsBtn\n        tabindex=\"0\"\n        role=\"button\"\n        [attr.aria-label]=\"(obj.date | date: 'LLLL') + ', ' + resourceStrings.igx_calendar_select_month\"\n        (keydown)=\"onActiveViewYearKB(obj.date, $event, obj.index)\"\n        (mousedown)=\"onActiveViewYear($event, obj.date, obj.index)\"\n        class=\"igx-calendar-picker__date\">\n        {{ formattedMonth(obj.date) }}\n    </span>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n    @if (activeView === 'year') {\n        <span class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n    }\n    <span\n        #yearsBtn\n        tabindex=\"0\"\n        role=\"button\"\n        [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n        (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n        (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n        class=\"igx-calendar-picker__date\">\n        {{ formattedYear(obj.date) }}\n    </span>\n</ng-template>\n\n<!-- Month Year -->\n<ng-template #defaultMonthYear let-obj let-result>\n    @if (monthsViewNumber < 2 || obj.index < 1) {\n        <span class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">\n            {{ monthsViewNumber > 1 ?\n            (resourceStrings.igx_calendar_first_picker_of.replace('{0}', monthsViewNumber.toString()) + ' ' +\n            (obj.date | date: 'LLLL yyyy')) :\n            resourceStrings.igx_calendar_selected_month_is + (obj.date | date: 'LLLL yyyy')}}\n        </span>\n    }\n    <ng-container *ngTemplateOutlet=\"defaultMonth; context: {$implicit: obj}\"></ng-container>\n    <ng-container *ngTemplateOutlet=\"defaultYear; context: {$implicit: obj}\"></ng-container>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n    <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n    <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n    <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n    <div\n        #prevPageBtn\n        tabindex=\"0\"\n        class=\"igx-calendar-picker__prev\"\n        role=\"button\"\n        [attr.aria-label]=\"prevNavLabel((getPrevMonth(viewDate) | date: 'LLLL'))\"\n        data-action=\"prev\"\n        igxCalendarScrollPage\n        [startScroll]=\"startPrevPageScroll\"\n        [stopScroll]=\"stopPageScroll\"\n        (keydown)=\"$event.stopPropagation()\"\n    >\n        <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n    </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n    <div\n        #nextPageBtn\n        tabindex=\"0\"\n        class=\"igx-calendar-picker__next\"\n        role=\"button\"\n        [attr.aria-label]=\"nextNavLabel((getNextMonth(viewDate, monthsViewNumber) | date: 'LLLL'))\"\n        data-action=\"next\"\n        igxCalendarScrollPage\n        [startScroll]=\"startNextPageScroll\"\n        [stopScroll]=\"stopPageScroll\"\n        (keydown)=\"$event.stopPropagation()\"\n    >\n        <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n    </div>\n</ng-template>\n\n<!-- PICKER IN DAYS -->\n<ng-template #calendarDaysPicker let-i>\n    <section class=\"igx-calendar-picker\" [style.--calendar-row-start]=\"1 + (2 * i)\">\n        <div class=\"igx-calendar-picker__dates\" [attr.data-month]=\"i | IgxGetViewDate:viewDate:false\">\n            <ng-container\n                *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultMonthYear; context: getContext(i)\">\n            </ng-container>\n        </div>\n        @if (this.orientation === 'horizontal' ? i === monthsViewNumber - 1 : i === 0) {\n            <div class=\"igx-calendar-picker__nav\">\n                <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n                <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n            </div>\n        }\n    </section>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n    <section class=\"igx-calendar-picker\">\n        <div class=\"igx-calendar-picker__dates\">\n            <ng-container\n                *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultYear; context: getContext(0)\">\n            </ng-container>\n        </div>\n        <div class=\"igx-calendar-picker__nav\">\n            <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n        </div>\n    </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n    <section class=\"igx-calendar-picker\">\n        <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n            <ng-container\n                *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultDecade;\">\n            </ng-container>\n        </div>\n        <div class=\"igx-calendar-picker__nav\">\n            <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n        </div>\n    </section>\n</ng-template>\n\n\n@if (selection === 'single' && hasHeader || selection === 'range' && hasHeader) {\n    <header\n        aria-labelledby=\"igx-aria-calendar-title-month igx-aria-calendar-title-year\"\n        class=\"igx-calendar__header\"\n    >\n        <h5 id=\"igx-aria-calendar-title-year\" class=\"igx-calendar__header-year\">\n            <ng-container *ngTemplateOutlet=\"headerTitleTemplate ?? defaultHeaderTitle; context: headerContext\"></ng-container>\n        </h5>\n        <h2 id=\"igx-aria-calendar-title-month\" class=\"igx-calendar__header-date\">\n            <ng-container *ngTemplateOutlet=\"headerTemplate ? headerTemplate : defaultHeaderDate; context: headerContext\">\n            </ng-container>\n        </h2>\n    </header>\n}\n\n\n<div\n    #wrapper\n    [style.--calendar-months]=\"monthsViewNumber\"\n    [tabIndex]=\"0\"\n    class=\"igx-calendar__wrapper\"\n    [class.igx-calendar__wrapper--vertical]=\"orientation === 'vertical'\"\n    [attr.aria-activedescendant]=\"activeDescendant\"\n    [attr.aria-multiselectable]=\"selection !== 'single'\"\n    aria-labelledby=\"calendar-desc\"\n    role=\"grid\"\n    >\n    <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n        @if (selection === 'multi') {\n            {{ monthsViewNumber && monthsViewNumber > 1 ?\n            resourceStrings.igx_calendar_multi_selection.replace('{0}', monthsViewNumber.toString()) :\n            resourceStrings.igx_calendar_singular_multi_selection}}\n        }\n        @if (selection === 'range') {\n            {{ monthsViewNumber && monthsViewNumber > 1 ?\n            resourceStrings.igx_calendar_range_selection.replace('{0}', monthsViewNumber.toString()) :\n            resourceStrings.igx_calendar_singular_range_selection}}\n        }\n        @if (selection === 'single') {\n            {{ monthsViewNumber && monthsViewNumber > 1 ?\n            resourceStrings.igx_calendar_single_selection.replace('{0}', monthsViewNumber.toString()) :\n            resourceStrings.igx_calendar_singular_single_selection}}\n        }\n    </caption>\n    <section\n        class=\"igx-calendar__pickers\"\n        [class.igx-calendar__pickers--days]=\"isDefaultView\"\n        [class.igx-calendar__pickers--vertical]=\"orientation === 'vertical'\"\n    >\n        @if (isDefaultView) {\n            @for (view of monthsViewNumber | IgxMonthViewSlots; track $index; let i = $index) {\n                <ng-container *ngTemplateOutlet=\"calendarDaysPicker; context: {$implicit: i}\"></ng-container>\n            }\n        }\n\n        @if (isYearView) {\n            <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n        }\n\n        @if (isDecadeView) {\n            <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n        }\n    </section>\n\n    <section class=\"igx-calendar__body\" [class.igx-calendar__body--vertical]=\"orientation === 'vertical'\" role=\"presentation\">\n        @if (isDefaultView) {\n            @for (view of monthsViewNumber | IgxMonthViewSlots; track $index; let i = $index) {\n                <igx-days-view\n                    #days\n                    role=\"rowgroup\"\n                    [tabIndex]=\"-1\"\n                    [selection]=\"selection\"\n                    [locale]=\"locale\"\n                    [value]=\"value\"\n                    [(activeDate)]=\"activeDate\"\n                    [(previewRangeDate)]=\"previewRangeDate\"\n                    [viewDate]=\"i | IgxGetViewDate: viewDate\"\n                    [weekStart]=\"weekStart\"\n                    [formatOptions]=\"formatOptions\"\n                    [formatViews]=\"formatViews\"\n                    [disabledDates]=\"disabledDates\"\n                    [specialDates]=\"specialDates\"\n                    [style.--calendar-row-start]=\"(i + 1) * 2\"\n                    [hideLeadingDays]=\"hideOutsideDays || i !== 0\"\n                    [hideTrailingDays]=\"hideOutsideDays || i !== monthsViewNumber - 1\"\n                    [showWeekNumbers]=\"showWeekNumbers\"\n                    [showActiveDay]=\"showActiveDay\"\n                    [standalone]=\"false\"\n                    (swiperight)=\"previousPage()\"\n                    (swipeleft)=\"nextPage()\"\n                    (dateSelected)=\"handleDateSelection($event)\"\n                    (mousedown)=\"$event.preventDefault()\">\n                </igx-days-view>\n            }\n        }\n\n        @if (isYearView) {\n            <igx-months-view\n                #months\n                role=\"rowgroup\"\n                [tabIndex]=\"-1\"\n                [date]=\"viewDate\"\n                [locale]=\"locale\"\n                [formatView]=\"formatViews.month\"\n                [monthFormat]=\"formatOptions.month\"\n                [showActive]=\"showActiveDay\"\n                [standalone]=\"false\"\n                (swiperight)=\"previousPage()\"\n                (swipeleft)=\"nextPage()\"\n                (pageChanged)=\"updateYear($event)\"\n                (activeDateChanged)=\"updateActiveDescendant($event)\"\n                (selected)=\"changeMonth($event)\"\n                (mousedown)=\"$event.preventDefault()\">\n            </igx-months-view>\n        }\n\n        @if (isDecadeView) {\n            <igx-years-view\n                #decade\n                role=\"rowgroup\"\n                [tabIndex]=\"-1\"\n                [date]=\"viewDate\"\n                [locale]=\"locale\"\n                [formatView]=\"formatViews.year\"\n                [yearFormat]=\"formatOptions.year\"\n                [showActive]=\"showActiveDay\"\n                [standalone]=\"false\"\n                (swiperight)=\"previousPage()\"\n                (swipeleft)=\"nextPage()\"\n                (pageChanged)=\"updateYear($event)\"\n                (activeDateChanged)=\"updateActiveDescendant($event)\"\n                (selected)=\"changeYear($event)\"\n                (mousedown)=\"$event.preventDefault()\">\n            </igx-years-view>\n        }\n    </section>\n</div>\n","import {\n    Component,\n    HostListener,\n    ViewChild,\n    HostBinding,\n    Input,\n    ElementRef,\n    AfterViewInit,\n    OnDestroy,\n    OnInit,\n} from \"@angular/core\";\nimport { NgTemplateOutlet, DatePipe } from \"@angular/common\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { IgxMonthsViewComponent } from \"../months-view/months-view.component\";\nimport { IgxYearsViewComponent } from \"../years-view/years-view.component\";\nimport { IgxDaysViewComponent } from \"../days-view/days-view.component\";\nimport { IgxIconComponent } from \"../../icon/icon.component\";\nimport { IgxCalendarView } from \"../calendar\";\nimport { CalendarDay } from \"../common/model\";\nimport { IgxCalendarBaseDirective } from \"../calendar-base\";\nimport { KeyboardNavigationService } from \"../calendar.services\";\nimport { formatToParts } from \"../common/helpers\";\n\nlet NEXT_ID = 0;\n@Component({\n    providers: [\n        {\n            multi: true,\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxMonthPickerComponent,\n        },\n        {\n            multi: false,\n            provide: KeyboardNavigationService\n        },\n    ],\n    selector: \"igx-month-picker\",\n    templateUrl: \"month-picker.component.html\",\n    imports: [\n        NgTemplateOutlet,\n        DatePipe,\n        IgxIconComponent,\n        IgxMonthsViewComponent,\n        IgxYearsViewComponent,\n    ]\n})\nexport class IgxMonthPickerComponent extends IgxCalendarBaseDirective implements OnInit, AfterViewInit, OnDestroy {\n    /**\n     * Sets/gets the `id` of the month picker.\n     * If not set, the `id` will have value `\"igx-month-picker-0\"`.\n     */\n    @HostBinding(\"attr.id\")\n    @Input()\n    public id = `igx-month-picker-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _activeDescendant: number;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild(\"wrapper\")\n    public wrapper: ElementRef;\n\n    /**\n     * The default css class applied to the component.\n     *\n     * @hidden\n     */\n    @HostBinding(\"class.igx-month-picker\")\n    public styleClass = true;\n\n    /**\n     * @hidden\n     */\n    @ViewChild(\"months\", { read: IgxMonthsViewComponent })\n    public monthsView: IgxMonthsViewComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChild(\"decade\", { read: IgxYearsViewComponent })\n    public dacadeView: IgxYearsViewComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChild(\"days\", { read: IgxDaysViewComponent })\n    public daysView: IgxDaysViewComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChild(\"yearsBtn\")\n    public yearsBtn: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.pageup\", [\"$event\"])\n    public previousPage(event?: KeyboardEvent) {\n        event?.preventDefault();\n        this.previousViewDate = this.viewDate;\n\n        if (this.isDefaultView) {\n            this.viewDate = CalendarDay.from(this.viewDate).add('year', -1).native;\n        }\n\n        if (this.isDecadeView) {\n            this.viewDate = CalendarDay.from(this.viewDate).add('year', -15).native;\n        }\n\n        this.viewDateChanged.emit({\n            previousValue: this.previousViewDate,\n            currentValue: this.viewDate,\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener(\"keydown.pagedown\", [\"$event\"])\n    public nextPage(event?: KeyboardEvent) {\n        event?.preventDefault();\n        this.previousViewDate = this.viewDate;\n\n        if (this.isDefaultView) {\n            this.viewDate = CalendarDay.from(this.viewDate).add('year', 1).native;\n        }\n\n        if (this.isDecadeView) {\n            this.viewDate = CalendarDay.from(this.viewDate).add('year', 15).native;\n        }\n\n        this.viewDateChanged.emit({\n            previousValue: this.previousViewDate,\n            currentValue: this.viewDate,\n        });\n    }\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic onActiveViewDecadeKB(date: Date, event: KeyboardEvent, activeViewIdx: number) {\n\t\tsuper.activeViewDecadeKB(event, activeViewIdx);\n\n\t\tif (this.platform.isActivationKey(event)) {\n            this.viewDate = date;\n            this.wrapper.nativeElement.focus();\n\t\t}\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic onActiveViewDecade(event: MouseEvent, date: Date, activeViewIdx: number): void {\n        event.preventDefault();\n\n\t\tsuper.activeViewDecade(activeViewIdx);\n        this.viewDate = date;\n\t}\n\n    /**\n     * @hidden\n     */\n    public override activeViewDecadeKB(event: KeyboardEvent) {\n        super.activeViewDecadeKB(event);\n\n        if (event.key === this.platform.KEYMAP.ARROW_RIGHT) {\n            this.nextPage(event);\n        }\n\n        if (event.key === this.platform.KEYMAP.ARROW_LEFT) {\n            this.previousPage(event);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override activeViewDecade() {\n        super.activeViewDecade();\n\n        requestAnimationFrame(() => {\n            this.dacadeView.el.nativeElement.focus();\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public changePageKB(event: KeyboardEvent, next = true) {\n        if (this.platform.isActivationKey(event)) {\n            event.stopPropagation();\n\n            if (next) {\n                this.nextPage();\n            } else {\n                this.previousPage();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public selectYear(event: Date) {\n        this.previousViewDate = this.viewDate;\n\n        this.viewDate = new Date(\n            event.getFullYear(),\n            event.getMonth(),\n            event.getDate(),\n        );\n\n        this.activeView = IgxCalendarView.Year;\n        this.wrapper.nativeElement.focus();\n    }\n\n    /**\n     * @hidden\n     */\n    public selectMonth(event: Date) {\n        this.selectDate(event);\n        this.selected.emit(this.selectedDates);\n    }\n\n    /**\n     * Selects a date.\n     * ```typescript\n     *  this.monthPicker.selectDate(new Date(`2018-06-12`));\n     * ```\n     */\n    public override selectDate(value: Date) {\n        if (!value) {\n            return new Date();\n        }\n\n        super.selectDate(value);\n        this.viewDate = value;\n    }\n\n    /**\n     * @hidden\n     */\n    public getNextYear() {\n        return CalendarDay.from(this.viewDate).add('year', 1).year;\n    }\n\n    /**\n     * @hidden\n     */\n    public getPreviousYear() {\n        return CalendarDay.from(this.viewDate).add('year', -1).year;\n    }\n\n    /**\n     * @hidden\n     */\n    public updateDate(date: Date) {\n        this.previousViewDate = this.viewDate;\n        this.viewDate = CalendarDay.from(date).add('year', -this.activeViewIdx).native;\n\n        if (this.isDefaultView) {\n            this.viewDateChanged.emit({\n                previousValue: this.previousViewDate,\n                currentValue: this.viewDate,\n            });\n        }\n    }\n\n    @HostListener('mousedown', ['$event'])\n    protected onMouseDown(event: MouseEvent) {\n        event.stopPropagation();\n        this.wrapper.nativeElement.focus();\n    }\n\n    private _showActiveDay: boolean;\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n    protected set showActiveDay(value: boolean) {\n        this._showActiveDay = value;\n        this.cdr.detectChanges();\n    }\n\n    protected get showActiveDay() {\n        return this._showActiveDay;\n    }\n\n    protected get activeDescendant(): number {\n        if (this.activeView === 'month') {\n            return (this.value as Date)?.getTime();\n        }\n\n        return this._activeDescendant ?? this.viewDate.getTime();\n    }\n\n    protected set activeDescendant(date: Date) {\n        this._activeDescendant = date.getTime();\n    }\n\n    public override get isDefaultView(): boolean {\n        return this.activeView === IgxCalendarView.Year;\n    }\n\n    public ngOnInit() {\n        this.activeView = IgxCalendarView.Year;\n    }\n\n    public ngAfterViewInit() {\n        this.keyboardNavigation\n            .attachKeyboardHandlers(this.wrapper, this)\n            .set(\"ArrowUp\", this.onArrowUp)\n            .set(\"ArrowDown\", this.onArrowDown)\n            .set(\"ArrowLeft\", this.onArrowLeft)\n            .set(\"ArrowRight\", this.onArrowRight)\n            .set(\"Enter\", this.onEnter)\n            .set(\" \", this.onEnter)\n            .set(\"Home\", this.onHome)\n            .set(\"End\", this.onEnd)\n            .set(\"PageUp\", this.handlePageUp)\n            .set(\"PageDown\", this.handlePageDown);\n\n        this.wrapper.nativeElement.addEventListener('focus', (event: FocusEvent) => this.onWrapperFocus(event));\n        this.wrapper.nativeElement.addEventListener('blur', (event: FocusEvent) => this.onWrapperBlur(event));\n\n        this.activeView$.subscribe((view) => {\n            this.activeViewChanged.emit(view);\n\n            this.viewDateChanged.emit({\n                previousValue: this.previousViewDate,\n                currentValue: this.viewDate\n            });\n        });\n    }\n\n    private onWrapperFocus(event: FocusEvent) {\n        event.stopPropagation();\n        this.showActiveDay = true;\n    }\n\n    private onWrapperBlur(event: FocusEvent) {\n        event.stopPropagation();\n\n        this.showActiveDay = false;\n        this._onTouchedCallback();\n    }\n\n    private handlePageUpDown(event: KeyboardEvent, delta: number) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (this.isDefaultView && event.shiftKey) {\n            this.viewDate = CalendarDay.from(this.viewDate).add('year', delta).native;\n            this.cdr.detectChanges();\n        } else {\n            delta > 0 ? this.nextPage() : this.previousPage();\n        }\n    }\n\n    private handlePageUp(event: KeyboardEvent) {\n        this.handlePageUpDown(event, -1);\n    }\n\n    private handlePageDown(event: KeyboardEvent) {\n        this.handlePageUpDown(event, 1);\n    }\n\n    private onArrowUp(event: KeyboardEvent) {\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownArrowUp(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownArrowUp(event);\n        }\n    }\n\n    private onArrowDown(event: KeyboardEvent) {\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownArrowDown(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownArrowDown(event);\n        }\n    }\n\n    private onArrowLeft(event: KeyboardEvent) {\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownArrowLeft(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownArrowLeft(event);\n        }\n    }\n\n    private onArrowRight(event: KeyboardEvent) {\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownArrowRight(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownArrowRight(event);\n        }\n    }\n\n    private onEnter(event: KeyboardEvent) {\n        event.stopPropagation();\n\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownEnter(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownEnter(event);\n        }\n    }\n\n    private onHome(event: KeyboardEvent) {\n        event.stopPropagation();\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownHome(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownHome(event);\n        }\n    }\n\n    private onEnd(event: KeyboardEvent) {\n        event.stopPropagation();\n        if (this.isDefaultView) {\n            this.monthsView.onKeydownEnd(event);\n        }\n\n        if (this.isDecadeView) {\n            this.dacadeView.onKeydownEnd(event);\n        }\n    }\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic ngOnDestroy(): void {\n        this.keyboardNavigation.detachKeyboardHandlers();\n        this.wrapper?.nativeElement.removeEventListener('focus', this.onWrapperFocus);\n        this.wrapper?.nativeElement.removeEventListener('blur', this.onWrapperBlur);\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic getPrevYearDate(date: Date): Date {\n\t\treturn CalendarDay.from(date).add('year', -1).native;\n\t}\n\n\t/**\n\t * @hidden\n\t * @internal\n\t */\n\tpublic getNextYearDate(date: Date): Date {\n        return CalendarDay.from(date).add('year', 1).native;\n\t}\n\n\t/**\n\t * Getter for the context object inside the calendar templates.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tpublic getContext(i: number) {\n        const date = CalendarDay.from(this.viewDate).add('month', i).native;\n\t\treturn this.generateContext(date, i);\n\t}\n\n\t/**\n\t * Helper method building and returning the context object inside the calendar templates.\n\t *\n\t * @hidden\n\t * @internal\n\t */\n\tprivate generateContext(value: Date | Date[], i?: number) {\n        const construct = (date: Date, index: number) => ({\n            index: index,\n            date,\n            ...formatToParts(date, this.locale, this.formatOptions, [\n                \"era\",\n                \"year\",\n                \"month\",\n                \"day\",\n                \"weekday\",\n            ]),\n        });\n\n        const formatObject = Array.isArray(value)\n            ? value.map((date, index) => construct(date, index))\n            : construct(value, i);\n\n        return { $implicit: formatObject };\n\t}\n}\n","<!-- Previous arrow icon -->\n<ng-template #prevArrow let-obj>\n    <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_prev\"></igx-icon>\n</ng-template>\n\n<!-- Next arrow icon -->\n<ng-template #nextArrow let-obj>\n    <igx-icon aria-hidden=\"true\" family=\"default\" name=\"arrow_next\"></igx-icon>\n</ng-template>\n\n<!-- Previous picker button -->\n<ng-template #prevPageButton let-obj>\n    <div\n        #prevPageBtn\n        tabindex=\"0\"\n        class=\"igx-calendar-picker__prev\"\n        role=\"button\"\n        [attr.aria-label]=\"prevNavLabel((getPrevYearDate(viewDate) | date: 'YYYY'))\"\n        data-action=\"prev\"\n        igxCalendarScrollPage\n        (mousedown)=\"previousPage()\"\n        (keydown)=\"changePageKB($event, false)\"\n    >\n        <ng-container *ngTemplateOutlet=\"prevArrow\"></ng-container>\n    </div>\n</ng-template>\n\n<!-- Next picker button -->\n<ng-template #nextPageButton let-obj>\n    <div\n        #nextPageBtn\n        tabindex=\"0\"\n        class=\"igx-calendar-picker__next\"\n        role=\"button\"\n        [attr.aria-label]=\"nextNavLabel((getNextYearDate(viewDate) | date: 'YYYY'))\"\n        data-action=\"next\"\n        igxCalendarScrollPage\n        (mousedown)=\"nextPage()\"\n        (keydown)=\"changePageKB($event)\"\n    >\n        <ng-container *ngTemplateOutlet=\"nextArrow\"></ng-container>\n    </div>\n</ng-template>\n\n<!-- Year -->\n<ng-template #defaultYear let-obj>\n    @if (activeView === 'year') {\n        <span class=\"igx-calendar__aria-off-screen\" aria-live=\"polite\">{{ formattedYear(obj.date) }}</span>\n    }\n    <span\n        #yearsBtn\n        tabindex=\"0\"\n        role=\"button\"\n        [attr.aria-label]=\"(obj.date | date: 'yyyy') + ', ' + resourceStrings.igx_calendar_select_year\"\n        (keydown)=\"onActiveViewDecadeKB(obj.date, $event, obj.index)\"\n        (mousedown)=\"onActiveViewDecade($event, obj.date, obj.index)\"\n        class=\"igx-calendar-picker__date\">\n        {{ formattedYear(obj.date) }}\n    </span>\n</ng-template>\n\n<!-- Decade -->\n<ng-template #defaultDecade>\n    <span>{{ getDecadeRange().start }} - {{ getDecadeRange().end }}</span>\n</ng-template>\n\n<!-- PICKER IN MONTHS -->\n<ng-template #calendarYearPicker>\n    <section class=\"igx-calendar-picker\">\n        <div class=\"igx-calendar-picker__dates\">\n            <ng-container\n                *ngTemplateOutlet=\"defaultYear; context: getContext(0)\">\n            </ng-container>\n        </div>\n        <div class=\"igx-calendar-picker__nav\">\n            <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n        </div>\n    </section>\n</ng-template>\n\n<!-- PICKER IN YEARS -->\n<ng-template #calendarDecadePicker>\n    <section class=\"igx-calendar-picker\">\n        <div class=\"igx-calendar-picker__dates\" aria-live=\"polite\">\n            <ng-container\n                    *ngTemplateOutlet=\"defaultDecade;\">\n            </ng-container>\n        </div>\n        <div class=\"igx-calendar-picker__nav\">\n            <ng-container *ngTemplateOutlet=\"prevPageButton\"></ng-container>\n            <ng-container *ngTemplateOutlet=\"nextPageButton\"></ng-container>\n        </div>\n    </section>\n</ng-template>\n\n<div\n    #wrapper\n    [tabIndex]=\"0\"\n    class=\"igx-calendar__wrapper\"\n    [attr.aria-activedescendant]=\"activeDescendant\"\n    [attr.aria-multiselectable]=\"selection !== 'single'\"\n    aria-labelledby=\"calendar-desc\"\n    role=\"grid\"\n    >\n    <caption id=\"calendar-desc\" tabindex=\"-1\" class=\"igx-calendar__aria-off-screen\">\n        {{ resourceStrings.igx_calendar_singular_single_selection}}\n    </caption>\n\n    <section class=\"igx-calendar__pickers\">\n        @if (isDefaultView) {\n            <ng-container *ngTemplateOutlet=\"calendarYearPicker\"></ng-container>\n        }\n\n        @if (isDecadeView) {\n            <ng-container *ngTemplateOutlet=\"calendarDecadePicker\"></ng-container>\n        }\n    </section>\n\n    <section class=\"igx-calendar__body\">\n        @if (isDefaultView) {\n            <igx-months-view\n                #months\n                role=\"rowgroup\"\n                [tabIndex]=\"-1\"\n                [date]=\"viewDate\"\n                [locale]=\"locale\"\n                [formatView]=\"formatViews.month\"\n                [monthFormat]=\"formatOptions.month\"\n                [showActive]=\"showActiveDay\"\n                [standalone]=\"false\"\n                (swiperight)=\"previousPage()\"\n                (swipeleft)=\"nextPage()\"\n                (selected)=\"selectMonth($event)\"\n                (pageChanged)=\"updateDate($event)\"\n                (mousedown)=\"$event.preventDefault()\">\n            >\n            </igx-months-view>\n        }\n\n        @if (isDecadeView) {\n            <igx-years-view\n                #decade\n                role=\"rowgroup\"\n                [tabIndex]=\"-1\"\n                [date]=\"viewDate\"\n                [locale]=\"locale\"\n                [formatView]=\"formatViews.year\"\n                [yearFormat]=\"formatOptions.year\"\n                [showActive]=\"showActiveDay\"\n                [standalone]=\"false\"\n                (swiperight)=\"previousPage()\"\n                (swipeleft)=\"nextPage()\"\n                (selected)=\"selectYear($event)\"\n                (pageChanged)=\"updateDate($event)\"\n                (mousedown)=\"$event.preventDefault()\"\n            >\n            </igx-years-view>\n        }\n    </section>\n</div>\n","import { IgxCalendarComponent } from './calendar.component';\nimport { IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, IgxCalendarMonthDirective, IgxCalendarSubheaderTemplateDirective, IgxCalendarYearDirective } from './calendar.directives';\nimport { IgxDaysViewComponent } from './days-view/days-view.component';\nimport { IgxMonthPickerComponent } from './month-picker/month-picker.component';\nimport { IgxMonthsViewComponent } from './months-view/months-view.component';\nimport { IgxYearsViewComponent } from './years-view/years-view.component';\n\nexport * from './calendar';\nexport * from './calendar.component';\nexport * from './calendar.directives';\nexport * from './days-view/days-view.component';\nexport * from './months-view/months-view.component';\nexport * from './years-view/years-view.component';\nexport * from './month-picker/month-picker.component';\n\n/* NOTE: Calendar directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_CALENDAR_DIRECTIVES = [\n    IgxCalendarComponent,\n    IgxDaysViewComponent,\n    IgxMonthsViewComponent,\n    IgxYearsViewComponent,\n    IgxMonthPickerComponent,\n    IgxCalendarHeaderTemplateDirective,\n    IgxCalendarHeaderTitleTemplateDirective,\n    IgxCalendarMonthDirective,\n    IgxCalendarYearDirective,\n    IgxCalendarSubheaderTemplateDirective\n] as const;\n\n","import {\n    Component,\n    Directive,\n    HostBinding,\n    Optional,\n    Inject,\n    Input,\n    OnInit,\n    OnChanges,\n    SimpleChanges,\n    booleanAttribute\n} from '@angular/core';\n\nimport { mkenum } from '../core/utils';\n\nlet NEXT_ID = 0;\n\n/**\n * IgxCardMedia is container for the card media section.\n * Use it to wrap images and videos.\n */\n@Directive({\n    selector: 'igx-card-media',\n    standalone: true\n})\nexport class IgxCardMediaDirective {\n    /** @hidden @internal */\n    @HostBinding('class.igx-card__media')\n    public cssClass = 'igx-card__media';\n\n    /**\n     * Sets the `width` and `min-width` style property\n     * of the media container. If not provided it will be set to `auto`.\n     *\n     * @example\n     * ```html\n     * <igx-card-media width=\"300px\"></igx-card-media>\n     * ```\n     */\n    @HostBinding('style.width')\n    @HostBinding('style.min-width')\n    @Input()\n    public width = 'auto';\n\n    /**\n     * Sets the `height` style property of the media container.\n     * If not provided it will be set to `auto`.\n     *\n     * @example\n     * ```html\n     * <igx-card-media height=\"50%\"></igx-card-media>\n     * ```\n     */\n    @HostBinding('style.height')\n    @Input()\n    public height = 'auto';\n\n    /**\n     * Sets the `role` attribute of the media container.\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'img';\n}\n\n/**\n * IgxCardHeader is container for the card header\n */\n@Component({\n    selector: 'igx-card-header',\n    templateUrl: 'card-header.component.html',\n    standalone: true\n})\nexport class IgxCardHeaderComponent {\n    /** @hidden @internal */\n    @HostBinding('class.igx-card-header')\n    public cssClass = 'igx-card-header';\n\n    /**\n     * Sets the layout style of the header.\n     * By default the header elements(thumbnail and title/subtitle) are aligned horizontally.\n     *\n     * @example\n     * ```html\n     * <igx-card-header [vertical]=\"true\"></igx-card-header>\n     * ```\n     */\n    @HostBinding('class.igx-card-header--vertical')\n    @Input({ transform: booleanAttribute })\n    public vertical = false;\n}\n\n/**\n * IgxCardThumbnail is container for the card thumbnail section.\n * Use it to wrap anything you want to be used as a thumbnail.\n */\n@Directive({\n    selector: '[igxCardThumbnail]',\n    standalone: true\n})\nexport class IgxCardThumbnailDirective { }\n\n/**\n * igxCardHeaderTitle is used to denote the header title in a card.\n * Use it to tag text nodes.\n */\n@Directive({\n    selector: '[igxCardHeaderTitle]',\n    standalone: true\n})\nexport class IgxCardHeaderTitleDirective {\n    /** @hidden @internal */\n    @HostBinding('class.igx-card-header__title')\n    public cssClass = 'igx-card__header__title';\n}\n\n/**\n * igxCardHeaderSubtitle is used to denote the header subtitle in a card.\n * Use it to tag text nodes.\n */\n@Directive({\n    selector: '[igxCardHeaderSubtitle]',\n    standalone: true\n})\nexport class IgxCardHeaderSubtitleDirective {\n    /** @hidden @internal */\n    @HostBinding('class.igx-card-header__subtitle')\n    public cssClass = 'igx-card-header__subtitle';\n}\n/**\n * IgxCardContent is container for the card content.\n */\n@Directive({\n\n    selector: 'igx-card-content',\n    standalone: true\n})\nexport class IgxCardContentDirective {\n    /** @hidden @internal */\n    @HostBinding('class.igx-card-content')\n    public cssClass = 'igx-card-content';\n}\n\n/**\n * IgxCardFooter is container for the card footer\n */\n@Directive({\n\n    selector: 'igx-card-footer',\n    standalone: true\n})\nexport class IgxCardFooterDirective {\n    /**\n     * Sets the value of the `role` attribute of the card footer.\n     * By default the value is set to `footer`.\n     *\n     * @example\n     * ```html\n     * <igx-card-footer role=\"footer\"></igx-card-footer>\n     * ```\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'footer';\n}\n\n/**\n * Card provides a way to display organized content in appealing way.\n *\n * @igxModule IgxCardModule\n *\n * @igxTheme igx-card-theme, igx-icon-theme, igx-button-theme\n *\n * @igxKeywords card, button, avatar, icon\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI Card serves as a container that allows custom content to be organized in an appealing way. There are\n * five sections in a card that you can use to organize your content. These are header, media, content, actions, and footer.\n *\n * @example\n * ```html\n * <igx-card>\n *   <igx-card-header>\n *     <h3 igxCardHeaderTitle>{{title}}</h3>\n *     <h5 igxCardHeaderSubtitle>{{subtitle}}</h5>\n *   </igx-card-header>\n *   <igx-card-actions>\n *       <button type=\"button\" igxButton igxRipple>Share</button>\n *       <button type=\"button\" igxButton igxRipple>Play Album</button>\n *   </igx-card-actions>\n * </igx-card>\n * ```\n */\n\n@Component({\n    selector: 'igx-card',\n    templateUrl: 'card.component.html',\n    standalone: true\n})\nexport class IgxCardComponent {\n    /**\n     * Sets/gets the `id` of the card.\n     * If not set, `id` will have value `\"igx-card-0\"`;\n     *\n     * @example\n     * ```html\n     * <igx-card id=\"my-first-card\"></igx-card>\n     * ```\n     * ```typescript\n     * let cardId =  this.card.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-card-${NEXT_ID++}`;\n\n    /**\n     * Sets the `igx-card` css class to the card component.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-card')\n    public cssClass = 'igx-card';\n\n    /**\n     * Sets the value of the `role` attribute of the card.\n     * By default the value is set to `group`.\n     *\n     * @example\n     * ```html\n     * <igx-card role=\"group\"></igx-card>\n     * ```\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'group';\n\n    /**\n     * Sets/gets whether the card is elevated.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-card elevated></igx-card>\n     * ```\n     * ```typescript\n     * let cardElevation = this.card.elevated;\n     * ```\n     */\n    @Input({transform: booleanAttribute})\n    @HostBinding('class.igx-card--elevated')\n    public elevated = false;\n\n    /**\n     * Sets the value of the `horizontal` attribute of the card.\n     * Setting this to `true` will make the different card sections align horizontally,\n     * essentially flipping the card to the side.\n     *\n     * @example\n     * ```html\n     * <igx-card [horizontal]=\"true\"></igx-card>\n     * ```\n     */\n    @HostBinding('class.igx-card--horizontal')\n    @Input({ transform: booleanAttribute })\n    public horizontal = false;\n}\n\nexport const IgxCardActionsLayout = /*@__PURE__*/mkenum({\n    START: 'start',\n    JUSTIFY: 'justify'\n});\nexport type IgxCardActionsLayout = (typeof IgxCardActionsLayout)[keyof typeof IgxCardActionsLayout];\n\n/**\n * IgxCardActions is container for the card actions.\n */\n@Component({\n\n    selector: 'igx-card-actions',\n    templateUrl: 'card-actions.component.html',\n    standalone: true\n})\nexport class IgxCardActionsComponent implements OnInit, OnChanges {\n    /**\n     * Sets the layout style of the actions.\n     * You can justify the elements slotted in the igx-card-action container\n     * so that they are positioned equally from one another taking up all the\n     * space available along the card actions axis.\n     *\n     * @example\n     * ```html\n     * <igx-card-actions layout=\"justify\"></igx-card-actions>\n     * ```\n     */\n    @HostBinding('class.igx-card-actions')\n    @Input()\n    public layout: IgxCardActionsLayout | string = IgxCardActionsLayout.START;\n\n    /**\n     * Sets the vertical attribute of the actions.\n     * When set to `true` the actions will be layed out vertically.\n     */\n    @HostBinding('class.igx-card-actions--vertical')\n    @Input({ transform: booleanAttribute })\n    public vertical = false;\n\n    /**\n     * A getter that returns `true` when the layout has been\n     * set to `justify`.\n     */\n    @HostBinding('class.igx-card-actions--justify')\n    public get isJustifyLayout() {\n        return this.layout === IgxCardActionsLayout.JUSTIFY;\n    }\n\n    private isVerticalSet = false;\n\n    constructor(@Optional() @Inject(IgxCardComponent) public card: IgxCardComponent) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnChanges(changes: SimpleChanges) {\n        for (const prop in changes) {\n            if (prop === 'vertical') {\n                this.isVerticalSet = true;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnInit() {\n        if (!this.isVerticalSet && this.card.horizontal) {\n            this.vertical = true;\n        }\n    }\n}\n","<div class=\"igx-card-header__thumbnail\">\n    <ng-content select=\"igx-avatar, igx-card-media, [igxCardThumbnail]\"></ng-content>\n</div>\n\n<div class=\"igx-card-header__titles\">\n    <ng-content select=\"\n        [igxCardHeaderTitle],\n        [igxCardHeaderSubtitle],\n        .igx-card-header__title,\n        .igx-card-header__title--small,\n        .igx-card-header__subtitle\">\n    </ng-content>\n</div>\n\n<ng-content></ng-content>\n","<ng-content></ng-content>\n","<div #buttons class=\"igx-card-actions__start\">\n    <ng-content select=\"[igxStart], [igxButton]:not([igxEnd])\"></ng-content>\n</div>\n\n<ng-content></ng-content>\n\n<div class=\"igx-card-actions__end\">\n    <ng-content select=\"[igxEnd], [igxIconButton]:not([igxStart]), igx-icon:not([igxStart])\"></ng-content>\n</div>\n","import {\n    IgxCardActionsComponent,\n    IgxCardComponent,\n    IgxCardContentDirective,\n    IgxCardFooterDirective,\n    IgxCardHeaderComponent,\n    IgxCardHeaderSubtitleDirective,\n    IgxCardHeaderTitleDirective,\n    IgxCardMediaDirective,\n    IgxCardThumbnailDirective\n} from './card.component';\n\nexport * from './card.component';\n\n/* NOTE: Card directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_CARD_DIRECTIVES = [\n    IgxCardComponent,\n    IgxCardHeaderComponent,\n    IgxCardMediaDirective,\n    IgxCardContentDirective,\n    IgxCardActionsComponent,\n    IgxCardFooterDirective,\n    IgxCardHeaderTitleDirective,\n    IgxCardHeaderSubtitleDirective,\n    IgxCardThumbnailDirective\n] as const;\n","export interface ICarouselResourceStrings {\n    igx_carousel_of?: string;\n    igx_carousel_slide?: string;\n    igx_carousel_previous_slide?: string;\n    igx_carousel_next_slide?: string;\n}\n\nexport const CarouselResourceStringsEN: ICarouselResourceStrings = {\n    igx_carousel_of: 'of',\n    igx_carousel_slide: 'slide',\n    igx_carousel_previous_slide: 'previous slide',\n    igx_carousel_next_slide: 'next slide'\n};\n","import { mkenum } from '../core/utils';\n\nexport const CarouselAnimationType = /*@__PURE__*/mkenum({\n    none: 'none',\n    slide: 'slide',\n    fade: 'fade'\n});\nexport type CarouselAnimationType = (typeof CarouselAnimationType)[keyof typeof CarouselAnimationType];\n\nexport const CarouselIndicatorsOrientation = /*@__PURE__*/mkenum({\n    /**\n     * @deprecated in version 19.1.0. Use `end` instead.\n     */\n    bottom: 'bottom',\n    /**\n     * @deprecated in version 19.1.0. Use `start` instead.\n     */\n    top: 'top',\n    start: 'start',\n    end: 'end'\n});\nexport type CarouselIndicatorsOrientation = (typeof CarouselIndicatorsOrientation)[keyof typeof CarouselIndicatorsOrientation];\n","import { AnimationReferenceMetadata, useAnimation } from '@angular/animations';\nimport { ChangeDetectorRef, EventEmitter, Inject, InjectionToken } from '@angular/core';\nimport { IgxAngularAnimationService } from '../services/animation/angular-animation-service';\nimport { AnimationPlayer, AnimationService } from '../services/animation/animation';\nimport { fadeIn, slideInLeft } from 'igniteui-angular/animations';\nimport { CarouselAnimationType, CarouselIndicatorsOrientation } from './enums';\n\nexport enum Direction { NONE, NEXT, PREV }\n\nexport interface CarouselAnimationSettings {\n    enterAnimation: AnimationReferenceMetadata;\n    leaveAnimation: AnimationReferenceMetadata;\n}\n\nexport interface ICarouselComponentBase {\n    id: string;\n    role: string;\n    cssClass: string;\n    loop: boolean;\n    pause: boolean;\n    navigation: boolean;\n    indicators: boolean;\n    vertical: boolean;\n    keyboardSupport: boolean;\n    gesturesSupport: boolean;\n    maximumIndicatorsCount: number;\n    indicatorsOrientation: CarouselIndicatorsOrientation;\n    animationType: CarouselAnimationType;\n    total: number;\n    current: number;\n    interval: number;\n    slideChanged: EventEmitter<any>;\n    slideAdded: EventEmitter<any>;\n    slideRemoved: EventEmitter<any>;\n    carouselPaused: EventEmitter<any>;\n    carouselPlaying: EventEmitter<any>;\n    next(): void;\n    prev(): void;\n    play(): void;\n    stop(): void\n}\n\n/** @hidden */\nexport const IGX_CAROUSEL_COMPONENT = /*@__PURE__*/new InjectionToken<ICarouselComponentBase>('IgxCarouselToken');\n\n/** @hidden */\nexport interface IgxSlideComponentBase {\n    direction: Direction;\n    previous: boolean;\n}\n\n/** @hidden */\nexport abstract class IgxCarouselComponentBase {\n    /** @hidden */\n    public animationType: CarouselAnimationType = CarouselAnimationType.slide;\n\n    /** @hidden @internal */\n    public enterAnimationDone = new EventEmitter();\n    /** @hidden @internal */\n    public leaveAnimationDone = new EventEmitter();\n\n    /** @hidden */\n    protected currentItem: IgxSlideComponentBase;\n    /** @hidden */\n    protected previousItem: IgxSlideComponentBase;\n    /** @hidden */\n    protected enterAnimationPlayer?: AnimationPlayer;\n    /** @hidden */\n    protected leaveAnimationPlayer?: AnimationPlayer;\n    /** @hidden */\n    protected defaultAnimationDuration = 320;\n    /** @hidden */\n    protected animationPosition = 0;\n    /** @hidden */\n    protected newDuration = 0;\n    /** @hidden */\n    protected vertical = false;\n\n    constructor(\n        @Inject(IgxAngularAnimationService) private animationService: AnimationService,\n        protected cdr: ChangeDetectorRef) {\n    }\n\n    /** @hidden */\n    protected triggerAnimations() {\n        if (this.animationType !== CarouselAnimationType.none) {\n            if (this.animationStarted(this.leaveAnimationPlayer) || this.animationStarted(this.enterAnimationPlayer)) {\n                requestAnimationFrame(() => {\n                    this.resetAnimations();\n                    this.playAnimations();\n                });\n            } else {\n                this.playAnimations();\n            }\n        }\n    }\n\n    /** @hidden */\n    protected animationStarted(animation: AnimationPlayer): boolean {\n        return animation && animation.hasStarted();\n    }\n\n    /** @hidden */\n    protected playAnimations() {\n        this.playLeaveAnimation();\n        this.playEnterAnimation();\n    }\n\n    private resetAnimations() {\n        if (this.animationStarted(this.leaveAnimationPlayer)) {\n            this.leaveAnimationPlayer.reset();\n            this.leaveAnimationDone.emit();\n        }\n\n        if (this.animationStarted(this.enterAnimationPlayer)) {\n            this.enterAnimationPlayer.reset();\n            this.enterAnimationDone.emit();\n            this.cdr.markForCheck();\n        }\n    }\n\n    private getAnimation(): CarouselAnimationSettings {\n        let duration;\n        if (this.newDuration) {\n            duration = this.animationPosition ? this.animationPosition * this.newDuration : this.newDuration;\n        } else {\n            duration = this.animationPosition ? this.animationPosition * this.defaultAnimationDuration : this.defaultAnimationDuration;\n        }\n\n        const trans = this.animationPosition ? this.animationPosition * 100 : 100;\n        switch (this.animationType) {\n            case CarouselAnimationType.slide:\n                return {\n                    enterAnimation: useAnimation(slideInLeft,\n                        {\n                            params: {\n                                delay: '0s',\n                                duration: `${duration}ms`,\n                                endOpacity: 1,\n                                startOpacity: 1,\n                                fromPosition: `${this.vertical ? 'translateY' : 'translateX'}(${this.currentItem.direction === 1 ? trans : -trans}%)`,\n                                toPosition: `${this.vertical ? 'translateY(0%)' : 'translateX(0%)'}`\n                            }\n                        }),\n                    leaveAnimation: useAnimation(slideInLeft,\n                        {\n                            params: {\n                                delay: '0s',\n                                duration: `${duration}ms`,\n                                endOpacity: 1,\n                                startOpacity: 1,\n                                fromPosition: `${this.vertical ? 'translateY(0%)' : 'translateX(0%)'}`,\n                                toPosition: `${this.vertical ? 'translateY' : 'translateX'}(${this.currentItem.direction === 1 ? -trans : trans}%)`,\n                            }\n                        })\n                };\n            case CarouselAnimationType.fade:\n                return {\n                    enterAnimation: useAnimation(fadeIn,\n                        { params: { duration: `${duration}ms`, startOpacity: `${this.animationPosition}` } }),\n                    leaveAnimation: null\n                };\n        }\n        return {\n            enterAnimation: null,\n            leaveAnimation: null\n        };\n    }\n\n    private playEnterAnimation() {\n        const animation = this.getAnimation().enterAnimation;\n        if (!animation) {\n            return;\n        }\n\n        this.enterAnimationPlayer = this.animationService.buildAnimation(animation, this.getCurrentElement());\n        this.enterAnimationPlayer.animationEnd.subscribe(() => {\n            // TODO: animation may never end. Find better way to clean up the player\n            if (this.enterAnimationPlayer) {\n                this.enterAnimationPlayer.reset();\n                this.enterAnimationPlayer = null;\n            }\n            this.animationPosition = 0;\n            this.newDuration = 0;\n            this.previousItem.previous = false;\n            this.enterAnimationDone.emit();\n            this.cdr.markForCheck();\n        });\n        this.previousItem.previous = true;\n        this.enterAnimationPlayer.play();\n    }\n\n    private playLeaveAnimation() {\n        const animation = this.getAnimation().leaveAnimation;\n        if (!animation) {\n            return;\n        }\n\n        this.leaveAnimationPlayer = this.animationService.buildAnimation(animation, this.getPreviousElement());\n        this.leaveAnimationPlayer.animationEnd.subscribe(() => {\n            // TODO: animation may never end. Find better way to clean up the player\n            if (this.leaveAnimationPlayer) {\n                this.leaveAnimationPlayer.reset();\n                this.leaveAnimationPlayer = null;\n            }\n            this.animationPosition = 0;\n            this.newDuration = 0;\n            this.leaveAnimationDone.emit();\n        });\n        this.leaveAnimationPlayer.play();\n    }\n\n    protected abstract getPreviousElement(): HTMLElement;\n\n    protected abstract getCurrentElement(): HTMLElement;\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[igxCarouselIndicator]',\n    standalone: true\n})\nexport class IgxCarouselIndicatorDirective {\n}\n\n@Directive({\n    selector: '[igxCarouselNextButton]',\n    standalone: true\n})\nexport class IgxCarouselNextButtonDirective {\n}\n\n@Directive({\n    selector: '[igxCarouselPrevButton]',\n    standalone: true\n})\nexport class IgxCarouselPrevButtonDirective {\n}\n","import { Component, OnDestroy, Input, HostBinding, Output, EventEmitter, ElementRef, AfterContentChecked, booleanAttribute, Inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Direction, ICarouselComponentBase, IGX_CAROUSEL_COMPONENT, IgxSlideComponentBase } from './carousel-base';\n\n/**\n * A slide component that usually holds an image and/or a caption text.\n * IgxSlideComponent is usually a child component of an IgxCarouselComponent.\n *\n * ```\n * <igx-slide [input bindings] >\n *    <ng-content></ng-content>\n * </igx-slide>\n * ```\n *\n * @export\n */\n@Component({\n    selector: 'igx-slide',\n    templateUrl: 'slide.component.html',\n    standalone: true\n})\nexport class IgxSlideComponent implements AfterContentChecked, OnDestroy, IgxSlideComponentBase {\n    /**\n     * Gets/sets the `index` of the slide inside the carousel.\n     * ```html\n     * <igx-carousel>\n     *  <igx-slide index=\"1\"></igx-slide>\n     * <igx-carousel>\n     * ```\n     *\n     * @memberOf IgxSlideComponent\n     */\n    @Input() public index: number;\n\n    /**\n     * Gets/sets the target `direction` for the slide.\n     * ```html\n     * <igx-carousel>\n     *  <igx-slide direction=\"NEXT\"></igx-slide>\n     * <igx-carousel>\n     * ```\n     *\n     * @memberOf IgxSlideComponent\n     */\n    @Input() public direction: Direction;\n\n    @Input()\n    public total: number;\n\n    /**\n     * Returns the `tabIndex` of the slide component.\n     * ```typescript\n     * let tabIndex =  this.carousel.tabIndex;\n     * ```\n     *\n     * @memberof IgxSlideComponent\n     */\n    @HostBinding('attr.tabindex')\n    public get tabIndex() {\n        return this.active && this.carousel.keyboardSupport ? 0 : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.id')\n    public id: string;\n\n    /**\n     * Returns the `role` of the slide component.\n     * By default is set to `tabpanel`\n     *\n     * @memberof IgxSlideComponent\n     */\n    @HostBinding('attr.role')\n    public tab = 'tabpanel';\n\n    /** @hidden */\n    @HostBinding('attr.aria-labelledby')\n    public ariaLabelledBy;\n\n    /**\n     * Returns the class of the slide component.\n     * ```typescript\n     * let class =  this.slide.cssClass;\n     * ```\n     *\n     * @memberof IgxSlideComponent\n     */\n    @HostBinding('class.igx-slide')\n    public cssClass = 'igx-slide';\n\n    /**\n     * Gets/sets the `active` state of the slide.\n     * ```html\n     * <igx-carousel>\n     *  <igx-slide [active] =\"false\"></igx-slide>\n     * <igx-carousel>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-carousel>\n     *  <igx-slide [(active)] =\"model.isActive\"></igx-slide>\n     * <igx-carousel>\n     * ```\n     *\n     * @memberof IgxSlideComponent\n     */\n    @HostBinding('class.igx-slide--current')\n    @Input({ transform: booleanAttribute })\n    public get active(): boolean {\n        return this._active;\n    }\n\n    public set active(value) {\n        this._active = value;\n        this.activeChange.emit(this._active);\n    }\n\n    @HostBinding('class.igx-slide--previous')\n    @Input({ transform: booleanAttribute }) public previous = false;\n\n    /**\n     * @hidden\n     */\n    @Output() public activeChange = new EventEmitter<boolean>();\n\n    private _active = false;\n    private _destroy$ = new Subject<boolean>();\n\n    constructor(\n        private elementRef: ElementRef,\n        @Inject(IGX_CAROUSEL_COMPONENT) private carousel: ICarouselComponentBase\n    ) { }\n\n    /**\n     * Returns a reference to the carousel element in the DOM.\n     * ```typescript\n     * let nativeElement =  this.slide.nativeElement;\n     * ```\n     *\n     * @memberof IgxSlideComponent\n     */\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get isDestroyed(): Subject<boolean> {\n        return this._destroy$;\n    }\n\n    public ngAfterContentChecked() {\n        this.id = `panel-${this.index}`;\n        this.ariaLabelledBy = `tab-${this.index}-${this.total}`;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroy$.next(true);\n        this._destroy$.complete();\n    }\n}\n","<ng-content></ng-content>\n","import { Inject, Injectable, NgZone } from '@angular/core';\nimport { ɵgetDOM as getDOM } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { PlatformUtil } from './utils';\nimport { HammerManager, HammerOptions, HammerStatic } from './touch-annotations';\n\nconst EVENT_SUFFIX = 'precise';\n\n/**\n * Touch gestures manager based on Hammer.js\n * Use with caution, this will track references for single manager per element. Very TBD. Much TODO.\n *\n * @hidden\n */\n@Injectable()\nexport class HammerGesturesManager {\n    public static Hammer: HammerStatic = typeof window !== 'undefined' ? (window as any).Hammer : null;\n    /**\n     * Event option defaults for each recognizer, see http://hammerjs.github.io/api/ for API listing.\n     */\n    protected hammerOptions: HammerOptions = {};\n\n    private platformBrowser: boolean;\n    private _hammerManagers: Array<{ element: EventTarget; manager: HammerManager }> = [];\n\n    constructor(private _zone: NgZone, @Inject(DOCUMENT) private doc: any, private platformUtil: PlatformUtil) {\n        this.platformBrowser = this.platformUtil.isBrowser;\n        if (this.platformBrowser && HammerGesturesManager.Hammer) {\n            this.hammerOptions = {\n                // D.P. #447 Force TouchInput due to PointerEventInput bug (https://github.com/hammerjs/hammer.js/issues/1065)\n                // see https://github.com/IgniteUI/igniteui-angular/issues/447#issuecomment-324601803\n                inputClass: HammerGesturesManager.Hammer.TouchInput,\n                recognizers: [\n                    [HammerGesturesManager.Hammer.Pan, { threshold: 0 }],\n                    [HammerGesturesManager.Hammer.Swipe, { direction: HammerGesturesManager.Hammer.DIRECTION_HORIZONTAL }],\n                    [HammerGesturesManager.Hammer.Tap],\n                    [HammerGesturesManager.Hammer.Tap, { event: 'doubletap', taps: 2 }, ['tap']]\n                ]\n            };\n        }\n    }\n\n    public supports(eventName: string): boolean {\n        return eventName.toLowerCase().endsWith('.' + EVENT_SUFFIX);\n    }\n\n    /**\n     * Add listener extended with options for Hammer.js. Will use defaults if none are provided.\n     * Modeling after other event plugins for easy future modifications.\n     */\n    public addEventListener(\n        element: HTMLElement,\n        eventName: string,\n        eventHandler: (eventObj) => void,\n        options: HammerOptions = null): () => void {\n        if (!this.platformBrowser) {\n            return;\n        }\n\n        // Creating the manager bind events, must be done outside of angular\n        return this._zone.runOutsideAngular(() => {\n            if (!HammerGesturesManager.Hammer) {\n                //no hammer\n                return;\n            }\n            let mc: HammerManager = this.getManagerForElement(element);\n            if (mc === null) {\n                // new Hammer is a shortcut for Manager with defaults\n                mc = new HammerGesturesManager.Hammer(element, Object.assign(this.hammerOptions, options));\n                this.addManagerForElement(element, mc);\n            }\n            const handler = (eventObj) => this._zone.run(() => eventHandler(eventObj));\n            mc.on(eventName, handler);\n            return () => mc.off(eventName, handler);\n        });\n    }\n\n    /**\n     * Add listener extended with options for Hammer.js. Will use defaults if none are provided.\n     * Modeling after other event plugins for easy future modifications.\n     *\n     * @param target Can be one of either window, body or document(fallback default).\n     */\n    public addGlobalEventListener(target: string, eventName: string, eventHandler: (eventObj) => void): () => void {\n        if (!this.platformBrowser || !HammerGesturesManager.Hammer) {\n            return;\n        }\n\n        const element = this.getGlobalEventTarget(target);\n\n        // Creating the manager bind events, must be done outside of angular\n        return this.addEventListener(element as HTMLElement, eventName, eventHandler);\n    }\n\n    /**\n     * Exposes [Dom]Adapter.getGlobalEventTarget to get global event targets.\n     * Supported: window, document, body. Defaults to document for invalid args.\n     *\n     * @param target Target name\n     */\n    public getGlobalEventTarget(target: string): EventTarget {\n        return getDOM().getGlobalEventTarget(this.doc, target);\n    }\n\n    /**\n     * Set HammerManager options.\n     *\n     * @param element The DOM element used to create the manager on.\n     *\n     * ### Example\n     *\n     * ```ts\n     * manager.setManagerOption(myElem, \"pan\", { pointers: 1 });\n     * ```\n     */\n    public setManagerOption(element: EventTarget, event: string, options: any) {\n        const manager = this.getManagerForElement(element);\n        manager.get(event).set(options);\n    }\n\n    /**\n     * Add an element and manager map to the internal collection.\n     *\n     * @param element The DOM element used to create the manager on.\n     */\n    public addManagerForElement(element: EventTarget, manager: HammerManager) {\n        this._hammerManagers.push({element, manager});\n    }\n\n    /**\n     * Get HammerManager for the element or null\n     *\n     * @param element The DOM element used to create the manager on.\n     */\n    public getManagerForElement(element: EventTarget): HammerManager {\n        const result =  this._hammerManagers.filter(value => value.element === element);\n        return result.length ? result[0].manager : null;\n    }\n\n    /**\n     * Destroys the HammerManager for the element, removing event listeners in the process.\n     *\n     * @param element The DOM element used to create the manager on.\n     */\n    public removeManagerForElement(element: HTMLElement) {\n        let index: number = null;\n        for (let i = 0; i < this._hammerManagers.length; i++) {\n            if (element === this._hammerManagers[i].element) {\n                index = i;\n                break;\n            }\n        }\n        if (index !== null) {\n            const item = this._hammerManagers.splice(index, 1)[0];\n            // destroy also\n            item.manager.destroy();\n        }\n    }\n\n    /** Destroys all internally tracked HammerManagers, removing event listeners in the process. */\n    public destroy() {\n        for (const item of this._hammerManagers) {\n            item.manager.destroy();\n        }\n        this._hammerManagers = [];\n    }\n}\n","import { NgClass, NgTemplateOutlet, DOCUMENT } from '@angular/common';\nimport {\n    AfterContentInit,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Injectable,\n    Input,\n    IterableChangeRecord,\n    IterableDiffer,\n    IterableDiffers,\n    OnDestroy,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    booleanAttribute\n} from '@angular/core';\nimport { HammerGestureConfig, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CarouselResourceStringsEN, ICarouselResourceStrings } from '../core/i18n/carousel-resources';\nimport { first, IBaseEventArgs, last, PlatformUtil } from '../core/utils';\nimport { IgxAngularAnimationService } from '../services/animation/angular-animation-service';\nimport { AnimationService } from '../services/animation/animation';\nimport { Direction, ICarouselComponentBase, IGX_CAROUSEL_COMPONENT, IgxCarouselComponentBase } from './carousel-base';\nimport { IgxCarouselIndicatorDirective, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective } from './carousel.directives';\nimport { IgxSlideComponent } from './slide.component';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { HammerGesturesManager } from '../core/touch';\nimport { CarouselAnimationType, CarouselIndicatorsOrientation } from './enums';\nimport { IgxDirectionality } from '../services/direction/directionality';\n\nlet NEXT_ID = 0;\n\n\n@Injectable()\nexport class CarouselHammerConfig extends HammerGestureConfig {\n    public override overrides = {\n        pan: { direction: HammerGesturesManager.Hammer?.DIRECTION_HORIZONTAL }\n    };\n}\n/**\n * **Ignite UI for Angular Carousel** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/carousel.html)\n *\n * The Ignite UI Carousel is used to browse or navigate through a collection of slides. Slides can contain custom\n * content such as images or cards and be used for things such as on-boarding tutorials or page-based interfaces.\n * It can be used as a separate fullscreen element or inside another component.\n *\n * Example:\n * ```html\n * <igx-carousel>\n *   <igx-slide>\n *     <h3>First Slide Header</h3>\n *     <p>First slide Content</p>\n *   <igx-slide>\n *   <igx-slide>\n *     <h3>Second Slide Header</h3>\n *     <p>Second Slide Content</p>\n * </igx-carousel>\n * ```\n */\n@Component({\n    providers: [\n        {\n            provide: HAMMER_GESTURE_CONFIG,\n            useClass: CarouselHammerConfig\n        },\n        { provide: IGX_CAROUSEL_COMPONENT, useExisting: IgxCarouselComponent }\n    ],\n    selector: 'igx-carousel',\n    templateUrl: 'carousel.component.html',\n    styles: [`\n    :host {\n        display: block;\n        outline-style: none;\n    }`],\n    imports: [IgxButtonDirective, IgxIconComponent, NgClass, NgTemplateOutlet]\n})\n\nexport class IgxCarouselComponent extends IgxCarouselComponentBase implements ICarouselComponentBase, OnDestroy, AfterContentInit {\n\n    /**\n     * Sets the `id` of the carousel.\n     * If not set, the `id` of the first carousel component will be `\"igx-carousel-0\"`.\n     * ```html\n     * <igx-carousel id=\"my-first-carousel\"></igx-carousel>\n     * ```\n     *\n     * @memberof IgxCarouselComponent\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-carousel-${NEXT_ID++}`;\n    /**\n     * Returns the `role` attribute of the carousel.\n     * ```typescript\n     * let carouselRole =  this.carousel.role;\n     * ```\n     *\n     * @memberof IgxCarouselComponent\n     */\n    @HostBinding('attr.role') public role = 'region';\n\n    /** @hidden */\n    @HostBinding('attr.aria-roledescription')\n    public roleDescription = 'carousel';\n\n    /** @hidden */\n    @HostBinding('attr.aria-labelledby')\n    public get labelId() {\n        return this.showIndicatorsLabel ? `${this.id}-label` : null;\n    }\n\n    /** @hidden */\n    @HostBinding('class.igx-carousel--vertical')\n\tpublic get isVertical(): boolean {\n\t\treturn this.vertical;\n\t}\n\n    /**\n     * Returns the class of the carousel component.\n     * ```typescript\n     * let class =  this.carousel.cssClass;\n     * ```\n     *\n     * @memberof IgxCarouselComponent\n     */\n    @HostBinding('class.igx-carousel')\n    public cssClass = 'igx-carousel';\n\n    /**\n     * Gets the `touch-action` style of the `list item`.\n     * ```typescript\n     * let touchAction = this.listItem.touchAction;\n     * ```\n     */\n    @HostBinding('style.touch-action')\n    public get touchAction() {\n        return this.gesturesSupport ? 'pan-y' : 'auto';\n    }\n\n    /**\n     * Sets whether the carousel should `loop` back to the first slide after reaching the last slide.\n     * Default value is `true`.\n     * ```html\n     * <igx-carousel [loop]=\"false\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input({ transform: booleanAttribute }) public loop = true;\n\n    /**\n     * Sets whether the carousel will `pause` the slide transitions on user interactions.\n     * Default value is `true`.\n     * ```html\n     *  <igx-carousel [pause]=\"false\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input({ transform: booleanAttribute }) public pause = true;\n\n    /**\n     * Controls whether the carousel should render the left/right `navigation` buttons.\n     * Default value is `true`.\n     * ```html\n     * <igx-carousel [navigation]=\"false\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input({ transform: booleanAttribute }) public navigation = true;\n\n    /**\n     * Controls whether the carousel should render the indicators.\n     * Default value is `true`.\n     * ```html\n     * <igx-carousel [indicators]=\"false\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input({ transform: booleanAttribute }) public indicators = true;\n\n\n    /**\n     * Controls whether the carousel has vertical alignment.\n     * Default value is `false`.\n     * ```html\n     * <igx-carousel [vertical]=\"true\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input({ transform: booleanAttribute }) public override vertical = false;\n\n    /**\n     * Controls whether the carousel should support keyboard navigation.\n     * Default value is `false`.\n     * ```html\n     * <igx-carousel [keyboardSupport]=\"true\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     * @deprecated in version 18.2.0.\n     */\n    @Input({ transform: booleanAttribute }) public keyboardSupport = false;\n\n    /**\n     * Controls whether the carousel should support gestures.\n     * Default value is `true`.\n     * ```html\n     * <igx-carousel [gesturesSupport]=\"false\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input({ transform: booleanAttribute }) public gesturesSupport = true;\n\n    /**\n     * Controls the maximum indexes that can be shown.\n     * Default value is `10`.\n     * ```html\n     * <igx-carousel [maximumIndicatorsCount]=\"5\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input() public maximumIndicatorsCount = 10;\n\n    /**\n     * Gets/sets the display mode of carousel indicators. It can be `start` or `end`.\n     * Default value is `end`.\n     * ```html\n     * <igx-carousel indicatorsOrientation=\"start\">\n     * <igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input() public indicatorsOrientation: CarouselIndicatorsOrientation = CarouselIndicatorsOrientation.end;\n\n    /**\n     * Gets/sets the animation type of carousel.\n     * Default value is `slide`.\n     * ```html\n     * <igx-carousel animationType=\"none\">\n     * <igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Input() public override animationType: CarouselAnimationType = CarouselAnimationType.slide;\n\n    /**\n     * The custom template, if any, that should be used when rendering carousel indicators\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.carousel.indicatorTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-carousel #carousel>\n     *      ...\n     *      <ng-template igxCarouselIndicator let-slide>\n     *         <igx-icon *ngIf=\"slide.active\">brightness_7</igx-icon>\n     *         <igx-icon *ngIf=\"!slide.active\">brightness_5</igx-icon>\n     *      </ng-template>\n     *  </igx-carousel>\n     * ```\n     */\n    @ContentChild(IgxCarouselIndicatorDirective, { read: TemplateRef, static: false })\n    public indicatorTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering carousel next button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.carousel.nextButtonTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-carousel #carousel>\n     *      ...\n     *      <ng-template igxCarouselNextButton let-disabled>\n     *          <button type=\"button\" igxButton=\"fab\" igxRipple=\"white\" [disabled]=\"disabled\">\n     *              <igx-icon name=\"add\"></igx-icon>\n     *          </button>\n     *      </ng-template>\n     *  </igx-carousel>\n     * ```\n     */\n    @ContentChild(IgxCarouselNextButtonDirective, { read: TemplateRef, static: false })\n    public nextButtonTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering carousel previous button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.carousel.prevButtonTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-carousel #carousel>\n     *      ...\n     *      <ng-template igxCarouselPrevButton let-disabled>\n     *          <button type=\"button\" igxButton=\"fab\" igxRipple=\"white\" [disabled]=\"disabled\">\n     *              <igx-icon name=\"remove\"></igx-icon>\n     *          </button>\n     *      </ng-template>\n     *  </igx-carousel>\n     * ```\n     */\n    @ContentChild(IgxCarouselPrevButtonDirective, { read: TemplateRef, static: false })\n    public prevButtonTemplate: TemplateRef<any> = null;\n\n    /**\n     * The collection of `slides` currently in the carousel.\n     * ```typescript\n     * let slides: QueryList<IgxSlideComponent> = this.carousel.slides;\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @ContentChildren(IgxSlideComponent)\n    public slides: QueryList<IgxSlideComponent>;\n\n    /**\n     * An event that is emitted after a slide transition has happened.\n     * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.\n     * ```html\n     * <igx-carousel (slideChanged)=\"slideChanged($event)\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Output() public slideChanged = new EventEmitter<ISlideEventArgs>();\n\n    /**\n     * An event that is emitted after a slide has been added to the carousel.\n     * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.\n     * ```html\n     * <igx-carousel (slideAdded)=\"slideAdded($event)\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Output() public slideAdded = new EventEmitter<ISlideEventArgs>();\n\n    /**\n     * An event that is emitted after a slide has been removed from the carousel.\n     * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.\n     * ```html\n     * <igx-carousel (slideRemoved)=\"slideRemoved($event)\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Output() public slideRemoved = new EventEmitter<ISlideEventArgs>();\n\n    /**\n     * An event that is emitted after the carousel has been paused.\n     * Provides a reference to the `IgxCarouselComponent` as an event argument.\n     * ```html\n     * <igx-carousel (carouselPaused)=\"carouselPaused($event)\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Output() public carouselPaused = new EventEmitter<IgxCarouselComponent>();\n\n    /**\n     * An event that is emitted after the carousel has resumed transitioning between `slides`.\n     * Provides a reference to the `IgxCarouselComponent` as an event argument.\n     * ```html\n     * <igx-carousel (carouselPlaying)=\"carouselPlaying($event)\"></igx-carousel>\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    @Output() public carouselPlaying = new EventEmitter<IgxCarouselComponent>();\n\n    @ViewChild('defaultIndicator', { read: TemplateRef, static: true })\n    private defaultIndicator: TemplateRef<any>;\n\n    @ViewChild('defaultNextButton', { read: TemplateRef, static: true })\n    private defaultNextButton: TemplateRef<any>;\n\n    @ViewChild('defaultPrevButton', { read: TemplateRef, static: true })\n    private defaultPrevButton: TemplateRef<any>;\n\n    @ViewChildren('indicators', { read: ElementRef })\n    private _indicators: QueryList<ElementRef<HTMLDivElement>>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public stoppedByInteraction: boolean;\n    protected override currentItem: IgxSlideComponent;\n    protected override previousItem: IgxSlideComponent;\n    private _interval: number;\n    private _resourceStrings = getCurrentResourceStrings(CarouselResourceStringsEN);\n    private lastInterval: any;\n    private playing: boolean;\n    private destroyed: boolean;\n    private destroy$ = new Subject<any>();\n    private differ: IterableDiffer<IgxSlideComponent> | null = null;\n    private incomingSlide: IgxSlideComponent;\n    private _hasKeyboardFocusOnIndicators = false;\n\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: ICarouselResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): ICarouselResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /** @hidden */\n    public get getIndicatorTemplate(): TemplateRef<any> {\n        if (this.indicatorTemplate) {\n            return this.indicatorTemplate;\n        }\n        return this.defaultIndicator;\n    }\n\n    /** @hidden */\n    public get getNextButtonTemplate(): TemplateRef<any> {\n        if (this.nextButtonTemplate) {\n            return this.nextButtonTemplate;\n        }\n\n        return this.defaultNextButton\n    }\n\n    /** @hidden */\n    public get getPrevButtonTemplate(): TemplateRef<any> {\n        if (this.prevButtonTemplate) {\n            return this.prevButtonTemplate;\n        }\n\n        return this.defaultPrevButton\n    }\n\n    /** @hidden */\n    public get indicatorsClass() {\n        return {\n            ['igx-carousel-indicators--focused']: this._hasKeyboardFocusOnIndicators,\n            [`igx-carousel-indicators--${this.getIndicatorsClass()}`]: true\n        };\n    }\n\n    /** @hidden */\n    public get showIndicators(): boolean {\n        return this.indicators && this.total <= this.maximumIndicatorsCount && this.total > 0;\n    }\n\n    /** @hidden */\n    public get showIndicatorsLabel(): boolean {\n        return this.indicators && this.total > this.maximumIndicatorsCount;\n    }\n\n    /** @hidden */\n    public get getCarouselLabel() {\n        return `${this.current + 1} ${this.resourceStrings.igx_carousel_of} ${this.total}`;\n    }\n\n    /**\n     * Returns the total number of `slides` in the carousel.\n     * ```typescript\n     * let slideCount =  this.carousel.total;\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public get total(): number {\n        return this.slides?.length;\n    }\n\n    /**\n     * The index of the slide being currently shown.\n     * ```typescript\n     * let currentSlideNumber =  this.carousel.current;\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public get current(): number {\n        return !this.currentItem ? 0 : this.currentItem.index;\n    }\n\n    /**\n     * Returns a boolean indicating if the carousel is playing.\n     * ```typescript\n     * let isPlaying =  this.carousel.isPlaying;\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public get isPlaying(): boolean {\n        return this.playing;\n    }\n\n    /**\n     * Returns а boolean indicating if the carousel is destroyed.\n     * ```typescript\n     * let isDestroyed =  this.carousel.isDestroyed;\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public get isDestroyed(): boolean {\n        return this.destroyed;\n    }\n    /**\n     * Returns a reference to the carousel element in the DOM.\n     * ```typescript\n     * let nativeElement =  this.carousel.nativeElement;\n     * ```\n     *\n     * @memberof IgxCarouselComponent\n     */\n    public get nativeElement(): any {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * Returns the time `interval` in milliseconds before the slide changes.\n     * ```typescript\n     * let timeInterval = this.carousel.interval;\n     * ```\n     *\n     * @memberof IgxCarouselComponent\n     */\n    @Input()\n    public get interval(): number {\n        return this._interval;\n    }\n\n    /**\n     * Sets the time `interval` in milliseconds before the slide changes.\n     * If not set, the carousel will not change `slides` automatically.\n     * ```html\n     * <igx-carousel [interval]=\"1000\"></igx-carousel>\n     * ```\n     *\n     * @memberof IgxCarouselComponent\n     */\n    public set interval(value: number) {\n        this._interval = +value;\n        this.restartInterval();\n    }\n\n    constructor(\n        cdr: ChangeDetectorRef,\n        private element: ElementRef,\n        private iterableDiffers: IterableDiffers,\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        private platformUtil: PlatformUtil,\n        private dir: IgxDirectionality,\n        @Inject(DOCUMENT) private document: any\n    ) {\n        super(animationService, cdr);\n        this.differ = this.iterableDiffers.find([]).create(null);\n    }\n\n\n    /** @hidden */\n    @HostListener('keydown.arrowright', ['$event'])\n    public onKeydownArrowRight(event) {\n        if (this.keyboardSupport) {\n            event.preventDefault();\n            this.next();\n            this.focusElement();\n        }\n    }\n\n    /** @hidden */\n    @HostListener('keydown.arrowleft', ['$event'])\n    public onKeydownArrowLeft(event) {\n        if (this.keyboardSupport) {\n            event.preventDefault();\n            this.prev();\n            this.focusElement();\n        }\n    }\n\n    /** @hidden */\n    @HostListener('tap', ['$event'])\n    public onTap(event) {\n        // play pause only when tap on slide\n        if (event.target && event.target.classList.contains('igx-slide')) {\n            if (this.isPlaying) {\n                if (this.pause) {\n                    this.stoppedByInteraction = true;\n                }\n                this.stop();\n            } else if (this.stoppedByInteraction) {\n                this.play();\n            }\n        }\n    }\n\n    /** @hidden */\n    @HostListener('keydown.home', ['$event'])\n    public onKeydownHome(event) {\n        if (this.keyboardSupport && this.slides.length > 0) {\n            event.preventDefault();\n            this.slides.first.active = true;\n            this.focusElement();\n        }\n    }\n\n    /** @hidden */\n    @HostListener('keydown.end', ['$event'])\n    public onKeydownEnd(event) {\n        if (this.keyboardSupport && this.slides.length > 0) {\n            event.preventDefault();\n            this.slides.last.active = true;\n            this.focusElement();\n        }\n    }\n\n    /** @hidden */\n    @HostListener('mouseenter')\n    public onMouseEnter() {\n        if (this.pause && this.isPlaying) {\n            this.stoppedByInteraction = true;\n        }\n        this.stop();\n    }\n\n    /** @hidden */\n    @HostListener('mouseleave')\n    public onMouseLeave() {\n        if (this.stoppedByInteraction) {\n            this.play();\n        }\n    }\n\n    /** @hidden */\n    @HostListener('panleft', ['$event'])\n    public onPanLeft(event) {\n        if (!this.vertical) {\n            this.pan(event);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('panright', ['$event'])\n    public onPanRight(event) {\n        if (!this.vertical) {\n            this.pan(event);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('panup', ['$event'])\n    public onPanUp(event) {\n        if (this.vertical) {\n            this.pan(event);\n        }\n    }\n\n    /** @hidden */\n    @HostListener('pandown', ['$event'])\n    public onPanDown(event) {\n        if (this.vertical) {\n            this.pan(event);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('panend', ['$event'])\n    public onPanEnd(event) {\n        if (!this.gesturesSupport) {\n            return;\n        }\n        event.preventDefault();\n\n        const slideSize = this.vertical\n            ? this.currentItem.nativeElement.offsetHeight\n            : this.currentItem.nativeElement.offsetWidth;\n        const panOffset = (slideSize / 1000);\n        const eventDelta = this.vertical ? event.deltaY : event.deltaX;\n        const delta = Math.abs(eventDelta) + panOffset < slideSize ? Math.abs(eventDelta) : slideSize - panOffset;\n        const velocity = Math.abs(event.velocity);\n        this.resetSlideStyles(this.currentItem);\n        if (this.incomingSlide) {\n            this.resetSlideStyles(this.incomingSlide);\n            if (slideSize / 2 < delta || velocity > 1) {\n                this.incomingSlide.direction = eventDelta < 0 ? Direction.NEXT : Direction.PREV;\n                this.incomingSlide.previous = false;\n\n                this.animationPosition = this.animationType === CarouselAnimationType.fade ?\n                    delta / slideSize : (slideSize - delta) / slideSize;\n\n                if (velocity > 1) {\n                    this.newDuration = this.defaultAnimationDuration / velocity;\n                }\n                this.incomingSlide.active = true;\n            } else {\n                this.currentItem.direction = eventDelta > 0 ? Direction.NEXT : Direction.PREV;\n                this.previousItem = this.incomingSlide;\n                this.previousItem.previous = true;\n                this.animationPosition = this.animationType === CarouselAnimationType.fade ?\n                    Math.abs((slideSize - delta) / slideSize) : delta / slideSize;\n                this.playAnimations();\n            }\n        }\n\n        if (this.stoppedByInteraction) {\n            this.play();\n        }\n    }\n\n    /** @hidden */\n    public ngAfterContentInit() {\n        this.slides.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxSlideComponent>) => this.initSlides(change));\n\n        this.initSlides(this.slides);\n    }\n\n    /** @hidden */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        this.destroyed = true;\n        if (this.lastInterval) {\n            clearInterval(this.lastInterval);\n        }\n    }\n\n    /** @hidden */\n    public handleKeydownPrev(event: KeyboardEvent): void {\n        if (this.platformUtil.isActivationKey(event)) {\n            event.preventDefault();\n            this.prev();\n        }\n    }\n\n    /** @hidden */\n    public handleKeydownNext(event: KeyboardEvent): void {\n        if (this.platformUtil.isActivationKey(event)) {\n            event.preventDefault();\n            this.next();\n        }\n    }\n\n    /** @hidden */\n    public handleKeyUp(event: KeyboardEvent): void {\n        if (event.key === this.platformUtil.KEYMAP.TAB) {\n            this._hasKeyboardFocusOnIndicators = true;\n        }\n    }\n\n    /** @hidden */\n    public handleFocusOut(event: FocusEvent): void {\n        const target = event.relatedTarget as HTMLElement;\n\n        if (!target || !target.classList.contains('igx-carousel-indicators__indicator')) {\n            this._hasKeyboardFocusOnIndicators = false;\n        }\n    }\n\n    /** @hidden */\n    public handleClick(): void {\n        this._hasKeyboardFocusOnIndicators = false;\n    }\n\n    /** @hidden */\n    public handleKeydown(event: KeyboardEvent): void {\n        if (this.keyboardSupport) {\n            return;\n        }\n        const { key } = event;\n        const slides = this.slides.toArray();\n\n        switch (key) {\n            case this.platformUtil.KEYMAP.ARROW_LEFT:\n                this.dir.rtl ? this.next() : this.prev();\n                break;\n            case this.platformUtil.KEYMAP.ARROW_RIGHT:\n                this.dir.rtl ? this.prev() : this.next();\n                break;\n            case this.platformUtil.KEYMAP.HOME:\n                event.preventDefault();\n                this.select(this.dir.rtl ? last(slides) : first(slides));\n                break;\n            case this.platformUtil.KEYMAP.END:\n                event.preventDefault();\n                this.select(this.dir.rtl ? first(slides) : last(slides));\n                break;\n        }\n\n        this.indicatorsElements[this.current].nativeElement.focus();\n    }\n\n    /**\n     * Returns the slide corresponding to the provided `index` or null.\n     * ```typescript\n     * let slide1 =  this.carousel.get(1);\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public get(index: number): IgxSlideComponent {\n        return this.slides.find((slide) => slide.index === index);\n    }\n\n    /**\n     * Adds a new slide to the carousel.\n     * ```typescript\n     * this.carousel.add(newSlide);\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public add(slide: IgxSlideComponent) {\n        const newSlides = this.slides.toArray();\n        newSlides.push(slide);\n        this.slides.reset(newSlides);\n        this.slides.notifyOnChanges();\n    }\n\n    /**\n     * Removes a slide from the carousel.\n     * ```typescript\n     * this.carousel.remove(slide);\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public remove(slide: IgxSlideComponent) {\n        if (slide && slide === this.get(slide.index)) { // check if the requested slide for delete is present in the carousel\n            const newSlides = this.slides.toArray();\n            newSlides.splice(slide.index, 1);\n            this.slides.reset(newSlides);\n            this.slides.notifyOnChanges();\n        }\n    }\n\n    /**\n     * Kicks in a transition for a given slide with a given `direction`.\n     * ```typescript\n     * this.carousel.select(this.carousel.get(2), Direction.NEXT);\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public select(slide: IgxSlideComponent, direction: Direction = Direction.NONE) {\n        if (slide && slide !== this.currentItem) {\n            slide.direction = direction;\n            slide.active = true;\n        }\n    }\n\n    /**\n     * Transitions to the next slide in the carousel.\n     * ```typescript\n     * this.carousel.next();\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public next() {\n        const index = this.getNextIndex();\n\n        if (index === 0 && !this.loop) {\n            this.stop();\n            return;\n        }\n        return this.select(this.get(index), Direction.NEXT);\n    }\n\n    /**\n     * Transitions to the previous slide in the carousel.\n     * ```typescript\n     * this.carousel.prev();\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public prev() {\n        const index = this.getPrevIndex();\n\n        if (!this.loop && index === this.total - 1) {\n            this.stop();\n            return;\n        }\n        return this.select(this.get(index), Direction.PREV);\n    }\n\n    /**\n     * Resumes playing of the carousel if in paused state.\n     * No operation otherwise.\n     * ```typescript\n     * this.carousel.play();\n     * }\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public play() {\n        if (!this.playing) {\n            this.playing = true;\n            this.carouselPlaying.emit(this);\n            this.restartInterval();\n            this.stoppedByInteraction = false;\n        }\n    }\n\n    /**\n     * Stops slide transitions if the `pause` option is set to `true`.\n     * No operation otherwise.\n     * ```typescript\n     *  this.carousel.stop();\n     * }\n     * ```\n     *\n     * @memberOf IgxCarouselComponent\n     */\n    public stop() {\n        if (this.pause) {\n            this.playing = false;\n            this.carouselPaused.emit(this);\n            this.resetInterval();\n        }\n    }\n\n    protected getPreviousElement(): HTMLElement {\n        return this.previousItem.nativeElement;\n    }\n\n    protected getCurrentElement(): HTMLElement {\n        return this.currentItem.nativeElement;\n    }\n\n    private resetInterval() {\n        if (this.lastInterval) {\n            clearInterval(this.lastInterval);\n            this.lastInterval = null;\n        }\n    }\n\n    private restartInterval() {\n        this.resetInterval();\n\n        if (!isNaN(this.interval) && this.interval > 0 && this.platformUtil.isBrowser) {\n            this.lastInterval = setInterval(() => {\n                const tick = +this.interval;\n                if (this.playing && this.total && !isNaN(tick) && tick > 0) {\n                    this.next();\n                } else {\n                    this.stop();\n                }\n            }, this.interval);\n        }\n    }\n\n    /** @hidden */\n    public get nextButtonDisabled() {\n        return !this.loop && this.current === (this.total - 1);\n    }\n\n    /** @hidden */\n    public get prevButtonDisabled() {\n        return !this.loop && this.current === 0;\n    }\n\n    private get indicatorsElements() {\n        return this._indicators.toArray();\n    }\n\n    private focusElement() {\n        const focusedElement = this.document.activeElement;\n\n        if (focusedElement.classList.contains('igx-carousel-indicators__indicator')) {\n            this.indicatorsElements[this.current].nativeElement.focus();\n        } else {\n            this.focusSlideElement();\n        }\n    }\n\n    private getIndicatorsClass(): string {\n        switch (this.indicatorsOrientation) {\n            case CarouselIndicatorsOrientation.top:\n                return CarouselIndicatorsOrientation.start;\n            case CarouselIndicatorsOrientation.bottom:\n                return CarouselIndicatorsOrientation.end;\n            default:\n                return this.indicatorsOrientation;\n        }\n    }\n\n    private getNextIndex(): number {\n        return (this.current + 1) % this.total;\n    }\n\n    private getPrevIndex(): number {\n        return this.current - 1 < 0 ? this.total - 1 : this.current - 1;\n    }\n\n    private resetSlideStyles(slide: IgxSlideComponent) {\n        slide.nativeElement.style.transform = '';\n        slide.nativeElement.style.opacity = '';\n    }\n\n    private pan(event) {\n        const slideSize = this.vertical\n            ? this.currentItem.nativeElement.offsetHeight\n            : this.currentItem.nativeElement.offsetWidth;\n        const panOffset = (slideSize / 1000);\n        const delta = this.vertical ? event.deltaY : event.deltaX;\n        const index = delta < 0 ? this.getNextIndex() : this.getPrevIndex();\n        const offset = delta < 0 ? slideSize + delta : -slideSize + delta;\n\n        if (!this.gesturesSupport || event.isFinal || Math.abs(delta) + panOffset >= slideSize) {\n            return;\n        }\n\n        if (!this.loop && ((this.current === 0 && delta > 0) || (this.current === this.total - 1 && delta < 0))) {\n            this.incomingSlide = null;\n            return;\n        }\n\n        event.preventDefault();\n        if (this.isPlaying) {\n            this.stoppedByInteraction = true;\n            this.stop();\n        }\n\n        if (this.previousItem && this.previousItem.previous) {\n            this.previousItem.previous = false;\n        }\n        this.finishAnimations();\n\n        if (this.incomingSlide) {\n            if (index !== this.incomingSlide.index) {\n                this.resetSlideStyles(this.incomingSlide);\n                this.incomingSlide.previous = false;\n                this.incomingSlide = this.get(index);\n            }\n        } else {\n            this.incomingSlide = this.get(index);\n        }\n        this.incomingSlide.previous = true;\n\n        if (this.animationType === CarouselAnimationType.fade) {\n            this.currentItem.nativeElement.style.opacity = `${Math.abs(offset) / slideSize}`;\n        } else {\n            this.currentItem.nativeElement.style.transform = this.vertical\n                ? `translateY(${delta}px)`\n                : `translateX(${delta}px)`;\n            this.incomingSlide.nativeElement.style.transform = this.vertical\n                ? `translateY(${offset}px)`\n                : `translateX(${offset}px)`;\n        }\n    }\n\n    private unsubscriber(slide: IgxSlideComponent) {\n        return merge(this.destroy$, slide.isDestroyed);\n    }\n\n    private onSlideActivated(slide: IgxSlideComponent) {\n        if (slide.active && slide !== this.currentItem) {\n            if (slide.direction === Direction.NONE) {\n                const newIndex = slide.index;\n                slide.direction = newIndex > this.current ? Direction.NEXT : Direction.PREV;\n            }\n\n            if (this.currentItem) {\n                if (this.previousItem && this.previousItem.previous) {\n                    this.previousItem.previous = false;\n                }\n                this.currentItem.direction = slide.direction;\n                this.currentItem.active = false;\n\n                this.previousItem = this.currentItem;\n                this.currentItem = slide;\n                this.triggerAnimations();\n            } else {\n                this.currentItem = slide;\n            }\n            this.slideChanged.emit({ carousel: this, slide });\n            this.restartInterval();\n            this.cdr.markForCheck();\n        }\n    }\n\n\n    private finishAnimations() {\n        if (this.animationStarted(this.leaveAnimationPlayer)) {\n            this.leaveAnimationPlayer.finish();\n        }\n\n        if (this.animationStarted(this.enterAnimationPlayer)) {\n            this.enterAnimationPlayer.finish();\n        }\n    }\n\n    private initSlides(change: QueryList<IgxSlideComponent>) {\n        const diff = this.differ.diff(change.toArray());\n        if (diff) {\n            this.slides.reduce((any, c, ind) => c.index = ind, 0); // reset slides indexes\n            diff.forEachAddedItem((record: IterableChangeRecord<IgxSlideComponent>) => {\n                const slide = record.item;\n                slide.total = this.total;\n                this.slideAdded.emit({ carousel: this, slide });\n                if (slide.active) {\n                    this.currentItem = slide;\n                }\n                slide.activeChange.pipe(takeUntil(this.unsubscriber(slide))).subscribe(() => this.onSlideActivated(slide));\n            });\n\n            diff.forEachRemovedItem((record: IterableChangeRecord<IgxSlideComponent>) => {\n                const slide = record.item;\n                this.slideRemoved.emit({ carousel: this, slide });\n                if (slide.active) {\n                    slide.active = false;\n                    this.currentItem = this.get(slide.index < this.total ? slide.index : this.total - 1);\n                }\n            });\n\n            this.updateSlidesSelection();\n        }\n    }\n\n    private updateSlidesSelection() {\n        if (this.platformUtil.isBrowser) {\n            requestAnimationFrame(() => {\n                if (this.currentItem) {\n                    this.currentItem.active = true;\n                    const activeSlides = this.slides.filter(slide => slide.active && slide.index !== this.currentItem.index);\n                    activeSlides.forEach(slide => slide.active = false);\n                } else if (this.total) {\n                    this.slides.first.active = true;\n                }\n                this.play();\n            });\n        }\n    }\n    private focusSlideElement() {\n        if (this.leaveAnimationPlayer) {\n            this.leaveAnimationPlayer.animationEnd\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => {\n                    this.slides.find(s => s.active).nativeElement.focus();\n                });\n        } else {\n            requestAnimationFrame(() => this.slides.find(s => s.active).nativeElement.focus());\n        }\n    }\n\n}\n\nexport interface ISlideEventArgs extends IBaseEventArgs {\n    carousel: IgxCarouselComponent;\n    slide: IgxSlideComponent;\n}\n","<ng-template #defaultIndicator let-slide>\n    <div class=\"igx-nav-dot\"\n        [class.igx-nav-dot--active]=\"slide.active\">\n    </div>\n</ng-template>\n\n<ng-template #defaultNextButton>\n    <igx-icon aria-hidden=\"true\" family=\"default\" name=\"carousel_next\"\n        class=\"igx-nav-arrow\">\n    </igx-icon>\n</ng-template>\n\n<ng-template #defaultPrevButton>\n    <igx-icon aria-hidden=\"true\" family=\"default\" name=\"carousel_prev\"\n        class=\"igx-nav-arrow\">\n    </igx-icon>\n</ng-template>\n\n@if (navigation && slides.length) {\n    <button\n        igxButton\n        class=\"igx-carousel__arrow--prev\"\n        [attr.aria-label]=\"resourceStrings.igx_carousel_previous_slide\"\n        [disabled]=\"prevButtonDisabled\"\n        (click)=\"prev()\"\n        (keydown)=\"handleKeydownPrev($event)\">\n        <ng-container *ngTemplateOutlet=\"getPrevButtonTemplate; context: {$implicit: prevButtonDisabled};\"></ng-container>\n    </button>\n}\n\n@if (navigation && slides.length) {\n    <button\n        igxButton\n        class=\"igx-carousel__arrow--next\"\n        [attr.aria-label]=\"resourceStrings.igx_carousel_next_slide\"\n        [disabled]=\"nextButtonDisabled\"\n        (click)=\"next()\"\n        (keydown)=\"handleKeydownNext($event)\">\n        <ng-container *ngTemplateOutlet=\"getNextButtonTemplate; context: {$implicit: nextButtonDisabled};\"></ng-container>\n    </button>\n}\n\n@if (showIndicators) {\n    <div [ngClass]=\"indicatorsClass\" [attr.role]=\"'tablist'\" (keyup)=\"handleKeyUp($event)\" (focusout)=\"handleFocusOut($event)\" (click)=\"handleClick()\" (keydown)=\"handleKeydown($event)\">\n        @for (slide of slides; track slide) {\n            <div #indicators\n                class=\"igx-carousel-indicators__indicator\"\n                (click)=\"select(slide)\"\n                [id]=\"'tab-'+ slide.index + '-' + total\"\n                [attr.role]=\"'tab'\"\n                [attr.tabindex]=\"slide.active ? 0 : -1\"\n                [attr.aria-label]=\"resourceStrings.igx_carousel_slide + ' ' + (slide.index + 1) + ' ' + resourceStrings.igx_carousel_of + ' ' + this.total\"\n                [attr.aria-controls]=\"'panel-' + slide.index\"\n                [attr.aria-selected]=\"slide.active\">\n                <ng-container *ngTemplateOutlet=\"getIndicatorTemplate; context: {$implicit: slide};\"></ng-container>\n            </div>\n        }\n    </div>\n}\n\n@if (showIndicatorsLabel) {\n    <div [ngClass]=\"indicatorsClass\" class=\"igx-carousel-label-indicator\">\n        <span [id]=\"labelId\" class=\"igx-carousel__label\">{{getCarouselLabel}}</span>\n    </div>\n}\n\n<div class=\"igx-carousel__inner\" [attr.aria-live]=\"!interval || stoppedByInteraction ? 'polite' : 'off'\">\n    <ng-content></ng-content>\n</div>\n","import { IgxCarouselComponent } from './carousel.component';\nimport { IgxCarouselIndicatorDirective, IgxCarouselNextButtonDirective, IgxCarouselPrevButtonDirective } from './carousel.directives';\nimport { IgxSlideComponent } from './slide.component';\n\nexport { Direction, CarouselAnimationSettings } from './carousel-base';\nexport * from './carousel.component';\nexport * from './slide.component';\nexport * from './carousel.directives';\nexport { CarouselAnimationType, CarouselIndicatorsOrientation } from './enums';\n\n/* NOTE: Carousel directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_CAROUSEL_DIRECTIVES = [\n    IgxCarouselComponent,\n    IgxSlideComponent,\n    IgxCarouselIndicatorDirective,\n    IgxCarouselNextButtonDirective,\n    IgxCarouselPrevButtonDirective\n] as const;\n","export interface IChipResourceStrings {\n    igx_chip_remove?: string;\n    igx_chip_select?: string;\n}\n\nexport const ChipResourceStringsEN: IChipResourceStrings = {\n    igx_chip_remove: 'remove chip',\n    igx_chip_select: 'select chip'\n};\n","import {\n    Component,\n    ChangeDetectorRef,\n    EventEmitter,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    Output,\n    ViewChild,\n    Renderer2,\n    TemplateRef,\n    OnDestroy,\n    booleanAttribute,\n    OnInit,\n    Inject\n} from '@angular/core';\nimport { IgxDragDirective, IDragBaseEventArgs, IDragStartEventArgs, IDropBaseEventArgs, IDropDroppedEventArgs, IgxDropDirective } from '../directives/drag-drop/drag-drop.directive';\nimport { IBaseEventArgs, mkenum } from '../core/utils';\nimport { ChipResourceStringsEN, IChipResourceStrings } from '../core/i18n/chip-resources';\nimport { Subject } from 'rxjs';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { NgClass, NgTemplateOutlet, DOCUMENT } from '@angular/common';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { Size } from '../grids/common/enums';\n\nexport const IgxChipTypeVariant = /*@__PURE__*/mkenum({\n    PRIMARY: 'primary',\n    INFO: 'info',\n    SUCCESS: 'success',\n    WARNING: 'warning',\n    DANGER: 'danger'\n});\n\nexport interface IBaseChipEventArgs extends IBaseEventArgs {\n    originalEvent: IDragBaseEventArgs | IDropBaseEventArgs | KeyboardEvent | MouseEvent | TouchEvent;\n    owner: IgxChipComponent;\n}\n\nexport interface IChipClickEventArgs extends IBaseChipEventArgs {\n    cancel: boolean;\n}\n\nexport interface IChipKeyDownEventArgs extends IBaseChipEventArgs {\n    originalEvent: KeyboardEvent;\n    cancel: boolean;\n}\n\nexport interface IChipEnterDragAreaEventArgs extends IBaseChipEventArgs {\n    dragChip: IgxChipComponent;\n}\n\nexport interface IChipSelectEventArgs extends IBaseChipEventArgs {\n    cancel: boolean;\n    selected: boolean;\n}\n\nlet CHIP_ID = 0;\n\n/**\n * Chip is compact visual component that displays information in an obround.\n *\n * @igxModule IgxChipsModule\n *\n * @igxTheme igx-chip-theme\n *\n * @igxKeywords chip\n *\n * @igxGroup display\n *\n * @remarks\n * The Ignite UI Chip can be templated, deleted, and selected.\n * Multiple chips can be reordered and visually connected to each other.\n * Chips reside in a container called chips area which is responsible for managing the interactions between the chips.\n *\n * @example\n * ```html\n * <igx-chip class=\"chipStyle\" [id]=\"901\" [draggable]=\"true\" [removable]=\"true\" (remove)=\"chipRemoved($event)\">\n *    <igx-avatar class=\"chip-avatar-resized\" igxPrefix></igx-avatar>\n * </igx-chip>\n * ```\n */\n@Component({\n    selector: 'igx-chip',\n    templateUrl: 'chip.component.html',\n    imports: [IgxDropDirective, IgxDragDirective, NgClass, NgTemplateOutlet, IgxIconComponent]\n})\nexport class IgxChipComponent implements OnInit, OnDestroy {\n\n    /**\n     * Sets/gets the variant of the chip.\n     *\n     * @remarks\n     * Allowed values are `primary`, `info`, `success`, `warning`, `danger`.\n     * Providing an invalid value won't change the chip.\n     *\n     * @example\n     * ```html\n     * <igx-chip [variant]=\"success\"></igx-chip>\n     * ```\n     */\n    @Input()\n    public variant: string | typeof IgxChipTypeVariant;\n    /**\n     * Sets the value of `id` attribute. If not provided it will be automatically generated.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"'igx-chip-1'\"></igx-chip>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-chip-${CHIP_ID++}`;\n\n    /**\n     * Returns the `role` attribute of the chip.\n     *\n     * @example\n     * ```typescript\n     * let chipRole = this.chip.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    public role = 'option';\n\n    /**\n     * Sets the value of `tabindex` attribute. If not provided it will use the element's tabindex if set.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"'igx-chip-1'\" [tabIndex]=\"1\"></igx-chip>\n     * ```\n     */\n    @HostBinding('attr.tabIndex')\n    @Input()\n    public set tabIndex(value: number) {\n        this._tabIndex = value;\n    }\n\n    public get tabIndex() {\n        if (this._tabIndex !== null) {\n            return this._tabIndex;\n        }\n        return !this.disabled ? 0 : null;\n    }\n\n    /**\n     * Stores data related to the chip.\n     *\n     * @example\n     * ```html\n     * <igx-chip [data]=\"{ value: 'Country' }\"></igx-chip>\n     * ```\n     */\n    @Input()\n    public data: any;\n\n    /**\n     * Defines if the `IgxChipComponent` can be dragged in order to change it's position.\n     * By default it is set to false.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"'igx-chip-1'\" [draggable]=\"true\"></igx-chip>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public draggable = false;\n\n    /**\n     * Enables/disables the draggable element animation when the element is released.\n     * By default it's set to true.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"'igx-chip-1'\" [draggable]=\"true\" [animateOnRelease]=\"false\"></igx-chip>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public animateOnRelease = true;\n\n    /**\n     * Enables/disables the hiding of the base element that has been dragged.\n     * By default it's set to true.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"'igx-chip-1'\" [draggable]=\"true\" [hideBaseOnDrag]=\"false\"></igx-chip>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hideBaseOnDrag = true;\n\n    /**\n     * Defines if the `IgxChipComponent` should render remove button and throw remove events.\n     * By default it is set to false.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"'igx-chip-1'\" [draggable]=\"true\" [removable]=\"true\"></igx-chip>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public removable = false;\n\n    /**\n     * Overrides the default icon that the chip applies to the remove button.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"chip.id\" [removable]=\"true\" [removeIcon]=\"iconTemplate\"></igx-chip>\n     * <ng-template #iconTemplate><igx-icon>delete</igx-icon></ng-template>\n     * ```\n     */\n    @Input()\n    public removeIcon: TemplateRef<any>;\n\n    /**\n     * Defines if the `IgxChipComponent` can be selected on click or through navigation,\n     * By default it is set to false.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"chip.id\" [draggable]=\"true\" [removable]=\"true\" [selectable]=\"true\"></igx-chip>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public selectable = false;\n\n    /**\n     * Overrides the default icon that the chip applies when it is selected.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"chip.id\" [selectable]=\"true\" [selectIcon]=\"iconTemplate\"></igx-chip>\n     * <ng-template #iconTemplate><igx-icon>done_outline</igx-icon></ng-template>\n     * ```\n     */\n    @Input()\n    public selectIcon: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public class = '';\n\n    /**\n     * Disables the `IgxChipComponent`. When disabled it restricts user interactions\n     * like focusing on click or tab, selection on click or Space, dragging.\n     * By default it is set to false.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"chip.id\" [disabled]=\"true\"></igx-chip>\n     * ```\n     */\n    @HostBinding('class.igx-chip--disabled')\n    @Input({ transform: booleanAttribute })\n    public disabled = false;\n\n    /**\n     * Sets the `IgxChipComponent` selected state.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [selectable]=\"true\" [selected]=\"true\">\n     * ```\n     *\n     * Two-way data binding:\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [selectable]=\"true\" [(selected)]=\"model.isSelected\">\n     * ```\n     */\n    @HostBinding('attr.aria-selected')\n    @Input({ transform: booleanAttribute })\n    public set selected(newValue: boolean) {\n        this.changeSelection(newValue);\n    }\n\n    /**\n     * Returns if the `IgxChipComponent` is selected.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild('myChip')\n     * public chip: IgxChipComponent;\n     * selectedChip(){\n     *     let selectedChip = this.chip.selected;\n     * }\n     * ```\n     */\n    public get selected() {\n        return this._selected;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Output()\n    public selectedChange = new EventEmitter<boolean>();\n\n    /**\n     * Sets the `IgxChipComponent` background color.\n     * The `color` property supports string, rgb, hex.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [color]=\"'#ff0000'\"></igx-chip>\n     * ```\n     */\n    @Input()\n    public set color(newColor) {\n        this.chipArea.nativeElement.style.backgroundColor = newColor;\n    }\n\n    /**\n     * Returns the background color of the `IgxChipComponent`.\n     *\n     * @example\n     * ```typescript\n     * @ViewChild('myChip')\n     * public chip: IgxChipComponent;\n     * ngAfterViewInit(){\n     *     let chipColor = this.chip.color;\n     * }\n     * ```\n     */\n    public get color() {\n        return this.chipArea.nativeElement.style.backgroundColor;\n    }\n\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IChipResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): IChipResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Emits an event when the `IgxChipComponent` moving starts.\n     * Returns the moving `IgxChipComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (moveStart)=\"moveStarted($event)\">\n     * ```\n     */\n    @Output()\n    public moveStart = new EventEmitter<IBaseChipEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` moving ends.\n     * Returns the moved `IgxChipComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (moveEnd)=\"moveEnded($event)\">\n     * ```\n     */\n    @Output()\n    public moveEnd = new EventEmitter<IBaseChipEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` is removed.\n     * Returns the removed `IgxChipComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (remove)=\"remove($event)\">\n     * ```\n     */\n    @Output()\n    public remove = new EventEmitter<IBaseChipEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` is clicked.\n     * Returns the clicked `IgxChipComponent`, whether the event should be canceled.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (click)=\"chipClick($event)\">\n     * ```\n     */\n    @Output()\n    public chipClick = new EventEmitter<IChipClickEventArgs>();\n\n    /**\n     * Emits event when the `IgxChipComponent` is selected/deselected.\n     * Returns the selected chip reference, whether the event should be canceled, what is the next selection state and\n     * when the event is triggered by interaction `originalEvent` is provided, otherwise `originalEvent` is `null`.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [selectable]=\"true\" (selectedChanging)=\"chipSelect($event)\">\n     * ```\n     */\n    @Output()\n    public selectedChanging = new EventEmitter<IChipSelectEventArgs>();\n\n    /**\n     * Emits event when the `IgxChipComponent` is selected/deselected and any related animations and transitions also end.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [selectable]=\"true\" (selectedChanged)=\"chipSelectEnd($event)\">\n     * ```\n     */\n    @Output()\n    public selectedChanged = new EventEmitter<IBaseChipEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` keyboard navigation is being used.\n     * Returns the focused/selected `IgxChipComponent`, whether the event should be canceled,\n     * if the `alt`, `shift` or `control` key is pressed and the pressed key name.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (keyDown)=\"chipKeyDown($event)\">\n     * ```\n     */\n    @Output()\n    public keyDown = new EventEmitter<IChipKeyDownEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` has entered the `IgxChipsAreaComponent`.\n     * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as  well as\n     * the original drop event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (dragEnter)=\"chipEnter($event)\">\n     * ```\n     */\n    @Output()\n    public dragEnter = new EventEmitter<IChipEnterDragAreaEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` has left the `IgxChipsAreaComponent`.\n     * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as  well as\n     * the original drop event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (dragLeave)=\"chipLeave($event)\">\n     * ```\n     */\n    @Output()\n    public dragLeave = new EventEmitter<IChipEnterDragAreaEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` is over the `IgxChipsAreaComponent`.\n     * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as  well as\n     * the original drop event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (dragOver)=\"chipOver($event)\">\n     * ```\n     */\n    @Output()\n    public dragOver = new EventEmitter<IChipEnterDragAreaEventArgs>();\n\n    /**\n     * Emits an event when the `IgxChipComponent` has been dropped in the `IgxChipsAreaComponent`.\n     * Returns the target `IgxChipComponent`, the drag `IgxChipComponent`, as  well as\n     * the original drop event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-chip #myChip [id]=\"'igx-chip-1'\" [draggable]=\"true\" (dragDrop)=\"chipLeave($event)\">\n     * ```\n     */\n    @Output()\n    public dragDrop = new EventEmitter<IChipEnterDragAreaEventArgs>();\n\n    @HostBinding('class.igx-chip')\n    protected defaultClass = 'igx-chip';\n\n    @HostBinding('class.igx-chip--primary')\n    protected get isPrimary() {\n        return this.variant === IgxChipTypeVariant.PRIMARY;\n    }\n\n    @HostBinding('class.igx-chip--info')\n    protected get isInfo() {\n        return this.variant === IgxChipTypeVariant.INFO;\n    }\n\n    @HostBinding('class.igx-chip--success')\n    protected get isSuccess() {\n        return this.variant === IgxChipTypeVariant.SUCCESS;\n    }\n\n    @HostBinding('class.igx-chip--warning')\n    protected get isWarning() {\n        return this.variant === IgxChipTypeVariant.WARNING;\n    }\n\n    @HostBinding('class.igx-chip--danger')\n    protected get isDanger() {\n        return this.variant === IgxChipTypeVariant.DANGER;\n    }\n\n    /**\n     * Property that contains a reference to the `IgxDragDirective` the `IgxChipComponent` uses for dragging behavior.\n     *\n     * @example\n     * ```html\n     * <igx-chip [id]=\"chip.id\" [draggable]=\"true\"></igx-chip>\n     * ```\n     * ```typescript\n     * onMoveStart(event: IBaseChipEventArgs){\n     *     let dragDirective = event.owner.dragDirective;\n     * }\n     * ```\n     */\n    @ViewChild('chipArea', { read: IgxDragDirective, static: true })\n    public dragDirective: IgxDragDirective;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('chipArea', { read: ElementRef, static: true })\n    public chipArea: ElementRef;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('defaultRemoveIcon', { read: TemplateRef, static: true })\n    public defaultRemoveIcon: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('defaultSelectIcon', { read: TemplateRef, static: true })\n    public defaultSelectIcon: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get removeButtonTemplate() {\n        if (!this.disabled) {\n            return this.removeIcon || this.defaultRemoveIcon;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get selectIconTemplate() {\n        return this.selectIcon || this.defaultSelectIcon;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get ghostStyles() {\n        return { '--ig-size': `${this.chipSize}` };\n    }\n\n    /** @hidden @internal */\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public hideBaseElement = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public destroy$ = new Subject<void>();\n\n    protected get chipSize(): Size {\n        return this.computedStyles?.getPropertyValue('--ig-size') || Size.Medium;\n    }\n    protected _tabIndex = null;\n    protected _selected = false;\n    protected _selectedItemClass = 'igx-chip__item--selected';\n    protected _movedWhileRemoving = false;\n    protected computedStyles;\n    private _resourceStrings = getCurrentResourceStrings(ChipResourceStringsEN);\n\n    constructor(\n        public cdr: ChangeDetectorRef,\n        private ref: ElementRef<HTMLElement>,\n        private renderer: Renderer2,\n        @Inject(DOCUMENT) public document: any) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('keydown', ['$event'])\n    public keyEvent(event: KeyboardEvent) {\n        this.onChipKeyDown(event);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public selectClass(condition: boolean): any {\n        const SELECT_CLASS = 'igx-chip__select';\n\n        return {\n            [SELECT_CLASS]: condition,\n            [`${SELECT_CLASS}--hidden`]: !condition\n        };\n    }\n\n    public onSelectTransitionDone(event) {\n        if (event.target.tagName) {\n            // Trigger onSelectionDone on when `width` property is changed and the target is valid element(not comment).\n            this.selectedChanged.emit({\n                owner: this,\n                originalEvent: event\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipKeyDown(event: KeyboardEvent) {\n        const keyDownArgs: IChipKeyDownEventArgs = {\n            originalEvent: event,\n            owner: this,\n            cancel: false\n        };\n\n        this.keyDown.emit(keyDownArgs);\n        if (keyDownArgs.cancel) {\n            return;\n        }\n\n        if ((event.key === 'Delete' || event.key === 'Del') && this.removable) {\n            this.remove.emit({\n                originalEvent: event,\n                owner: this\n            });\n        }\n\n        if ((event.key === ' ' || event.key === 'Spacebar') && this.selectable && !this.disabled) {\n            this.changeSelection(!this.selected, event);\n        }\n\n        if (event.key !== 'Tab') {\n            event.preventDefault();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onRemoveBtnKeyDown(event: KeyboardEvent) {\n        if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter') {\n            this.remove.emit({\n                originalEvent: event,\n                owner: this\n            });\n\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n\n    public onRemoveMouseDown(event: PointerEvent | MouseEvent) {\n        event.stopPropagation();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onRemoveClick(event: MouseEvent | TouchEvent) {\n        this.remove.emit({\n            originalEvent: event,\n            owner: this\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onRemoveTouchMove() {\n        // We don't remove chip if user starting touch interacting on the remove button moves the chip\n        this._movedWhileRemoving = true;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onRemoveTouchEnd(event: TouchEvent) {\n        if (!this._movedWhileRemoving) {\n            this.onRemoveClick(event);\n        }\n        this._movedWhileRemoving = false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    // -----------------------------\n    // Start chip igxDrag behavior\n    public onChipDragStart(event: IDragStartEventArgs) {\n        this.moveStart.emit({\n            originalEvent: event,\n            owner: this\n        });\n        event.cancel = !this.draggable || this.disabled;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipDragEnd() {\n        if (this.animateOnRelease) {\n            this.dragDirective.transitionToOrigin();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipMoveEnd(event: IDragBaseEventArgs) {\n        // moveEnd is triggered after return animation has finished. This happen when we drag and release the chip.\n        this.moveEnd.emit({\n            originalEvent: event,\n            owner: this\n        });\n\n        if (this.selected) {\n            this.chipArea.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipGhostCreate() {\n        this.hideBaseElement = this.hideBaseOnDrag;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipGhostDestroy() {\n        this.hideBaseElement = false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipDragClicked(event: IDragBaseEventArgs) {\n        const clickEventArgs: IChipClickEventArgs = {\n            originalEvent: event,\n            owner: this,\n            cancel: false\n        };\n        this.chipClick.emit(clickEventArgs);\n\n        if (!clickEventArgs.cancel && this.selectable && !this.disabled) {\n            this.changeSelection(!this.selected, event);\n        }\n    }\n    // End chip igxDrag behavior\n\n    /**\n     * @hidden\n     * @internal\n     */\n    // -----------------------------\n    // Start chip igxDrop behavior\n    public onChipDragEnterHandler(event: IDropBaseEventArgs) {\n        if (this.dragDirective === event.drag) {\n            return;\n        }\n\n        const eventArgs: IChipEnterDragAreaEventArgs = {\n            owner: this,\n            dragChip: event.drag.data?.chip,\n            originalEvent: event\n        };\n        this.dragEnter.emit(eventArgs);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipDragLeaveHandler(event: IDropBaseEventArgs) {\n        if (this.dragDirective === event.drag) {\n            return;\n        }\n\n        const eventArgs: IChipEnterDragAreaEventArgs = {\n            owner: this,\n            dragChip: event.drag.data?.chip,\n            originalEvent: event\n        };\n        this.dragLeave.emit(eventArgs);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipDrop(event: IDropDroppedEventArgs) {\n        // Cancel the default drop logic\n        event.cancel = true;\n        if (this.dragDirective === event.drag) {\n            return;\n        }\n\n        const eventArgs: IChipEnterDragAreaEventArgs = {\n            owner: this,\n            dragChip: event.drag.data?.chip,\n            originalEvent: event\n        };\n        this.dragDrop.emit(eventArgs);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onChipOverHandler(event: IDropBaseEventArgs) {\n        if (this.dragDirective === event.drag) {\n            return;\n        }\n\n        const eventArgs: IChipEnterDragAreaEventArgs = {\n            owner: this,\n            dragChip: event.drag.data?.chip,\n            originalEvent: event\n        };\n        this.dragOver.emit(eventArgs);\n    }\n    // End chip igxDrop behavior\n\n    protected changeSelection(newValue: boolean, srcEvent = null) {\n        const onSelectArgs: IChipSelectEventArgs = {\n            originalEvent: srcEvent,\n            owner: this,\n            selected: false,\n            cancel: false\n        };\n\n        if (newValue && !this._selected) {\n            onSelectArgs.selected = true;\n            this.selectedChanging.emit(onSelectArgs);\n\n            if (!onSelectArgs.cancel) {\n                this.renderer.addClass(this.chipArea.nativeElement, this._selectedItemClass);\n                this._selected = newValue;\n                this.selectedChange.emit(this._selected);\n                this.selectedChanged.emit({\n                    owner: this,\n                    originalEvent: srcEvent\n                });\n            }\n        } else if (!newValue && this._selected) {\n            this.selectedChanging.emit(onSelectArgs);\n\n            if (!onSelectArgs.cancel) {\n                this.renderer.removeClass(this.chipArea.nativeElement, this._selectedItemClass);\n                this._selected = newValue;\n                this.selectedChange.emit(this._selected);\n                this.selectedChanged.emit({\n                    owner: this,\n                    originalEvent: srcEvent\n                });\n            }\n        }\n    }\n\n    public ngOnInit(): void {\n        this.computedStyles = this.document.defaultView.getComputedStyle(this.nativeElement);\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n}\n","<div #chipArea class=\"igx-chip__item\"\n    [igxDrag]=\"{chip: this}\"\n    [style.visibility]='hideBaseElement ? \"hidden\" : \"visible\"'\n    ghostClass=\"igx-chip__ghost\"\n    [ghostStyle]=\"ghostStyles\"\n    (dragStart)=\"onChipDragStart($event)\"\n    (ghostCreate)=\"onChipGhostCreate()\"\n    (ghostDestroy)=\"onChipGhostDestroy()\"\n    (dragEnd)=\"onChipDragEnd()\"\n    (transitioned)=\"onChipMoveEnd($event)\"\n    (dragClick)=\"onChipDragClicked($event)\"\n    igxDrop\n    (enter)=\"onChipDragEnterHandler($event)\"\n    (leave)=\"onChipDragLeaveHandler($event)\"\n    (over)=\"onChipOverHandler($event)\"\n    (dropped)=\"onChipDrop($event)\">\n\n    <div class=\"igx-chip__start\" #selectContainer>\n        @if (selected) {\n            <div [ngClass]=\"selectClass(selected)\">\n                <ng-container *ngTemplateOutlet=\"selectIconTemplate\"></ng-container>\n            </div>\n        }\n\n        <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n    </div>\n\n    <div class=\"igx-chip__content\">\n        <ng-content></ng-content>\n    </div>\n\n    <div class=\"igx-chip__end\">\n        <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n\n        @if (removable) {\n            <div class=\"igx-chip__remove\"\n                [attr.tabIndex]=\"tabIndex\"\n                (keydown)=\"onRemoveBtnKeyDown($event)\"\n                (pointerdown)=\"onRemoveMouseDown($event)\"\n                (mousedown)=\"onRemoveMouseDown($event)\"\n                (click)=\"onRemoveClick($event)\"\n                (touchmove)=\"onRemoveTouchMove()\"\n                (touchend)=\"onRemoveTouchEnd($event)\">\n                <ng-container *ngTemplateOutlet=\"removeButtonTemplate\"></ng-container>\n            </div>\n        }\n    </div>\n</div>\n\n<ng-template #defaultSelectIcon>\n    <igx-icon\n        [attr.aria-label]=\"resourceStrings.igx_chip_select\"\n        family=\"default\"\n        name=\"selected\"\n    ></igx-icon>\n</ng-template>\n\n<ng-template #defaultRemoveIcon>\n    <igx-icon\n        [attr.aria-label]=\"resourceStrings.igx_chip_remove\"\n        family=\"default\"\n        name=\"remove\"\n    ></igx-icon>\n</ng-template>\n","import {\n    Component,\n    ContentChildren,\n    ChangeDetectorRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    IterableDiffer,\n    IterableDiffers,\n    Output,\n    QueryList,\n    DoCheck,\n    AfterViewInit,\n    OnDestroy,\n    ElementRef\n} from '@angular/core';\nimport {\n    IgxChipComponent,\n    IChipSelectEventArgs,\n    IChipKeyDownEventArgs,\n    IChipEnterDragAreaEventArgs,\n    IBaseChipEventArgs\n} from './chip.component';\nimport { IDropBaseEventArgs, IDragBaseEventArgs } from '../directives/drag-drop/drag-drop.directive';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { rem } from '../core/utils';\n\nexport interface IBaseChipsAreaEventArgs {\n    originalEvent: IDragBaseEventArgs | IDropBaseEventArgs | KeyboardEvent | MouseEvent | TouchEvent;\n    owner: IgxChipsAreaComponent;\n}\n\nexport interface IChipsAreaReorderEventArgs extends IBaseChipsAreaEventArgs {\n    chipsArray: IgxChipComponent[];\n}\n\nexport interface IChipsAreaSelectEventArgs extends IBaseChipsAreaEventArgs {\n    newSelection: IgxChipComponent[];\n}\n\n/**\n * The chip area allows you to perform more complex scenarios with chips that require interaction,\n * like dragging, selection, navigation, etc.\n *\n * @igxModule IgxChipsModule\n *\n * @igxTheme igx-chip-theme\n *\n * @igxKeywords chip area, chip\n *\n * @igxGroup display\n *\n * @example\n * ```html\n * <igx-chips-area>\n *    <igx-chip *ngFor=\"let chip of chipList\" [id]=\"chip.id\">\n *        <span>{{chip.text}}</span>\n *    </igx-chip>\n * </igx-chips-area>\n * ```\n */\n@Component({\n    selector: 'igx-chips-area',\n    templateUrl: 'chips-area.component.html',\n    standalone: true\n})\nexport class IgxChipsAreaComponent implements DoCheck, AfterViewInit, OnDestroy {\n\n    /**\n     * Returns the `role` attribute of the chips area.\n     *\n     * @example\n     * ```typescript\n     * let chipsAreaRole = this.chipsArea.role;\n     * ```\n     */\n     @HostBinding('attr.role')\n     public role = 'listbox';\n\n    /**\n     * Returns the `aria-label` attribute of the chips area.\n     *\n     * @example\n     * ```typescript\n     * let ariaLabel = this.chipsArea.ariaLabel;\n     * ```\n     *\n     */\n     @HostBinding('attr.aria-label')\n     public ariaLabel = 'chip area';\n\n    /**\n     * Sets the width of the `IgxChipsAreaComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-chips-area #chipsArea [width]=\"300\" [height]=\"10\" (onReorder)=\"chipsOrderChanged($event)\"></igx-chips-area>\n     * ```\n     */\n    @Input()\n    public width: number;\n\n    /** @hidden @internal */\n    @HostBinding('style.width.rem')\n    public get _widthToRem() {\n        return rem(this.width);\n    }\n\n    /**\n     * Sets the height of the `IgxChipsAreaComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-chips-area #chipsArea [width]=\"300\" [height]=\"10\" (onReorder)=\"chipsOrderChanged($event)\"></igx-chips-area>\n     * ```\n     */\n    @Input()\n    public height: number;\n\n    /** @hidden @internal */\n    @HostBinding('style.height.rem')\n    public get _heightToRem() {\n        return rem(this.height);\n    }\n\n    /**\n     * Emits an event when `IgxChipComponent`s in the `IgxChipsAreaComponent` should be reordered.\n     * Returns an array of `IgxChipComponent`s.\n     *\n     * @example\n     * ```html\n     * <igx-chips-area #chipsArea [width]=\"'300'\" [height]=\"'10'\" (onReorder)=\"changedOrder($event)\"></igx-chips-area>\n     * ```\n     */\n    @Output()\n    public reorder = new EventEmitter<IChipsAreaReorderEventArgs>();\n\n    /**\n     * Emits an event when an `IgxChipComponent` in the `IgxChipsAreaComponent` is selected/deselected.\n     * Fired after the chips area is initialized if there are initially selected chips as well.\n     * Returns an array of selected `IgxChipComponent`s and the `IgxChipAreaComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-chips-area #chipsArea [width]=\"'300'\" [height]=\"'10'\" (selectionChange)=\"selection($event)\"></igx-chips-area>\n     * ```\n     */\n    @Output()\n    public selectionChange = new EventEmitter<IChipsAreaSelectEventArgs>();\n\n    /**\n     * Emits an event when an `IgxChipComponent` in the `IgxChipsAreaComponent` is moved.\n     *\n     * @example\n     * ```html\n     * <igx-chips-area #chipsArea [width]=\"'300'\" [height]=\"'10'\" (moveStart)=\"moveStart($event)\"></igx-chips-area>\n     * ```\n     */\n    @Output()\n    public moveStart = new EventEmitter<IBaseChipsAreaEventArgs>();\n\n    /**\n     * Emits an event after an `IgxChipComponent` in the `IgxChipsAreaComponent` is moved.\n     *\n     * @example\n     * ```html\n     * <igx-chips-area #chipsArea [width]=\"'300'\" [height]=\"'10'\" (moveEnd)=\"moveEnd($event)\"></igx-chips-area>\n     * ```\n     */\n    @Output()\n    public moveEnd = new EventEmitter<IBaseChipsAreaEventArgs>();\n\n    /**\n     * Holds the `IgxChipComponent` in the `IgxChipsAreaComponent`.\n     *\n     * @example\n     * ```typescript\n     * ngAfterViewInit(){\n     *    let chips = this.chipsArea.chipsList;\n     * }\n     * ```\n     */\n    @ContentChildren(IgxChipComponent, { descendants: true })\n    public chipsList: QueryList<IgxChipComponent>;\n\n    protected destroy$ = new Subject<boolean>();\n\n    @HostBinding('class')\n    private hostClass = 'igx-chip-area';\n\n    private modifiedChipsArray: IgxChipComponent[];\n    private _differ: IterableDiffer<IgxChipComponent> | null = null;\n\n    constructor(public cdr: ChangeDetectorRef, public element: ElementRef,\n        private _iterableDiffers: IterableDiffers) {\n        this._differ = this._iterableDiffers.find([]).create(null);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        // If we have initially selected chips through their inputs, we need to get them, because we cannot listen to their events yet.\n        if (this.chipsList.length) {\n            const selectedChips = this.chipsList.filter((item: IgxChipComponent) => item.selected);\n            if (selectedChips.length) {\n                this.selectionChange.emit({\n                    originalEvent: null,\n                    newSelection: selectedChips,\n                    owner: this\n                });\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngDoCheck(): void {\n        if (this.chipsList) {\n            const changes = this._differ.diff(this.chipsList.toArray());\n            if (changes) {\n                changes.forEachAddedItem((addedChip) => {\n                    addedChip.item.moveStart.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n                        this.onChipMoveStart(args);\n                    });\n                    addedChip.item.moveEnd.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n                        this.onChipMoveEnd(args);\n                    });\n                    addedChip.item.dragEnter.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n                        this.onChipDragEnter(args);\n                    });\n                    addedChip.item.keyDown.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n                        this.onChipKeyDown(args);\n                    });\n                    if (addedChip.item.selectable) {\n                        addedChip.item.selectedChanging.pipe(takeUntil(addedChip.item.destroy$)).subscribe((args) => {\n                            this.onChipSelectionChange(args);\n                        });\n                    }\n                });\n                this.modifiedChipsArray = this.chipsList.toArray();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected onChipKeyDown(event: IChipKeyDownEventArgs) {\n        let orderChanged = false;\n        const chipsArray = this.chipsList.toArray();\n        const dragChipIndex = chipsArray.findIndex((el) => el === event.owner);\n        if (event.originalEvent.shiftKey === true) {\n            if (event.originalEvent.key === 'ArrowLeft' || event.originalEvent.key === 'Left') {\n                orderChanged = this.positionChipAtIndex(dragChipIndex, dragChipIndex - 1, false, event.originalEvent);\n                if (orderChanged) {\n                    setTimeout(() => {\n                        this.chipsList.get(dragChipIndex - 1).nativeElement.focus();\n                    });\n                }\n            } else if (event.originalEvent.key === 'ArrowRight' || event.originalEvent.key === 'Right') {\n                orderChanged = this.positionChipAtIndex(dragChipIndex, dragChipIndex + 1, true, event.originalEvent);\n            }\n        } else {\n            if ((event.originalEvent.key === 'ArrowLeft' || event.originalEvent.key === 'Left') && dragChipIndex > 0) {\n                chipsArray[dragChipIndex - 1].nativeElement.focus();\n            } else if ((event.originalEvent.key === 'ArrowRight' || event.originalEvent.key === 'Right') &&\n                dragChipIndex < chipsArray.length - 1) {\n                chipsArray[dragChipIndex + 1].nativeElement.focus();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected onChipMoveStart(event: IBaseChipEventArgs) {\n        this.moveStart.emit({\n            originalEvent: event.originalEvent,\n            owner: this\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected onChipMoveEnd(event: IBaseChipEventArgs) {\n        this.moveEnd.emit({\n            originalEvent: event.originalEvent,\n            owner: this\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected onChipDragEnter(event: IChipEnterDragAreaEventArgs) {\n        const dropChipIndex = this.chipsList.toArray().findIndex((el) => el === event.owner);\n        const dragChipIndex = this.chipsList.toArray().findIndex((el) => el === event.dragChip);\n        if (dragChipIndex < dropChipIndex) {\n            // from the left to right\n            this.positionChipAtIndex(dragChipIndex, dropChipIndex, true, event.originalEvent);\n        } else {\n            // from the right to left\n            this.positionChipAtIndex(dragChipIndex, dropChipIndex, false, event.originalEvent);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected positionChipAtIndex(chipIndex, targetIndex, shiftRestLeft, originalEvent) {\n        if (chipIndex < 0 || this.chipsList.length <= chipIndex ||\n            targetIndex < 0 || this.chipsList.length <= targetIndex) {\n            return false;\n        }\n\n        const chipsArray = this.chipsList.toArray();\n        const result: IgxChipComponent[] = [];\n        for (let i = 0; i < chipsArray.length; i++) {\n            if (shiftRestLeft) {\n                if (chipIndex <= i && i < targetIndex) {\n                    result.push(chipsArray[i + 1]);\n                } else if (i === targetIndex) {\n                    result.push(chipsArray[chipIndex]);\n                } else {\n                    result.push(chipsArray[i]);\n                }\n            } else {\n                if (targetIndex < i && i <= chipIndex) {\n                    result.push(chipsArray[i - 1]);\n                } else if (i === targetIndex) {\n                    result.push(chipsArray[chipIndex]);\n                } else {\n                    result.push(chipsArray[i]);\n                }\n            }\n        }\n        this.modifiedChipsArray = result;\n\n        const eventData: IChipsAreaReorderEventArgs = {\n            chipsArray: this.modifiedChipsArray,\n            originalEvent,\n            owner: this\n        };\n        this.reorder.emit(eventData);\n        return true;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected onChipSelectionChange(event: IChipSelectEventArgs) {\n        let selectedChips = this.chipsList.filter((chip) => chip.selected);\n        if (event.selected && !selectedChips.includes(event.owner)) {\n            selectedChips.push(event.owner);\n        } else if (!event.selected && selectedChips.includes(event.owner)) {\n            selectedChips = selectedChips.filter((chip) => chip.id !== event.owner.id);\n        }\n        this.selectionChange.emit({\n            originalEvent: event.originalEvent,\n            newSelection: selectedChips,\n            owner: this\n        });\n    }\n}\n","<ng-content></ng-content>\n","import { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxChipComponent } from './chip.component';\nimport { IgxChipsAreaComponent } from './chips-area.component';\n\nexport * from './chip.component';\nexport * from './chips-area.component';\nexport * from '../directives/prefix/prefix.directive';\nexport * from '../directives/suffix/suffix.directive';\n\n/* NOTE: Chips directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_CHIPS_DIRECTIVES = [\n    IgxChipsAreaComponent,\n    IgxChipComponent,\n    IgxPrefixDirective,\n    IgxSuffixDirective\n] as const;\n","import { IgxComboBase } from './combo.common';\nimport { Injectable } from '@angular/core';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class IgxComboAPIService {\n    public disableTransitions = false;\n    protected combo: IgxComboBase;\n\n    public get valueKey() {\n        return this.combo.valueKey !== null && this.combo.valueKey !== undefined ? this.combo.valueKey : null;\n    }\n\n    public get item_focusable(): boolean {\n        return false;\n    }\n    public get isRemote(): boolean {\n        return this.combo.isRemote;\n    }\n\n    public get comboID(): string {\n        return this.combo.id;\n    }\n\n    public register(combo: IgxComboBase) {\n        this.combo = combo;\n    }\n\n    public clear(): void {\n        this.combo = null;\n    }\n\n    public add_custom_item(): void {\n        if (!this.combo) {\n            return;\n        }\n        this.combo.addItemToCollection();\n    }\n\n    public set_selected_item(itemID: any, event?: Event): void {\n        const selected = this.combo.isItemSelected(itemID);\n        if (itemID === undefined) {\n            return;\n        }\n        if (!selected) {\n            this.combo.select([itemID], false, event);\n        } else {\n            this.combo.deselect([itemID], event);\n        }\n    }\n\n    public is_item_selected(itemID: any): boolean {\n        return this.combo.isItemSelected(itemID);\n    }\n}\n","import {\n    Component,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    booleanAttribute\n} from '@angular/core';\nimport { IgxDropDownItemComponent } from '../drop-down/drop-down-item.component';\nimport { IGX_DROPDOWN_BASE, IDropDownBase, Navigate } from '../drop-down/drop-down.common';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { rem } from '../core/utils';\nimport { IgxCheckboxComponent } from '../checkbox/checkbox.component';\n\n/** @hidden */\n@Component({\n    selector: 'igx-combo-item',\n    templateUrl: 'combo-item.component.html',\n    imports: [IgxCheckboxComponent]\n})\nexport class IgxComboItemComponent extends IgxDropDownItemComponent {\n\n    /**\n     * Gets the height of a list item\n     *\n     * @hidden\n     */\n    @Input()\n    public itemHeight: string | number = '';\n\n    /** @hidden @internal */\n    @HostBinding('style.height.rem')\n    public get _itemHeightToRem() {\n        if (this.itemHeight) {\n            return rem(this.itemHeight);\n        }\n    }\n\n    @HostBinding('attr.aria-label')\n    @Input()\n    public override get ariaLabel(): string {\n        const valueKey = this.comboAPI.valueKey;\n        return (valueKey !== null && this.value != null) ? this.value[valueKey] : this.value;\n    }\n\n    /** @hidden @internal */\n    @Input({ transform: booleanAttribute })\n    public singleMode: boolean;\n\n    /**\n     * @hidden\n     */\n    public override get itemID() {\n        const valueKey = this.comboAPI.valueKey;\n        return valueKey !== null ? this.value[valueKey] : this.value;\n    }\n\n    /**\n     * @hidden\n     */\n    public get comboID() {\n        return this.comboAPI.comboID;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get disableTransitions() {\n        return this.comboAPI.disableTransitions;\n    }\n\n    constructor(\n        protected comboAPI: IgxComboAPIService,\n        @Inject(IGX_DROPDOWN_BASE) dropDown: IDropDownBase,\n        elementRef: ElementRef,\n        @Inject(IgxSelectionAPIService) selection: IgxSelectionAPIService\n    ) {\n        super(dropDown, elementRef, null, selection);\n    }\n\n    /**\n     * @hidden\n     */\n    public override get selected(): boolean {\n        return this.comboAPI.is_item_selected(this.itemID);\n    }\n\n    public override set selected(value: boolean) {\n        if (this.isHeader) {\n            return;\n        }\n        this._selected = value;\n    }\n\n    /**\n     * @hidden\n     */\n    public isVisible(direction: Navigate): boolean {\n        const rect = this.element.nativeElement.getBoundingClientRect();\n        const parentDiv = this.element.nativeElement.parentElement.parentElement.getBoundingClientRect();\n        if (direction === Navigate.Down) {\n            return rect.y + rect.height <= parentDiv.y + parentDiv.height;\n        }\n        return rect.y >= parentDiv.y;\n    }\n\n    public override clicked(event): void {\n        this.comboAPI.disableTransitions = false;\n        if (!this.isSelectable) {\n            return;\n        }\n        this.dropDown.navigateItem(this.index);\n        this.comboAPI.set_selected_item(this.itemID, event);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * The event that is prevented is the click on the checkbox label element.\n     * That is the only visible element that a user can interact with.\n     * The click propagates to the host and the preventDefault is to stop it from\n     * switching focus to the input it's base on.\n     * The toggle happens in an internal handler in the drop-down on the next task queue cycle.\n     */\n    public disableCheck(event: MouseEvent) {\n        event.preventDefault();\n    }\n}\n","@if (!isHeader && !singleMode) {\n    <!-- checkbox should not allow changing its state from UI click (that's why it should be readonly=true), becasue when cancelling the selectionChange event in the combo, then checkbox will still change state.-->\n    <igx-checkbox [checked]=\"selected\" [readonly]=\"true\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n}\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n","import { Directive } from '@angular/core';\n\n/**\n * Allows a custom element to be added at the beginning of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *   <ng-template igxComboHeader>\n *      <div class=\"header-class\">Custom header</div>\n *      <img src=\"\"/>\n *   </ng-template>\n * </igx-combo>\n */\n@Directive({\n    selector: '[igxComboHeader]',\n    standalone: true\n})\nexport class IgxComboHeaderDirective { }\n\n/**\n * Allows a custom element to be added at the end of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *   <ng-template igxComboFooter>\n *      <div class=\"footer-class\">Custom footer</div>\n *      <img src=\"\"/>\n *   </ng-template>\n * </igx-combo>\n */\n@Directive({\n    selector: '[igxComboFooter]',\n    standalone: true\n})\nexport class IgxComboFooterDirective { }\n\n/**\n * Allows the combo's items to be modified with a custom template\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *\t<ng-template igxComboItem let-display let-key=\"valueKey\">\n *\t\t<div class=\"item\">\n *\t\t\t<span class=\"state\">State: {{ display[key] }}</span>\n *\t \t\t<span class=\"region\">Region: {{ display.region }}</span>\n *\t \t</div>\n *\t </ng-template>\n  * </igx-combo>\n */\n@Directive({\n    selector: '[igxComboItem]',\n    standalone: true\n})\nexport class IgxComboItemDirective { }\n\n/**\n * Defines the custom template that will be displayed when the combo's list is empty\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo>\n *      <ng-template igxComboEmpty>\n *          <div class=\"combo--empty\">\n *              There are no items to display\n *          </div>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboEmpty]',\n    standalone: true\n})\nexport class IgxComboEmptyDirective { }\n\n/**\n * Defines the custom template that will be used when rendering header items for groups in the combo's list\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo>\n *      <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n *          <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboHeaderItem]',\n    standalone: true\n})\nexport class IgxComboHeaderItemDirective { }\n\n/**\n * Defines the custom template that will be used to display the `ADD` button\n *\n * @remarks To show the `ADD` button, the `allowCustomValues` option must be enabled\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n *      <ng-template igxComboAddItem>\n *          <button type=\"button\" class=\"combo__add-button\">\n *              Click to add item\n *          </button>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboAddItem]',\n    standalone: true\n})\nexport class IgxComboAddItemDirective { }\n\n/**\n * The custom template that will be used when rendering the combo's toggle button\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo #combo>\n *      <ng-template igxComboToggleIcon let-collapsed>\n *          <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboToggleIcon]',\n    standalone: true\n})\nexport class IgxComboToggleIconDirective { }\n\n/**\n * Defines the custom template that will be used when rendering the combo's clear icon\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n *  <igx-combo #combo>\n *      <ng-template igxComboClearIcon>\n *          <igx-icon>clear</igx-icon>\n *      </ng-template>\n *  </igx-combo>\n */\n@Directive({\n    selector: '[igxComboClearIcon]',\n    standalone: true\n})\nexport class IgxComboClearIconDirective { }\n","export interface IComboResourceStrings {\n    igx_combo_empty_message?: string;\n    igx_combo_filter_search_placeholder?: string;\n    igx_combo_addCustomValues_placeholder?: string;\n    igx_combo_clearItems_placeholder?: string;\n}\n\nexport const ComboResourceStringsEN: IComboResourceStrings = {\n    igx_combo_empty_message: 'The list is empty',\n    igx_combo_filter_search_placeholder: 'Enter a Search Term',\n    igx_combo_addCustomValues_placeholder: 'Add Item',\n    igx_combo_clearItems_placeholder: 'Clear Selection'\n\n};\n","import {\n    AfterContentChecked,\n    AfterViewChecked,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    ContentChild,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    Inject,\n    InjectionToken,\n    Injector,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NgControl } from '@angular/forms';\nimport { caseSensitive } from '@igniteui/material-icons-extended';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { CancelableBrowserEventArgs, cloneArray, IBaseCancelableBrowserEventArgs, IBaseEventArgs, rem } from '../core/utils';\nimport { SortingDirection } from '../data-operations/sorting-strategy';\nimport { IForOfState, IgxForOfDirective } from '../directives/for-of/for_of.directive';\nimport { IgxIconService } from '../icon/icon.service';\nimport { IgxInputGroupType, IGX_INPUT_GROUP_TYPE } from '../input-group/inputGroupType';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from '../input-group/public_api';\nimport { AbsoluteScrollStrategy, AutoPositionStrategy, OverlaySettings } from '../services/public_api';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboAPIService } from './combo.api';\nimport {\n    IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboEmptyDirective,\n    IgxComboFooterDirective, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemDirective, IgxComboToggleIconDirective\n} from './combo.directives';\nimport { IComboItemAdditionEvent, IComboSearchInputEventArgs } from './public_api';\nimport { ComboResourceStringsEN, IComboResourceStrings } from '../core/i18n/combo-resources';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { DOCUMENT } from '@angular/common';\nimport { isEqual } from 'lodash-es';\n\nexport const IGX_COMBO_COMPONENT = /*@__PURE__*/new InjectionToken<IgxComboBase>('IgxComboComponentToken');\n\n/** @hidden @internal TODO: Evaluate */\nexport interface IgxComboBase {\n    id: string;\n    data: any[] | null;\n    valueKey: string;\n    groupKey: string;\n    isRemote: boolean;\n    filteredData: any[] | null;\n    totalItemCount: number;\n    itemsMaxHeight: number;\n    itemHeight: number;\n    searchValue: string;\n    searchInput: ElementRef<HTMLInputElement>;\n    comboInput: ElementRef<HTMLInputElement>;\n    opened: EventEmitter<IBaseEventArgs>;\n    opening: EventEmitter<CancelableBrowserEventArgs>;\n    closing: EventEmitter<CancelableBrowserEventArgs>;\n    closed: EventEmitter<IBaseEventArgs>;\n    focusSearchInput(opening?: boolean): void;\n    triggerCheck(): void;\n    addItemToCollection(): void;\n    isAddButtonVisible(): boolean;\n    handleInputChange(event?: string): void;\n    isItemSelected(itemID: any): boolean;\n    select(item: any): void;\n    select(itemIDs: any[], clearSelection?: boolean, event?: Event): void;\n    deselect(...args: [] | [itemIDs: any[], event?: Event]): void;\n    setActiveDescendant(): void;\n}\n\nlet NEXT_ID = 0;\n\n\n/** @hidden @internal */\nexport const enum DataTypes {\n    EMPTY = 'empty',\n    PRIMITIVE = 'primitive',\n    COMPLEX = 'complex',\n    PRIMARYKEY = 'valueKey'\n}\n\n/** The filtering criteria to be applied on data search */\nexport interface IComboFilteringOptions {\n    /** Defines filtering case-sensitivity */\n    caseSensitive?: boolean;\n    /**\n     * Defines whether filtering is allowed\n     * @deprecated in version 18.2.0. Use the `disableFiltering` property instead.\n    */\n    filterable?: boolean;\n    /** Defines optional key to filter against complex list items. Default to displayKey if provided.*/\n    filteringKey?: string;\n}\n\n@Directive()\nexport abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewChecked, OnInit,\n    AfterViewInit, AfterContentChecked, OnDestroy, ControlValueAccessor {\n    /**\n     * Defines whether the caseSensitive icon should be shown in the search input\n     *\n     * ```typescript\n     * // get\n     * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [showSearchCaseIcon]='true'></igx-combo>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showSearchCaseIcon = false;\n\n    /**\n     * Set custom overlay settings that control how the combo's list of items is displayed.\n     * Set:\n     * ```html\n     * <igx-combo [overlaySettings]=\"customOverlaySettings\"></igx-combo>\n     * ```\n     *\n     * ```typescript\n     *  const customSettings = { positionStrategy: { settings: { target: myTarget } } };\n     *  combo.overlaySettings = customSettings;\n     * ```\n     * Get any custom overlay settings used by the combo:\n     * ```typescript\n     *  const comboOverlaySettings: OverlaySettings = myCombo.overlaySettings;\n     * ```\n     */\n    @Input()\n    public overlaySettings: OverlaySettings = null;\n\n    /**\n     * Gets/gets combo id.\n     *\n     * ```typescript\n     * // get\n     * let id = this.combo.id;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [id]='combo1'></igx-combo>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this._id;\n    }\n\n    public set id(value: string) {\n        if (!value) {\n            return;\n        }\n        const selection = this.selectionService.get(this._id);\n        this.selectionService.clear(this._id);\n        this._id = value;\n        if (selection) {\n            this.selectionService.set(this._id, selection);\n        }\n    }\n\n    /**\n     * Sets the style width of the element\n     *\n     * ```typescript\n     * // get\n     * let myComboWidth = this.combo.width;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [width]='250px'></igx-combo>\n     * ```\n     */\n    @HostBinding('style.width')\n    @Input()\n    public width: string;\n\n    /**\n     * Controls whether custom values can be added to the collection\n     *\n     * ```typescript\n     * // get\n     * let comboAllowsCustomValues = this.combo.allowCustomValues;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [allowCustomValues]='true'></igx-combo>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public allowCustomValues = false;\n\n    /**\n     * Configures the drop down list height\n     *\n     * ```typescript\n     * // get\n     * let myComboItemsMaxHeight = this.combo.itemsMaxHeight;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [itemsMaxHeight]='320'></igx-combo>\n     * ```\n     */\n    @Input()\n    public get itemsMaxHeight(): number {\n        if (this.itemHeight && !this._itemsMaxHeight) {\n            return this.itemHeight * this.itemsInContainer;\n        }\n        return this._itemsMaxHeight;\n    }\n\n    public set itemsMaxHeight(val: number) {\n        this._itemsMaxHeight = val;\n    }\n\n    /** @hidden */\n    public get itemsMaxHeightInRem() {\n        if (this.itemsMaxHeight) {\n            return rem(this.itemsMaxHeight);\n        }\n    }\n\n    /**\n     * Configures the drop down list item height\n     *\n     * ```typescript\n     * // get\n     * let myComboItemHeight = this.combo.itemHeight;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [itemHeight]='32'></igx-combo>\n     * ```\n     */\n    @Input()\n    public get itemHeight(): number {\n        return this._itemHeight;\n    }\n\n    public set itemHeight(val: number) {\n        this._itemHeight = val;\n    }\n\n    /**\n     * Configures the drop down list width\n     *\n     * ```typescript\n     * // get\n     * let myComboItemsWidth = this.combo.itemsWidth;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [itemsWidth] = '\"180px\"'></igx-combo>\n     * ```\n     */\n    @Input()\n    public itemsWidth: string;\n\n    /**\n     * Defines the placeholder value for the combo value field\n     *\n     * ```typescript\n     * // get\n     * let myComboPlaceholder = this.combo.placeholder;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [placeholder]='newPlaceHolder'></igx-combo>\n     * ```\n     */\n    @Input()\n    public placeholder: string;\n\n    /**\n     * Combo data source.\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [data]='items'></igx-combo>\n     * ```\n     */\n    @Input()\n    public get data(): any[] | null {\n        return this._data;\n    }\n    public set data(val: any[] | null) {\n        // igxFor directive ignores undefined values\n        // if the combo uses simple data and filtering is applied\n        // an error will occur due to the mismatch of the length of the data\n        // this can occur during filtering for the igx-combo and\n        // during filtering & selection for the igx-simple-combo\n        // since the simple combo's input is both a container for the selection and a filter\n        this._data = (val) ? val.filter(x => x !== undefined) : [];\n    }\n\n    /**\n     * Determines which column in the data source is used to determine the value.\n     *\n     * ```typescript\n     * // get\n     * let myComboValueKey = this.combo.valueKey;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [valueKey]='myKey'></igx-combo>\n     * ```\n     */\n    @Input()\n    public valueKey: string = null;\n\n    @Input()\n    public set displayKey(val: string) {\n        this._displayKey = val;\n    }\n\n    /**\n     * Determines which column in the data source is used to determine the display value.\n     *\n     * ```typescript\n     * // get\n     * let myComboDisplayKey = this.combo.displayKey;\n     *\n     * // set\n     * this.combo.displayKey = 'val';\n     *\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [displayKey]='myDisplayKey'></igx-combo>\n     * ```\n     */\n    public get displayKey() {\n        return this._displayKey ? this._displayKey : this.valueKey;\n    }\n\n    /**\n     * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [groupKey]='newGroupKey'></igx-combo>\n     * ```\n     */\n    @Input()\n    public set groupKey(val: string) {\n        this._groupKey = val;\n    }\n\n    /**\n     * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n     *\n     * ```typescript\n     * // get\n     * let currentGroupKey = this.combo.groupKey;\n     * ```\n     */\n    public get groupKey(): string {\n        return this._groupKey;\n    }\n\n    /**\n     * Sets groups sorting order.\n     *\n     * @example\n     * ```html\n     * <igx-combo [groupSortingDirection]=\"groupSortingDirection\"></igx-combo>\n     * ```\n     * ```typescript\n     * public groupSortingDirection = SortingDirection.Asc;\n     * ```\n     */\n    @Input()\n    public get groupSortingDirection(): SortingDirection {\n        return this._groupSortingDirection;\n    }\n    public set groupSortingDirection(val: SortingDirection) {\n        this._groupSortingDirection = val;\n    }\n\n    /**\n     * Gets/Sets the custom filtering function of the combo.\n     *\n     * @example\n     * ```html\n     *  <igx-comb #combo [data]=\"localData\" [filterFunction]=\"filterFunction\"></igx-combo>\n     * ```\n     */\n    @Input()\n    public filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[];\n\n    /**\n     * Sets aria-labelledby attribute value.\n     * ```html\n     * <igx-combo [ariaLabelledBy]=\"'label1'\">\n     * ```\n     */\n    @Input()\n    public ariaLabelledBy: string;\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-combo')\n    public cssClass = 'igx-combo'; // Independent of display density for the time being\n\n    /**\n     * Disables the combo. The default is `false`.\n     * ```html\n     * <igx-combo [disabled]=\"'true'\">\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public disabled = false;\n\n    /**\n     * Sets the visual combo type.\n     * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.\n     * ```html\n     * <igx-combo [type]=\"'line'\">\n     * ```\n     */\n    @Input()\n    public get type(): IgxInputGroupType {\n        return this._type || this._inputGroupType || 'box';\n    }\n\n    public set type(val: IgxInputGroupType) {\n        this._type = val;\n    }\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    @Input()\n    public get resourceStrings(): IComboResourceStrings {\n        return this._resourceStrings;\n    }\n    public set resourceStrings(value: IComboResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Emitted before the dropdown is opened\n     *\n     * ```html\n     * <igx-combo opening='handleOpening($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is opened\n     *\n     * ```html\n     * <igx-combo (opened)='handleOpened($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted before the dropdown is closed\n     *\n     * ```html\n     * <igx-combo (closing)='handleClosing($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is closed\n     *\n     * ```html\n     * <igx-combo (closed)='handleClosed($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted when an item is being added to the data collection\n     *\n     * ```html\n     * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public addition = new EventEmitter<IComboItemAdditionEvent>();\n\n    /**\n     * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)\n     *\n     * ```html\n     * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public searchInputUpdate = new EventEmitter<IComboSearchInputEventArgs>();\n\n    /**\n     * Emitted when new chunk of data is loaded from the virtualization\n     *\n     * ```html\n     * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>\n     * ```\n     */\n    @Output()\n    public dataPreLoad = new EventEmitter<IForOfState>();\n\n    /**\n     * The custom template, if any, that should be used when rendering ITEMS in the combo list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.itemTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboItem let-item let-key=\"valueKey\">\n     *          <div class=\"custom-item\">\n     *              <div class=\"custom-item__name\">{{ item[key] }}</div>\n     *              <div class=\"custom-item__cost\">{{ item.cost }}</div>\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboItemDirective, { read: TemplateRef })\n    public itemTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the HEADER for the combo items list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.headerTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboHeader>\n     *          <div class=\"combo__header\">\n     *              This is a custom header\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboHeaderDirective, { read: TemplateRef })\n    public headerTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the FOOTER for the combo items list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.footerTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboFooter>\n     *          <div class=\"combo__footer\">\n     *              This is a custom footer\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboFooterDirective, { read: TemplateRef })\n    public footerTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.headerItemTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n     *          <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboHeaderItemDirective, { read: TemplateRef })\n    public headerItemTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.addItemTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboAddItem>\n     *          <button type=\"button\" igxButton=\"contained\" class=\"combo__add-button\">\n     *              Click to add item\n     *          </button>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboAddItemDirective, { read: TemplateRef })\n    public addItemTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.emptyTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboEmpty>\n     *          <div class=\"combo--empty\">\n     *              There are no items to display\n     *          </div>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboEmptyDirective, { read: TemplateRef })\n    public emptyTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.toggleIconTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboToggleIcon let-collapsed>\n     *          <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboToggleIconDirective, { read: TemplateRef })\n    public toggleIconTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the combo CLEAR button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.combo.clearIconTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-combo #combo>\n     *      ...\n     *      <ng-template igxComboClearIcon>\n     *          <igx-icon>clear</igx-icon>\n     *      </ng-template>\n     *  </igx-combo>\n     * ```\n     */\n    @ContentChild(IgxComboClearIconDirective, { read: TemplateRef })\n    public clearIconTemplate: TemplateRef<any> = null;\n\n    /** @hidden @internal */\n    @ContentChild(forwardRef(() => IgxLabelDirective), { static: true }) public label: IgxLabelDirective;\n\n    /** @hidden @internal */\n    @ViewChild('inputGroup', { read: IgxInputGroupComponent, static: true })\n    public inputGroup: IgxInputGroupComponent;\n\n    /** @hidden @internal */\n    @ViewChild('comboInput', { read: IgxInputDirective, static: true })\n    public comboInput: IgxInputDirective;\n\n    /** @hidden @internal */\n    @ViewChild('searchInput')\n    public searchInput: ElementRef<HTMLInputElement> = null;\n\n    /** @hidden @internal */\n    @ViewChild(IgxForOfDirective, { static: true })\n    public virtualScrollContainer: IgxForOfDirective<any>;\n\n    @ViewChild(IgxForOfDirective, { read: IgxForOfDirective, static: true })\n    protected virtDir: IgxForOfDirective<any>;\n\n    @ViewChild('dropdownItemContainer', { static: true })\n    protected dropdownContainer: ElementRef = null;\n\n    @ViewChild('primitive', { read: TemplateRef, static: true })\n    protected primitiveTemplate: TemplateRef<any>;\n\n    @ViewChild('complex', { read: TemplateRef, static: true })\n    protected complexTemplate: TemplateRef<any>;\n\n    @ContentChildren(IgxPrefixDirective, { descendants: true })\n    protected prefixes: QueryList<IgxPrefixDirective>;\n\n    @ContentChildren(IgxSuffixDirective, { descendants: true })\n    protected suffixes: QueryList<IgxSuffixDirective>;\n\n    /** @hidden @internal */\n    public get searchValue(): string {\n        return this._searchValue;\n    }\n    public set searchValue(val: string) {\n        this.filterValue = val;\n        this._searchValue = val;\n    }\n\n    /** @hidden @internal */\n    public get isRemote() {\n        return this.totalItemCount > 0 &&\n            this.valueKey &&\n            this.dataType === DataTypes.COMPLEX;\n    }\n\n    /** @hidden @internal */\n    public get dataType(): string {\n        if (this.displayKey) {\n            return DataTypes.COMPLEX;\n        }\n        return DataTypes.PRIMITIVE;\n    }\n\n    /**\n     * Gets if control is valid, when used in a form\n     *\n     * ```typescript\n     * // get\n     * let valid = this.combo.valid;\n     * ```\n     */\n    public get valid(): IgxInputState {\n        return this._valid;\n    }\n\n    /**\n     * Sets if control is valid, when used in a form\n     *\n     * ```typescript\n     * // set\n     * this.combo.valid = IgxInputState.INVALID;\n     * ```\n     */\n    public set valid(valid: IgxInputState) {\n        this._valid = valid;\n        this.comboInput.valid = valid;\n    }\n\n    /**\n     * The value of the combo\n     *\n     * ```typescript\n     * // get\n     * let comboValue = this.combo.value;\n     * ```\n     */\n    public get value(): any[] {\n        return this._value;\n    }\n\n    /**\n     * The text displayed in the combo input\n     *\n     * ```typescript\n     * // get\n     * let comboDisplayValue = this.combo.displayValue;\n     * ```\n     */\n    public get displayValue(): string {\n        return this._displayValue;\n    }\n\n    /**\n     * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`\n     *\n     * ```typescript\n     * // get\n     * let state = this.combo.virtualizationState;\n     * ```\n     */\n    public get virtualizationState(): IForOfState {\n        return this.virtDir.state;\n    }\n    /**\n     * Sets the current state of the virtualized data.\n     *\n     * ```typescript\n     * // set\n     * this.combo.virtualizationState(state);\n     * ```\n     */\n    public set virtualizationState(state: IForOfState) {\n        this.virtDir.state = state;\n    }\n\n    /**\n     * Gets drop down state.\n     *\n     * ```typescript\n     * let state = this.combo.collapsed;\n     * ```\n     */\n    public get collapsed(): boolean {\n        return this.dropdown.collapsed;\n    }\n\n    /**\n     * Gets total count of the virtual data items, when using remote service.\n     *\n     * ```typescript\n     * // get\n     * let count = this.combo.totalItemCount;\n     * ```\n     */\n    public get totalItemCount(): number {\n        return this.virtDir.totalItemCount;\n    }\n    /**\n     * Sets total count of the virtual data items, when using remote service.\n     *\n     * ```typescript\n     * // set\n     * this.combo.totalItemCount(remoteService.count);\n     * ```\n     */\n    public set totalItemCount(count: number) {\n        this.virtDir.totalItemCount = count;\n    }\n\n    /** @hidden @internal */\n    public get template(): TemplateRef<any> {\n        this._dataType = this.dataType;\n        if (this.itemTemplate) {\n            return this.itemTemplate;\n        }\n        if (this._dataType === DataTypes.COMPLEX) {\n            return this.complexTemplate;\n        }\n        return this.primitiveTemplate;\n    }\n\n    /** @hidden @internal */\n    public customValueFlag = true;\n    /** @hidden @internal */\n    public filterValue = '';\n    /** @hidden @internal */\n    public defaultFallbackGroup = 'Other';\n    /** @hidden @internal */\n    public activeDescendant = '';\n\n    /**\n     * Configures the way combo items will be filtered.\n     *\n     * ```typescript\n     * // get\n     * let myFilteringOptions = this.combo.filteringOptions;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [filteringOptions]='myFilteringOptions'></igx-combo>\n     * ```\n     */\n\n    @Input()\n    public get filteringOptions(): IComboFilteringOptions {\n        return this._filteringOptions || this._defaultFilteringOptions;\n    }\n    public set filteringOptions(value: IComboFilteringOptions) {\n        this._filteringOptions = value;\n    }\n\n    protected containerSize = undefined;\n    protected itemSize = undefined;\n    protected _data = [];\n    protected _value = [];\n    protected _displayValue = '';\n    protected _groupKey = '';\n    protected _searchValue = '';\n    protected _filteredData = [];\n    protected _displayKey: string;\n    protected _remoteSelection = {};\n    protected _resourceStrings = getCurrentResourceStrings(ComboResourceStringsEN);\n    protected _valid = IgxInputState.INITIAL;\n    protected ngControl: NgControl = null;\n    protected destroy$ = new Subject<void>();\n    protected _onTouchedCallback: () => void = noop;\n    protected _onChangeCallback: (_: any) => void = noop;\n    protected compareCollator = new Intl.Collator();\n    protected computedStyles;\n\n    private _id: string = `igx-combo-${NEXT_ID++}`;\n    private _type = null;\n    private _dataType = '';\n    private _itemHeight = undefined;\n    private _itemsMaxHeight = null;\n    private _overlaySettings: OverlaySettings;\n    private _groupSortingDirection: SortingDirection = SortingDirection.Asc;\n    private _filteringOptions: IComboFilteringOptions;\n    private _defaultFilteringOptions: IComboFilteringOptions = { caseSensitive: false };\n    private itemsInContainer = 10;\n\n    public abstract dropdown: IgxComboDropDownComponent;\n    public abstract selectionChanging: EventEmitter<any>;\n\n    constructor(\n        protected elementRef: ElementRef,\n        protected cdr: ChangeDetectorRef,\n        protected selectionService: IgxSelectionAPIService,\n        protected comboAPI: IgxComboAPIService,\n        @Inject(DOCUMENT) public document: Document,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) protected _inputGroupType: IgxInputGroupType,\n        @Optional() protected _injector: Injector,\n        @Optional() @Inject(IgxIconService) protected _iconService?: IgxIconService,\n    ) { }\n\n    public ngAfterViewChecked() {\n        const targetElement = this.inputGroup.element.nativeElement.querySelector('.igx-input-group__bundle') as HTMLElement;\n\n        this._overlaySettings = {\n            target: targetElement,\n            scrollStrategy: new AbsoluteScrollStrategy(),\n            positionStrategy: new AutoPositionStrategy(),\n            modal: false,\n            closeOnOutsideClick: true,\n            excludeFromOutsideClick: [targetElement]\n        };\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentChecked(): void {\n        if (this.inputGroup && this.prefixes?.length > 0) {\n            this.inputGroup.prefixes = this.prefixes;\n        }\n\n        if (this.inputGroup && this.suffixes?.length > 0) {\n            this.inputGroup.suffixes = this.suffixes;\n        }\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n\n        this.ngControl = this._injector.get<NgControl>(NgControl, null);\n        this.selectionService.set(this.id, new Set());\n        this._iconService?.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');\n        this.computedStyles = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit(): void {\n        this.filteredData = [...this.data];\n        if (this.ngControl) {\n            this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);\n            this.manageRequiredAsterisk();\n            this.cdr.detectChanges();\n        }\n        this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e: IForOfState) => {\n            const eventArgs: IForOfState = Object.assign({}, e, { owner: this });\n            this.dataPreLoad.emit(eventArgs);\n        });\n        this.dropdown?.opening.subscribe((_args: IBaseCancelableBrowserEventArgs) => {\n            // calculate the container size and item size based on the sizes from the DOM\n            const dropdownContainerHeight = this.dropdownContainer.nativeElement.getBoundingClientRect().height;\n            if (dropdownContainerHeight) {\n                this.containerSize = parseFloat(dropdownContainerHeight);\n            }\n            if (this.dropdown.children?.first) {\n                this.itemSize = this.dropdown.children.first.element.nativeElement.getBoundingClientRect().height;\n            }\n        });\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n        this.comboAPI.clear();\n        this.selectionService.delete(this.id);\n    }\n\n    /**\n     * A method that opens/closes the combo.\n     *\n     * ```html\n     * <button type=\"button\" (click)=\"combo.toggle()\">Toggle Combo</button>\n     * <igx-combo #combo></igx-combo>\n     * ```\n     */\n    public toggle(): void {\n        if (this.collapsed && this._displayValue.length !== 0) {\n            this.filterValue = '';\n            this.cdr.detectChanges();\n        }\n        const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n        this.dropdown.toggle(overlaySettings);\n        if (!this.collapsed) {\n            this.setActiveDescendant();\n        }\n    }\n\n    /**\n     * A method that opens the combo.\n     *\n     * ```html\n     * <button type=\"button\" (click)=\"combo.open()\">Open Combo</button>\n     * <igx-combo #combo></igx-combo>\n     * ```\n     */\n    public open(): void {\n        if (this.collapsed && this._displayValue.length !== 0) {\n            this.filterValue = '';\n            this.cdr.detectChanges();\n        }\n        const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n        this.dropdown.open(overlaySettings);\n        this.setActiveDescendant();\n    }\n\n    /**\n     * A method that closes the combo.\n     *\n     * ```html\n     * <button type=\"button\" (click)=\"combo.close()\">Close Combo</button>\n     * <igx-combo #combo></igx-combo>\n     * ```\n     */\n    public close(): void {\n        this.dropdown.close();\n    }\n\n    /**\n     * Triggers change detection on the combo view\n     */\n    public triggerCheck() {\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Get current selection state\n     *\n     * @returns Array of selected items\n     * ```typescript\n     * let mySelection = this.combo.selection;\n     * ```\n     */\n    public get selection(): any[] {\n        const items = Array.from(this.selectionService.get(this.id));\n        return this.convertKeysToItems(items);\n    }\n\n    /**\n     * Returns if the specified itemID is selected\n     *\n     * @hidden\n     * @internal\n     */\n    public isItemSelected(item: any): boolean {\n        return this.selectionService.is_item_selected(this.id, item);\n    }\n\n    /** @hidden @internal */\n    public get toggleIcon(): string {\n        return this.dropdown.collapsed ? 'input_expand' : 'input_collapse';\n    }\n\n    /** @hidden @internal */\n    public addItemToCollection() {\n        if (!this.searchValue) {\n            return;\n        }\n        const addedItem = this.displayKey ? {\n            [this.valueKey]: this.searchValue,\n            [this.displayKey]: this.searchValue\n        } : this.searchValue;\n        if (this.groupKey) {\n            Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });\n        }\n        // expose shallow copy instead of this.data in event args so this.data can't be mutated\n        const oldCollection = [...this.data];\n        const newCollection = [...this.data, addedItem];\n        const args: IComboItemAdditionEvent = {\n            oldCollection, addedItem, newCollection, owner: this, cancel: false\n        };\n        this.addition.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.data.push(args.addedItem);\n        // trigger re-render\n        this.data = cloneArray(this.data);\n        this.select(this.valueKey !== null && this.valueKey !== undefined ?\n            [args.addedItem[this.valueKey]] : [args.addedItem], false);\n        this.customValueFlag = false;\n        this.searchInput?.nativeElement.focus();\n        this.dropdown.focusedItem = null;\n        this.virtDir.scrollTo(0);\n    }\n\n    /** @hidden @internal */\n    public isAddButtonVisible(): boolean {\n        // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;\n        return this.searchValue !== '' && this.customValueFlag;\n    }\n\n    /** @hidden @internal */\n    public handleInputChange(event?: any) {\n        if (event !== undefined) {\n            const args: IComboSearchInputEventArgs = {\n                searchText: typeof event === 'string' ? event : event.target.value,\n                owner: this,\n                cancel: false\n            };\n            this.searchInputUpdate.emit(args);\n            if (args.cancel) {\n                this.filterValue = null;\n            }\n        }\n        this.checkMatch();\n    }\n\n    /**\n     * Event handlers\n     *\n     * @hidden\n     * @internal\n     */\n    public handleOpening(e: IBaseCancelableBrowserEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.opening.emit(args);\n        e.cancel = args.cancel;\n    }\n\n    /** @hidden @internal */\n    public handleClosing(e: IBaseCancelableBrowserEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.closing.emit(args);\n        e.cancel = args.cancel;\n        if (e.cancel) {\n            return;\n        }\n        this.searchValue = '';\n        if (!e.event) {\n            this.comboInput?.nativeElement.focus();\n        } else {\n            this._onTouchedCallback();\n            this.updateValidity();\n        }\n    }\n\n    /** @hidden @internal */\n    public handleClosed() {\n        this.closed.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public handleKeyDown(event: KeyboardEvent) {\n        if (event.key === 'ArrowUp' || event.key === 'Up') {\n            event.preventDefault();\n            event.stopPropagation();\n            this.close();\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn: any): void {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: any): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    /** @hidden @internal */\n    public onClick(event: Event) {\n        event.stopPropagation();\n        event.preventDefault();\n        if (!this.disabled) {\n            this.toggle();\n        }\n    }\n\n    /** @hidden @internal */\n    public onBlur() {\n        if (this.collapsed) {\n            this._onTouchedCallback();\n            this.updateValidity();\n        }\n    }\n\n    /** @hidden @internal */\n    public setActiveDescendant(): void {\n        this.activeDescendant = this.dropdown.focusedItem?.id || '';\n    }\n\n    /** @hidden @internal */\n    public toggleCaseSensitive() {\n        this.filteringOptions = Object.assign({}, this.filteringOptions, { caseSensitive: !this.filteringOptions.caseSensitive });\n    }\n\n    protected onStatusChanged = () => {\n        if (this.ngControl && this.isTouchedOrDirty && !this.disabled) {\n            if (this.hasValidators && (!this.collapsed || this.inputGroup.isFocused)) {\n                this.valid = this.ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n            } else {\n                this.valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n            }\n        } else {\n            // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n            this.valid = IgxInputState.INITIAL;\n        }\n        this.manageRequiredAsterisk();\n    };\n\n    private updateValidity() {\n        if (this.ngControl && this.ngControl.invalid) {\n            this.valid = IgxInputState.INVALID;\n        } else {\n            this.valid = IgxInputState.INITIAL;\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this.ngControl.control.touched || this.ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this.ngControl.control.validator || !!this.ngControl.control.asyncValidator);\n    }\n\n    /** if there is a valueKey - map the keys to data items, else - just return the keys */\n    protected convertKeysToItems(keys: any[]) {\n        if (this.valueKey === null || this.valueKey === undefined) {\n            return keys;\n        }\n\n        return keys.map(key => {\n            const item = this.data.find(entry => isEqual(entry[this.valueKey], key));\n\n            return item !== undefined ? item : { [this.valueKey]: key };\n        });\n    }\n\n    protected checkMatch(): void {\n        const itemMatch = this.filteredData.some(this.findMatch);\n        this.customValueFlag = this.allowCustomValues && !itemMatch;\n    }\n\n    protected findMatch = (element: any): boolean => {\n        const value = this.displayKey ? element[this.displayKey] : element;\n        const searchValue = this.searchValue || this.comboInput?.value;\n        return value?.toString().trim().toLowerCase() === searchValue.trim().toLowerCase();\n    };\n\n    protected manageRequiredAsterisk(): void {\n        if (this.ngControl) {\n            this.inputGroup.isRequired = this.required;\n        }\n    }\n\n    /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n    protected registerRemoteEntries(ids: any[], add = true) {\n        if (add) {\n            const selection = this.getValueDisplayPairs(ids);\n            for (const entry of selection) {\n                this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];\n            }\n        } else {\n            for (const entry of ids) {\n                delete this._remoteSelection[entry];\n            }\n        }\n    }\n\n    /**\n     * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`\n     */\n    protected getValueDisplayPairs(ids: any[]) {\n        return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({\n            [this.valueKey]: e[this.valueKey],\n            [this.displayKey]: e[this.displayKey]\n        }));\n    }\n\n    protected getRemoteSelection(newSelection: any[], oldSelection: any[]): string {\n        if (!newSelection.length) {\n            // If new selection is empty, clear all items\n            this.registerRemoteEntries(oldSelection, false);\n            return '';\n        }\n        const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);\n        const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);\n        this.registerRemoteEntries(addedItems);\n        this.registerRemoteEntries(removedItems, false);\n        return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');\n    }\n\n    protected get required(): boolean {\n        if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {\n            // Run the validation with empty object to check if required is enabled.\n            const error = this.ngControl.control.validator({} as AbstractControl);\n            return error && error.required;\n        }\n\n        return false;\n    }\n\n    public abstract get filteredData(): any[] | null;\n    public abstract set filteredData(val: any[] | null);\n\n    public abstract handleOpened();\n    public abstract onArrowDown(event: Event);\n    public abstract focusSearchInput(opening?: boolean);\n\n    public abstract select(newItem: any): void;\n    public abstract select(newItems: Array<any> | any, clearCurrentSelection?: boolean, event?: Event): void;\n\n    public abstract deselect(...args: [] | [items: Array<any>, event?: Event]): void;\n\n    public abstract writeValue(value: any): void;\n\n    protected abstract setSelection(newSelection: Set<any>, event?: Event): void;\n    protected abstract createDisplayText(newSelection: any[], oldSelection: any[]);\n}\n","import { IgxComboItemComponent } from './combo-item.component';\nimport { Component, HostBinding } from '@angular/core';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-combo-add-item',\n    template: '<ng-content></ng-content>',\n    providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }],\n})\nexport class IgxComboAddItemComponent extends IgxComboItemComponent {\n    @HostBinding('class.igx-drop-down__item')\n    public get isDropDownItem(): boolean {\n        return false;\n    }\n\n    public override get selected(): boolean {\n        return false;\n    }\n    public override set selected(value: boolean) {\n    }\n\n    public override clicked(event?) {// eslint-disable-line\n        this.comboAPI.disableTransitions = false;\n        this.comboAPI.add_custom_item();\n    }\n}\n","import {\n    ChangeDetectorRef, Component, ElementRef, Inject, QueryList, OnDestroy, AfterViewInit, ContentChildren, Input, booleanAttribute\n} from '@angular/core';\nimport { IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { IDropDownBase, IGX_DROPDOWN_BASE } from '../drop-down/drop-down.common';\nimport { IgxDropDownComponent } from '../drop-down/drop-down.component';\nimport { DropDownActionKey } from '../drop-down/drop-down.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxDropDownItemBaseDirective } from '../drop-down/drop-down-item.base';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { DOCUMENT } from '@angular/common';\nimport { IgxToggleDirective } from '../directives/toggle/toggle.directive';\n\n/** @hidden */\n@Component({\n    selector: 'igx-combo-drop-down',\n    templateUrl: '../drop-down/drop-down.component.html',\n    providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }],\n    imports: [IgxToggleDirective]\n})\nexport class IgxComboDropDownComponent extends IgxDropDownComponent implements IDropDownBase, OnDestroy, AfterViewInit {\n    /** @hidden @internal */\n    @Input({ transform: booleanAttribute })\n    public singleMode = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxComboItemComponent, { descendants: true })\n    public override children: QueryList<IgxDropDownItemBaseDirective> = null;\n\n    /** @hidden @internal */\n    public override get scrollContainer(): HTMLElement {\n        // TODO: Update, use public API if possible:\n        return this.virtDir.dc.location.nativeElement;\n    }\n\n    protected get isScrolledToLast(): boolean {\n        const scrollTop = this.virtDir.scrollPosition;\n        const scrollHeight = this.virtDir.getScroll().scrollHeight;\n        return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;\n    }\n\n    protected get lastVisibleIndex(): number {\n        return this.combo.totalItemCount ?\n            Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :\n            this.items.length - 1;\n    }\n\n    protected get sortedChildren(): IgxDropDownItemBaseDirective[] {\n        if (this.children !== undefined) {\n            return this.children.toArray()\n                .sort((a: IgxDropDownItemBaseDirective, b: IgxDropDownItemBaseDirective) => a.index - b.index);\n        }\n        return null;\n    }\n\n    /**\n     * Get all non-header items\n     *\n     * ```typescript\n     * let myDropDownItems = this.dropdown.items;\n     * ```\n     */\n    public override get items(): IgxComboItemComponent[] {\n        const items: IgxComboItemComponent[] = [];\n        if (this.children !== undefined) {\n            const sortedChildren = this.sortedChildren as IgxComboItemComponent[];\n            for (const child of sortedChildren) {\n                if (!child.isHeader) {\n                    items.push(child);\n                }\n            }\n        }\n\n        return items;\n    }\n\n    constructor(\n        elementRef: ElementRef,\n        cdr: ChangeDetectorRef,\n        @Inject(DOCUMENT) document: any,\n        selection: IgxSelectionAPIService,\n        @Inject(IGX_COMBO_COMPONENT) public combo: IgxComboBase,\n        protected comboAPI: IgxComboAPIService) {\n        super(elementRef, cdr, document, selection);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onFocus() {\n        this.focusedItem = this._focusedItem || this.items[0];\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onBlur(_evt?) {\n        this.focusedItem = null;\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onToggleOpened() {\n        this.opened.emit();\n    }\n\n    /**\n     * @hidden\n     */\n    public override navigateFirst() {\n        this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e?.isHeader));\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden\n     */\n    public override navigatePrev() {\n        if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n            this.combo.focusSearchInput(false);\n            this.focusedItem = null;\n        } else {\n            super.navigatePrev();\n        }\n        this.combo.setActiveDescendant();\n    }\n\n\n    /**\n     * @hidden\n     */\n    public override navigateNext() {\n        const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;\n        if (this._focusedItem && this._focusedItem.index === lastIndex) {\n            this.focusAddItemButton();\n        } else {\n            super.navigateNext();\n        }\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override selectItem(item: IgxDropDownItemBaseDirective) {\n        if (item === null || item === undefined) {\n            return;\n        }\n        this.comboAPI.set_selected_item(item.itemID);\n        this._focusedItem = item;\n        this.combo.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override updateScrollPosition() {\n        this.virtDir.getScroll().scrollTop = this._scrollPosition;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onItemActionKey(key: DropDownActionKey) {\n        switch (key) {\n            case DropDownActionKey.ENTER:\n                this.handleEnter();\n                break;\n            case DropDownActionKey.SPACE:\n                this.handleSpace();\n                break;\n            case DropDownActionKey.ESCAPE:\n                this.close();\n        }\n    }\n\n    public override ngAfterViewInit() {\n        this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngOnDestroy(): void {\n        this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);\n        super.ngOnDestroy();\n    }\n\n    protected override scrollToHiddenItem(_newItem: any): void { }\n\n    protected scrollHandler = () => {\n        this.comboAPI.disableTransitions = true;\n    };\n\n    private handleEnter() {\n        if (this.isAddItemFocused()) {\n            this.combo.addItemToCollection();\n            return;\n        }\n        if (this.singleMode && this.focusedItem) {\n            this.combo.select(this.focusedItem.itemID);\n        }\n\n        this.close();\n    }\n\n    private handleSpace() {\n        if (this.isAddItemFocused()) {\n            return;\n        } else {\n            this.selectItem(this.focusedItem);\n        }\n    }\n\n    private isAddItemFocused(): boolean {\n        return this.focusedItem instanceof IgxComboAddItemComponent;\n    }\n\n    private focusAddItemButton() {\n        if (this.combo.isAddButtonVisible()) {\n            this.focusedItem = this.items[this.items.length - 1];\n        }\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { SortingDirection } from '../data-operations/sorting-strategy';\nimport { IComboFilteringOptions, IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\n\n/** @hidden */\n@Pipe({\n    name: 'comboFiltering',\n    standalone: true\n})\nexport class IgxComboFilteringPipe implements PipeTransform {\n    public transform(\n        collection: any[],\n        searchValue: any,\n        displayKey: any,\n        filteringOptions: IComboFilteringOptions,\n        filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[] = defaultFilterFunction,\n        disableFiltering: boolean = false) {\n        if (!collection) {\n            return [];\n        }\n        if (disableFiltering) {\n            return collection;\n        }\n        filteringOptions.filteringKey = filteringOptions.filteringKey ?? displayKey;\n        return filterFunction(collection, searchValue, filteringOptions);\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'comboGrouping',\n    standalone: true\n})\nexport class IgxComboGroupingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_COMBO_COMPONENT) public combo: IgxComboBase) { }\n\n    public transform(collection: any[], groupKey: any, valueKey: any, sortingDirection: SortingDirection, compareCollator: Intl.Collator) {\n        // TODO: should filteredData be changed here?\n        this.combo.filteredData = collection;\n        if ((!groupKey && groupKey !== 0) || !collection.length) {\n            return collection;\n        }\n        const groups = Object.entries(groupBy(collection, (item) => item[groupKey] ?? 'Other'));\n        if (sortingDirection !== SortingDirection.None) {\n            const reverse = sortingDirection === SortingDirection.Desc ? -1 : 1;\n            groups.sort((a,b) => {\n                return compareCollator.compare(a[0], b[0]) * reverse;\n            });\n        }\n        const result = groups.flatMap(([_, items]) => {\n            items.unshift({\n                isHeader: true,\n                [valueKey]: items[0][groupKey],\n                [groupKey]: items[0][groupKey]\n            })\n            return items;\n        });\n        return result;\n    }\n}\n\nfunction defaultFilterFunction<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n    if (!searchValue) {\n        return collection;\n    }\n\n    const { caseSensitive, filteringKey } = filteringOptions;\n    const term = caseSensitive ? searchValue : searchValue.toLowerCase();\n\n    return collection.filter(item => {\n        const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n        return (caseSensitive ? str : str.toLowerCase()).includes(term);\n    });\n}\n\nfunction normalizeString(str: string, caseSensitive = false): string {\n    return (caseSensitive ? str : str.toLocaleLowerCase())\n        .normalize('NFKD')\n        .replace(/\\p{M}/gu, '');\n}\n\nfunction groupBy<T>(data: T[], key: keyof T | ((item: T) => any)) {\n    const result: Record<string, T[]> = {};\n    const _get = typeof key === 'function' ? key : (item: T) => item[key];\n\n    for (const item of data) {\n      const category = _get(item);\n      const group = result[category];\n\n      Array.isArray(group) ? group.push(item) : (result[category] = [item]);\n    }\n\n    return result;\n}\n\n/**\n * Combo filter function which does not distinguish between accented letters and their base letters.\n * For example, when filtering for \"resume\", this function will match both \"resume\" and \"résumé\".\n *\n * @example\n * ```html\n * <igx-combo [filterFunction]=\"comboIgnoreDiacriticFilterFunction\"></igx-combo>\n * ```\n */\nexport function comboIgnoreDiacriticsFilter<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n    if (!searchValue) {\n        return collection;\n    }\n\n    const { caseSensitive, filteringKey } = filteringOptions;\n    const term = normalizeString(searchValue, caseSensitive);\n\n    return collection.filter(item => {\n        const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n        return normalizeString(str, caseSensitive).includes(term);\n    });\n}\n","import { DOCUMENT, NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit, ChangeDetectorRef, Component, ElementRef, OnInit, OnDestroy,\n    Optional, Inject, Injector, ViewChild, Input, Output, EventEmitter, HostListener, DoCheck, booleanAttribute\n} from '@angular/core';\n\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { IBaseEventArgs, IBaseCancelableEventArgs, CancelableEventArgs } from '../core/utils';\nimport { IgxForOfDirective } from '../directives/for-of/for_of.directive';\nimport { IgxIconService } from '../icon/icon.service';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboFilteringPipe, IgxComboGroupingPipe } from './combo.pipes';\nimport { IGX_COMBO_COMPONENT, IgxComboBaseDirective } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { EditorProvider } from '../core/edit-provider';\nimport { IgxInputGroupType, IGX_INPUT_GROUP_TYPE } from '../input-group/public_api';\nimport { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxInputDirective } from '../directives/input/input.directive';\n\n/** Event emitted when an igx-combo's selection is changing */\nexport interface IComboSelectionChangingEventArgs extends IBaseCancelableEventArgs {\n    /** An array containing the values that are currently selected */\n    oldValue: any[];\n    /** An array containing the values that will be selected after this event */\n    newValue: any[];\n    /** An array containing the items that are currently selected */\n    oldSelection: any[];\n    /** An array containing the items that will be selected after this event */\n    newSelection: any[];\n    /** An array containing the items that will be added to the selection (if any) */\n    added: any[];\n    /** An array containing the items that will be removed from the selection (if any) */\n    removed: any[];\n    /** The text that will be displayed in the combo text box */\n    displayText: string;\n    /** The user interaction that triggered the selection change */\n    event?: Event;\n}\n\n/** Event emitted when the igx-combo's search input changes */\nexport interface IComboSearchInputEventArgs extends IBaseCancelableEventArgs {\n    /** The text that has been typed into the search input */\n    searchText: string;\n}\n\nexport interface IComboItemAdditionEvent extends IBaseEventArgs, CancelableEventArgs {\n    oldCollection: any[];\n    addedItem: any;\n    newCollection: any[];\n}\n\n/**\n * When called with sets A & B, returns A - B (as array);\n *\n * @hidden\n */\nconst diffInSets = (set1: Set<any>, set2: Set<any>): any[] => {\n    const results = [];\n    set1.forEach(entry => {\n        if (!set2.has(entry)) {\n            results.push(entry);\n        }\n    });\n    return results;\n};\n\n/**\n *  Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform selection with the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * <igx-combo [itemsMaxHeight]=\"250\" [data]=\"locationData\"\n *  [displayKey]=\"'field'\" [valueKey]=\"'field'\"\n *  placeholder=\"Location(s)\" searchPlaceholder=\"Search...\">\n * </igx-combo>\n * ```\n */\n@Component({\n    selector: 'igx-combo',\n    templateUrl: 'combo.component.html',\n    providers: [\n        IgxComboAPIService,\n        { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }\n    ],\n    imports: [\n        NgTemplateOutlet,\n        NgClass,\n        FormsModule,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxSuffixDirective,\n        IgxIconComponent,\n        IgxComboDropDownComponent,\n        IgxDropDownItemNavigationDirective,\n        IgxForOfDirective,\n        IgxComboItemComponent,\n        IgxComboAddItemComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxComboFilteringPipe,\n        IgxComboGroupingPipe\n    ]\n})\nexport class IgxComboComponent extends IgxComboBaseDirective implements AfterViewInit, ControlValueAccessor, OnInit,\n    OnDestroy, DoCheck, EditorProvider {\n    /**\n     * Whether the combo's search box should be focused after the dropdown is opened.\n     * When `false`, the combo's list item container will be focused instead\n     */\n    @Input({ transform: booleanAttribute })\n    public autoFocusSearch = true;\n\n    /**\n     * Enables/disables filtering in the list. The default is `false`.\n     */\n    @Input({ transform: booleanAttribute })\n    public get disableFiltering(): boolean {\n        return this._disableFiltering || this.filteringOptions.filterable === false;\n    }\n    public set disableFiltering(value: boolean) {\n        this._disableFiltering = value;\n    }\n\n    /**\n     * Defines the placeholder value for the combo dropdown search field\n     *\n     * @deprecated in version 18.2.0. Replaced with values in the localization resource strings.\n     *\n     * ```typescript\n     * // get\n     * let myComboSearchPlaceholder = this.combo.searchPlaceholder;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>\n     * ```\n     */\n    @Input()\n    public searchPlaceholder: string;\n\n    /**\n     * Emitted when item selection is changing, before the selection completes\n     *\n     * ```html\n     * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>\n     * ```\n     */\n    @Output()\n    public selectionChanging = new EventEmitter<IComboSelectionChangingEventArgs>();\n\n    /** @hidden @internal */\n    @ViewChild(IgxComboDropDownComponent, { static: true })\n    public dropdown: IgxComboDropDownComponent;\n\n    /** @hidden @internal */\n    public get filteredData(): any[] | null {\n        return this.disableFiltering ? this.data : this._filteredData;\n    }\n    /** @hidden @internal */\n    public set filteredData(val: any[] | null) {\n        this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n        this.checkMatch();\n    }\n\n    protected _prevInputValue = '';\n\n    private _displayText: string;\n    private _disableFiltering = false;\n\n    constructor(\n        elementRef: ElementRef,\n        cdr: ChangeDetectorRef,\n        selectionService: IgxSelectionAPIService,\n        comboAPI: IgxComboAPIService,\n        @Inject(DOCUMENT) document: any,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) _inputGroupType: IgxInputGroupType,\n        @Optional() _injector: Injector,\n        @Optional() @Inject(IgxIconService) _iconService?: IgxIconService,\n    ) {\n        super(elementRef, cdr, selectionService, comboAPI, document, _inputGroupType, _injector, _iconService);\n        this.comboAPI.register(this);\n    }\n\n    @HostListener('keydown.ArrowDown', ['$event'])\n    @HostListener('keydown.Alt.ArrowDown', ['$event'])\n    public onArrowDown(event: Event) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.open();\n    }\n\n    /** @hidden @internal */\n    public get displaySearchInput(): boolean {\n        return !this.disableFiltering || this.allowCustomValues;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public handleKeyUp(event: KeyboardEvent): void {\n        // TODO: use PlatformUtil for keyboard navigation\n        if (event.key === 'ArrowDown' || event.key === 'Down') {\n            this.dropdown.focusedItem = this.dropdown.items[0];\n            this.dropdownContainer.nativeElement.focus();\n        } else if (event.key === 'Escape' || event.key === 'Esc') {\n            this.toggle();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public handleSelectAll(evt) {\n        if (evt.checked) {\n            this.selectAllItems();\n        } else {\n            this.deselectAllItems();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public writeValue(value: any[]): void {\n        const selection = Array.isArray(value) ? value.filter(x => x !== undefined) : [];\n        const oldSelection = this.selection;\n        this.selectionService.select_items(this.id, selection, true);\n        this.cdr.markForCheck();\n        this._displayValue = this.createDisplayText(this.selection, oldSelection);\n        this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n    }\n\n    /** @hidden @internal */\n    public ngDoCheck(): void {\n        if (this.data?.length && this.selection.length) {\n            this._displayValue = this._displayText || this.createDisplayText(this.selection, []);\n            this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getEditElement(): HTMLElement {\n        return this.comboInput.nativeElement;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get context(): any {\n        return {\n            $implicit: this\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public handleClearItems(event: Event): void {\n        if (this.disabled) {\n            return;\n        }\n        this.deselectAllItems(true, event);\n        if (this.collapsed) {\n            this.getEditElement().focus();\n        } else {\n            this.focusSearchInput(true);\n        }\n        event.stopPropagation();\n    }\n\n    /**\n     * Select defined items\n     *\n     * @param newItems new items to be selected\n     * @param clearCurrentSelection if true clear previous selected items\n     * ```typescript\n     * this.combo.select([\"New York\", \"New Jersey\"]);\n     * ```\n     */\n    public select(newItems: Array<any>, clearCurrentSelection?: boolean, event?: Event) {\n        if (newItems) {\n            const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);\n            this.setSelection(newSelection, event);\n        }\n    }\n\n    /**\n     * Deselect defined items\n     *\n     * @param items items to deselected\n     * ```typescript\n     * this.combo.deselect([\"New York\", \"New Jersey\"]);\n     * ```\n     */\n    public deselect(items: Array<any>, event?: Event) {\n        if (items) {\n            const newSelection = this.selectionService.delete_items(this.id, items);\n            this.setSelection(newSelection, event);\n        }\n    }\n\n    /**\n     * Select all (filtered) items\n     *\n     * @param ignoreFilter if set to true, selects all items, otherwise selects only the filtered ones.\n     * ```typescript\n     * this.combo.selectAllItems();\n     * ```\n     */\n    public selectAllItems(ignoreFilter?: boolean, event?: Event) {\n        const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);\n        const newSelection = this.selectionService.add_items(this.id, allVisible);\n        this.setSelection(newSelection, event);\n    }\n\n    /**\n     * Deselect all (filtered) items\n     *\n     * @param ignoreFilter if set to true, deselects all items, otherwise deselects only the filtered ones.\n     * ```typescript\n     * this.combo.deselectAllItems();\n     * ```\n     */\n    public deselectAllItems(ignoreFilter?: boolean, event?: Event): void {\n        let newSelection = this.selectionService.get_empty();\n        if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n            newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n        }\n        this.setSelection(newSelection, event);\n    }\n\n    /**\n     * Selects/Deselects a single item\n     *\n     * @param itemID the itemID of the specific item\n     * @param select If the item should be selected (true) or deselected (false)\n     *\n     * Without specified valueKey;\n     * ```typescript\n     * this.combo.valueKey = null;\n     * const items: { field: string, region: string}[] = data;\n     * this.combo.setSelectedItem(items[0], true);\n     * ```\n     * With specified valueKey;\n     * ```typescript\n     * this.combo.valueKey = 'field';\n     * const items: { field: string, region: string}[] = data;\n     * this.combo.setSelectedItem('Connecticut', true);\n     * ```\n     */\n    public setSelectedItem(itemID: any, select = true, event?: Event): void {\n        if (itemID === undefined) {\n            return;\n        }\n        if (select) {\n            this.select([itemID], false, event);\n        } else {\n            this.deselect([itemID], event);\n        }\n    }\n\n    /** @hidden @internal */\n    public handleOpened() {\n        this.triggerCheck();\n\n        // Disabling focus of the search input should happen only when drop down opens.\n        // During keyboard navigation input should receive focus, even the autoFocusSearch is disabled.\n        // That is why in such cases focusing of the dropdownContainer happens outside focusSearchInput method.\n        if (this.autoFocusSearch) {\n            this.focusSearchInput(true);\n        } else {\n            this.dropdownContainer.nativeElement.focus();\n        }\n        this.opened.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public focusSearchInput(opening?: boolean): void {\n        if (this.displaySearchInput && this.searchInput) {\n            this.searchInput.nativeElement.focus();\n        } else {\n            if (opening) {\n                this.dropdownContainer.nativeElement.focus();\n            } else {\n                this.comboInput.nativeElement.focus();\n                this.toggle();\n            }\n        }\n    }\n\n    protected setSelection(selection: Set<any>, event?: Event): void {\n        const currentSelection = this.selectionService.get(this.id);\n        const removed = this.convertKeysToItems(diffInSets(currentSelection, selection));\n        const added = this.convertKeysToItems(diffInSets(selection, currentSelection));\n        const newValue = Array.from(selection);\n        const oldValue = Array.from(currentSelection || []);\n        const newSelection = this.convertKeysToItems(newValue);\n        const oldSelection = this.convertKeysToItems(oldValue);\n        const displayText = this.createDisplayText(this.convertKeysToItems(newValue), oldValue);\n        const args: IComboSelectionChangingEventArgs = {\n            newValue,\n            oldValue,\n            newSelection,\n            oldSelection,\n            added,\n            removed,\n            event,\n            owner: this,\n            displayText,\n            cancel: false\n        };\n        this.selectionChanging.emit(args);\n        if (!args.cancel) {\n            this.selectionService.select_items(this.id, args.newValue, true);\n            this._value = args.newValue;\n            if (displayText !== args.displayText) {\n                this._displayValue = this._displayText = args.displayText;\n            } else {\n                this._displayValue = this.createDisplayText(this.selection, args.oldSelection);\n            }\n            this._onChangeCallback(args.newValue);\n        } else if (this.isRemote) {\n            this.registerRemoteEntries(diffInSets(selection, currentSelection), false);\n        }\n    }\n\n    protected createDisplayText(newSelection: any[], oldSelection: any[]) {\n        const selection = this.valueKey ? newSelection.map(item => item[this.valueKey]) : newSelection;\n        return this.isRemote\n            ? this.getRemoteSelection(selection, oldSelection)\n            : this.concatDisplayText(newSelection);\n    }\n\n    protected getSearchPlaceholderText(): string {\n        return this.searchPlaceholder ||\n            (this.disableFiltering ? this.resourceStrings.igx_combo_addCustomValues_placeholder : this.resourceStrings.igx_combo_filter_search_placeholder);\n    }\n\n    /** Returns a string that should be populated in the combo's text box */\n    private concatDisplayText(selection: any[]): string {\n        const value = this.displayKey !== null && this.displayKey !== undefined ?\n            selection.map(entry => entry[this.displayKey]).join(', ') :\n            selection.join(', ');\n        return value;\n    }\n}\n","<igx-input-group #inputGroup [type]=\"type === 'search' ? 'box' : type\" (click)=\"onClick($event)\">\n    <ng-container ngProjectAs=\"[igxLabel]\">\n        <ng-content select=\"[igxLabel]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-prefix\">\n        <ng-content select=\"igx-prefix\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n        <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n    </ng-container>\n    <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n        [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\"\n        role=\"combobox\" aria-haspopup=\"listbox\"\n        [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n        [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n        (blur)=\"onBlur()\" />\n    <ng-container ngProjectAs=\"igx-suffix\">\n        <ng-content select=\"igx-suffix\"></ng-content>\n    </ng-container>\n    @if (displayValue) {\n        <igx-suffix [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n            (click)=\"handleClearItems($event)\">\n            @if (clearIconTemplate) {\n                <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n            }\n            @if (!clearIconTemplate) {\n                <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n            }\n        </igx-suffix>\n    }\n    <igx-suffix class=\"igx-combo__toggle-button\">\n        @if (toggleIconTemplate) {\n            <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n        }\n        @if (!toggleIconTemplate) {\n            <igx-icon family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n        }\n    </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n    [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n    [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n    (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n    @if (displaySearchInput) {\n        <div class=\"igx-combo__search\">\n            <igx-input-group type=\"line\">\n                <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n                    [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n                    (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n                    aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n                @if (showSearchCaseIcon) {\n                    <igx-suffix (click)=\"toggleCaseSensitive()\">\n                        <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n                            <igx-icon\n                                family=\"default\"\n                                name=\"case_sensitive\"\n                                [active]=\"filteringOptions.caseSensitive\">\n                            </igx-icon>\n                        </span>\n                    </igx-suffix>\n                }\n            </igx-input-group>\n        </div>\n    }\n    <ng-container *ngTemplateOutlet=\"headerTemplate\">\n    </ng-container>\n    <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n        [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n        [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n        [attr.aria-activedescendant]=\"activeDescendant\">\n        <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n            | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n            | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n            index as rowIndex; initialChunkSize: 10; containerSize: itemsMaxHeight || containerSize; itemSize: itemHeight || itemSize, scrollOrientation: 'vertical';\"\n            [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n            @if (item?.isHeader) {\n                <ng-container\n                    *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n                    context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n                </ng-container>\n            }\n            <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n            @if (!item?.isHeader) {\n                <ng-container #listItem\n                    *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n                </ng-container>\n            }\n        </igx-combo-item>\n    </div>\n    @if (filteredData.length === 0 || isAddButtonVisible()) {\n        <div class=\"igx-combo__add\">\n            @if (filteredData.length === 0) {\n                <div class=\"igx-combo__empty\">\n                    <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n                    </ng-container>\n                </div>\n            }\n            @if (isAddButtonVisible()) {\n                <igx-combo-add-item [itemHeight]=\"itemHeight\"\n                    [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n                    [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n                    <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n                    </ng-container>\n                </igx-combo-add-item>\n            }\n        </div>\n    }\n    <ng-container *ngTemplateOutlet=\"footerTemplate\">\n    </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n    {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n    {{display}}\n</ng-template>\n<ng-template #empty>\n    <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n    <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n    {{ item[key] }}\n</ng-template>\n","import { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxComboComponent } from './combo.component';\nimport {\n    IgxComboAddItemDirective,\n    IgxComboClearIconDirective,\n    IgxComboEmptyDirective,\n    IgxComboFooterDirective,\n    IgxComboHeaderDirective,\n    IgxComboHeaderItemDirective,\n    IgxComboItemDirective,\n    IgxComboToggleIconDirective\n} from './combo.directives';\n\nexport { IComboFilteringOptions } from './combo.common';\nexport * from './combo.component';\nexport * from './combo.directives';\nexport { comboIgnoreDiacriticsFilter } from './combo.pipes';\n\n/* NOTE: Combo directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_COMBO_DIRECTIVES = [\n    IgxComboComponent,\n    IgxComboAddItemDirective,\n    IgxComboClearIconDirective,\n    IgxComboEmptyDirective,\n    IgxComboFooterDirective,\n    IgxComboHeaderDirective,\n    IgxComboHeaderItemDirective,\n    IgxComboItemDirective,\n    IgxComboToggleIconDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit, ChangeDetectorRef, Component, DoCheck, ElementRef, EventEmitter, HostListener, Inject, Injector,\n    Optional, Output, ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { IgxComboAddItemComponent } from '../combo/combo-add-item.component';\nimport { IgxComboDropDownComponent } from '../combo/combo-dropdown.component';\nimport { IgxComboItemComponent } from '../combo/combo-item.component';\nimport { IgxComboAPIService } from '../combo/combo.api';\nimport { IgxComboBaseDirective, IGX_COMBO_COMPONENT } from '../combo/combo.common';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { CancelableEventArgs, IBaseCancelableBrowserEventArgs, IBaseEventArgs, PlatformUtil } from '../core/utils';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxForOfDirective } from '../directives/for-of/for_of.directive';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { IgxTextSelectionDirective } from '../directives/text-selection/text-selection.directive';\nimport { IgxIconService } from '../icon/icon.service';\nimport { IgxInputGroupType, IGX_INPUT_GROUP_TYPE } from '../input-group/public_api';\nimport { IgxComboFilteringPipe, IgxComboGroupingPipe } from '../combo/combo.pipes';\nimport { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxInputDirective } from '../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\n\n/** Emitted when an igx-simple-combo's selection is changing.  */\nexport interface ISimpleComboSelectionChangingEventArgs extends CancelableEventArgs, IBaseEventArgs {\n    /** An object which represents the value that is currently selected */\n    oldValue: any;\n    /** An object which represents the value that will be selected after this event */\n    newValue: any;\n    /** An object which represents the item that is currently selected */\n    oldSelection: any;\n    /** An object which represents the item that will be selected after this event */\n    newSelection: any;\n    /** The text that will be displayed in the combo text box */\n    displayText: string;\n}\n\n/**\n * Represents a drop-down list that provides filtering functionality, allowing users to choose a single option from a predefined list.\n *\n * @igxModule IgxSimpleComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, single combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform single selection on the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * <igx-simple-combo [itemsMaxHeight]=\"250\" [data]=\"locationData\"\n *  [displayKey]=\"'field'\" [valueKey]=\"'field'\"\n *  placeholder=\"Location\" searchPlaceholder=\"Search...\">\n * </igx-simple-combo>\n * ```\n */\n@Component({\n    selector: 'igx-simple-combo',\n    templateUrl: 'simple-combo.component.html',\n    providers: [\n        IgxComboAPIService,\n        { provide: IGX_COMBO_COMPONENT, useExisting: IgxSimpleComboComponent },\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxSimpleComboComponent, multi: true }\n    ],\n    imports: [IgxInputGroupComponent, IgxInputDirective, IgxTextSelectionDirective, IgxSuffixDirective, NgTemplateOutlet, IgxIconComponent, IgxComboDropDownComponent, IgxDropDownItemNavigationDirective, IgxForOfDirective, IgxComboItemComponent, IgxComboAddItemComponent, IgxButtonDirective, IgxRippleDirective, IgxComboFilteringPipe, IgxComboGroupingPipe]\n})\nexport class IgxSimpleComboComponent extends IgxComboBaseDirective implements ControlValueAccessor, AfterViewInit, DoCheck {\n    /** @hidden @internal */\n    @ViewChild(IgxComboDropDownComponent, { static: true })\n    public dropdown: IgxComboDropDownComponent;\n\n    /** @hidden @internal */\n    @ViewChild(IgxComboAddItemComponent)\n    public addItem: IgxComboAddItemComponent;\n\n    /**\n     * Emitted when item selection is changing, before the selection completes\n     *\n     * ```html\n     * <igx-simple-combo (selectionChanging)='handleSelection()'></igx-simple-combo>\n     * ```\n     */\n    @Output()\n    public selectionChanging = new EventEmitter<ISimpleComboSelectionChangingEventArgs>();\n\n    @ViewChild(IgxTextSelectionDirective, { static: true })\n    private textSelection: IgxTextSelectionDirective;\n\n    public override get value(): any {\n        return this._value[0];\n    }\n\n    /**\n     * Get current selection state\n     *\n     * @returns The selected item, if any\n     * ```typescript\n     * let mySelection = this.combo.selection;\n     * ```\n     */\n    public override get selection(): any {\n        return super.selection[0];\n    }\n\n    /** @hidden @internal */\n    public composing = false;\n\n    private _updateInput = true;\n\n    private _collapsing = false;\n\n    /** @hidden @internal */\n    public get filteredData(): any[] | null {\n        return this._filteredData;\n    }\n    /** @hidden @internal */\n    public set filteredData(val: any[] | null) {\n        this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n        this.checkMatch();\n    }\n\n    /** @hidden @internal */\n    public override get searchValue(): string {\n        return this._searchValue;\n    }\n    public override set searchValue(val: string) {\n        this._searchValue = val;\n    }\n\n    private get selectedItem(): any {\n        return this.selectionService.get(this.id).values().next().value;\n    }\n\n    protected get hasSelectedItem(): boolean {\n        return !!this.selectionService.get(this.id).size;\n    }\n\n    constructor(elementRef: ElementRef,\n        cdr: ChangeDetectorRef,\n        selectionService: IgxSelectionAPIService,\n        comboAPI: IgxComboAPIService,\n        private platformUtil: PlatformUtil,\n        @Inject(DOCUMENT) document: any,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) _inputGroupType: IgxInputGroupType,\n        @Optional() _injector: Injector,\n        @Optional() @Inject(IgxIconService) _iconService?: IgxIconService,\n        @Optional() private formGroupDirective?: FormGroupDirective\n    ) {\n        super(\n            elementRef,\n            cdr,\n            selectionService,\n            comboAPI,\n            document,\n            _inputGroupType,\n            _injector,\n            _iconService\n        );\n        this.comboAPI.register(this);\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown.ArrowDown', ['$event'])\n    @HostListener('keydown.Alt.ArrowDown', ['$event'])\n    public onArrowDown(event: Event): void {\n        if (this.collapsed) {\n            event.preventDefault();\n            event.stopPropagation();\n            this.open();\n        } else {\n            if (this.virtDir.igxForOf.length > 0 && !this.hasSelectedItem) {\n                this.dropdown.navigateNext();\n                this.dropdownContainer.nativeElement.focus();\n            } else if (this.allowCustomValues) {\n                this.addItem?.element.nativeElement.focus();\n            }\n        }\n    }\n\n    /**\n     * Select a defined item\n     *\n     * @param item the item to be selected\n     * ```typescript\n     * this.combo.select(\"New York\");\n     * ```\n     */\n    public select(item: any): void {\n        if (item !== undefined) {\n            const newSelection = this.selectionService.add_items(this.id, item instanceof Array ? item : [item], true);\n            this.setSelection(newSelection);\n        }\n    }\n\n    /**\n     * Deselect the currently selected item\n     *\n     * @param item the items to be deselected\n     * ```typescript\n     * this.combo.deselect(\"New York\");\n     * ```\n     */\n    public deselect(): void {\n        this.clearSelection();\n    }\n\n    /** @hidden @internal */\n    public writeValue(value: any): void {\n        const oldSelection = super.selection;\n        this.selectionService.select_items(this.id, this.isValid(value) ? [value] : [], true);\n        this.cdr.markForCheck();\n        this._displayValue = this.createDisplayText(super.selection, oldSelection);\n        this._value = this.valueKey ? super.selection.map(item => item[this.valueKey]) : super.selection;\n        this.filterValue = this._displayValue?.toString() || '';\n    }\n\n    /** @hidden @internal */\n    public override ngAfterViewInit(): void {\n        this.virtDir.contentSizeChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (super.selection.length > 0) {\n                const index = this.virtDir.igxForOf.findIndex(e => {\n                    let current = e? e[this.valueKey] : undefined;\n                    if (this.valueKey === null || this.valueKey === undefined) {\n                        current = e;\n                    }\n                    return current === super.selection[0];\n                });\n                if (!this.isRemote) {\n                    // navigate to item only if we have local data\n                    // as with remote data this will fiddle with igxFor's scroll handler\n                    // and will trigger another chunk load which will break the visualization\n                    this.dropdown.navigateItem(index);\n                }\n            }\n        });\n        this.dropdown.opening.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n            if (args.cancel) {\n                return;\n            }\n            this._collapsing = false;\n            const filtered = this.filteredData.find(this.findAllMatches);\n            if (filtered === undefined || filtered === null) {\n                this.filterValue = this.searchValue = this.comboInput.value;\n                return;\n            }\n        });\n        this.dropdown.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.composing) {\n                this.comboInput.focus();\n            }\n        });\n        this.dropdown.closing.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n            if (args.cancel) {\n                return;\n            }\n            if (this.getEditElement() && !args.event) {\n                this._collapsing = true;\n            } else {\n                this.clearOnBlur();\n                this._onTouchedCallback();\n            }\n            this.comboInput.focus();\n        });\n\n        // in reactive form the control is not present initially\n        // and sets the selection to an invalid value in writeValue method\n        if (!this.isValid(this.selectedItem)) {\n            this.selectionService.clear(this.id);\n            this._displayValue = '';\n        }\n\n        super.ngAfterViewInit();\n    }\n\n    /** @hidden @internal */\n    public ngDoCheck(): void {\n        if (this.data?.length && super.selection.length && !this._displayValue) {\n            this._displayValue = this.createDisplayText(super.selection, []);\n            this._value = this.valueKey ? super.selection.map(item => item[this.valueKey]) : super.selection;\n        }\n    }\n\n    /** @hidden @internal */\n    public override handleInputChange(event?: any): void {\n        if (this.collapsed && this.comboInput.focused) {\n            this.open();\n        }\n        if (event !== undefined) {\n            this.filterValue = this.searchValue = typeof event === 'string' ? event : event.target.value;\n        }\n        if (!this.comboInput.value.trim() && super.selection.length) {\n            // handle clearing of input by space\n            this.clearSelection();\n            this._onChangeCallback(null);\n            this.filterValue = '';\n        }\n        if (super.selection.length) {\n            const args: ISimpleComboSelectionChangingEventArgs = {\n                newValue: undefined,\n                oldValue: this.selectedItem,\n                newSelection: undefined,\n                oldSelection: this.selection,\n                displayText: typeof event === 'string' ? event : event?.target?.value,\n                owner: this,\n                cancel: false\n            };\n            this.selectionChanging.emit(args);\n            if (!args.cancel) {\n                this.selectionService.select_items(this.id, [], true);\n            }\n        }\n        // when filtering the focused item should be the first item or the currently selected item\n        if (!this.dropdown.focusedItem || this.dropdown.focusedItem.id !== this.dropdown.items[0].id) {\n            this.dropdown.navigateFirst();\n        }\n        super.handleInputChange(event);\n        this.composing = true;\n    }\n\n    /** @hidden @internal */\n    public handleInputClick(): void {\n        if (this.collapsed) {\n            this.open();\n            this.comboInput.focus();\n        }\n    }\n\n    /** @hidden @internal */\n    public override handleKeyDown(event: KeyboardEvent): void {\n        if (event.key === this.platformUtil.KEYMAP.ENTER) {\n            const filtered = this.filteredData.find(this.findAllMatches);\n            if (filtered === null || filtered === undefined) {\n                return;\n            }\n            if (!this.dropdown.collapsed) {\n                const focusedItem = this.dropdown.focusedItem;\n                if (focusedItem && !focusedItem.isHeader) {\n                    this.select(focusedItem.itemID);\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.close();\n                } else {\n                    event.preventDefault();\n                    event.stopPropagation();\n                    this.comboInput.focus();\n                }\n            }\n            // manually trigger text selection as it will not be triggered during editing\n            this.textSelection.trigger();\n            return;\n        }\n        if (event.key === this.platformUtil.KEYMAP.BACKSPACE\n            || event.key === this.platformUtil.KEYMAP.DELETE) {\n            this._updateInput = false;\n            this.clearSelection(true);\n        }\n        if (!this.collapsed && event.key === this.platformUtil.KEYMAP.TAB) {\n            const filtered = this.filteredData.find(this.findAllMatches);\n            if (filtered === null || filtered === undefined) {\n                this.clearOnBlur();\n                this.close();\n                return;\n            }\n            const focusedItem = this.dropdown.focusedItem;\n            if (focusedItem && !focusedItem.isHeader) {\n                this.select(focusedItem.itemID);\n                this.close();\n                this.textSelection.trigger();\n            } else {\n                this.clearOnBlur();\n                this.close();\n            }\n        }\n        this.composing = false;\n        super.handleKeyDown(event);\n    }\n\n    /** @hidden @internal */\n    public handleKeyUp(event: KeyboardEvent): void {\n        if (event.key === this.platformUtil.KEYMAP.ARROW_DOWN) {\n            this.dropdown.focusedItem = this.hasSelectedItem && this.filteredData.length > 0\n                ? this.dropdown.items.find(i => i.itemID === this.selectedItem)\n                : this.dropdown.items[0];\n            this.dropdownContainer.nativeElement.focus();\n        }\n    }\n\n    /** @hidden @internal */\n    public handleItemKeyDown(event: KeyboardEvent): void {\n        if (event.key === this.platformUtil.KEYMAP.ARROW_UP && event.altKey) {\n            this.close();\n            this.comboInput.focus();\n            return;\n        }\n        if (event.key === this.platformUtil.KEYMAP.ENTER) {\n            this.comboInput.focus();\n        }\n    }\n\n    /** @hidden @internal */\n    public handleItemClick(): void {\n        this.close();\n        this.comboInput.focus();\n    }\n\n    /** @hidden @internal */\n    public override onBlur(): void {\n        // when clicking the toggle button to close the combo and immediately clicking outside of it\n        // the collapsed state is not modified as the dropdown is still not closed\n        if (this.collapsed || this._collapsing) {\n            this.clearOnBlur();\n        }\n        super.onBlur();\n    }\n\n    /** @hidden @internal */\n    public getEditElement(): HTMLElement {\n        return this.comboInput.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public handleClear(event: Event): void {\n        if (this.disabled) {\n            return;\n        }\n\n        const oldSelection = this.selection;\n        this.clearSelection(true);\n\n        if(!this.collapsed){\n            this.focusSearchInput(true);\n        }\n        event.stopPropagation();\n\n        if (this.selection !== oldSelection) {\n            this.comboInput.value = this.filterValue = this.searchValue = '';\n        }\n\n        this.dropdown.focusedItem = null;\n        this.composing = false;\n        this.comboInput.focus();\n    }\n\n    /** @hidden @internal */\n    public handleOpened(): void {\n        this.triggerCheck();\n        if (!this.comboInput.focused) {\n            this.dropdownContainer.nativeElement.focus();\n        }\n        this.opened.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public override handleClosing(e: IBaseCancelableBrowserEventArgs): void {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.closing.emit(args);\n        e.cancel = args.cancel;\n        if (e.cancel) {\n            return;\n        }\n\n        this.composing = false;\n        // explicitly update selection so that we don't have to force CD\n        this.textSelection.selected = true;\n    }\n\n    /** @hidden @internal */\n    public focusSearchInput(opening?: boolean): void {\n        if (opening) {\n            this.dropdownContainer.nativeElement.focus();\n        } else {\n            this.comboInput.nativeElement.focus();\n        }\n    }\n\n    /** @hidden @internal */\n    public override onClick(event: Event): void {\n        super.onClick(event);\n        if (this.comboInput.value.length === 0) {\n            this.virtDir.scrollTo(0);\n        }\n    }\n\n    protected findAllMatches = (element: any): boolean => {\n        const value = this.displayKey ? element[this.displayKey] : element;\n        if (value === null || value === undefined || value === '') {\n            // we can accept null, undefined and empty strings as empty display values\n            return true;\n        }\n        const searchValue = this.searchValue || this.comboInput.value;\n        return !!searchValue && value.toString().toLowerCase().includes(searchValue.toLowerCase());\n    };\n\n    protected setSelection(newSelection: any): void {\n        const newValueAsArray = newSelection ? Array.from(newSelection) as IgxComboItemComponent[] : [];\n        const oldValueAsArray = Array.from(this.selectionService.get(this.id) || []);\n        const newItems = this.convertKeysToItems(newValueAsArray);\n        const oldItems = this.convertKeysToItems(oldValueAsArray);\n        const displayText = this.createDisplayText(this.convertKeysToItems(newValueAsArray), oldValueAsArray);\n        const args: ISimpleComboSelectionChangingEventArgs = {\n            newValue: newValueAsArray[0],\n            oldValue: oldValueAsArray[0],\n            newSelection: newItems[0],\n            oldSelection: oldItems[0],\n            displayText,\n            owner: this,\n            cancel: false\n        };\n        if (args.newSelection !== args.oldSelection) {\n            this.selectionChanging.emit(args);\n        }\n        // TODO: refactor below code as it sets the selection and the display text\n        if (!args.cancel) {\n            let argsSelection = this.isValid(args.newValue)\n                ? args.newValue\n                : [];\n            argsSelection = Array.isArray(argsSelection) ? argsSelection : [argsSelection];\n            this.selectionService.select_items(this.id, argsSelection, true);\n            this._value = argsSelection;\n            if (this._updateInput) {\n                this.comboInput.value = this._displayValue = this.searchValue = displayText !== args.displayText\n                    ? args.displayText\n                    : this.createDisplayText(super.selection, [args.oldValue]);\n            }\n            this._onChangeCallback(args.newValue);\n            this._updateInput = true;\n        } else if (this.isRemote) {\n            this.registerRemoteEntries(newValueAsArray, false);\n        } else {\n            args.displayText = this.createDisplayText(oldItems, []);\n\n            const oldSelectionArray = args.oldSelection ? [args.oldSelection] : [];\n            this.comboInput.value = this._displayValue = this.searchValue = this.createDisplayText(oldSelectionArray, []);\n\n            if (this.isRemote) {\n                this.registerRemoteEntries(newValueAsArray, false);\n            }\n        }\n    }\n\n    protected createDisplayText(newSelection: any[], oldSelection: any[]): string {\n        if (this.isRemote) {\n            const selection = this.valueKey ? newSelection.map(item => item[this.valueKey]) : newSelection;\n            return this.getRemoteSelection(selection, oldSelection);\n        }\n\n        if (this.displayKey !== null\n            && this.displayKey !== undefined\n            && newSelection.length > 0) {\n            return newSelection.filter(e => e).map(e => e[this.displayKey])[0]?.toString() || '';\n        }\n\n        return newSelection[0]?.toString() || '';\n    }\n\n    protected override getRemoteSelection(newSelection: any[], oldSelection: any[]): string {\n        if (!newSelection.length) {\n            this.registerRemoteEntries(oldSelection, false);\n            return '';\n        }\n\n        this.registerRemoteEntries(oldSelection, false);\n        this.registerRemoteEntries(newSelection);\n        return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e])[0] || '';\n    }\n\n    /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n    protected override registerRemoteEntries(ids: any[], add = true) {\n        const selection = this.getValueDisplayPairs(ids)[0];\n\n        if (add && selection) {\n            this._remoteSelection[selection[this.valueKey]] = selection[this.displayKey].toString();\n        } else {\n            this._remoteSelection = {};\n        }\n    }\n\n    private clearSelection(ignoreFilter?: boolean): void {\n        let newSelection = this.selectionService.get_empty();\n        if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n            newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n        }\n        if (this.selectionService.get(this.id).size > 0 || this.comboInput.value.trim()) {\n            this.setSelection(newSelection);\n        }\n    }\n\n    private clearOnBlur(): void {\n        if (this.isRemote) {\n            const searchValue = this.searchValue || this.comboInput.value;\n            const remoteValue = Object.keys(this._remoteSelection).map(e => this._remoteSelection[e])[0] || '';\n            if (searchValue !== remoteValue) {\n                this.clear();\n            }\n            return;\n        }\n\n        const filtered = this.filteredData.find(this.findMatch);\n        // selecting null in primitive data returns undefined as the search text is '', but the item is null\n        if (filtered === undefined && this.selectedItem !== null || !super.selection.length) {\n            this.clear();\n        }\n    }\n\n    private getElementVal(element: any): string {\n        const elementVal = this.displayKey ? element[this.displayKey] : element;\n        return String(elementVal);\n    }\n\n    private clear(): void {\n        this.clearSelection(true);\n        const oldSelection = this.selection;\n        if (this.selection !== oldSelection) {\n            this.comboInput.value = this._displayValue = this.searchValue = '';\n        }\n    }\n\n    private isValid(value: any): boolean {\n        if (this.formGroupDirective && value === null) {\n            return false;\n        }\n\n        if (this.required) {\n            return value !== null && value !== '' && value !== undefined\n        }\n\n        return value !== undefined;\n    }\n}\n","<igx-input-group #inputGroup [type]=\"type\">\n\n    <ng-container ngProjectAs=\"[igxLabel]\">\n        <ng-content select=\"[igxLabel]\"></ng-content>\n    </ng-container>\n\n    <ng-container ngProjectAs=\"igx-prefix\">\n        <ng-content select=\"igx-prefix\"></ng-content>\n    </ng-container>\n\n    <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n        <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n    </ng-container>\n\n    <input #comboInput igxInput [value]=\"displayValue\" role=\"combobox\"\n        aria-haspopup=\"listbox\" aria-autocomplete=\"list\" aria-readonly=\"false\"\n        [attr.aria-expanded]=\"!this.dropdown.collapsed\" [attr.aria-controls]=\"this.dropdown.listId\"\n        [attr.aria-labelledby]=\"this.ariaLabelledBy || this.label?.id || this.placeholder\"\n        [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\" [igxTextSelection]=\"!composing\"\n        (input)=\"handleInputChange($event)\" (click)=\"handleInputClick()\"\n        (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (blur)=\"onBlur()\" (paste)=\"handleInputChange($event)\"/>\n\n    <ng-container ngProjectAs=\"igx-suffix\">\n        <ng-content select=\"igx-suffix\"></ng-content>\n    </ng-container>\n\n    @if (hasSelectedItem) {\n        <igx-suffix [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n            (click)=\"handleClear($event)\">\n            @if (clearIconTemplate) {\n                <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n            }\n            @if (!clearIconTemplate) {\n                <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n            }\n        </igx-suffix>\n    }\n\n    @if (showSearchCaseIcon) {\n        <igx-suffix>\n            <igx-icon family=\"default\" name=\"case_sensitive\" [active]=\"filteringOptions.caseSensitive\"\n                (click)=\"toggleCaseSensitive()\">\n            </igx-icon>\n        </igx-suffix>\n    }\n\n    <igx-suffix class=\"igx-combo__toggle-button\" (click)=\"onClick($event)\">\n        @if (toggleIconTemplate) {\n            <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n        }\n        @if (!toggleIconTemplate) {\n            <igx-icon family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n        }\n    </igx-suffix>\n\n</igx-input-group>\n\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n    [labelledBy]=\"this.ariaLabelledBy || this.label?.id || this.placeholder || ''\"\n    [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n    (opened)=\"handleOpened()\" (closed)=\"handleClosed()\" [singleMode]=\"true\">\n    <ng-container *ngTemplateOutlet=\"headerTemplate\">\n    </ng-container>\n    <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n        [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\"\n        [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\"\n        [attr.aria-activedescendant]=\"this.activeDescendant\"\n        (focus)=\"dropdown.onFocus()\" (keydown)=\"handleItemKeyDown($event)\">\n        <igx-combo-item [role]=\"item?.isHeader? 'group' : 'option'\" [singleMode]=\"true\"\n            [itemHeight]=\"itemHeight\" (click)=\"handleItemClick()\" *igxFor=\"let item of data\n                | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction\n                | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n                index as rowIndex; initialChunkSize: 10; containerSize: itemsMaxHeight || containerSize; itemSize: itemHeight || itemSize; scrollOrientation: 'vertical';\"\n                [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\">\n            @if (item?.isHeader) {\n                <ng-container\n                    *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n                    context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n                </ng-container>\n            }\n            <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n            @if (!item?.isHeader) {\n                <ng-container #listItem\n                    *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n                </ng-container>\n            }\n        </igx-combo-item>\n    </div>\n\n    @if (filteredData.length === 0 || isAddButtonVisible()) {\n        <div class=\"igx-combo__add\">\n            @if (filteredData.length === 0) {\n                <div class=\"igx-combo__empty\">\n                    <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n                    </ng-container>\n                </div>\n            }\n            @if (isAddButtonVisible()) {\n                <igx-combo-add-item #addItem [itemHeight]=\"itemHeight\"\n                    [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n                    [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n                    <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n                    </ng-container>\n                </igx-combo-add-item>\n            }\n        </div>\n    }\n    <ng-container *ngTemplateOutlet=\"footerTemplate\">\n    </ng-container>\n</igx-combo-drop-down>\n\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n    {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n    {{display}}\n</ng-template>\n<ng-template #empty>\n    <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n    <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n    {{ item[key] }}\n</ng-template>\n","import {\n    IgxComboAddItemDirective,\n    IgxComboClearIconDirective,\n    IgxComboEmptyDirective,\n    IgxComboFooterDirective,\n    IgxComboHeaderDirective,\n    IgxComboHeaderItemDirective,\n    IgxComboItemDirective,\n    IgxComboToggleIconDirective\n} from '../combo/combo.directives';\nimport { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxSimpleComboComponent } from './simple-combo.component';\n\nexport * from './simple-combo.component';\n\n/* NOTE: Simple combo directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_SIMPLE_COMBO_DIRECTIVES = [\n    IgxSimpleComboComponent,\n    IgxComboAddItemDirective,\n    IgxComboClearIconDirective,\n    IgxComboEmptyDirective,\n    IgxComboFooterDirective,\n    IgxComboHeaderDirective,\n    IgxComboHeaderItemDirective,\n    IgxComboItemDirective,\n    IgxComboToggleIconDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import { Component, Output, EventEmitter, HostListener, Directive, TemplateRef } from '@angular/core';\n\n/**\n * Templates the default toggle icon in the picker.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n * @example\n * ```html\n * <igx-date-range-picker>\n *   <igx-picker-toggle igxSuffix>\n *      <igx-icon>calendar_view_day</igx-icon>\n *   </igx-picker-toggle>\n * </igx-date-range-picker>\n * ```\n */\n@Component({\n    template: `<ng-content></ng-content>`,\n    selector: 'igx-picker-toggle',\n    standalone: true\n})\nexport class IgxPickerToggleComponent {\n    @Output()\n    public clicked = new EventEmitter();\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        // do not focus input on click\n        event.stopPropagation();\n        this.clicked.emit();\n    }\n}\n\n/**\n * Templates the default clear icon in the picker.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n * @example\n * ```html\n * <igx-date-picker>\n *   <igx-picker-clear igxSuffix>\n *      <igx-icon>delete</igx-icon>\n *   </igx-picker-clear>\n * </igx-date-picker>\n * ```\n */\n@Component({\n    template: `<ng-content></ng-content>`,\n    selector: 'igx-picker-clear',\n    standalone: true\n})\nexport class IgxPickerClearComponent extends IgxPickerToggleComponent { }\n\n/**\n * IgxPickerActionsDirective can be used to re-template the dropdown/dialog action buttons.\n *\n * @remarks Can be applied to IgxDatePickerComponent, IgxTimePickerComponent, IgxDateRangePickerComponent\n *\n */\n@Directive({\n    selector: '[igxPickerActions]',\n    standalone: true\n})\nexport class IgxPickerActionsDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n","export interface IDatePickerResourceStrings {\n    igx_date_picker_change_date?: string;\n    igx_date_picker_choose_date?: string;\n}\n\nexport const DatePickerResourceStringsEN: IDatePickerResourceStrings = {\n    igx_date_picker_change_date: 'Change Date',\n    igx_date_picker_choose_date: 'Choose Date'\n};\n","import { mkenum } from '../core/utils';\n/** Header orientation in `dialog` mode. */\nexport const PickerHeaderOrientation = /*@__PURE__*/mkenum({\n    Horizontal: 'horizontal',\n    Vertical: 'vertical'\n});\nexport type PickerHeaderOrientation = (typeof PickerHeaderOrientation)[keyof typeof PickerHeaderOrientation];\n\n/**\n * This enumeration is used to configure whether the date/time picker has an editable input with drop down\n * or is readonly - the date/time is selected only through a dialog.\n */\nexport const PickerInteractionMode = /*@__PURE__*/mkenum({\n    DropDown: 'dropdown',\n    Dialog: 'dialog'\n});\nexport type PickerInteractionMode = (typeof PickerInteractionMode)[keyof typeof PickerInteractionMode];\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    Component,\n    ViewChild,\n    Output, EventEmitter,\n    HostListener,\n    HostBinding\n} from '@angular/core';\nimport { IBaseEventArgs } from '../../core/utils';\nimport { PickerInteractionMode } from '../../date-common/types';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxPickerActionsDirective } from '../picker-icons.common';\nimport { IgxCalendarComponent } from '../../calendar/calendar.component';\nimport { IgxDividerDirective } from \"../../directives/divider/divider.directive\";\n\n/** @hidden */\n@Component({\n    selector: 'igx-calendar-container',\n    styles: [':host {display: block;}'],\n    templateUrl: 'calendar-container.component.html',\n    imports: [\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxCalendarComponent,\n        NgTemplateOutlet,\n        IgxDividerDirective,\n    ]\n})\nexport class IgxCalendarContainerComponent {\n    @ViewChild(IgxCalendarComponent, { static: true })\n    public calendar: IgxCalendarComponent;\n\n    @Output()\n    public calendarClose = new EventEmitter<IBaseEventArgs>();\n\n    @Output()\n    public todaySelection = new EventEmitter<IBaseEventArgs>();\n\n    @HostBinding('class.igx-date-picker')\n    public styleClass = 'igx-date-picker';\n\n    @HostBinding('class.igx-date-picker--dropdown')\n    public get dropdownCSS(): boolean {\n        return this.mode === PickerInteractionMode.DropDown;\n    }\n\n    public vertical = false;\n    public closeButtonLabel: string;\n    public todayButtonLabel: string;\n    public mode: PickerInteractionMode = PickerInteractionMode.DropDown;\n    public pickerActions: IgxPickerActionsDirective;\n\n    @HostListener('keydown.alt.arrowup', ['$event'])\n    public onEscape(event) {\n        event.preventDefault();\n        this.calendarClose.emit();\n    }\n\n    public get isReadonly() {\n        return this.mode === PickerInteractionMode.Dialog;\n    }\n}\n\n/** @hidden */\n\n","<ng-template #defaultPickerActions>\n    @if (closeButtonLabel || todayButtonLabel) {\n        <div class=\"igx-date-picker__buttons\">\n            @if (closeButtonLabel) {\n                <button\n                    #closeButton\n                    type=\"button\"\n                    igxButton=\"flat\"\n                    igxRipple\n                    (click)=\"calendarClose.emit({ owner: this })\"\n                >\n                    {{ closeButtonLabel }}\n                </button>\n            }\n            @if (todayButtonLabel) {\n                <button\n                    #todayButton\n                    type=\"button\"\n                    igxButton=\"flat\"\n                    igxRipple\n                    (click)=\"todaySelection.emit({ owner: this })\"\n                >\n                    {{ todayButtonLabel }}\n                </button>\n            }\n        </div>\n    }\n</ng-template>\n\n<igx-calendar></igx-calendar>\n@if (pickerActions?.template || (closeButtonLabel || todayButtonLabel)) {\n    <igx-divider></igx-divider>\n}\n@if (pickerActions?.template || (closeButtonLabel || todayButtonLabel)) {\n    <div class=\"igx-date-picker__actions\">\n        <ng-container\n            *ngTemplateOutlet=\"\n                pickerActions?.template || defaultPickerActions;\n                context: { $implicit: calendar }\n            \"\n        >\n        </ng-container>\n    </div>\n}\n","import {\n    AfterContentChecked,\n    AfterViewInit, booleanAttribute, ContentChildren, Directive, ElementRef, EventEmitter,\n    Inject, Input, LOCALE_ID, OnDestroy, Optional, Output, QueryList, ViewChild\n} from '@angular/core';\nimport { getLocaleFirstDayOfWeek } from \"@angular/common\";\n\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { EditorProvider } from '../core/edit-provider';\nimport { IToggleView } from '../core/navigation';\nimport { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';\nimport { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';\nimport { OverlaySettings } from '../services/overlay/utilities';\nimport { IgxPickerToggleComponent } from './picker-icons.common';\nimport { PickerInteractionMode } from './types';\nimport { WEEKDAYS } from '../calendar/calendar';\nimport { DateRange } from '../date-range-picker/date-range-picker-inputs.common';\nimport { IGX_INPUT_GROUP_TYPE, IgxInputGroupType } from '../input-group/inputGroupType';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\n\n@Directive()\nexport abstract class PickerBaseDirective implements IToggleView, EditorProvider, AfterViewInit, AfterContentChecked, OnDestroy {\n    /**\n     * The editor's input mask.\n     *\n     * @remarks\n     * Also used as a placeholder when none is provided.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker inputFormat=\"dd/MM/yy\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public inputFormat: string;\n\n    /**\n     * The format used to display the picker's value when it's not being edited.\n     *\n     * @remarks\n     * Uses Angular's DatePipe.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker displayFormat=\"EE/M/yy\"></igx-date-picker>\n     * ```\n     *\n     */\n    @Input()\n    public displayFormat: string;\n\n    /**\n     * Sets the `placeholder` of the picker's input.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [placeholder]=\"'Choose your date'\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public placeholder = '';\n\n    /**\n     * Can be `dropdown` with editable input field or `dialog` with readonly input field.\n     *\n     * @remarks\n     * Default mode is `dropdown`\n     *\n     * @example\n     * ```html\n     * <igx-date-picker mode=\"dialog\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public mode: PickerInteractionMode = PickerInteractionMode.DropDown;\n\n    /**\n     * Overlay settings used to display the pop-up element.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [overlaySettings]=\"customOverlaySettings\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public overlaySettings: OverlaySettings;\n\n    /**\n     * Enables or disables the picker.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [disabled]=\"'true'\"></igx-date-picker>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public disabled = false;\n\n    /**\n     * @example\n     * ```html\n     * <igx-date-picker locale=\"jp\"></igx-date-picker>\n     * ```\n     */\n    /**\n     * Gets the `locale` of the date-picker.\n     * If not set, defaults to applciation's locale..\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale;\n    }\n\n    /**\n     * Sets the `locale` of the date-picker.\n     * Expects a valid BCP 47 language tag.\n     */\n    public set locale(value: string) {\n        this._locale = value;\n        // if value is invalid, set it back to _localeId\n        try {\n            getLocaleFirstDayOfWeek(this._locale);\n        } catch (e) {\n            this._locale = this._localeId;\n        }\n    }\n\n    /**\n     * Gets the start day of the week.\n     * Can return a numeric or an enum representation of the week day.\n     * If not set, defaults to the first day of the week for the application locale.\n     */\n    @Input()\n    public get weekStart(): WEEKDAYS | number {\n        return this._weekStart ?? getLocaleFirstDayOfWeek(this._locale);\n    }\n\n    /**\n     * Sets the start day of the week.\n     * Can be assigned to a numeric value or to `WEEKDAYS` enum value.\n     */\n    public set weekStart(value: WEEKDAYS | number) {\n        this._weekStart = value;\n    }\n\n    /**\n     * The container used for the pop-up element.\n     *\n     * @example\n     * ```html\n     * <div igxOverlayOutlet #outlet=\"overlay-outlet\"></div>\n     * <!-- ... -->\n     * <igx-date-picker [outlet]=\"outlet\"></igx-date-picker>\n     * <!-- ... -->\n     * ```\n     */\n    @Input()\n    public outlet: IgxOverlayOutletDirective | ElementRef;\n\n    /**\n     * Determines how the picker's input will be styled.\n     *\n     * @remarks\n     * Default is `box`.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [type]=\"'line'\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public set type(val: IgxInputGroupType) {\n        this._type = val;\n    }\n    public get type(): IgxInputGroupType {\n        return this._type || this._inputGroupType;\n    }\n\n    /**\n     * Gets/Sets the default template editor's tabindex.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [tabIndex]=\"1\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public tabIndex: number | string;\n\n    /**\n     * Emitted when the calendar has started opening, cancelable.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker (opening)=\"handleOpening($event)\"></igx-date-picker>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the calendar has opened.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker (opened)=\"handleOpened($event)\"></igx-date-picker>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted when the calendar has started closing, cancelable.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker (closing)=\"handleClosing($event)\"></igx-date-picker>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the calendar has closed.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker (closed)=\"handleClosed($event)\"></igx-date-picker>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<IBaseEventArgs>();\n\n    /** @hidden @internal */\n    @ContentChildren(IgxPickerToggleComponent, { descendants: true })\n    public toggleComponents: QueryList<IgxPickerToggleComponent>;\n\n    @ContentChildren(IgxPrefixDirective, { descendants: true })\n    protected prefixes: QueryList<IgxPrefixDirective>;\n\n    @ContentChildren(IgxSuffixDirective, { descendants: true })\n    protected suffixes: QueryList<IgxSuffixDirective>;\n\n    @ViewChild(IgxInputGroupComponent)\n    protected inputGroup: IgxInputGroupComponent;\n\n    protected _locale: string;\n    protected _collapsed = true;\n    protected _type: IgxInputGroupType;\n    protected _minValue: Date | string;\n    protected _maxValue: Date | string;\n    protected _weekStart: WEEKDAYS | number;\n    protected abstract get toggleContainer(): HTMLElement | undefined;\n\n    /**\n     * Gets the picker's pop-up state.\n     *\n     * @example\n     * ```typescript\n     * const state = this.picker.collapsed;\n     * ```\n     */\n    public get collapsed(): boolean {\n        return this._collapsed;\n    }\n\n    /** @hidden @internal */\n    public get isDropdown(): boolean {\n        return this.mode === PickerInteractionMode.DropDown;\n    }\n\n    /**\n     * Returns if there's focus within the picker's element OR popup container\n     * @hidden @internal\n     */\n    public get isFocused(): boolean {\n        const document = this.element.nativeElement?.getRootNode() as Document | ShadowRoot;\n        if (!document?.activeElement) return false;\n\n        return this.element.nativeElement.contains(document.activeElement)\n            || !this.collapsed && this.toggleContainer.contains(document.activeElement);\n    }\n\n    protected _destroy$ = new Subject<void>();\n\n    // D.P. EventEmitter<string | Date | DateRange | null> throws on strict checks for more restrictive overrides\n    // w/ TS2416 Type 'string | Date ...' not assignable to type 'DateRange' due to observer method check\n    public abstract valueChange: EventEmitter<any>;\n\n    constructor(public element: ElementRef,\n        @Inject(LOCALE_ID) protected _localeId: string,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) protected _inputGroupType?: IgxInputGroupType) {\n        this.locale = this.locale || this._localeId;\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit(): void {\n        this.subToIconsClicked(this.toggleComponents, () => this.open());\n        this.toggleComponents.changes.pipe(takeUntil(this._destroy$))\n            .subscribe(() => this.subToIconsClicked(this.toggleComponents, () => this.open()));\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentChecked(): void {\n        if (this.inputGroup && this.prefixes?.length > 0) {\n            this.inputGroup.prefixes = this.prefixes;\n        }\n\n        if (this.inputGroup && this.suffixes?.length > 0) {\n            this.inputGroup.suffixes = this.suffixes;\n        }\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy(): void {\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /** Subscribes to the click events of toggle/clear icons in a query */\n    protected subToIconsClicked(components: QueryList<IgxPickerToggleComponent>, next: () => any): void {\n        components.forEach(toggle => {\n            toggle.clicked\n                .pipe(takeUntil(merge(components.changes, this._destroy$)))\n                .subscribe(next);\n        });\n    }\n\n    public abstract select(value: Date | DateRange | string): void;\n    public abstract open(settings?: OverlaySettings): void;\n    public abstract toggle(settings?: OverlaySettings): void;\n    public abstract close(): void;\n    public abstract getEditElement(): HTMLInputElement;\n}\n","import {\n    AfterViewChecked,\n    AfterViewInit,\n    AfterContentChecked,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Injector,\n    Input,\n    LOCALE_ID,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    PipeTransform,\n    QueryList,\n    Renderer2,\n    ViewChild,\n    ViewContainerRef,\n    booleanAttribute\n} from '@angular/core';\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    NgControl,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n    Validator\n} from '@angular/forms';\nimport {\n    IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, IgxCalendarSubheaderTemplateDirective,\n     IFormattingViews, IFormattingOptions\n} from '../calendar/public_api';\nimport { isDateInRanges } from '../calendar/common/helpers';\nimport {\n    IgxLabelDirective, IGX_INPUT_GROUP_TYPE, IgxInputGroupType, IgxInputState, IgxInputGroupComponent, IgxPrefixDirective, IgxInputDirective, IgxSuffixDirective\n} from '../input-group/public_api';\nimport { fromEvent, Subscription, noop, MonoTypeOperatorFunction } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { DateRangeDescriptor, DateRangeType } from '../core/dates/dateRange';\nimport { DatePickerResourceStringsEN, IDatePickerResourceStrings } from '../core/i18n/date-picker-resources';\nimport { IBaseCancelableBrowserEventArgs, isDate, PlatformUtil } from '../core/utils';\nimport { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component';\nimport { PickerBaseDirective } from '../date-common/picker-base.directive';\nimport { IgxPickerActionsDirective, IgxPickerClearComponent } from '../date-common/public_api';\nimport { PickerHeaderOrientation } from '../date-common/types';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { DatePart, DatePartDeltas, IgxDateTimeEditorDirective } from '../directives/date-time-editor/public_api';\nimport { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';\nimport {\n    AbsoluteScrollStrategy,\n    AutoPositionStrategy,\n    IgxOverlayService,\n    OverlayCancelableEventArgs,\n    OverlayEventArgs,\n    OverlaySettings\n} from '../services/public_api';\nimport { IDatePickerValidationFailedEventArgs } from './date-picker.common';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxTextSelectionDirective } from '../directives/text-selection/text-selection.directive';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\n\nlet NEXT_ID = 0;\n\n/**\n * Date Picker displays a popup calendar that lets users select a single date.\n *\n * @igxModule IgxDatePickerModule\n * @igxTheme igx-calendar-theme, igx-icon-theme\n * @igxGroup Scheduling\n * @igxKeywords datepicker, calendar, schedule, date\n * @example\n * ```html\n * <igx-date-picker [(ngModel)]=\"selectedDate\"></igx-date-picker>\n * ```\n */\n@Component({\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxDatePickerComponent, multi: true },\n        { provide: NG_VALIDATORS, useExisting: IgxDatePickerComponent, multi: true }\n    ],\n    selector: 'igx-date-picker',\n    templateUrl: 'date-picker.component.html',\n    styles: [':host { display: block; }'],\n    imports: [\n        IgxInputGroupComponent,\n        IgxPrefixDirective,\n        IgxIconComponent,\n        IgxInputDirective,\n        IgxDateTimeEditorDirective,\n        IgxTextSelectionDirective,\n        IgxSuffixDirective\n    ]\n})\nexport class IgxDatePickerComponent extends PickerBaseDirective implements ControlValueAccessor, Validator,\n    OnInit, AfterViewInit, OnDestroy, AfterViewChecked, AfterContentChecked {\n\n    /**\n     * Gets/Sets whether the inactive dates will be hidden.\n     *\n     * @remarks\n     * Applies to dates that are out of the current month.\n     * Default value is `false`.\n     * @example\n     * ```html\n     * <igx-date-picker [hideOutsideDays]=\"true\"></igx-date-picker>\n     * ```\n     * @example\n     * ```typescript\n     * let hideOutsideDays = this.datePicker.hideOutsideDays;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hideOutsideDays: boolean;\n\n    /**\n     * Gets/Sets the number of month views displayed.\n     *\n     * @remarks\n     * Default value is `1`.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [displayMonthsCount]=\"2\"></igx-date-picker>\n     * ```\n     * @example\n     * ```typescript\n     * let monthViewsDisplayed = this.datePicker.displayMonthsCount;\n     * ```\n     */\n    @Input()\n    public displayMonthsCount = 1;\n\n    /**\n     * Show/hide week numbers\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [showWeekNumbers]=\"true\"></igx-date-picker>\n     * ``\n     */\n    @Input({ transform: booleanAttribute })\n    public showWeekNumbers: boolean;\n\n    /**\n     * Gets/Sets a custom formatter function on the selected or passed date.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [value]=\"date\" [formatter]=\"formatter\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public formatter: (val: Date) => string;\n\n    /**\n     * Gets/Sets the orientation of the `IgxDatePickerComponent` header.\n     *\n     *  @example\n     * ```html\n     * <igx-date-picker headerOrientation=\"vertical\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public headerOrientation: PickerHeaderOrientation = PickerHeaderOrientation.Horizontal;\n\n    /**\n     * Gets/Sets the today button's label.\n     *\n     *  @example\n     * ```html\n     * <igx-date-picker todayButtonLabel=\"Today\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public todayButtonLabel: string;\n\n    /**\n     * Gets/Sets the cancel button's label.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker cancelButtonLabel=\"Cancel\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public cancelButtonLabel: string;\n\n    /**\n     * Specify if the currently spun date segment should loop over.\n     *\n     *  @example\n     * ```html\n     * <igx-date-picker [spinLoop]=\"false\"></igx-date-picker>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public spinLoop = true;\n\n    /**\n     * Delta values used to increment or decrement each editor date part on spin actions.\n     * All values default to `1`.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [spinDelta]=\"{ date: 5, month: 2 }\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public spinDelta: Pick<DatePartDeltas, 'date' | 'month' | 'year'>;\n\n    /**\n     * Gets/Sets the container used for the popup element.\n     *\n     * @remarks\n     *  `outlet` is an instance of `IgxOverlayOutletDirective` or an `ElementRef`.\n     * @example\n     * ```html\n     * <div igxOverlayOutlet #outlet=\"overlay-outlet\"></div>\n     * //..\n     * <igx-date-picker [outlet]=\"outlet\"></igx-date-picker>\n     * //..\n     * ```\n     */\n    @Input()\n    public override outlet: IgxOverlayOutletDirective | ElementRef;\n\n    /**\n     * Gets/Sets the value of `id` attribute.\n     *\n     * @remarks If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-date-picker [id]=\"'igx-date-picker-3'\" cancelButtonLabel=\"cancel\" todayButtonLabel=\"today\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    @HostBinding('attr.id')\n    public id = `igx-date-picker-${NEXT_ID++}`;\n\n    //#region calendar members\n\n    /**\n     * Gets/Sets the format views of the `IgxDatePickerComponent`.\n     *\n     * @example\n     * ```typescript\n     * let formatViews = this.datePicker.formatViews;\n     *  this.datePicker.formatViews = {day:false, month: false, year:false};\n     * ```\n     */\n    @Input()\n    public formatViews: IFormattingViews;\n\n    /**\n     * Gets/Sets the disabled dates descriptors.\n     *\n     * @example\n     * ```typescript\n     * let disabledDates = this.datepicker.disabledDates;\n     * this.datePicker.disabledDates = [ {type: DateRangeType.Weekends}, ...];\n     * ```\n     */\n    @Input()\n    public get disabledDates(): DateRangeDescriptor[] {\n        return this._disabledDates;\n    }\n    public set disabledDates(value: DateRangeDescriptor[]) {\n        this._disabledDates = value;\n        this._onValidatorChange();\n    }\n\n    /**\n     * Gets/Sets the special dates descriptors.\n     *\n     * @example\n     * ```typescript\n     * let specialDates = this.datepicker.specialDates;\n     * this.datePicker.specialDates = [ {type: DateRangeType.Weekends}, ... ];\n     * ```\n     */\n    @Input()\n    public get specialDates(): DateRangeDescriptor[] {\n        return this._specialDates;\n    }\n    public set specialDates(value: DateRangeDescriptor[]) {\n        this._specialDates = value;\n    }\n\n\n    /**\n     * Gets/Sets the format options of the `IgxDatePickerComponent`.\n     *\n     * @example\n     * ```typescript\n     * this.datePicker.calendarFormat = {day: \"numeric\",  month: \"long\", weekday: \"long\", year: \"numeric\"};\n     * ```\n     */\n    @Input()\n    public calendarFormat: IFormattingOptions;\n\n    //#endregion\n\n    /**\n     * Gets/Sets the selected date.\n     *\n     *  @example\n     * ```html\n     * <igx-date-picker [value]=\"date\"></igx-date-picker>\n     * ```\n     */\n    @Input()\n    public get value(): Date | string {\n        return this._value;\n    }\n    public set value(date: Date | string) {\n        this._value = date;\n        this.setDateValue(date);\n        if (this.dateTimeEditor.value !== date) {\n            this.dateTimeEditor.value = this._dateValue;\n        }\n        this.valueChange.emit(this.dateValue);\n        this._onChangeCallback(this.dateValue);\n    }\n\n    /**\n     * The minimum value the picker will accept.\n     *\n     * @example\n     * <igx-date-picker [minValue]=\"minDate\"></igx-date-picker>\n     */\n    @Input()\n    public set minValue(value: Date | string) {\n        this._minValue = value;\n        this._onValidatorChange();\n    }\n\n    public get minValue(): Date | string {\n        return this._minValue;\n    }\n\n    /**\n     * The maximum value the picker will accept.\n     *\n     * @example\n     * <igx-date-picker [maxValue]=\"maxDate\"></igx-date-picker>\n     */\n    @Input()\n    public set maxValue(value: Date | string) {\n        this._maxValue = value;\n        this._onValidatorChange();\n    }\n\n    public get maxValue(): Date | string {\n        return this._maxValue;\n    }\n\n    /**\n     * Gets/Sets the resource strings for the picker's default toggle icon.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public resourceStrings: IDatePickerResourceStrings;\n\n    /** @hidden @internal */\n    @Input({ transform: booleanAttribute })\n    public readOnly = false;\n\n    /**\n     * Emitted when the picker's value changes.\n     *\n     * @remarks\n     * Used for `two-way` bindings.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker [(value)]=\"date\"></igx-date-picker>\n     * ```\n     */\n    @Output()\n    public valueChange = new EventEmitter<Date>();\n\n    /**\n     * Emitted when the user types/spins invalid date in the date-picker editor.\n     *\n     *  @example\n     * ```html\n     * <igx-date-picker (validationFailed)=\"onValidationFailed($event)\"></igx-date-picker>\n     * ```\n     */\n    @Output()\n    public validationFailed = new EventEmitter<IDatePickerValidationFailedEventArgs>();\n\n    /** @hidden @internal */\n    @ContentChildren(IgxPickerClearComponent)\n    public clearComponents: QueryList<IgxPickerClearComponent>;\n\n    /** @hidden @internal */\n    @ContentChild(IgxLabelDirective)\n    public label: IgxLabelDirective;\n\n    @ContentChild(IgxCalendarHeaderTitleTemplateDirective)\n    private headerTitleTemplate: IgxCalendarHeaderTitleTemplateDirective;\n\n    @ContentChild(IgxCalendarHeaderTemplateDirective)\n    private headerTemplate: IgxCalendarHeaderTemplateDirective;\n\n    @ViewChild(IgxDateTimeEditorDirective, { static: true })\n    private dateTimeEditor: IgxDateTimeEditorDirective;\n\n    @ViewChild(IgxInputGroupComponent, { read: ViewContainerRef })\n    private viewContainerRef: ViewContainerRef;\n\n    @ViewChild(IgxLabelDirective)\n    private labelDirective: IgxLabelDirective;\n\n    @ViewChild(IgxInputDirective)\n    private inputDirective: IgxInputDirective;\n\n    @ContentChild(IgxCalendarSubheaderTemplateDirective)\n    private subheaderTemplate: IgxCalendarSubheaderTemplateDirective;\n\n    @ContentChild(IgxPickerActionsDirective)\n    private pickerActions: IgxPickerActionsDirective;\n\n    private get dialogOverlaySettings(): OverlaySettings {\n        return Object.assign({}, this._dialogOverlaySettings, this.overlaySettings);\n    }\n\n    private get dropDownOverlaySettings(): OverlaySettings {\n        return Object.assign({}, this._dropDownOverlaySettings, this.overlaySettings);\n    }\n\n    private get inputGroupElement(): HTMLElement {\n        return this.inputGroup?.element.nativeElement;\n    }\n\n    private get dateValue(): Date {\n        return this._dateValue;\n    }\n\n    private get pickerFormatViews(): IFormattingViews {\n        return Object.assign({}, this._defFormatViews, this.formatViews);\n    }\n\n    private get pickerCalendarFormat(): IFormattingOptions {\n        return Object.assign({}, this._calendarFormat, this.calendarFormat);\n    }\n\n    /** @hidden @internal */\n    public displayValue: PipeTransform = { transform: (date: Date) => this.formatter(date) };\n\n    private _resourceStrings = getCurrentResourceStrings(DatePickerResourceStringsEN);\n    private _dateValue: Date;\n    private _overlayId: string;\n    private _value: Date | string;\n    private _targetViewDate: Date;\n    private _ngControl: NgControl = null;\n    private _statusChanges$: Subscription;\n    private _calendar: IgxCalendarComponent;\n    private _calendarContainer?: HTMLElement;\n    private _specialDates: DateRangeDescriptor[] = null;\n    private _disabledDates: DateRangeDescriptor[] = null;\n    private _overlaySubFilter:\n        [MonoTypeOperatorFunction<OverlayEventArgs>,\n            MonoTypeOperatorFunction<OverlayEventArgs | OverlayCancelableEventArgs>] = [\n            filter(x => x.id === this._overlayId),\n            takeUntil(this._destroy$)\n        ];\n    private _dropDownOverlaySettings: OverlaySettings = {\n        target: this.inputGroupElement,\n        closeOnOutsideClick: true,\n        modal: false,\n        closeOnEscape: true,\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        positionStrategy: new AutoPositionStrategy({\n            openAnimation: fadeIn,\n            closeAnimation: fadeOut\n        })\n    };\n    private _dialogOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: true,\n        closeOnEscape: true\n    };\n    private _calendarFormat: IFormattingOptions = {\n        day: 'numeric',\n        month: 'short',\n        weekday: 'short',\n        year: 'numeric'\n    };\n    private _defFormatViews: IFormattingViews = {\n        day: false,\n        month: true,\n        year: false\n    };\n    private _onChangeCallback: (_: Date) => void = noop;\n    private _onTouchedCallback: () => void = noop;\n    private _onValidatorChange: () => void = noop;\n\n    constructor(element: ElementRef<HTMLElement>,\n        @Inject(LOCALE_ID) _localeId: string,\n        @Inject(IgxOverlayService) private _overlayService: IgxOverlayService,\n        private _injector: Injector,\n        private _renderer: Renderer2,\n        private platform: PlatformUtil,\n        private cdr: ChangeDetectorRef,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) _inputGroupType?: IgxInputGroupType) {\n        super(element, _localeId, _inputGroupType);\n        this.locale = this.locale || this._localeId;\n    }\n\n    /** @hidden @internal */\n    public get required(): boolean {\n        if (this._ngControl && this._ngControl.control && this._ngControl.control.validator) {\n            // Run the validation with empty object to check if required is enabled.\n            const error = this._ngControl.control.validator({} as AbstractControl);\n            return error && error.required;\n        }\n\n        return false;\n    }\n\n    /** @hidden @internal */\n    public get pickerResourceStrings(): IDatePickerResourceStrings {\n        return Object.assign({}, this._resourceStrings, this.resourceStrings);\n    }\n\n    protected override get toggleContainer(): HTMLElement | undefined {\n        return this._calendarContainer;\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent) {\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_UP:\n                if (event.altKey) {\n                    this.close();\n                }\n                break;\n            case this.platform.KEYMAP.ARROW_DOWN:\n                if (event.altKey) {\n                    this.open();\n                }\n                break;\n            case this.platform.KEYMAP.SPACE:\n                event.preventDefault();\n                this.open();\n                break;\n        }\n    }\n\n    /**\n     * Opens the picker's dropdown or dialog.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker #picker></igx-date-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"picker.open()\">Open Dialog</button>\n     * ```\n     */\n    public open(settings?: OverlaySettings): void {\n        if (!this.collapsed || this.disabled) {\n            return;\n        }\n\n        const overlaySettings = Object.assign({}, this.isDropdown\n            ? this.dropDownOverlaySettings\n            : this.dialogOverlaySettings\n            , settings);\n\n        if (this.isDropdown && this.inputGroupElement) {\n            overlaySettings.target = this.inputGroupElement;\n        }\n        if (this.outlet) {\n            overlaySettings.outlet = this.outlet;\n        }\n        this._overlayId = this._overlayService\n            .attach(IgxCalendarContainerComponent, this.viewContainerRef, overlaySettings);\n        this._overlayService.show(this._overlayId);\n    }\n\n    /**\n     * Toggles the picker's dropdown or dialog\n     *\n     * @example\n     * ```html\n     * <igx-date-picker #picker></igx-date-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"picker.toggle()\">Toggle Dialog</button>\n     * ```\n     */\n    public toggle(settings?: OverlaySettings): void {\n        if (this.collapsed) {\n            this.open(settings);\n        } else {\n            this.close();\n        }\n    }\n\n    /**\n     * Closes the picker's dropdown or dialog.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker #picker></igx-date-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"picker.close()\">Close Dialog</button>\n     * ```\n     */\n    public close(): void {\n        if (!this.collapsed) {\n            this._overlayService.hide(this._overlayId);\n        }\n    }\n\n    /**\n     * Selects a date.\n     *\n     * @remarks Updates the value in the input field.\n     *\n     * @example\n     * ```typescript\n     * this.datePicker.select(date);\n     * ```\n     * @param date passed date that has to be set to the calendar.\n     */\n    public select(value: Date): void {\n        this.value = value;\n    }\n\n    /**\n     * Selects today's date and closes the picker.\n     *\n     * @example\n     * ```html\n     * <igx-date-picker #picker></igx-date-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"picker.selectToday()\">Select Today</button>\n     * ```\n     * */\n    public selectToday(): void {\n        const today = new Date();\n        today.setHours(0);\n        today.setMinutes(0);\n        today.setSeconds(0);\n        today.setMilliseconds(0);\n        this.select(today);\n        this.close();\n    }\n\n    /**\n     * Clears the input field and the picker's value.\n     *\n     * @example\n     * ```typescript\n     * this.datePicker.clear();\n     * ```\n     */\n    public clear(): void {\n        if (!this.disabled) {\n            this._calendar?.deselectDate();\n            this.dateTimeEditor.clear();\n        }\n    }\n\n    /**\n     * Increment a specified `DatePart`.\n     *\n     * @param datePart The optional DatePart to increment. Defaults to Date.\n     * @param delta The optional delta to increment by. Overrides `spinDelta`.\n     * @example\n     * ```typescript\n     * this.datePicker.increment(DatePart.Date);\n     * ```\n     */\n    public increment(datePart?: DatePart, delta?: number): void {\n        this.dateTimeEditor.increment(datePart, delta);\n    }\n\n    /**\n     * Decrement a specified `DatePart`\n     *\n     * @param datePart The optional DatePart to decrement. Defaults to Date.\n     * @param delta The optional delta to decrement by. Overrides `spinDelta`.\n     * @example\n     * ```typescript\n     * this.datePicker.decrement(DatePart.Date);\n     * ```\n     */\n    public decrement(datePart?: DatePart, delta?: number): void {\n        this.dateTimeEditor.decrement(datePart, delta);\n    }\n\n    //#region Control Value Accessor\n    /** @hidden @internal */\n    public writeValue(value: Date | string) {\n        this._value = value;\n        this.setDateValue(value);\n        if (this.dateTimeEditor.value !== value) {\n            this.dateTimeEditor.value = this._dateValue;\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn: any) {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: any) {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState?(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    //#endregion\n\n    //#region Validator\n    /** @hidden @internal */\n    public registerOnValidatorChange(fn: any) {\n        this._onValidatorChange = fn;\n    }\n\n    /** @hidden @internal */\n    public validate(control: AbstractControl): ValidationErrors | null {\n        if (!control.value) {\n            return null;\n        }\n        // InvalidDate handling\n        if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n            return { value: true };\n        }\n\n        const errors = {};\n        const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n        if (value && this.disabledDates && isDateInRanges(value, this.disabledDates)) {\n            Object.assign(errors, { dateIsDisabled: true });\n        }\n        Object.assign(errors, DateTimeUtil.validateMinMax(value, this.minValue, this.maxValue, false));\n\n        return Object.keys(errors).length > 0 ? errors : null;\n    }\n    //#endregion\n\n    /** @hidden @internal */\n    public ngOnInit(): void {\n        this._ngControl = this._injector.get<NgControl>(NgControl, null);\n\n        this.locale = this.locale || this._localeId;\n    }\n\n    /** @hidden @internal */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n        this.subscribeToClick();\n        this.subscribeToOverlayEvents();\n        this.subscribeToDateEditorEvents();\n\n        this.subToIconsClicked(this.clearComponents, () => this.clear());\n        this.clearComponents.changes.pipe(takeUntil(this._destroy$))\n            .subscribe(() => this.subToIconsClicked(this.clearComponents, () => this.clear()));\n\n        this._dropDownOverlaySettings.excludeFromOutsideClick = [this.inputGroup.element.nativeElement];\n\n        fromEvent(this.inputDirective.nativeElement, 'blur')\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(() => {\n                if (this.collapsed) {\n                    this._onTouchedCallback();\n                    this.updateValidity();\n                }\n            });\n\n        if (this._ngControl) {\n            this._statusChanges$ =\n                this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n            if (this._ngControl.control.validator) {\n                this.inputGroup.isRequired = this.required;\n                this.cdr.detectChanges();\n            }\n        }\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewChecked() {\n        if (this.labelDirective) {\n            this._renderer.setAttribute(this.inputDirective.nativeElement, 'aria-labelledby', this.labelDirective.id);\n        }\n    }\n\n    /** @hidden @internal */\n    public override ngOnDestroy(): void {\n        super.ngOnDestroy();\n        if (this._statusChanges$) {\n            this._statusChanges$.unsubscribe();\n        }\n        if (this._overlayId) {\n            this._overlayService.detach(this._overlayId);\n            delete this._overlayId;\n        }\n    }\n\n    /** @hidden @internal */\n    public getEditElement(): HTMLInputElement {\n        return this.inputDirective.nativeElement;\n    }\n\n    private subscribeToClick() {\n        fromEvent(this.getEditElement(), 'click')\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(() => {\n                if (!this.isDropdown) {\n                    this.toggle();\n                }\n            });\n    }\n\n    private setDateValue(value: Date | string) {\n        if (isDate(value) && isNaN(value.getTime())) {\n            this._dateValue = value;\n            return;\n        }\n        this._dateValue = DateTimeUtil.isValidDate(value) ? value : DateTimeUtil.parseIsoDate(value);\n    }\n\n    private updateValidity() {\n        // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n        if (this._ngControl && !this.disabled && this.isTouchedOrDirty) {\n            if (this.hasValidators && this.inputGroup.isFocused) {\n                this.inputDirective.valid = this._ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n            } else {\n                this.inputDirective.valid = this._ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n            }\n        } else {\n            this.inputDirective.valid = IgxInputState.INITIAL;\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this._ngControl.control.touched || this._ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this._ngControl.control.validator || !!this._ngControl.control.asyncValidator);\n    }\n\n    private onStatusChanged = () => {\n        this.disabled = this._ngControl.disabled;\n        this.updateValidity();\n        this.inputGroup.isRequired = this.required;\n    };\n\n    private handleSelection(date: Date): void {\n        if (this.dateValue && DateTimeUtil.isValidDate(this.dateValue)) {\n            date.setHours(this.dateValue.getHours());\n            date.setMinutes(this.dateValue.getMinutes());\n            date.setSeconds(this.dateValue.getSeconds());\n            date.setMilliseconds(this.dateValue.getMilliseconds());\n        }\n        this.value = date;\n        this._calendar.viewDate = date;\n        this.close();\n    }\n\n    private subscribeToDateEditorEvents(): void {\n        this.dateTimeEditor.valueChange.pipe(\n            takeUntil(this._destroy$)).subscribe(val => {\n                this.value = val;\n            });\n        this.dateTimeEditor.validationFailed.pipe(\n            takeUntil(this._destroy$)).subscribe((event) => {\n                this.validationFailed.emit({\n                    owner: this,\n                    prevValue: event.oldValue,\n                    currentValue: this.value\n                });\n            });\n    }\n\n    private subscribeToOverlayEvents() {\n        this._overlayService.opening.pipe(...this._overlaySubFilter).subscribe((e: OverlayCancelableEventArgs) => {\n            const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n            this.opening.emit(args);\n            e.cancel = args.cancel;\n            if (args.cancel) {\n                this._overlayService.detach(this._overlayId);\n                return;\n            }\n\n            this._initializeCalendarContainer(e.componentRef.instance);\n            this._calendarContainer = e.componentRef.location.nativeElement;\n            this._collapsed = false;\n        });\n\n        this._overlayService.opened.pipe(...this._overlaySubFilter).subscribe(() => {\n            this.opened.emit({ owner: this });\n\n            this._calendar.wrapper?.nativeElement?.focus();\n\n            if (this._targetViewDate) {\n                this._targetViewDate.setHours(0, 0, 0, 0);\n                // INFO: We need to set the active date to the target view date so there's something to\n                // navigate when the calendar is opened.\n                this._calendar.activeDate = this._targetViewDate;\n            }\n        });\n\n        this._overlayService.closing.pipe(...this._overlaySubFilter).subscribe((e: OverlayCancelableEventArgs) => {\n            const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n            this.closing.emit(args);\n            e.cancel = args.cancel;\n            if (args.cancel) {\n                return;\n            }\n            // do not focus the input if clicking outside in dropdown mode\n            const outsideEvent = args.event && (args.event as KeyboardEvent).key !== this.platform.KEYMAP.ESCAPE;\n            if (this.getEditElement() && !(outsideEvent && this.isDropdown)) {\n                this.inputDirective.focus();\n            } else {\n                this._onTouchedCallback();\n                this.updateValidity();\n            }\n        });\n\n        this._overlayService.closed.pipe(...this._overlaySubFilter).subscribe(() => {\n            this.closed.emit({ owner: this });\n            this._overlayService.detach(this._overlayId);\n            this._collapsed = true;\n            this._overlayId = null;\n            this._calendar = null;\n            this._calendarContainer = undefined;\n        });\n    }\n\n    private getMinMaxDates() {\n        const minValue = DateTimeUtil.isValidDate(this.minValue) ? this.minValue : DateTimeUtil.parseIsoDate(this.minValue);\n        const maxValue = DateTimeUtil.isValidDate(this.maxValue) ? this.maxValue : DateTimeUtil.parseIsoDate(this.maxValue);\n        return { minValue, maxValue };\n    }\n\n    private setDisabledDates(): void {\n        this._calendar.disabledDates = this.disabledDates ? [...this.disabledDates] : [];\n        const { minValue, maxValue } = this.getMinMaxDates();\n        if (minValue) {\n            this._calendar.disabledDates.push({ type: DateRangeType.Before, dateRange: [minValue] });\n        }\n        if (maxValue) {\n            this._calendar.disabledDates.push({ type: DateRangeType.After, dateRange: [maxValue] });\n        }\n    }\n\n\n    private _initializeCalendarContainer(componentInstance: IgxCalendarContainerComponent) {\n        this._calendar = componentInstance.calendar;\n        this._calendar.hasHeader = !this.isDropdown;\n        this._calendar.formatOptions = this.pickerCalendarFormat;\n        this._calendar.formatViews = this.pickerFormatViews;\n        this._calendar.locale = this.locale;\n        this._calendar.weekStart = this.weekStart;\n        this._calendar.specialDates = this.specialDates;\n        this._calendar.headerTitleTemplate = this.headerTitleTemplate;\n        this._calendar.headerTemplate = this.headerTemplate;\n        this._calendar.subheaderTemplate = this.subheaderTemplate;\n        this._calendar.headerOrientation = this.headerOrientation;\n        this._calendar.hideOutsideDays = this.hideOutsideDays;\n        this._calendar.monthsViewNumber = this.displayMonthsCount;\n        this._calendar.showWeekNumbers = this.showWeekNumbers;\n        this._calendar.selected.pipe(takeUntil(this._destroy$)).subscribe((ev: Date) => this.handleSelection(ev));\n        this.setDisabledDates();\n\n        if (DateTimeUtil.isValidDate(this.dateValue)) {\n            // calendar will throw if the picker's value is InvalidDate #9208\n            this._calendar.value = this.dateValue;\n        }\n        this.setCalendarViewDate();\n\n        componentInstance.mode = this.mode;\n        // componentInstance.headerOrientation = this.headerOrientation;\n        componentInstance.closeButtonLabel = this.cancelButtonLabel;\n        componentInstance.todayButtonLabel = this.todayButtonLabel;\n        componentInstance.pickerActions = this.pickerActions;\n\n        componentInstance.calendarClose.pipe(takeUntil(this._destroy$)).subscribe(() => this.close());\n        componentInstance.todaySelection.pipe(takeUntil(this._destroy$)).subscribe(() => this.selectToday());\n    }\n\n    private setCalendarViewDate() {\n        const { minValue, maxValue } = this.getMinMaxDates();\n        const dateValue = DateTimeUtil.isValidDate(this.dateValue) ? this.dateValue : new Date();\n        if (minValue && DateTimeUtil.lessThanMinValue(dateValue, minValue)) {\n            this._calendar.viewDate = this._targetViewDate = minValue;\n            return;\n        }\n        if (maxValue && DateTimeUtil.greaterThanMaxValue(dateValue, maxValue)) {\n            this._calendar.viewDate = this._targetViewDate = maxValue;\n            return;\n        }\n        this._calendar.viewDate = this._targetViewDate = dateValue;\n    }\n}\n","<igx-input-group [type]=\"type\">\n    @if (!toggleComponents.length) {\n        <igx-prefix (click)=\"toggle()\">\n            <igx-icon\n                [title]=\"\n                    value\n                        ? pickerResourceStrings.igx_date_picker_change_date\n                        : pickerResourceStrings.igx_date_picker_choose_date\n                \"\n                family=\"default\"\n                name=\"today\"\n            >\n            </igx-icon>\n        </igx-prefix>\n    }\n\n    <input class=\"igx-date-picker__input-date\" [displayValuePipe]=\"formatter ? displayValue : null\" igxInput\n        [igxDateTimeEditor]=\"inputFormat\" [displayFormat]=\"displayFormat\"\n        [minValue]=\"minValue\" [maxValue]=\"maxValue\" [spinDelta]=\"spinDelta\" [spinLoop]=\"spinLoop\"\n        [disabled]=\"disabled\" [placeholder]=\"placeholder\" [readonly]=\"!isDropdown || readOnly\"\n        [igxTextSelection]=\"isDropdown && !readOnly\" [locale]=\"locale\" [attr.aria-expanded]=\"!collapsed\"\n        [attr.aria-labelledby]=\"label?.id\" aria-haspopup=\"dialog\" aria-autocomplete=\"none\" role=\"combobox\">\n\n    @if (!clearComponents.length && value) {\n        <igx-suffix (click)=\"clear()\">\n            <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n        </igx-suffix>\n    }\n\n    <ng-container ngProjectAs=\"[igxLabel]\">\n        <ng-content select=\"[igxLabel]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-prefix\">\n        <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-suffix\">\n        <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-hint\">\n        <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n    </ng-container>\n</igx-input-group>\n","import { IgxPickerActionsDirective, IgxPickerClearComponent, IgxPickerToggleComponent } from '../date-common/picker-icons.common';\nimport { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxDatePickerComponent } from './date-picker.component';\n\nexport * from './date-picker.component';\n\n/* NOTE: Date picker directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_DATE_PICKER_DIRECTIVES = [\n    IgxDatePickerComponent,\n    IgxPickerToggleComponent,\n    IgxPickerClearComponent,\n    IgxPickerActionsDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import {\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    ViewChild,\n    AfterContentInit,\n    booleanAttribute\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxNavigationService, IToggleView } from '../core/navigation';\nimport { IgxButtonType, IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { IgxToggleDirective } from '../directives/toggle/toggle.directive';\nimport { OverlaySettings, GlobalPositionStrategy, NoOpScrollStrategy, PositionSettings } from '../services/public_api';\nimport { IgxFocusDirective } from '../directives/focus/focus.directive';\nimport { IgxFocusTrapDirective } from '../directives/focus-trap/focus-trap.directive';\nimport { CancelableEventArgs, IBaseEventArgs } from '../core/utils';\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\n\nlet DIALOG_ID = 0;\n/**\n * **Ignite UI for Angular Dialog Window** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/dialog.html)\n *\n * The Ignite UI Dialog Window presents a dialog window to the user which can simply display messages or display\n * more complicated visuals such as a user sign-in form.  It also provides a right and left button\n * which can be used for custom actions.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton (click)=\"form.open()\">Show Dialog</button>\n * <igx-dialog #form title=\"Sign In\" rightButtonLabel=\"OK\">\n *   <div>\n *     <igx-input-group>\n *       <input type=\"text\" igxInput/>\n *       <label igxLabel>Username</label>\n *     </igx-input-group>\n *   </div>\n *   <div>\n *     <igx-input-group>\n *       <input type=\"password\" igxInput/>\n *       <label igxLabel>Password</label>\n *     </igx-input-group>\n *   </div>\n * </igx-dialog>\n * ```\n */\n@Component({\n    selector: 'igx-dialog',\n    templateUrl: 'dialog-content.component.html',\n    imports: [IgxToggleDirective, IgxFocusTrapDirective, IgxFocusDirective, IgxButtonDirective, IgxRippleDirective]\n})\nexport class IgxDialogComponent implements IToggleView, OnInit, OnDestroy, AfterContentInit {\n    private static NEXT_ID = 1;\n    private static readonly DIALOG_CLASS = 'igx-dialog';\n\n\n\n    @ViewChild(IgxToggleDirective, { static: true })\n    public toggleRef: IgxToggleDirective;\n\n    /**\n     * Sets the value of the `id` attribute. If not provided it will be automatically generated.\n     * ```html\n     * <igx-dialog [id]=\"'igx-dialog-56'\" #alert title=\"Notification\"\n     *  leftButtonLabel=\"OK\" (leftButtonSelect)=\"alert.close()\">\n     * </igx-dialog>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-dialog-${DIALOG_ID++}`;\n\n    /**\n     * Controls whether the dialog should be shown as modal. Defaults to `true`\n     * ```html\n     * <igx-dialog [isModal]=\"false\" ></igx-dialog>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get isModal() {\n        return this._isModal;\n    }\n\n    public set isModal(val: boolean) {\n        this._overlayDefaultSettings.modal = val;\n        this._isModal = val;\n    }\n\n    /**\n     * Controls whether the dialog should close when `Esc` key is pressed. Defaults to `true`\n     * ```html\n     * <igx-dialog [closeOnEscape]=\"false\" ></igx-dialog>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get closeOnEscape() {\n        return this._closeOnEscape;\n    }\n\n    public set closeOnEscape(val: boolean) {\n        this._overlayDefaultSettings.closeOnEscape = val;\n        this._closeOnEscape = val;\n    }\n\n    /**\n     * Set whether the Tab key focus is trapped within the dialog when opened.\n     * Defaults to `true`.\n     * ```html\n     * <igx-dialog focusTrap=\"false\"\"></igx-dialog>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public focusTrap = true;\n\n    /**\n     * Sets the title of the dialog.\n     * ```html\n     * <igx-dialog title=\"Notification\" #alert leftButtonLabel=\"OK\" (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public title = '';\n\n    /**\n     *  Sets the message text of the dialog.\n     * ```html\n     * <igx-dialog message=\"Your email was sent!\" #alert leftButtonLabel=\"OK\" (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public message = '';\n\n    /**\n     * Sets the `label` of the left button of the dialog.\n     * ```html\n     * <igx-dialog leftButtonLabel=\"OKAY\" #alert title=\"Notification\"  (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public leftButtonLabel = '';\n\n    /**\n     * Sets the left button `type`. The types are `flat`, `contained` and `fab`.\n     * The `flat` type button is a rectangle and doesn't have a shadow. <br>\n     * The `contained` type button is also a rectangle but has a shadow. <br>\n     * The `fab` type button is a circle with a shadow. <br>\n     * The default value is `flat`.\n     * ```html\n     * <igx-dialog leftButtonType=\"contained\" leftButtonLabel=\"OKAY\" #alert (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public leftButtonType: IgxButtonType = 'flat';\n\n    /**\n     * Sets the left button `ripple`. The `ripple` animates a click/tap to a component as a series of fading waves.\n     * The property accepts all valid CSS color property values.\n     * ```html\n     * <igx-dialog leftButtonRipple=\"green\" leftButtonLabel=\"OKAY\" #alert (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public leftButtonRipple = '';\n\n    /**\n     * Sets the `label` of the right button of the dialog.\n     * ```html\n     * <igx-dialog rightButtonLabel=\"OKAY\" #alert title=\"Notification\"  (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public rightButtonLabel = '';\n\n    /**\n     * Sets the right button `type`. The types are `flat`, `contained` and `fab`.\n     * The `flat` type button is a rectangle and doesn't have a shadow. <br>\n     * The `contained` type button is also a rectangle but has a shadow. <br>\n     * The `fab` type button is a circle with a shadow. <br>\n     * The default value is `flat`.\n     * ```html\n     * <igx-dialog rightButtonType=\"fab\" rightButtonLabel=\"OKAY\" #alert (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public rightButtonType: IgxButtonType = 'flat';\n\n    /**\n     * Sets the right button `ripple`.\n     * ```html\n     * <igx-dialog rightButtonRipple=\"green\" rightButtonLabel=\"OKAY\" #alert (leftButtonSelect)=\"alert.close()\"></igx-dialog>\n     * ```\n     */\n    @Input()\n    public rightButtonRipple = '';\n\n    /**\n     * Gets/Sets whether the dialog should close on click outside the component. By default it's false.\n     * ```html\n     * <igx-dialog closeOnOutsideSelect=\"true\" leftButtonLabel=\"Cancel\" (leftButtonSelect)=\"dialog.close()\"\n     * rightButtonLabel=\"OK\" rightButtonRipple=\"#4CAF50\" (rightButtonSelect)=\"onDialogOKSelected($event)\">\n     * </igx-dialog>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get closeOnOutsideSelect() {\n        return this._closeOnOutsideSelect;\n    }\n\n    public set closeOnOutsideSelect(val: boolean) {\n        this._overlayDefaultSettings.closeOnOutsideClick = val;\n        this._closeOnOutsideSelect = val;\n    }\n\n    /**\n     * Get the position and animation settings used by the dialog.\n     * ```typescript\n     * @ViewChild('alert', { static: true }) public alert: IgxDialogComponent;\n     * let currentPosition: PositionSettings = this.alert.positionSettings\n     * ```\n     */\n    @Input()\n    public get positionSettings(): PositionSettings {\n        return this._positionSettings;\n    }\n\n    /**\n     * Set the position and animation settings used by the dialog.\n     * ```typescript\n     * import { slideInLeft, slideOutRight } from 'igniteui-angular';\n     * ...\n     * @ViewChild('alert', { static: true }) public alert: IgxDialogComponent;\n     *  public newPositionSettings: PositionSettings = {\n     *      openAnimation: useAnimation(slideInTop, { params: { duration: '2000ms' } }),\n     *      closeAnimation: useAnimation(slideOutBottom, { params: { duration: '2000ms'} }),\n     *      horizontalDirection: HorizontalAlignment.Left,\n     *      verticalDirection: VerticalAlignment.Middle,\n     *      horizontalStartPoint: HorizontalAlignment.Left,\n     *      verticalStartPoint: VerticalAlignment.Middle,\n     *      minSize: { height: 100, width: 100 }\n     *  };\n     * this.alert.positionSettings = this.newPositionSettings;\n     * ```\n     */\n    public set positionSettings(settings: PositionSettings) {\n        this._positionSettings = settings;\n        this._overlayDefaultSettings.positionStrategy = new GlobalPositionStrategy(this._positionSettings);\n    }\n\n    /**\n     * The default `tabindex` attribute for the component\n     *\n     * @hidden\n     */\n    @HostBinding('attr.tabindex')\n    public tabindex = -1;\n\n    /**\n     * An event that is emitted before the dialog is opened.\n     * ```html\n     * <igx-dialog (opening)=\"onDialogOpenHandler($event)\" (leftButtonSelect)=\"dialog.close()\" rightButtonLabel=\"OK\">\n     * </igx-dialog>\n     * ```\n     */\n    @Output()\n    public opening = new EventEmitter<IDialogCancellableEventArgs>();\n\n    /**\n     * An event that is emitted after the dialog is opened.\n     * ```html\n     * <igx-dialog (opened)=\"onDialogOpenedHandler($event)\" (leftButtonSelect)=\"dialog.close()\" rightButtonLabel=\"OK\">\n     * </igx-dialog>\n     * ```\n     */\n    @Output()\n    public opened = new EventEmitter<IDialogEventArgs>();\n\n    /**\n     * An event that is emitted before the dialog is closed.\n     * ```html\n     * <igx-dialog (closing)=\"onDialogCloseHandler($event)\" title=\"Confirmation\" leftButtonLabel=\"Cancel\" rightButtonLabel=\"OK\">\n     * </igx-dialog>\n     * ```\n     */\n    @Output()\n    public closing = new EventEmitter<IDialogCancellableEventArgs>();\n\n    /**\n     * An event that is emitted after the dialog is closed.\n     * ```html\n     * <igx-dialog (closed)=\"onDialogClosedHandler($event)\" title=\"Confirmation\" leftButtonLabel=\"Cancel\" rightButtonLabel=\"OK\">\n     * </igx-dialog>\n     * ```\n     */\n    @Output()\n    public closed = new EventEmitter<IDialogEventArgs>();\n\n    /**\n     * An event that is emitted when the left button is clicked.\n     * ```html\n     * <igx-dialog (leftButtonSelect)=\"onDialogOKSelected($event)\" #dialog leftButtonLabel=\"OK\" rightButtonLabel=\"Cancel\">\n     * </igx-dialog>\n     * ```\n     */\n    @Output()\n    public leftButtonSelect = new EventEmitter<IDialogEventArgs>();\n\n    /**\n     * An event that is emitted when the right button is clicked.\n     * ```html\n     * <igx-dialog (rightButtonSelect)=\"onDialogOKSelected($event)\"\n     * #dialog title=\"Confirmation\" (leftButtonSelect)=\"dialog.close()\" rightButtonLabel=\"OK\"\n     * rightButtonRipple=\"#4CAF50\" closeOnOutsideSelect=\"true\">\n     * </igx-dialog>\n     * ```\n     */\n    @Output()\n    public rightButtonSelect = new EventEmitter<IDialogEventArgs>();\n\n    /**\n     * @hidden\n     */\n    @Output() public isOpenChange = new EventEmitter<boolean>();\n\n    /**\n     * @hidden\n     */\n    public get element() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * Returns the value of state. Possible state values are \"open\" or \"close\".\n     * ```typescript\n     * @ViewChild(\"MyDialog\")\n     * public dialog: IgxDialogComponent;\n     * ngAfterViewInit() {\n     *     let dialogState = this.dialog.state;\n     * }\n     * ```\n     */\n    public get state(): string {\n        return this.isOpen ? 'open' : 'close';\n    }\n\n    /**\n     * State of the dialog.\n     *\n     * ```typescript\n     * // get\n     * let dialogIsOpen = this.dialog.isOpen;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-dialog [isOpen]='false'></igx-dialog>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <!--set-->\n     * <igx-dialog [(isOpen)]='model.isOpen'></igx-dialog>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get isOpen() {\n        return this.toggleRef ? !this.toggleRef.collapsed : false;\n    }\n    public set isOpen(value: boolean) {\n        if (value !== this.isOpen) {\n            this.isOpenChange.emit(value);\n            if (value) {\n                requestAnimationFrame(() => {\n                    this.open();\n                });\n            } else {\n                this.close();\n            }\n        }\n    }\n\n    @HostBinding('class.igx-dialog--hidden')\n    public get isCollapsed() {\n        return this.toggleRef.collapsed;\n    }\n\n    /**\n     * Returns the value of the role of the dialog. The valid values are `dialog`, `alertdialog`, `alert`.\n     * ```typescript\n     * @ViewChild(\"MyDialog\")\n     * public dialog: IgxDialogComponent;\n     * ngAfterViewInit() {\n     *     let dialogRole = this.dialog.role;\n     * }\n     *  ```\n     */\n    @Input()\n    public get role() {\n        if (this.leftButtonLabel !== '' && this.rightButtonLabel !== '') {\n            return 'dialog';\n        } else if (\n            this.leftButtonLabel !== '' ||\n            this.rightButtonLabel !== ''\n        ) {\n            return 'alertdialog';\n        } else {\n            return 'alert';\n        }\n    }\n\n    /**\n     * Returns the value of the title id.\n     * ```typescript\n     *  @ViewChild(\"MyDialog\")\n     * public dialog: IgxDialogComponent;\n     * ngAfterViewInit() {\n     *     let dialogTitle = this.dialog.titleId;\n     * }\n     * ```\n     */\n    @Input()\n    public get titleId() {\n        return this._titleId;\n    }\n\n    protected destroy$ = new Subject<boolean>();\n\n    private _positionSettings: PositionSettings = {\n        openAnimation: fadeIn,\n        closeAnimation: fadeOut\n    };\n\n    private _overlayDefaultSettings: OverlaySettings;\n    private _closeOnOutsideSelect = false;\n    private _closeOnEscape = true;\n    private _isModal = true;\n    private _titleId: string;\n\n    constructor(\n        private elementRef: ElementRef,\n        @Optional() private navService: IgxNavigationService\n    ) {\n        this._titleId = IgxDialogComponent.NEXT_ID++ + '_title';\n\n        this._overlayDefaultSettings = {\n            positionStrategy: new GlobalPositionStrategy(this._positionSettings),\n            scrollStrategy: new NoOpScrollStrategy(),\n            modal: this.isModal,\n            closeOnEscape: this._closeOnEscape,\n            closeOnOutsideClick: this.closeOnOutsideSelect\n        };\n    }\n\n    public ngAfterContentInit() {\n        this.toggleRef.closing.pipe(takeUntil(this.destroy$)).subscribe((eventArgs) => this.emitCloseFromDialog(eventArgs));\n        this.toggleRef.closed.pipe(takeUntil(this.destroy$)).subscribe((eventArgs) => this.emitClosedFromDialog(eventArgs));\n        this.toggleRef.opened.pipe(takeUntil(this.destroy$)).subscribe((eventArgs) => this.emitOpenedFromDialog(eventArgs));\n    }\n\n    /**\n     * A method that opens the dialog.\n     *\n     * @memberOf {@link IgxDialogComponent}\n     * ```html\n     * <button type=\"button\" (click)=\"dialog.open() igxButton=\"contained\">Trigger Dialog</button>\n     * <igx-dialog #dialog></igx-dialog>\n     * ```\n     */\n    public open(overlaySettings: OverlaySettings = this._overlayDefaultSettings) {\n        const eventArgs: IDialogCancellableEventArgs = { dialog: this, event: null, cancel: false };\n        this.opening.emit(eventArgs);\n        if (!eventArgs.cancel) {\n            overlaySettings = { ...{}, ... this._overlayDefaultSettings, ...overlaySettings };\n            this.toggleRef.open(overlaySettings);\n            this.isOpenChange.emit(true);\n            if (!this.leftButtonLabel && !this.rightButtonLabel) {\n                this.toggleRef.element.focus();\n            }\n        }\n\n    }\n\n    /**\n     * A method that that closes the dialog.\n     *\n     *  @memberOf {@link IgxDialogComponent}\n     * ```html\n     * <button type=\"button\" (click)=\"dialog.close() igxButton=\"contained\">Trigger Dialog</button>\n     * <igx-dialog #dialog></igx-dialog>\n     * ```\n     */\n    public close() {\n        // `closing` will emit from `toggleRef.closing` subscription\n        this.toggleRef?.close();\n    }\n\n\n    /**\n     * A method that opens/closes the dialog.\n     *\n     * @memberOf {@link IgxDialogComponent}\n     * ```html\n     * <button type=\"button\" (click)=\"dialog.toggle() igxButton=\"contained\">Trigger Dialog</button>\n     * <igx-dialog #dialog></igx-dialog>\n     * ```\n     */\n    public toggle() {\n        if (this.isOpen) {\n            this.close();\n        } else {\n            this.open();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onDialogSelected(event) {\n        event.stopPropagation();\n        if (\n            this.isOpen &&\n            this.closeOnOutsideSelect &&\n            event.target.classList.contains(IgxDialogComponent.DIALOG_CLASS)\n        ) {\n            this.close();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onInternalLeftButtonSelect(event) {\n        this.leftButtonSelect.emit({ dialog: this, event });\n    }\n\n    /**\n     * @hidden\n     */\n    public onInternalRightButtonSelect(event) {\n        this.rightButtonSelect.emit({ dialog: this, event });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        if (this.navService && this.id) {\n            this.navService.add(this.id, this);\n        }\n    }\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        if (this.navService && this.id) {\n            this.navService.remove(this.id);\n        }\n    }\n\n    private emitCloseFromDialog(eventArgs) {\n        const dialogEventsArgs = { dialog: this, event: eventArgs.event, cancel: eventArgs.cancel };\n        this.closing.emit(dialogEventsArgs);\n        eventArgs.cancel = dialogEventsArgs.cancel;\n        if (!eventArgs.cancel) {\n            this.isOpenChange.emit(false);\n        }\n    }\n\n    private emitClosedFromDialog(eventArgs) {\n        this.closed.emit({ dialog: this, event: eventArgs.event });\n    }\n\n    private emitOpenedFromDialog(eventArgs) {\n        this.opened.emit({ dialog: this, event: eventArgs.event });\n    }\n}\n\nexport interface IDialogEventArgs extends IBaseEventArgs {\n    dialog: IgxDialogComponent;\n    event: Event;\n}\n\nexport interface IDialogCancellableEventArgs extends IDialogEventArgs, CancelableEventArgs { }\n","<div\n    tabindex=\"0\"\n    #dialog\n    class=\"igx-dialog\"\n    igxToggle\n    [igxFocusTrap]=\"focusTrap\"\n    (click)=\"onDialogSelected($event)\"\n>\n    <div\n        #dialogWindow\n        class=\"igx-dialog__window\"\n        [attr.role]=\"role\"\n        [attr.aria-labelledby]=\"titleId\"\n    >\n        @if (title) {\n            <div [attr.id]=\"titleId\" class=\"igx-dialog__window-title\">\n                {{ title }}\n            </div>\n        }\n        @if (!title) {\n            <ng-content select=\"igx-dialog-title,[igxDialogTitle]\"></ng-content>\n        }\n\n        <div class=\"igx-dialog__window-content\">\n            @if (message) {\n                <span class=\"igx-dialog__window-message\">\n                    {{ message }}\n                </span>\n            }\n            @if (!message) {\n                <ng-content></ng-content>\n            }\n        </div>\n\n        @if (leftButtonLabel || rightButtonLabel) {\n            <div class=\"igx-dialog__window-actions\">\n                @if (leftButtonLabel) {\n                    <button\n                        type=\"button\"\n                        [igxFocus]=\"isOpen\"\n                        [igxButton]=\"leftButtonType\"\n                        igxRipple=\"{{ leftButtonRipple }}\"\n                        (click)=\"onInternalLeftButtonSelect($event)\"\n                    >\n                        {{ leftButtonLabel }}\n                    </button>\n                }\n                @if (rightButtonLabel) {\n                    <button\n                        type=\"button\"\n                        [igxFocus]=\"isOpen\"\n                        [igxButton]=\"rightButtonType\"\n                        igxRipple=\"{{ rightButtonRipple }}\"\n                        (click)=\"onInternalRightButtonSelect($event)\"\n                        >\n                        {{ rightButtonLabel }}\n                    </button>\n                }\n            </div>\n        }\n        @if (!leftButtonLabel && !rightButtonLabel) {\n            <ng-content select=\"igx-dialog-actions,[igxDialogActions]\"></ng-content>\n        }\n    </div>\n</div>\n","import { Directive, HostBinding } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: 'igx-dialog-title,[igxDialogTitle]',\n    standalone: true\n})\nexport class IgxDialogTitleDirective {\n\n    @HostBinding('class.igx-dialog__window-title')\n    public defaultStyle = true;\n }\n\n/**\n * @hidden\n */\n@Directive({\n    selector: 'igx-dialog-actions,[igxDialogActions]',\n    standalone: true\n})\nexport class IgxDialogActionsDirective {\n\n    @HostBinding('class.igx-dialog__window-actions')\n    public defaultClass = true;\n }\n","import { IgxDialogComponent } from './dialog.component';\nimport { IgxDialogActionsDirective, IgxDialogTitleDirective } from './dialog.directives';\n\nexport * from './dialog.component';\nexport * from './dialog.directives';\n\n/* NOTE: Dialog directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_DIALOG_DIRECTIVES = [\n    IgxDialogComponent,\n    IgxDialogTitleDirective,\n    IgxDialogActionsDirective\n] as const;\n","import { IgxDropDownGroupComponent } from './drop-down-group.component';\nimport { IgxDropDownItemComponent } from './drop-down-item.component';\nimport { IgxDropDownItemNavigationDirective } from './drop-down-navigation.directive';\nimport { IgxDropDownComponent } from './drop-down.component';\n\nexport * from './drop-down.component';\nexport * from './drop-down-item.component';\nexport { ISelectionEventArgs, IDropDownNavigationDirective } from './drop-down.common';\nexport * from './drop-down-navigation.directive';\nexport * from './drop-down-group.component';\n\n/* NOTE: Drop down directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_DROP_DOWN_DIRECTIVES = [\n    IgxDropDownComponent,\n    IgxDropDownItemComponent,\n    IgxDropDownGroupComponent,\n    IgxDropDownItemNavigationDirective\n] as const;\n","import { Component, DoCheck, EventEmitter, HostBinding, Inject, Input, IterableDiffer, IterableDiffers, Output, Pipe, PipeTransform, QueryList, ViewChildren, booleanAttribute, forwardRef } from '@angular/core';\nimport { ColumnDisplayOrder } from '../common/enums';\nimport { ColumnType, GridType } from '../common/grid.interface';\nimport { IColumnToggledEventArgs } from '../common/events';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { IgxInputDirective } from '../../directives/input/input.directive';\nimport { FormsModule } from '@angular/forms';\nimport { IgxInputGroupComponent } from '../../input-group/input-group.component';\n\nlet NEXT_ID = 0;\n/**\n * Providing reference to `IgxColumnActionsComponent`:\n * ```typescript\n *  @ViewChild('columnActions', { read: IgxColumnActionsComponent })\n *  public columnActions: IgxColumnActionsComponent;\n */\n@Component({\n    selector: 'igx-column-actions',\n    templateUrl: './column-actions.component.html',\n    imports: [IgxInputGroupComponent, FormsModule, IgxInputDirective, IgxCheckboxComponent, IgxButtonDirective, IgxRippleDirective, forwardRef(() => IgxColumnActionEnabledPipe), forwardRef(() => IgxFilterActionColumnsPipe), forwardRef(() => IgxSortActionColumnsPipe)]\n})\nexport class IgxColumnActionsComponent implements DoCheck {\n\n    /**\n     * Gets/Sets the grid to provide column actions for.\n     *\n     * @example\n     * ```typescript\n     * let grid = this.columnActions.grid;\n     * ```\n     */\n    @Input()\n    public grid: GridType;\n    /**\n     * Gets/sets the indentation of columns in the column list based on their hierarchy level.\n     *\n     * @example\n     * ```\n     * <igx-column-actions [indentation]=\"15\"></igx-column-actions>\n     * ```\n     */\n    @Input()\n    public indentation = 30;\n    /**\n     * Sets/Gets the css class selector.\n     * By default the value of the `class` attribute is `\"igx-column-actions\"`.\n     * ```typescript\n     * let cssCLass =  this.columnHidingUI.cssClass;\n     * ```\n     * ```typescript\n     * this.columnHidingUI.cssClass = 'column-chooser';\n     * ```\n     */\n    @HostBinding('class')\n    public cssClass = 'igx-column-actions';\n    /**\n     * Gets/sets the max height of the columns area.\n     *\n     * @remarks\n     * The default max height is 100%.\n     * @example\n     * ```html\n     * <igx-column-actions [columnsAreaMaxHeight]=\"200px\"></igx-column-actions>\n     * ```\n     */\n    @Input()\n    public columnsAreaMaxHeight = '100%';\n    /**\n     * Shows/hides the columns filtering input from the UI.\n     *\n     * @example\n     * ```html\n     *  <igx-column-actions [hideFilter]=\"true\"></igx-column-actions>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hideFilter = false;\n    /**\n     * Gets the checkbox components representing column items currently present in the dropdown\n     *\n     * @example\n     * ```typescript\n     * let columnItems =  this.columnActions.columnItems;\n     * ```\n     */\n    @ViewChildren(IgxCheckboxComponent)\n    public columnItems: QueryList<IgxCheckboxComponent>;\n    /**\n     * Gets/sets the title of the column actions component.\n     *\n     * @example\n     * ```html\n     * <igx-column-actions [title]=\"'Pin Columns'\"></igx-column-actions>\n     * ```\n     */\n    @Input()\n    public title = '';\n\n    /**\n     * An event that is emitted after a column's checked state is changed.\n     * Provides references to the `column` and the `checked` properties as event arguments.\n     * ```html\n     *  <igx-column-actions (columnToggled)=\"columnToggled($event)\"></igx-column-actions>\n     * ```\n     */\n    @Output()\n    public columnToggled = new EventEmitter<IColumnToggledEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    public actionableColumns: ColumnType[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public filteredColumns: ColumnType[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public pipeTrigger = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public actionsDirective: IgxColumnActionsBaseDirective;\n\n    protected _differ: IterableDiffer<any> | null = null;\n\n    /**\n     * @hidden @internal\n     */\n    private _filterColumnsPrompt = '';\n\n    /**\n     * @hidden @internal\n     */\n    private _filterCriteria = '';\n\n    /**\n     * @hidden @internal\n     */\n    private _columnDisplayOrder: ColumnDisplayOrder = ColumnDisplayOrder.DisplayOrder;\n\n    /**\n     * @hidden @internal\n     */\n    private _uncheckAllText: string;\n\n    /**\n     * @hidden @internal\n     */\n    private _checkAllText: string;\n\n    /**\n     * @hidden @internal\n     */\n    private _id = `igx-column-actions-${NEXT_ID++}`;\n\n    constructor(private differs: IterableDiffers) {\n        this._differ = this.differs.find([]).create(this.trackChanges);\n    }\n\n    /**\n     * Gets the prompt that is displayed in the filter input.\n     *\n     * @example\n     * ```typescript\n     * let filterColumnsPrompt = this.columnActions.filterColumnsPrompt;\n     * ```\n     */\n    @Input()\n    public get filterColumnsPrompt(): string {\n        return this._filterColumnsPrompt;\n    }\n    /**\n     * Sets the prompt that is displayed in the filter input.\n     *\n     * @example\n     * ```html\n     * <igx-column-actions [filterColumnsPrompt]=\"'Type here to search'\"></igx-column-actions>\n     * ```\n     */\n    public set filterColumnsPrompt(value: string) {\n        this._filterColumnsPrompt = value || '';\n    }\n    /**\n     * Gets the value which filters the columns list.\n     *\n     * @example\n     * ```typescript\n     * let filterCriteria =  this.columnActions.filterCriteria;\n     * ```\n     */\n    @Input()\n    public get filterCriteria() {\n        return this._filterCriteria;\n    }\n    /**\n     * Sets the value which filters the columns list.\n     *\n     * @example\n     * ```html\n     *  <igx-column-actions [filterCriteria]=\"'ID'\"></igx-column-actions>\n     * ```\n     */\n    public set filterCriteria(value: string) {\n        value = value || '';\n        if (value !== this._filterCriteria) {\n            this._filterCriteria = value;\n            this.pipeTrigger++;\n        }\n    }\n    /**\n     * Gets the display order of the columns.\n     *\n     * @example\n     * ```typescript\n     * let columnDisplayOrder = this.columnActions.columnDisplayOrder;\n     * ```\n     */\n    @Input()\n    public get columnDisplayOrder() {\n        return this._columnDisplayOrder;\n    }\n    /**\n     * Sets the display order of the columns.\n     *\n     * @example\n     * ```typescript\n     * this.columnActions.columnDisplayOrder = ColumnDisplayOrder.Alphabetical;\n     * ```\n     */\n    public set columnDisplayOrder(value: ColumnDisplayOrder) {\n        if (value && value !== this._columnDisplayOrder) {\n            this._columnDisplayOrder = value;\n            this.pipeTrigger++;\n        }\n    }\n    /**\n     * Gets the text of the button that unchecks all columns.\n     *\n     * @remarks\n     * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n     * @example\n     * ```typescript\n     * let uncheckAllText = this.columnActions.uncheckAllText;\n     * ```\n     */\n    @Input()\n    public get uncheckAllText() {\n        return this._uncheckAllText || this.actionsDirective.uncheckAllLabel;\n    }\n    /**\n     * Sets the text of the button that unchecks all columns.\n     *\n     * @example\n     * ```html\n     * <igx-column-actions [uncheckAllText]=\"'Show All'\"></igx-column-actions>\n     * ```\n     */\n    public set uncheckAllText(value: string) {\n        this._uncheckAllText = value;\n    }\n    /**\n     * Gets the text of the button that checks all columns.\n     *\n     * @remarks\n     * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n     * @example\n     * ```typescript\n     * let uncheckAllText = this.columnActions.uncheckAllText;\n     * ```\n     */\n    @Input()\n    public get checkAllText() {\n        return this._checkAllText || this.actionsDirective.checkAllLabel;\n    }\n    /**\n     * Sets the text of the button that checks all columns.\n     *\n     * @remarks\n     * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n     * @example\n     * ```html\n     * <igx-column-actions [checkAllText]=\"'Hide All'\"></igx-column-actions>\n     * ```\n     */\n    public set checkAllText(value: string) {\n        this._checkAllText = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get checkAllDisabled(): boolean {\n        return this.actionsDirective.allUnchecked;\n\n    }\n    /**\n     * @hidden @internal\n     */\n    public get uncheckAllDisabled(): boolean {\n        return this.actionsDirective.allChecked;\n    }\n\n    /**\n     * Gets/Sets the value of the `id` attribute.\n     *\n     * @remarks\n     * If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-column-actions [id]=\"'igx-actions-1'\"></igx-column-actions>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this._id;\n    }\n    public set id(value: string) {\n        this._id = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get titleID() {\n        return this.id + '_title';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public trackChanges = (index, col) => col.field + '_' + this.actionsDirective.actionEnabledColumnsFilter(col, index, []);\n\n    /**\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        if (this._differ) {\n            const changes = this._differ.diff(this.grid?.columnList);\n            if (changes) {\n                this.pipeTrigger++;\n            }\n        }\n    }\n\n    /**\n     * Unchecks all columns and performs the appropriate action.\n     *\n     * @example\n     * ```typescript\n     * this.columnActions.uncheckAllColumns();\n     * ```\n     */\n    public uncheckAllColumns() {\n        this.actionsDirective.uncheckAll();\n    }\n\n    /**\n     * Checks all columns and performs the appropriate action.\n     *\n     * @example\n     * ```typescript\n     * this.columnActions.checkAllColumns();\n     * ```\n     */\n    public checkAllColumns() {\n        this.actionsDirective.checkAll();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleColumn(column: ColumnType) {\n        this.actionsDirective.toggleColumn(column);\n\n        this.columnToggled.emit({ column: column as any, checked: this.actionsDirective.columnChecked(column) });\n    }\n}\n\n@Pipe({\n    name: 'columnActionEnabled',\n    standalone: true\n})\nexport class IgxColumnActionEnabledPipe implements PipeTransform {\n\n    constructor(@Inject(IgxColumnActionsComponent) protected columnActions: IgxColumnActionsComponent) { }\n\n    public transform(\n        collection: ColumnType[],\n        actionFilter: (value: ColumnType, index: number, array: ColumnType[]) => boolean,\n        _pipeTrigger: number\n    ): ColumnType[] {\n        if (!collection) {\n            return collection;\n        }\n        let copy = collection.slice(0);\n        if (copy.length && copy[0].grid.hasColumnLayouts) {\n            copy = copy.filter(c => c.columnLayout);\n        }\n        if (actionFilter) {\n            copy = copy.filter(actionFilter);\n        }\n        // Preserve the actionable collection for use in the component\n        this.columnActions.actionableColumns = copy as any;\n        return copy;\n    }\n}\n\n@Pipe({\n    name: 'filterActionColumns',\n    standalone: true\n})\nexport class IgxFilterActionColumnsPipe implements PipeTransform {\n\n    constructor(@Inject(IgxColumnActionsComponent) protected columnActions: IgxColumnActionsComponent) { }\n\n    public transform(collection: ColumnType[], filterCriteria: string, _pipeTrigger: number): ColumnType[] {\n        if (!collection) {\n            return collection;\n        }\n        let copy = collection.slice(0);\n        if (filterCriteria && filterCriteria.length > 0) {\n            const filterFunc = (c) => {\n                const filterText = c.header || c.field;\n                if (!filterText) {\n                    return false;\n                }\n                return filterText.toLocaleLowerCase().indexOf(filterCriteria.toLocaleLowerCase()) >= 0 ||\n                    (c.children?.some(filterFunc) ?? false);\n            };\n            copy = collection.filter(filterFunc);\n        }\n        // Preserve the filtered collection for use in the component\n        this.columnActions.filteredColumns = copy as any;\n        return copy;\n    }\n}\n\n@Pipe({\n    name: 'sortActionColumns',\n    standalone: true\n})\nexport class IgxSortActionColumnsPipe implements PipeTransform {\n\n    public transform(collection: ColumnType[], displayOrder: ColumnDisplayOrder, _pipeTrigger: number): ColumnType[] {\n        if (displayOrder === ColumnDisplayOrder.Alphabetical) {\n            return collection.sort((a, b) => (a.header || a.field).localeCompare(b.header || b.field));\n        }\n        return collection;\n    }\n}\n","<div class=\"igx-column-actions__header\">\n    @if (title) {\n        <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\">{{ title }}</h4>\n    }\n\n    @if (!hideFilter) {\n        <igx-input-group class=\"igx-column-actions__header-input\">\n            <input igxInput\n                type=\"text\"\n                [attr.aria-describedby]='titleID'\n                [(ngModel)]=\"filterCriteria\"\n                [placeholder]=\"filterColumnsPrompt\"\n                autocomplete=\"off\" />\n        </igx-input-group>\n    }\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n    [style.max-height]=\"columnsAreaMaxHeight\">\n    @for (\n        column of $any(grid)?._columns\n        | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n        | filterActionColumns:filterCriteria:pipeTrigger\n        | sortActionColumns:columnDisplayOrder:pipeTrigger; track column\n    ) {\n        <igx-checkbox\n            class=\"igx-column-actions__columns-item\"\n            [readonly]=\"true\"\n            (click)=\"toggleColumn(column)\"\n            [checked]=\"actionsDirective.columnChecked(column)\"\n            [style.margin-left.px]=\"column.level * indentation\">\n            {{ column.header || column.field }}\n        </igx-checkbox>\n    }\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n    <button type=\"button\" igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n    <button type=\"button\" igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n","import { Directive } from '@angular/core';\nimport { ColumnType } from '../common/grid.interface';\n\n@Directive()\nexport abstract class IgxColumnActionsBaseDirective {\n\n    /** @hidden @internal */\n    public abstract actionEnabledColumnsFilter: (\n        value: ColumnType,\n        index: number,\n        array: ColumnType[]\n    ) => boolean;\n\n    /**\n     * @hidden @internal\n     */\n    public abstract get checkAllLabel(): string;\n\n    /**\n     * @hidden @internal\n     */\n    public abstract get uncheckAllLabel(): string;\n\n    /** @hidden @internal */\n    public abstract columnChecked(column: ColumnType): boolean;\n\n    /** @hidden @internal */\n    public abstract toggleColumn(column: ColumnType): void;\n\n    /** @hidden @internal */\n    public abstract uncheckAll(): void;\n\n    /** @hidden @internal */\n    public abstract checkAll(): void;\n\n    /** @hidden @internal */\n    public abstract get allChecked(): boolean;\n\n    /** @hidden @internal */\n    public abstract get allUnchecked(): boolean;\n}\n","import { Directive, Inject } from '@angular/core';\nimport { ColumnType } from '../common/grid.interface';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxColumnActionsComponent } from './column-actions.component';\n\n@Directive({\n    selector: '[igxColumnHiding]',\n    standalone: true\n})\nexport class IgxColumnHidingDirective extends IgxColumnActionsBaseDirective {\n\n    constructor(\n        @Inject(IgxColumnActionsComponent) protected columnActions: IgxColumnActionsComponent\n    ) {\n        super();\n        columnActions.actionsDirective = this;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get checkAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_hiding_check_all_label ?? 'Show All';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get uncheckAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_hiding_uncheck_all_label ?? 'Hide All';\n    }\n    /**\n     * @hidden @internal\n     */\n    public checkAll() {\n        this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(false));\n\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public uncheckAll() {\n        this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(true));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public actionEnabledColumnsFilter = c => !c.disableHiding;\n\n    /**\n     * @hidden @internal\n     */\n    public columnChecked(column: ColumnType): boolean {\n        return !column.hidden;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleColumn(column: ColumnType) {\n        column.toggleVisibility();\n    }\n\n    public get allChecked() {\n        return this.columnActions.filteredColumns.every(col => !this.columnChecked(col));\n    }\n\n    public get allUnchecked() {\n        return this.columnActions.filteredColumns.every(col => this.columnChecked(col));\n    }\n}\n","import { Directive, Inject } from '@angular/core';\nimport { ColumnType } from '../common/grid.interface';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxColumnActionsComponent } from './column-actions.component';\n\n@Directive({\n    selector: '[igxColumnPinning]',\n    standalone: true\n})\nexport class IgxColumnPinningDirective extends IgxColumnActionsBaseDirective {\n\n    constructor(\n        @Inject(IgxColumnActionsComponent) protected columnActions: IgxColumnActionsComponent\n    ) {\n        super();\n        columnActions.actionsDirective = this;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get checkAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_pinning_check_all_label ?? 'Pin All';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get uncheckAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_pinning_uncheck_all_label ?? 'Unpin All';\n    }\n    /**\n     * @hidden @internal\n     */\n    public checkAll() {\n        this.columnActions.filteredColumns.forEach(c => c.pinned = true);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public uncheckAll() {\n        this.columnActions.filteredColumns.forEach(c => c.pinned = false);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public actionEnabledColumnsFilter = (c: ColumnType) => !c.disablePinning && !c.level;\n\n    /**\n     * @hidden @internal\n     */\n    public columnChecked(column: ColumnType): boolean {\n        return column.pinned;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleColumn(column: ColumnType) {\n        column.pinned = !column.pinned;\n    }\n\n    public get allUnchecked() {\n        return !this.columnActions.filteredColumns.some(col => !this.columnChecked(col));\n    }\n\n    public get allChecked() {\n        return !this.columnActions.filteredColumns.some(col => this.columnChecked(col));\n    }\n}\n","// import { IgxColumnActionsComponent } from './column-actions.component';\n// import { IgxColumnHidingDirective } from './column-hiding.directive';\n// import { IgxColumnPinningDirective } from './column-pinning.directive';\n\nexport { IgxColumnActionsComponent } from './column-actions.component';\nexport { IgxColumnHidingDirective } from './column-hiding.directive';\nexport { IgxColumnPinningDirective } from './column-pinning.directive';\nexport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\n\n/* NOTE: Grid column actions directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_COLUMN_ACTIONS_DIRECTIVES = [\n//     IgxColumnActionsComponent,\n//     IgxColumnHidingDirective,\n//     IgxColumnPinningDirective\n// ] as const;\n","import { Directive } from '@angular/core';\nimport { RequiredValidator, NG_VALIDATORS, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator } from '@angular/forms';\n\n@Directive({\n     \n    selector: 'igx-column[required]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnRequiredValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnRequiredValidatorDirective extends RequiredValidator {\n}\n\n@Directive({\n     \n    selector: 'igx-column[min]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMinValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMinValidatorDirective extends MinValidator { }\n\n\n@Directive({\n     \n    selector: 'igx-column[max]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMaxValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMaxValidatorDirective extends MaxValidator { }\n\n\n@Directive({\n     \n    selector: 'igx-column[email]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnEmailValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnEmailValidatorDirective extends EmailValidator { }\n\n\n@Directive({\n     \n    selector: 'igx-column[minlength]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMinLengthValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMinLengthValidatorDirective extends MinLengthValidator { }\n\n@Directive({\n     \n    selector: 'igx-column[maxlength]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMaxLengthValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMaxLengthValidatorDirective extends MaxLengthValidator {\n}\n\n@Directive({\n     \n    selector: 'igx-column[pattern]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumPatternValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumPatternValidatorDirective extends PatternValidator {\n}\n","import { SimpleChanges, SimpleChange } from '@angular/core';\n\n/**\n * @hidden\n */\nexport function WatchChanges(): PropertyDecorator {\n    return (target: any, key: string, propDesc?: PropertyDescriptor) => {\n        const privateKey = '_' + key.toString();\n        propDesc = propDesc || {\n            configurable: true,\n            enumerable: true,\n        };\n        propDesc.get = propDesc.get || (function (this: any) {\n            return this[privateKey];\n        });\n        const originalSetter = propDesc.set || (function (this: any, val: any) {\n            this[privateKey] = val;\n        });\n\n        propDesc.set = function (this: any, val: any) {\n            const init = this._init;\n            const oldValue = this[key];\n            if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n                originalSetter.call(this, val);\n                if (this.ngOnChanges && !init) {\n                    // in case wacthed prop changes trigger ngOnChanges manually\n                    const changes: SimpleChanges = {\n                        [key]: new SimpleChange(oldValue, val, false)\n                    };\n                    this.ngOnChanges(changes);\n                }\n            }\n        };\n        return propDesc;\n    };\n}\n\nexport function WatchColumnChanges(): PropertyDecorator {\n    return (target: any, key: string, propDesc?: PropertyDescriptor) => {\n        const privateKey = '_' + key.toString();\n        propDesc = propDesc || {\n            configurable: true,\n            enumerable: true,\n        };\n        propDesc.get = propDesc.get || (function (this: any) {\n            return this[privateKey];\n        });\n        const originalSetter = propDesc.set || (function (this: any, val: any) {\n            this[privateKey] = val;\n        });\n\n        propDesc.set = function (this: any, val: any) {\n            const oldValue = this[key];\n            originalSetter.call(this, val);\n            if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n                if (this.columnChange) {\n                    this.columnChange.emit();\n                }\n            }\n        };\n        return propDesc;\n    };\n}\n\nexport function notifyChanges(repaint = false) {\n    return (_: any, key: string, propDesc?: PropertyDescriptor) => {\n\n        const privateKey = `__${key}`;\n\n        propDesc = propDesc || {\n            enumerable: true,\n            configurable: true\n        };\n\n\n        const originalSetter = propDesc ? propDesc.set : null;\n        propDesc.get = propDesc.get || (function (this) {\n            return this[privateKey];\n        });\n\n        propDesc.set = function (this, newValue) {\n            if (originalSetter) {\n                originalSetter.call(this, newValue);\n                if (this.grid) {\n                    this.grid.notifyChanges(repaint && this.type !== 'pivot');\n                }\n            } else {\n                if (newValue === this[key]) {\n                    return;\n                }\n                this[privateKey] = newValue;\n                if (this.grid) {\n                    this.grid.notifyChanges(repaint && this.type !== 'pivot');\n                }\n            }\n        };\n        return propDesc as any;\n    };\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { IgxCellTemplateContext, IgxColumnTemplateContext, IgxSummaryTemplateContext } from '../common/grid.interface';\n\n@Directive({\n    selector: '[igxFilterCellTemplate]',\n    standalone: true\n})\nexport class IgxFilterCellTemplateDirective {\n    constructor(public template: TemplateRef<IgxColumnTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxFilterCellTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxCell]',\n    standalone: true\n})\nexport class IgxCellTemplateDirective {\n    constructor(public template: TemplateRef<IgxCellTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxCellTemplateDirective,\n        context: unknown): context is IgxCellTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxCellValidationError]',\n    standalone: true\n})\nexport class IgxCellValidationErrorDirective {\n    constructor(public template: TemplateRef<IgxCellTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxCellValidationErrorDirective,\n        context: unknown): context is IgxCellTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxHeader]',\n    standalone: true\n})\nexport class IgxCellHeaderTemplateDirective {\n    constructor(public template: TemplateRef<IgxColumnTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxCellHeaderTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxFooter]',\n    standalone: true\n})\nexport class IgxCellFooterTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({\n    selector: '[igxCellEditor]',\n    standalone: true\n})\nexport class IgxCellEditorTemplateDirective {\n    constructor(public template: TemplateRef<IgxCellTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxCellEditorTemplateDirective,\n        context: unknown): context is IgxCellTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxCollapsibleIndicator]',\n    standalone: true\n})\nexport class IgxCollapsibleIndicatorTemplateDirective {\n    constructor(public template: TemplateRef<IgxColumnTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxCollapsibleIndicatorTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxSummary]',\n    standalone: true\n})\nexport class IgxSummaryTemplateDirective {\n    constructor(public template: TemplateRef<IgxSummaryTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxSummaryTemplateDirective,\n        context: unknown): context is IgxSummaryTemplateContext {\n        return true;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ColumnType } from '../common/grid.interface';\n\n/* mustCoerceToInt */\n/**\n * This enumeration is used to configure whether the drop position is set before or after\n * the target.\n */\nexport enum DropPosition {\n    BeforeDropTarget,\n    AfterDropTarget\n}\n\n\n/**\n * @hidden\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class IgxColumnMovingService {\n    public cancelDrop: boolean;\n    public icon: HTMLElement;\n    public column: ColumnType;\n}\n","import { CellType, ColumnType, GridType, IGridValidationState, RowType, ValidationStatus } from './common/grid.interface';\nimport { ISelectionNode } from './common/types';\nimport { resolveNestedPath } from '../core/utils';\n\nexport class IgxGridCell implements CellType {\n\n    /**\n     * Returns the grid containing the cell.\n     *\n     * @memberof IgxGridCell\n     */\n    public grid: GridType;\n    private _row: RowType;\n    private _rowIndex: number;\n    private _column: ColumnType;\n    private _columnField: string;\n\n    /**\n     * @hidden\n     */\n    constructor(\n        grid: GridType,\n        row: number | RowType,\n        column: ColumnType) {\n        this.grid = grid;\n        if (typeof row === 'number') {\n            this._rowIndex = row;\n        } else {\n            this._row = row;\n            this._rowIndex = row.index;\n        }\n        this._column = column;\n    }\n\n    /**\n     * Returns the row containing the cell.\n     * ```typescript\n     * let row = this.cell.row;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get row(): RowType {\n        return this._row || this.grid.createRow(this._rowIndex);\n    }\n\n    /**\n     * Returns the column of the cell.\n     * ```typescript\n     * let column = this.cell.column;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get column(): ColumnType {\n        return this._column;\n    }\n\n    /**\n     * Gets the current edit value while a cell is in edit mode.\n     * ```typescript\n     * let editValue = this.cell.editValue;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get editValue(): any {\n        if (this.isCellInEditMode()) {\n            return this.grid.crudService.cell.editValue;\n        }\n    }\n\n    /**\n     * Sets the current edit value while a cell is in edit mode.\n     * Only for cell editing mode.\n     * ```typescript\n     * this.cell.editValue = value;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public set editValue(value: any) {\n        if (this.isCellInEditMode()) {\n            this.grid.crudService.cell.editValue = value;\n        }\n    }\n\n    /**\n     * Gets the validation status and errors, if any.\n     * ```typescript\n     * let validation = this.cell.validation;\n     * let errors = validation.errors;\n     * ```\n     */\n\n    public get validation(): IGridValidationState {\n        const form = this.grid.validation.getFormControl(this.row.key, this.column.field);\n        return { status: form?.status as ValidationStatus || 'VALID', errors: form?.errors } as const;\n    }\n\n    /**\n     * Returns whether the cell is editable..\n     *\n     * @memberof IgxGridCell\n     */\n    public get editable(): boolean {\n        return this.column.editable && !this.row?.disabled;\n    }\n\n    /**\n     * Gets the width of the cell.\n     * ```typescript\n     * let cellWidth = this.cell.width;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get width(): string {\n        return this.column.width;\n    }\n\n    /**\n     * Returns the cell value.\n     *\n     * @memberof IgxGridCell\n     */\n    public get value(): any {\n        // will return undefined for a column layout, because getCellByColumnVisibleIndex may return the column layout at that index.\n        // getCellByColumnVisibleIndex is deprecated and will be removed in future version\n        return this.column.field ?\n            this.column.hasNestedPath ? resolveNestedPath(this.row?.data, this.column.field) : this.row?.data[this.column.field]\n            : undefined;\n    }\n\n    /**\n     * Updates the cell value.\n     *\n     * @memberof IgxGridCell\n     */\n    public set value(val: any) {\n        this.update(val);\n    }\n\n    /**\n     * Gets the cell id.\n     * A cell in the grid is identified by:\n     * - rowID - primaryKey data value or the whole rowData, if the primaryKey is omitted.\n     * - rowIndex - the row index\n     * - columnID - column index\n     *\n     * ```typescript\n     * let cellID = cell.id;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get id(): any {\n        const primaryKey = this.grid.primaryKey;\n        const rowID = primaryKey ? this.row?.data[primaryKey] : this.row?.data;\n        return { rowID, columnID: this.column.index, rowIndex: this._rowIndex || this.row?.index };\n    }\n\n    /**\n     * Returns if the row is currently in edit mode.\n     *\n     * @memberof IgxGridCell\n     */\n    public get editMode(): boolean {\n        return this.isCellInEditMode();\n    }\n\n    /**\n     * Starts/ends edit mode for the cell.\n     *\n     * ```typescript\n     * cell.editMode  = !cell.editMode;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public set editMode(value: boolean) {\n        const isInEditMode = this.isCellInEditMode();\n        if (!this.row || this.row?.deleted || isInEditMode === value) {\n            return;\n        }\n        if (this.editable && value) {\n            this.endEdit();\n            // TODO possibly define similar method in gridAPI, which does not emit event\n            this.grid.crudService.enterEditMode(this);\n        } else {\n            this.grid.crudService.endCellEdit();\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Gets whether the cell is selected.\n     * ```typescript\n     * let isSelected = this.cell.selected;\n     * ```\n     *\n     *\n     * @memberof IgxGridCell\n     */\n    public get selected(): boolean {\n        return this.grid.selectionService.selected(this.selectionNode);\n    }\n\n    /**\n     * Selects/deselects the cell.\n     * ```typescript\n     * this.cell.selected = true.\n     * ```\n     *\n     *\n     * @memberof IgxGridCell\n     */\n    public set selected(val: boolean) {\n        const node = this.selectionNode;\n        if (val) {\n            this.grid.selectionService.add(node);\n        } else {\n            this.grid.selectionService.remove(node);\n        }\n        this.grid.notifyChanges();\n    }\n\n    public get active() {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === this.row?.index && node.column === this.column.visibleIndex : false;\n    }\n\n\n    /**\n     * Updates the cell value.\n     *\n     * ```typescript\n     * cell.update(newValue);\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public update(val: any): void {\n        if (this.row?.deleted) {\n            return;\n        }\n\n        this.endEdit();\n\n        const cell = this.isCellInEditMode() ? this.grid.crudService.cell : this.grid.crudService.createCell(this);\n        cell.editValue = val;\n        this.grid.gridAPI.update_cell(cell);\n        this.grid.crudService.endCellEdit();\n        this.grid.notifyChanges();\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.row?.index,\n            column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.column.visibleIndex,\n            layout: this.column.columnLayoutChild ? {\n                rowStart: this.column.rowStart,\n                colStart: this.column.colStart,\n                rowEnd: this.column.rowEnd,\n                colEnd: this.column.colEnd,\n                columnVisibleIndex: this.column.visibleIndex\n            } : null\n        };\n    }\n\n    private isCellInEditMode(): boolean {\n        if (this.grid.crudService.cellInEditMode) {\n            const cellInEditMode = this.grid.crudService.cell.id;\n            const isCurrentCell = cellInEditMode.rowID === this.id.rowID &&\n                cellInEditMode.rowIndex === this.id.rowIndex &&\n                cellInEditMode.columnID === this.id.columnID;\n            return isCurrentCell;\n        }\n        return false;\n    }\n\n    private endEdit(): void {\n        if (!this.isCellInEditMode()) {\n            this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n            this.grid.crudService.endCellEdit();\n        }\n    }\n}\n","import { Subject } from 'rxjs';\nimport { isEqual } from 'lodash-es';\nimport {\n    AfterContentInit,\n    ChangeDetectorRef,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    ContentChildren,\n    Input,\n    QueryList,\n    TemplateRef,\n    Output,\n    EventEmitter,\n    OnDestroy,\n    Inject,\n    Optional,\n    Self,\n    booleanAttribute,\n} from '@angular/core';\nimport { notifyChanges } from '../watch-changes';\nimport { WatchColumnChanges } from '../watch-changes';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport {\n    IgxFilteringOperand,\n    IgxBooleanFilteringOperand,\n    IgxNumberFilteringOperand,\n    IgxDateFilteringOperand,\n    IgxStringFilteringOperand,\n    IgxDateTimeFilteringOperand,\n    IgxTimeFilteringOperand\n} from '../../data-operations/filtering-condition';\nimport { ISortingStrategy, DefaultSortingStrategy } from '../../data-operations/sorting-strategy';\nimport { IgxRowDirective } from '../row.directive';\nimport { FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { CellType, ColumnType, GridType, IgxCellTemplateContext, IgxColumnTemplateContext, IgxSummaryTemplateContext, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxGridHeaderComponent } from '../headers/grid-header.component';\nimport { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';\nimport { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';\nimport {\n    IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand,\n    IgxSummaryResult, IgxTimeSummaryOperand\n} from '../summaries/grid-summary';\nimport {\n    IgxCellTemplateDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellValidationErrorDirective\n} from './templates.directive';\nimport { MRLResizeColumnInfo, MRLColumnSizeInfo, IColumnPipeArgs, IColumnEditorOptions } from './interfaces';\nimport { DropPosition } from '../moving/moving.service';\nimport { IColumnVisibilityChangingEventArgs, IPinColumnCancellableEventArgs, IPinColumnEventArgs } from '../common/events';\nimport { isConstructor, PlatformUtil } from '../../core/utils';\nimport { IgxGridCell } from '../grid-public-cell';\nimport { NG_VALIDATORS, Validator } from '@angular/forms';\nimport { Size } from '../common/enums';\nimport { ExpressionsTreeUtil } from '../../data-operations/expressions-tree-util';\n\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_DIGITS_INFO = '1.0-3';\n\n/* blazorElement */\n/* contentParent: ColumnGroup */\n/* wcElementTag: igc-column */\n/* additionalIdentifier: Field */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Column** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid#columns-configuration)\n *\n * The Ignite UI Column is used within an `igx-grid` element to define what data the column will show. Features such as sorting,\n * filtering & editing are enabled at the column level.  You can also provide a template containing custom content inside\n * the column using `ng-template` which will be used for all cells within the column.\n *\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxPivotGridComponent, IgxRowIslandComponent, IgxColumnGroupComponent, IgxColumnLayoutComponent\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-column',\n    template: ``,\n    standalone: true\n})\nexport class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnType {\n    /**\n     * Sets/gets the `field` value.\n     * ```typescript\n     * let columnField = this.column.field;\n     * ```\n     * ```html\n     * <igx-column [field] = \"'ID'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public set field(value: string) {\n        this._field = value;\n        this.hasNestedPath = value?.includes('.');\n    }\n    public get field(): string {\n        return this._field;\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public validators: Validator[] = [];\n\n    /**\n     * Sets/gets the `header` value.\n     * ```typescript\n     * let columnHeader = this.column.header;\n     * ```\n     * ```html\n     * <igx-column [header] = \"'ID'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public header = '';\n    /**\n     * Sets/gets the `title` value.\n     * ```typescript\n     * let title = this.column.title;\n     * ```\n     * ```html\n     * <igx-column [title] = \"'Some column tooltip'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public title = '';\n    /**\n     * Sets/gets whether the column is sortable.\n     * Default value is `false`.\n     * ```typescript\n     * let isSortable = this.column.sortable;\n     * ```\n     * ```html\n     * <igx-column [sortable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public sortable = false;\n    /**\n     * Returns if the column is selectable.\n     * ```typescript\n     * let columnSelectable = this.column.selectable;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input()\n    public get selectable(): boolean {\n        return this._selectable;\n    }\n\n    /**\n     * Sets if the column is selectable.\n     * Default value is `true`.\n     * ```html\n     * <igx-column [selectable] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set selectable(value: boolean) {\n        this._selectable = value;\n    }\n\n    /**\n     * Sets/gets whether the column is groupable.\n     * Default value is `false`.\n     * ```typescript\n     * let isGroupable = this.column.groupable;\n     * ```\n     * ```html\n     * <igx-column [groupable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get groupable(): boolean {\n        return this._groupable;\n    }\n    public set groupable(value: boolean) {\n        this._groupable = value;\n        this.grid.groupablePipeTrigger++;\n    }\n    /**\n     * Gets whether the column is editable.\n     * Default value is `false`.\n     * ```typescript\n     * let isEditable = this.column.editable;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get editable(): boolean {\n        // Updating the primary key when grid has transactions (incl. row edit)\n        // should not be allowed, as that can corrupt transaction state.\n        const rowEditable = this.grid && this.grid.rowEditable;\n        const hasTransactions = this.grid && this.grid.transactions.enabled;\n\n        if (this.isPrimaryColumn && (rowEditable || hasTransactions)) {\n            return false;\n        }\n\n        if (this._editable !== undefined) {\n            return this._editable;\n        } else {\n            return rowEditable;\n        }\n    }\n    /**\n     * Sets whether the column is editable.\n     * ```typescript\n     * this.column.editable = true;\n     * ```\n     * ```html\n     * <igx-column [editable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set editable(editable: boolean) {\n        this._editable = editable;\n    }\n    /**\n     * Sets/gets whether the column is filterable.\n     * Default value is `true`.\n     * ```typescript\n     * let isFilterable = this.column.filterable;\n     * ```\n     * ```html\n     * <igx-column [filterable] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public filterable = true;\n    /**\n     * Sets/gets whether the column is resizable.\n     * Default value is `false`.\n     * ```typescript\n     * let isResizable = this.column.resizable;\n     * ```\n     * ```html\n     * <igx-column [resizable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public resizable = false;\n\n    /**\n     * Sets/gets whether the column header is included in autosize logic.\n     * Useful when template for a column header is sized based on parent, for example a default `div`.\n     * Default value is `false`.\n     * ```typescript\n     * let isResizable = this.column.resizable;\n     * ```\n     * ```html\n     * <igx-column [resizable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public autosizeHeader = true;\n\n    /**\n     * Gets a value indicating whether the summary for the column is enabled.\n     * ```typescript\n     * let hasSummary = this.column.hasSummary;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get hasSummary() {\n        return this._hasSummary;\n    }\n    /**\n     * Sets a value indicating whether the summary for the column is enabled.\n     * Default value is `false`.\n     * ```html\n     * <igx-column [hasSummary] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set hasSummary(value) {\n        this._hasSummary = value;\n\n        if (this.grid) {\n            this.grid.summaryService.resetSummaryHeight();\n        }\n    }\n    /**\n     * Gets whether the column is hidden.\n     * ```typescript\n     * let isHidden = this.column.hidden;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get hidden(): boolean {\n        return this._hidden;\n    }\n    /**\n     * Sets the column hidden property.\n     * Default value is `false`.\n     * ```html\n     * <igx-column [hidden] = \"true\"></igx-column>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-column [(hidden)] = \"model.isHidden\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set hidden(value: boolean) {\n        if (this._hidden !== value) {\n            this._hidden = value;\n            this.hiddenChange.emit(this._hidden);\n            if (this.columnLayoutChild && this.parent.hidden !== value) {\n                this.parent.hidden = value;\n                return;\n            }\n            if (this.grid) {\n                this.grid.crudService.endEdit(false);\n                this.grid.summaryService.resetSummaryHeight();\n                this.grid.filteringService.refreshExpressions();\n                this.grid.filteringService.hideFilteringRowOnColumnVisibilityChange(this);\n                this.grid.notifyChanges();\n            }\n        }\n    }\n\n    /**\n     * Returns if the column is selected.\n     * ```typescript\n     * let isSelected = this.column.selected;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get selected(): boolean {\n        return this.grid.selectionService.isColumnSelected(this.field);\n    }\n\n    /**\n     * Select/deselect a column.\n     * Default value is `false`.\n     * ```typescript\n     * this.column.selected = true;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set selected(value: boolean) {\n        if (this.selectable && value !== this.selected) {\n            if (value) {\n                this.grid.selectionService.selectColumnsWithNoEvent([this.field]);\n            } else {\n                this.grid.selectionService.deselectColumnsWithNoEvent([this.field]);\n            }\n            this.grid.notifyChanges();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public hiddenChange = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @Output()\n    public expandedChange = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @Output()\n    public collapsibleChange = new EventEmitter<boolean>();\n    /** @hidden */\n    @Output()\n    public visibleWhenCollapsedChange = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @Output()\n    public columnChange = new EventEmitter<void>();\n\n    /**\n     * Gets whether the hiding is disabled.\n     * ```typescript\n     * let isHidingDisabled =  this.column.disableHiding;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public disableHiding = false;\n    /**\n     * Gets whether the pinning is disabled.\n     * ```typescript\n     * let isPinningDisabled =  this.column.disablePinning;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public disablePinning = false;\n\n    /**\n     * Gets the `width` of the column.\n     * ```typescript\n     * let columnWidth = this.column.width;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input()\n    public get width(): string {\n        const isAutoWidth = this._width && typeof this._width === 'string' && this._width === 'auto';\n        if (isAutoWidth) {\n            if (!this.autoSize) {\n                return 'fit-content';\n            } else {\n                return this.autoSize + 'px';\n            }\n\n        }\n        return this.widthSetByUser ? this._width : this.defaultWidth;\n    }\n\n    /**\n     * Sets the `width` of the column.\n     * ```html\n     * <igx-column [width] = \"'25%'\"></igx-column>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-column [(width)]=\"model.columns[0].width\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set width(value: string) {\n        if (value) {\n            this._calcWidth = null;\n            this.calcPixelWidth = NaN;\n            this.widthSetByUser = true;\n            // width could be passed as number from the template\n            // host bindings are not px affixed so we need to ensure we affix simple number strings\n            if (typeof (value) === 'number' || value.match(/^[0-9]*$/)) {\n                value = value + 'px';\n            }\n            if (value === 'fit-content') {\n                value = 'auto';\n            }\n            this._width = value;\n            if (this.grid) {\n                this.cacheCalcWidth();\n            }\n            this.widthChange.emit(this._width);\n        }\n    }\n\n    /** @hidden @internal **/\n    public autoSize: number;\n\n    /**\n     * Sets/gets the maximum `width` of the column.\n     * ```typescript\n     * let columnMaxWidth = this.column.width;\n     * ```\n     * ```html\n     * <igx-column [maxWidth] = \"'150px'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input()\n    public maxWidth: string;\n\n    /**\n     * Sets/gets the class selector of the column header.\n     * ```typescript\n     * let columnHeaderClass = this.column.headerClasses;\n     * ```\n     * ```html\n     * <igx-column [headerClasses] = \"'column-header'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerClasses = '';\n\n    /**\n     * Sets conditional style properties on the column header.\n     * Similar to `ngStyle` it accepts an object literal where the keys are\n     * the style properties and the value is the expression to be evaluated.\n     * ```typescript\n     * styles = {\n     *  background: 'royalblue',\n     *  color: (column) => column.pinned ? 'red': 'inherit'\n     * }\n     * ```\n     * ```html\n     * <igx-column [headerStyles]=\"styles\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerStyles = null;\n\n    /**\n     * Sets/gets the class selector of the column group header.\n     * ```typescript\n     * let columnHeaderClass = this.column.headerGroupClasses;\n     * ```\n     * ```html\n     * <igx-column [headerGroupClasses] = \"'column-group-header'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerGroupClasses = '';\n\n    /**\n     * Sets conditional style properties on the column header group wrapper.\n     * Similar to `ngStyle` it accepts an object literal where the keys are\n     * the style properties and the value is the expression to be evaluated.\n     * ```typescript\n     * styles = {\n     *  background: 'royalblue',\n     *  color: (column) => column.pinned ? 'red': 'inherit'\n     * }\n     * ```\n     * ```html\n     * <igx-column [headerGroupStyles]=\"styles\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerGroupStyles = null;\n\n    /* treatAsRef */\n    /**\n     * Sets a conditional class selector of the column cells.\n     * Accepts an object literal, containing key-value pairs,\n     * where the key is the name of the CSS class, while the\n     * value is either a callback function that returns a boolean,\n     * or boolean, like so:\n     * ```typescript\n     * callback = (rowData, columnKey, cellValue, rowIndex) => { return rowData[columnKey] > 6; }\n     * cellClasses = { 'className' : this.callback };\n     * ```\n     * ```html\n     * <igx-column [cellClasses] = \"cellClasses\"></igx-column>\n     * <igx-column [cellClasses] = \"{'class1' : true }\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public cellClasses: any;\n\n    /* treatAsRef */\n    /**\n     * Sets conditional style properties on the column cells.\n     * Similar to `ngStyle` it accepts an object literal where the keys are\n     * the style properties and the value is the expression to be evaluated.\n     * As with `cellClasses` it accepts a callback function.\n     * ```typescript\n     * styles = {\n     *  background: 'royalblue',\n     *  color: (rowData, columnKey, cellValue, rowIndex) => value.startsWith('Important') ? 'red': 'inherit'\n     * }\n     * ```\n     * ```html\n     * <igx-column [cellStyles]=\"styles\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public cellStyles = null;\n\n    /* blazorAlternateType: CellValueFormatterEventHandler */\n    /* blazorOnlyScript */\n    /**\n     * Applies display format to cell values in the column. Does not modify the underlying data.\n     *\n     * @remarks\n     * Note: As the formatter is used in places like the Excel style filtering dialog, in certain\n     * scenarios (remote filtering for example), the row data argument can be `undefined`.\n     *\n     *\n     * In this example, we check to see if the column name is Salary, and then provide a method as the column formatter\n     * to format the value into a currency string.\n     *\n     * @example\n     * ```typescript\n     * columnInit(column: IgxColumnComponent) {\n     *   if (column.field == \"Salary\") {\n     *     column.formatter = (salary => this.format(salary));\n     *   }\n     * }\n     *\n     * format(value: number) : string {\n     *   return formatCurrency(value, \"en-us\", \"$\");\n     * }\n     * ```\n     *\n     * @example\n     * ```typescript\n     * const column = this.grid.getColumnByName('Address');\n     * const addressFormatter = (address: string, rowData: any) => data.privacyEnabled ? 'unknown' : address;\n     * column.formatter = addressFormatter;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public formatter: (value: any, rowData?: any) => any;\n\n    /* blazorAlternateType: SummaryValueFormatterEventHandler */\n    /* blazorOnlyScript */\n    /* forceCastDelegate */\n    /**\n     * The summaryFormatter is used to format the display of the column summaries.\n     *\n     * In this example, we check to see if the column name is OrderDate, and then provide a method as the summaryFormatter\n     * to change the locale for the dates to 'fr-FR'. The summaries with the count key are skipped so they are displayed as numbers.\n     *\n     * ```typescript\n     * columnInit(column: IgxColumnComponent) {\n     *   if (column.field == \"OrderDate\") {\n     *     column.summaryFormatter = this.summaryFormat;\n     *   }\n     * }\n     *\n     * summaryFormat(summary: IgxSummaryResult, summaryOperand: IgxSummaryOperand): string {\n     *   const result = summary.summaryResult;\n     *   if(summaryResult.key !== 'count' && result !== null && result !== undefined) {\n     *      const pipe = new DatePipe('fr-FR');\n     *      return pipe.transform(result,'mediumDate');\n     *   }\n     *   return result;\n     * }\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public summaryFormatter: (summary: IgxSummaryResult, summaryOperand: IgxSummaryOperand) => any;\n\n    /**\n     * Sets/gets whether the column filtering should be case sensitive.\n     * Default value is `true`.\n     * ```typescript\n     * let filteringIgnoreCase = this.column.filteringIgnoreCase;\n     * ```\n     * ```html\n     * <igx-column [filteringIgnoreCase] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public filteringIgnoreCase = true;\n    /**\n     * Sets/gets whether the column sorting should be case sensitive.\n     * Default value is `true`.\n     * ```typescript\n     * let sortingIgnoreCase = this.column.sortingIgnoreCase;\n     * ```\n     * ```html\n     * <igx-column [sortingIgnoreCase] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public sortingIgnoreCase = true;\n    /**\n     * Sets/gets whether the column is `searchable`.\n     * Default value is `true`.\n     * ```typescript\n     * let isSearchable =  this.column.searchable';\n     * ```\n     * ```html\n     *  <igx-column [searchable] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public searchable = true;\n    /**\n     * Sets/gets the data type of the column values.\n     * Default value is `string`.\n     * ```typescript\n     * let columnDataType = this.column.dataType;\n     * ```\n     * ```html\n     * <igx-column [dataType] = \"'number'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public dataType: GridColumnDataType = GridColumnDataType.String;\n\n    /** @hidden */\n    @Input()\n    public collapsibleIndicatorTemplate: TemplateRef<IgxColumnTemplateContext>;\n\n    /**\n     * Row index where the current field should end.\n     * The amount of rows between rowStart and rowEnd will determine the amount of spanning rows to that field\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [rowEnd]=\"2\" [rowStart]=\"1\" [colStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowEnd: number;\n\n    /**\n     * Column index where the current field should end.\n     * The amount of columns between colStart and colEnd will determine the amount of spanning columns to that field\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [colEnd]=\"3\" [rowStart]=\"1\" [colStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public colEnd: number;\n\n    /**\n     * Row index from which the field is starting.\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [rowStart]=\"1\" [colStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowStart: number;\n\n    /**\n     * Column index from which the field is starting.\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [colStart]=\"1\" [rowStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public colStart: number;\n\n    /**\n     * Sets/gets custom properties provided in additional template context.\n     *\n     * ```html\n     * <igx-column [additionalTemplateContext]=\"contextObject\">\n     *   <ng-template igxCell let-cell=\"cell\" let-props=\"additionalTemplateContext\">\n     *      {{ props }}\n     *   </ng-template>\n     * </igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public additionalTemplateContext: any;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public widthChange = new EventEmitter<string>();\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public pinnedChange = new EventEmitter<boolean>();\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxFilterCellTemplateDirective, { read: IgxFilterCellTemplateDirective })\n    public filterCellTemplateDirective: IgxFilterCellTemplateDirective;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxSummaryTemplateDirective, { read: IgxSummaryTemplateDirective })\n    protected summaryTemplateDirective: IgxSummaryTemplateDirective;\n    /**\n     * @hidden\n     * @see {@link bodyTemplate}\n     */\n    @ContentChild(IgxCellTemplateDirective, { read: IgxCellTemplateDirective })\n    protected cellTemplate: IgxCellTemplateDirective;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxCellValidationErrorDirective, { read: IgxCellValidationErrorDirective })\n    protected cellValidationErrorTemplate: IgxCellValidationErrorDirective;\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxCellHeaderTemplateDirective, { read: IgxCellHeaderTemplateDirective, descendants: false })\n    protected headTemplate: QueryList<IgxCellHeaderTemplateDirective>;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxCellEditorTemplateDirective, { read: IgxCellEditorTemplateDirective })\n    protected editorTemplate: IgxCellEditorTemplateDirective;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxCollapsibleIndicatorTemplateDirective, { read: IgxCollapsibleIndicatorTemplateDirective, static: false })\n    protected collapseIndicatorTemplate: IgxCollapsibleIndicatorTemplateDirective;\n    /**\n     * @hidden\n     */\n    public get calcWidth(): any {\n        return this.getCalcWidth();\n    }\n\n    /** @hidden @internal **/\n    public calcPixelWidth: number;\n\n    /**\n     * @hidden\n     */\n    public get maxWidthPx() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this.maxWidth) / 100 * gridAvailableSize : parseFloat(this.maxWidth);\n    }\n\n    /**\n     * @hidden\n     */\n    public get maxWidthPercent() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this.maxWidth) : parseFloat(this.maxWidth) / gridAvailableSize * 100;\n    }\n\n    /**\n     * @hidden\n     */\n    public get minWidthPx() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this.minWidth) / 100 * gridAvailableSize : parseFloat(this.minWidth);\n    }\n\n    /**\n     * @hidden\n     */\n    public get minWidthPercent() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this.minWidth && typeof this.minWidth === 'string' && this.minWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this.minWidth) : parseFloat(this.minWidth) / gridAvailableSize * 100;\n    }\n\n\n    /**\n     * Sets/gets the minimum `width` of the column.\n     * Default value is `88`;\n     * ```typescript\n     * let columnMinWidth = this.column.minWidth;\n     * ```\n     * ```html\n     * <igx-column [minWidth] = \"'100px'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public set minWidth(value: string) {\n        const minVal = parseFloat(value);\n        if (Number.isNaN(minVal)) {\n            return;\n        }\n        this._defaultMinWidth = value;\n\n    }\n    public get minWidth(): string {\n        return !this._defaultMinWidth ? this.defaultMinWidth : this._defaultMinWidth;\n    }\n\n    /** @hidden @internal **/\n    public get resolvedWidth(): string {\n        if (this.columnLayoutChild) {\n            return '';\n        }\n        const isAutoWidth = this._width && typeof this._width === 'string' && this._width === 'auto';\n        return isAutoWidth ? this.width : this.calcPixelWidth + 'px';\n    }\n\n    /**\n     * Gets the column index.\n     * ```typescript\n     * let columnIndex = this.column.index;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get index(): number {\n        return (this.grid as any)._columns.indexOf(this);\n    }\n\n    /**\n     * Gets whether the column is `pinned`.\n     * ```typescript\n     * let isPinned = this.column.pinned;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get pinned(): boolean {\n        return this._pinned;\n    }\n    /**\n     * Sets whether the column is pinned.\n     * Default value is `false`.\n     * ```html\n     * <igx-column [pinned] = \"true\"></igx-column>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-column [(pinned)] = \"model.columns[0].isPinned\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set pinned(value: boolean) {\n        if (this._pinned !== value) {\n            const isAutoWidth = this.width && typeof this.width === 'string' && this.width === 'fit-content';\n            if (this.grid && this.width && (isAutoWidth || !isNaN(parseInt(this.width, 10)))) {\n                if (value) {\n                    this.pin();\n                } else {\n                    this.unpin();\n                }\n                return;\n            }\n            /* No grid/width available at initialization. `initPinning` in the grid\n               will re-init the group (if present)\n            */\n            this._pinned = value;\n            this.pinnedChange.emit(this._pinned);\n        }\n    }\n\n    /* treatAsRef */\n    /**\n     * Gets the column `summaries`.\n     * ```typescript\n     * let columnSummaries = this.column.summaries;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input()\n    public get summaries(): any {\n        return this._summaries;\n    }\n\n    /* treatAsRef */\n    /**\n     * Sets the column `summaries`.\n     * ```typescript\n     * this.column.summaries = IgxNumberSummaryOperand;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set summaries(classRef: any) {\n        if (isConstructor(classRef)) {\n            this._summaries = new classRef();\n        }\n\n        if (this.grid) {\n            this.grid.summaryService.removeSummariesCachePerColumn(this.field);\n            this.grid.summaryPipeTrigger++;\n            this.grid.summaryService.resetSummaryHeight();\n        }\n    }\n\n    /**\n     * Sets/gets the summary operands to exclude from display.\n     * Accepts an array of string keys representing the summary types to disable, such as 'Min', 'Max', 'Count' etc.\n     * ```typescript\n     * let disabledSummaries = this.column.disabledSummaries;\n     * ```\n     * ```html\n     * <igx-column [disabledSummaries]=\"['min', 'max', 'average']\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input()\n    public get disabledSummaries(): string[] {\n        return this._disabledSummaries;\n    }\n\n    public set disabledSummaries(value: string[]) {\n        if (isEqual(this._disabledSummaries, value)) {\n            return;\n        }\n        this._disabledSummaries = value;\n        if (this.grid) {\n            this.grid.summaryService.removeSummariesCachePerColumn(this.field);\n            this.grid.summaryPipeTrigger++;\n            this.grid.summaryService.resetSummaryHeight();\n        }\n    }\n\n    /**\n     * Gets the column `filters`.\n     * ```typescript\n     * let columnFilters = this.column.filters'\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public get filters(): IgxFilteringOperand {\n        return this._filters;\n    }\n    /**\n     * Sets the column `filters`.\n     * ```typescript\n     * this.column.filters = IgxBooleanFilteringOperand.instance().\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set filters(instance: IgxFilteringOperand) {\n        this._filters = instance;\n    }\n    /**\n     * Gets the column `sortStrategy`.\n     * ```typescript\n     * let sortStrategy = this.column.sortStrategy\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public get sortStrategy(): ISortingStrategy {\n        return this._sortStrategy;\n    }\n    /**\n     * Sets the column `sortStrategy`.\n     * ```typescript\n     * this.column.sortStrategy = new CustomSortingStrategy().\n     * class CustomSortingStrategy extends SortingStrategy {...}\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set sortStrategy(classRef: ISortingStrategy) {\n        this._sortStrategy = classRef;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets the function that compares values for grouping.\n     * ```typescript\n     * let groupingComparer = this.column.groupingComparer'\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public get groupingComparer(): (a: any, b: any, currRec?: any, groupRec?: any) => number {\n        return this._groupingComparer;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Sets a custom function to compare values for grouping.\n     * Subsequent values in the sorted data that the function returns 0 for are grouped.\n     * ```typescript\n     * this.column.groupingComparer = (a: any, b: any, currRec?: any, groupRec?: any) => { return a === b ? 0 : -1; }\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set groupingComparer(funcRef: (a: any, b: any, currRec?: any, groupRec?: any) => number) {\n        this._groupingComparer = funcRef;\n    }\n    /**\n     * @hidden @internal\n     */\n    public get defaultMinWidth(): string {\n        if (!this.grid) {\n            return '80';\n        }\n        switch (this.grid.gridSize) {\n            case Size.Medium:\n                return '64';\n            case Size.Small:\n                return '56';\n            default:\n                return '80';\n        }\n    }\n    /**\n     * Returns a reference to the `summaryTemplate`.\n     * ```typescript\n     * let summaryTemplate = this.column.summaryTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public get summaryTemplate(): TemplateRef<IgxSummaryTemplateContext> {\n        return this._summaryTemplate;\n    }\n    /**\n     * Sets the summary template.\n     * ```html\n     * <ng-template #summaryTemplate igxSummary let-summaryResults>\n     *    <p>{{ summaryResults[0].label }}: {{ summaryResults[0].summaryResult }}</p>\n     *    <p>{{ summaryResults[1].label }}: {{ summaryResults[1].summaryResult }}</p>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'summaryTemplate'\", {read: TemplateRef })\n     * public summaryTemplate: TemplateRef<any>;\n     * this.column.summaryTemplate = this.summaryTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set summaryTemplate(template: TemplateRef<IgxSummaryTemplateContext>) {\n        this._summaryTemplate = template;\n    }\n\n    /**\n     * Returns a reference to the `bodyTemplate`.\n     * ```typescript\n     * let bodyTemplate = this.column.bodyTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('cellTemplate')\n    public get bodyTemplate(): TemplateRef<IgxCellTemplateContext> {\n        return this._bodyTemplate;\n    }\n    /**\n     * Sets the body template.\n     * ```html\n     * <ng-template #bodyTemplate igxCell let-val>\n     *    <div style = \"background-color: yellowgreen\" (click) = \"changeColor(val)\">\n     *       <span> {{val}} </span>\n     *    </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'bodyTemplate'\", {read: TemplateRef })\n     * public bodyTemplate: TemplateRef<any>;\n     * this.column.bodyTemplate = this.bodyTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set bodyTemplate(template: TemplateRef<IgxCellTemplateContext>) {\n        this._bodyTemplate = template;\n    }\n    /**\n     * Returns a reference to the header template.\n     * ```typescript\n     * let headerTemplate = this.column.headerTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public get headerTemplate(): TemplateRef<IgxColumnTemplateContext> {\n        return this._headerTemplate;\n    }\n    /**\n     * Sets the header template.\n     * Note that the column header height is fixed and any content bigger than it will be cut off.\n     * ```html\n     * <ng-template #headerTemplate>\n     *   <div style = \"background-color:black\" (click) = \"changeColor(val)\">\n     *       <span style=\"color:red\" >{{column.field}}</span>\n     *   </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'headerTemplate'\", {read: TemplateRef })\n     * public headerTemplate: TemplateRef<any>;\n     * this.column.headerTemplate = this.headerTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set headerTemplate(template: TemplateRef<IgxColumnTemplateContext>) {\n        this._headerTemplate = template;\n    }\n    /**\n     * Returns a reference to the inline editor template.\n     * ```typescript\n     * let inlineEditorTemplate = this.column.inlineEditorTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('cellEditorTemplate')\n    public get inlineEditorTemplate(): TemplateRef<IgxCellTemplateContext> {\n        return this._inlineEditorTemplate;\n    }\n    /**\n     * Sets the inline editor template.\n     * ```html\n     * <ng-template #inlineEditorTemplate igxCellEditor let-cell=\"cell\">\n     *     <input type=\"string\" [(ngModel)]=\"cell.value\"/>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'inlineEditorTemplate'\", {read: TemplateRef })\n     * public inlineEditorTemplate: TemplateRef<any>;\n     * this.column.inlineEditorTemplate = this.inlineEditorTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set inlineEditorTemplate(template: TemplateRef<IgxCellTemplateContext>) {\n        this._inlineEditorTemplate = template;\n    }\n\n    /**\n     * Returns a reference to the validation error template.\n     * ```typescript\n     * let errorTemplate = this.column.errorTemplate;\n     * ```\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('errorTemplate')\n    public get errorTemplate(): TemplateRef<IgxCellTemplateContext> {\n        return this._errorTemplate;\n    }\n    /**\n     * Sets the error template.\n     * ```html\n     * <ng-template igxCellValidationError let-cell=\"cell\" #errorTemplate >\n     *     <div *ngIf=\"cell.validation.errors?.['forbiddenName']\">\n     *      This name is forbidden.\n     *     </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'errorTemplate'\", {read: TemplateRef })\n     * public errorTemplate: TemplateRef<any>;\n     * this.column.errorTemplate = this.errorTemplate;\n     * ```\n     */\n    public set errorTemplate(template: TemplateRef<IgxCellTemplateContext>) {\n        this._errorTemplate = template;\n    }\n\n    /**\n     * Returns a reference to the `filterCellTemplate`.\n     * ```typescript\n     * let filterCellTemplate = this.column.filterCellTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('filterCellTemplate')\n    public get filterCellTemplate(): TemplateRef<IgxColumnTemplateContext> {\n        return this._filterCellTemplate;\n    }\n    /**\n     * Sets the quick filter template.\n     * ```html\n     * <ng-template #filterCellTemplate IgxFilterCellTemplate let-column=\"column\">\n     *    <input (input)=\"onInput()\">\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'filterCellTemplate'\", {read: TemplateRef })\n     * public filterCellTemplate: TemplateRef<any>;\n     * this.column.filterCellTemplate = this.filterCellTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set filterCellTemplate(template: TemplateRef<IgxColumnTemplateContext>) {\n        this._filterCellTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get cells(): CellType[] {\n        return this.grid.dataView\n            .map((rec, index) => {\n                if (!this.grid.isGroupByRecord(rec) && !this.grid.isSummaryRow(rec)) {\n                    this.grid.pagingMode === 1 && this.grid.page !== 0 ? index = index + this.grid.perPage * this.grid.page : index = this.grid.dataRowList.first.index + index;\n                    const cell = new IgxGridCell(this.grid as any, index, this);\n                    return cell;\n                }\n            }).filter(cell => cell);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public get _cells(): CellType[] {\n        return this.grid.rowList.filter((row) => row instanceof IgxRowDirective)\n            .map((row) => {\n                if (row._cells) {\n                    return row._cells.filter((cell) => cell.columnIndex === this.index);\n                }\n            }).reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Gets the column visible index.\n     * If the column is not visible, returns `-1`.\n     * ```typescript\n     * let visibleColumnIndex =  this.column.visibleIndex;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get visibleIndex(): number {\n        if (!isNaN(this._vIndex)) {\n            return this._vIndex;\n        }\n        const unpinnedColumns = this.grid.unpinnedColumns.filter(c => !c.columnGroup);\n        const pinnedColumns = this.grid.pinnedColumns.filter(c => !c.columnGroup);\n\n        let col = this;\n        let vIndex = -1;\n\n        if (this.columnGroup) {\n            col = this.allChildren.filter(c => !c.columnGroup && !c.hidden)[0] as any;\n        }\n        if (this.columnLayoutChild) {\n            return this.parent.childrenVisibleIndexes.find(x => x.column === this).index;\n        }\n\n        if (!this.pinned) {\n            const indexInCollection = unpinnedColumns.indexOf(col);\n            vIndex = indexInCollection === -1 ?\n                -1 :\n                (this.grid.isPinningToStart ?\n                    pinnedColumns.length + indexInCollection :\n                    indexInCollection);\n        } else {\n            const indexInCollection = pinnedColumns.indexOf(col);\n            vIndex = this.grid.isPinningToStart ?\n                indexInCollection :\n                unpinnedColumns.length + indexInCollection;\n        }\n        this._vIndex = vIndex;\n        return vIndex;\n    }\n\n    /* blazorCSSuppress - Blazor doesn't carry over the ColumnType interface + should translate as static bool value */\n    /**\n     * Returns a boolean indicating if the column is a `ColumnGroup`.\n     * ```typescript\n     * let columnGroup =  this.column.columnGroup;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get columnGroup() {\n        return false;\n    }\n\n    /* blazorCSSuppress - Blazor doesn't carry over the ColumnType interface + should translate as static bool value */\n    /**\n     * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.\n     * ```typescript\n     * let columnGroup =  this.column.columnGroup;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get columnLayout() {\n        return false;\n    }\n\n    /**\n     * Returns a boolean indicating if the column is a child of a `ColumnLayout` for multi-row layout.\n     * ```typescript\n     * let columnLayoutChild =  this.column.columnLayoutChild;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get columnLayoutChild(): boolean {\n        return this.parent && this.parent.columnLayout;\n    }\n\n    /**\n     * A list containing all the child columns under this column (if any).\n     * Empty without children or if this column is not Group or Layout.\n     */\n    public get childColumns(): ColumnType[] {\n        return [];\n    }\n\n    /** @hidden @internal **/\n    public get allChildren(): IgxColumnComponent[] {\n        return [];\n    }\n    /**\n     * Returns the level of the column in a column group.\n     * Returns `0` if the column doesn't have a `parent`.\n     * ```typescript\n     * let columnLevel =  this.column.level;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get level() {\n        let ptr = this.parent;\n        let lvl = 0;\n\n        while (ptr) {\n            lvl++;\n            ptr = ptr.parent;\n        }\n        return lvl;\n    }\n\n    /** @hidden @internal **/\n    public get isLastPinned(): boolean {\n        return this.grid.isPinningToStart &&\n            this.grid.pinnedColumns[this.grid.pinnedColumns.length - 1] === this;\n    }\n\n    /** @hidden @internal **/\n    public get isFirstPinned(): boolean {\n        const pinnedCols = this.grid.pinnedColumns.filter(x => !x.columnGroup);\n        return !this.grid.isPinningToStart && pinnedCols[0] === this;\n    }\n\n    /** @hidden @internal **/\n    public get rightPinnedOffset(): string {\n        return this.pinned && !this.grid.isPinningToStart ?\n            - this.grid.pinnedWidth - this.grid.headerFeaturesWidth + 'px' :\n            null;\n    }\n\n    /** @hidden @internal **/\n    public get gridRowSpan(): number {\n        return this.rowEnd && this.rowStart ? this.rowEnd - this.rowStart : 1;\n    }\n    /** @hidden @internal **/\n    public get gridColumnSpan(): number {\n        return this.colEnd && this.colStart ? this.colEnd - this.colStart : 1;\n    }\n\n    /**\n     * Indicates whether the column will be visible when its parent is collapsed.\n     * ```html\n     * <igx-column-group>\n     *   <igx-column [visibleWhenCollapsed]=\"true\"></igx-column>\n     * </igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @Input({ transform: booleanAttribute })\n    public set visibleWhenCollapsed(value: boolean) {\n        this._visibleWhenCollapsed = value;\n        this.visibleWhenCollapsedChange.emit(this._visibleWhenCollapsed);\n        if (this.parent) {\n            this.parent?.setExpandCollapseState?.();\n        }\n    }\n\n    public get visibleWhenCollapsed(): boolean {\n        return this._visibleWhenCollapsed;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * @remarks\n     * Pass optional parameters for DatePipe and/or DecimalPipe to format the display value for date and numeric columns.\n     * Accepts an `IColumnPipeArgs` object with any of the `format`, `timezone` and `digitsInfo` properties.\n     * For more details see https://angular.io/api/common/DatePipe and https://angular.io/api/common/DecimalPipe\n     * @example\n     * ```typescript\n     * const pipeArgs: IColumnPipeArgs = {\n     *      format: 'longDate',\n     *      timezone: 'UTC',\n     *      digitsInfo: '1.1-2'\n     * }\n     * ```\n     * ```html\n     * <igx-column dataType=\"date\" [pipeArgs]=\"pipeArgs\"></igx-column>\n     * <igx-column dataType=\"number\" [pipeArgs]=\"pipeArgs\"></igx-column>\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public set pipeArgs(value: IColumnPipeArgs) {\n        this._columnPipeArgs = Object.assign(this._columnPipeArgs, value);\n        this.grid.summaryService.clearSummaryCache();\n        this.grid.pipeTrigger++;\n    }\n    /* mustSetInCodePlatforms: WebComponents;Blazor */\n    public get pipeArgs(): IColumnPipeArgs {\n        return this._columnPipeArgs;\n    }\n\n    /**\n     * Pass optional properties for the default column editors.\n     * @remarks\n     * Options may be applicable only to specific column type editors.\n     * @example\n     * ```typescript\n     * const editorOptions: IColumnEditorOptions = {\n     *      dateTimeFormat: 'MM/dd/YYYY',\n     * }\n     * ```\n     * ```html\n     * <igx-column dataType=\"date\" [editorOptions]=\"editorOptions\"></igx-column>\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public set editorOptions(value: IColumnEditorOptions) {\n        this._editorOptions = value;\n    }\n    public get editorOptions(): IColumnEditorOptions {\n        return this._editorOptions;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get collapsible() {\n        return false;\n    }\n    public set collapsible(_value: boolean) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get expanded() {\n        return true;\n    }\n    public set expanded(_value: boolean) { }\n\n    /**\n     * @hidden\n     */\n    public defaultWidth: string;\n\n    /**\n     * @hidden\n     */\n    public widthSetByUser: boolean;\n\n    /**\n     * @hidden\n     */\n    public hasNestedPath: boolean;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public defaultTimeFormat = 'hh:mm:ss a';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public defaultDateTimeFormat = 'dd/MM/yyyy HH:mm:ss a';\n\n\n    /**\n     * Returns the filteringExpressionsTree of the column.\n     * ```typescript\n     * let tree =  this.column.filteringExpressionsTree;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get filteringExpressionsTree(): FilteringExpressionsTree {\n        return ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, this.field) as FilteringExpressionsTree;\n    }\n\n    /* alternateName: parentColumn */\n    /**\n     * Sets/gets the parent column.\n     * ```typescript\n     * let parentColumn = this.column.parent;\n     * ```\n     * ```typescript\n     * this.column.parent = higherLevelColumn;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public parent = null;\n\n    /* blazorSuppress */\n    /**\n     * Sets/gets the children columns.\n     * ```typescript\n     * let columnChildren = this.column.children;\n     * ```\n     *\n     * @deprecated in version 18.1.0. Use the `childColumns` property instead.\n     */\n    public children: QueryList<IgxColumnComponent>;\n    /**\n     * @hidden\n     */\n    public destroy$ = new Subject<any>();\n\n    /**\n     * @hidden\n     */\n    protected _applySelectableClass = false;\n\n    protected _vIndex = NaN;\n    /**\n     * @hidden\n     */\n    protected _pinned = false;\n    /**\n     * @hidden\n     */\n    protected _bodyTemplate: TemplateRef<IgxCellTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _errorTemplate: TemplateRef<IgxCellTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _headerTemplate: TemplateRef<IgxColumnTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _summaryTemplate: TemplateRef<IgxSummaryTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _inlineEditorTemplate: TemplateRef<IgxCellTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _filterCellTemplate: TemplateRef<IgxColumnTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _summaries = null;\n    /**\n     * @hidden\n     */\n    private _disabledSummaries: string[] = [];\n    /**\n     * @hidden\n     */\n    protected _filters = null;\n    /**\n     * @hidden\n     */\n    protected _sortStrategy: ISortingStrategy = DefaultSortingStrategy.instance();\n    /**\n     * @hidden\n     */\n    protected _groupingComparer: (a: any, b: any, currRec?: any, groupRec?: any) => number;\n    /**\n     * @hidden\n     */\n    protected _hidden = false;\n    /**\n     * @hidden\n     */\n    protected _index: number;\n    /**\n     * @hidden\n     */\n    protected _disablePinning = false;\n    /**\n     * @hidden\n     */\n    protected _width: string;\n    /**\n     * @hidden\n     */\n    protected _defaultMinWidth = '';\n    /**\n     * @hidden\n     */\n    protected _hasSummary = false;\n    /**\n     * @hidden\n     */\n    protected _editable: boolean;\n    /**\n     * @hidden\n     */\n    protected _groupable = false;\n    /**\n     *  @hidden\n     */\n    protected _visibleWhenCollapsed;\n    /**\n     * @hidden\n     */\n    protected _collapsible = false;\n    /**\n     * @hidden\n     */\n    protected _expanded = true;\n    /**\n     * @hidden\n     */\n    protected _selectable = true;\n    /**\n     * @hidden\n     */\n    protected get isPrimaryColumn(): boolean {\n        return this.field !== undefined && this.grid !== undefined && this.field === this.grid.primaryKey;\n    }\n\n    private _field: string;\n    private _calcWidth = null;\n    private _columnPipeArgs: IColumnPipeArgs = { digitsInfo: DEFAULT_DIGITS_INFO };\n    private _editorOptions: IColumnEditorOptions = { };\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public grid: GridType,\n        @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: Validator[],\n        /** @hidden @internal **/\n        public cdr: ChangeDetectorRef,\n        protected platform: PlatformUtil,\n    ) {\n        this.validators = _validators;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetCaches() {\n        this._vIndex = NaN;\n        if (this.grid) {\n            this.cacheCalcWidth();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit(): void {\n        if (this.summaryTemplateDirective) {\n            this._summaryTemplate = this.summaryTemplateDirective.template;\n        }\n        if (this.cellTemplate) {\n            this._bodyTemplate = this.cellTemplate.template;\n        }\n        if (this.cellValidationErrorTemplate) {\n            this._errorTemplate = this.cellValidationErrorTemplate.template;\n        }\n        if (this.headTemplate && this.headTemplate.length) {\n            this._headerTemplate = this.headTemplate.toArray()[0].template;\n        }\n        if (this.editorTemplate) {\n            this._inlineEditorTemplate = this.editorTemplate.template;\n        }\n        if (this.filterCellTemplateDirective) {\n            this._filterCellTemplate = this.filterCellTemplateDirective.template;\n        }\n        if (!this._columnPipeArgs.format) {\n            this._columnPipeArgs.format = this.dataType === GridColumnDataType.Time ?\n                DEFAULT_TIME_FORMAT : this.dataType === GridColumnDataType.DateTime ?\n                    DEFAULT_DATE_TIME_FORMAT : DEFAULT_DATE_FORMAT;\n        }\n        if (!this.summaries) {\n            switch (this.dataType) {\n                case GridColumnDataType.Number:\n                case GridColumnDataType.Currency:\n                case GridColumnDataType.Percent:\n                    this.summaries = IgxNumberSummaryOperand;\n                    break;\n                case GridColumnDataType.Date:\n                case GridColumnDataType.DateTime:\n                    this.summaries = IgxDateSummaryOperand;\n                    break;\n                case GridColumnDataType.Time:\n                    this.summaries = IgxTimeSummaryOperand;\n                    break;\n\n                case GridColumnDataType.String:\n                case GridColumnDataType.Boolean:\n                default:\n                    this.summaries = IgxSummaryOperand;\n                    break;\n            }\n        }\n        if (!this.filters) {\n            switch (this.dataType) {\n                case GridColumnDataType.Boolean:\n                    this.filters = IgxBooleanFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Number:\n                case GridColumnDataType.Currency:\n                case GridColumnDataType.Percent:\n                    this.filters = IgxNumberFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Date:\n                    this.filters = IgxDateFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Time:\n                    this.filters = IgxTimeFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.DateTime:\n                    this.filters = IgxDateTimeFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Image:\n                    this.filterable = false;\n                    break;\n                case GridColumnDataType.String:\n                default:\n                    this.filters = IgxStringFilteringOperand.instance();\n                    break;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getGridTemplate(isRow: boolean): string {\n        if (isRow) {\n            const rowsCount = this.grid.type !== 'pivot' ? this.grid.multiRowLayoutRowSize : this.children.length - 1;\n            return `repeat(${rowsCount},1fr)`;\n        } else {\n            return this.getColumnSizesString(this.children);\n        }\n    }\n\n    /** @hidden @internal **/\n    public getInitialChildColumnSizes(children: QueryList<IgxColumnComponent>): Array<MRLColumnSizeInfo> {\n        const columnSizes: MRLColumnSizeInfo[] = [];\n        // find the smallest col spans\n        children.forEach(col => {\n            if (!col.colStart) {\n                return;\n            }\n            const newWidthSet = col.widthSetByUser && columnSizes[col.colStart - 1] && !columnSizes[col.colStart - 1].widthSetByUser;\n            const newSpanSmaller = columnSizes[col.colStart - 1] && columnSizes[col.colStart - 1].colSpan > col.gridColumnSpan;\n            const bothWidthsSet = col.widthSetByUser && columnSizes[col.colStart - 1] && columnSizes[col.colStart - 1].widthSetByUser;\n            const bothWidthsNotSet = !col.widthSetByUser && columnSizes[col.colStart - 1] && !columnSizes[col.colStart - 1].widthSetByUser;\n\n            if (columnSizes[col.colStart - 1] === undefined) {\n                // If nothing is defined yet take any column at first\n                // We use colEnd to know where the column actually ends, because not always it starts where we have it set in columnSizes.\n                columnSizes[col.colStart - 1] = {\n                    ref: col,\n                    width: col.width === 'fit-content' ? col.autoSize :\n                        col.widthSetByUser || this.grid.columnWidthSetByUser ? parseFloat(col.calcWidth) : null,\n                    colSpan: col.gridColumnSpan,\n                    colEnd: col.colStart + col.gridColumnSpan,\n                    widthSetByUser: col.widthSetByUser\n                };\n            } else if (newWidthSet || (newSpanSmaller && ((bothWidthsSet) || (bothWidthsNotSet)))) {\n                // If a column is set already it should either not have width defined or have width with bigger span than the new one.\n\n                /**\n                 *  If replaced column has bigger span, we want to fill the remaining columns\n                 *  that the replacing column does not fill with the old one.\n                 */\n                if (bothWidthsSet && newSpanSmaller) {\n                    // Start from where the new column set would end and apply the old column to the rest depending on how much it spans.\n                    // We have not yet replaced it so we can use it directly from the columnSizes collection.\n                    // This is where colEnd is used because the colStart of the old column is not actually i + 1.\n                    for (let i = col.colStart - 1 + col.gridColumnSpan; i < columnSizes[col.colStart - 1].colEnd - 1; i++) {\n                        if (!columnSizes[i] || !columnSizes[i].widthSetByUser) {\n                            columnSizes[i] = columnSizes[col.colStart - 1];\n                        } else {\n                            break;\n                        }\n                    }\n                }\n\n                // Replace the old column with the new one.\n                columnSizes[col.colStart - 1] = {\n                    ref: col,\n                    width: col.width === 'fit-content' ? col.autoSize :\n                        col.widthSetByUser || this.grid.columnWidthSetByUser ? parseFloat(col.calcWidth) : null,\n                    colSpan: col.gridColumnSpan,\n                    colEnd: col.colStart + col.gridColumnSpan,\n                    widthSetByUser: col.widthSetByUser\n                };\n            } else if (bothWidthsSet && columnSizes[col.colStart - 1].colSpan < col.gridColumnSpan) {\n                // If the column already in the columnSizes has smaller span, we still need to fill any empty places with the current col.\n                // Start from where the smaller column set would end and apply the bigger column to the rest depending on how much it spans.\n                // Since here we do not have it in columnSizes we set it as a new column keeping the same colSpan.\n                for (let i = col.colStart - 1 + columnSizes[col.colStart - 1].colSpan; i < col.colStart - 1 + col.gridColumnSpan; i++) {\n                    if (!columnSizes[i] || !columnSizes[i].widthSetByUser) {\n                        columnSizes[i] = {\n                            ref: col,\n                            width: col.width === 'fit-content' ? col.autoSize :\n                                col.widthSetByUser || this.grid.columnWidthSetByUser ? parseFloat(col.calcWidth) : null,\n                            colSpan: col.gridColumnSpan,\n                            colEnd: col.colStart + col.gridColumnSpan,\n                            widthSetByUser: col.widthSetByUser\n                        };\n                    } else {\n                        break;\n                    }\n                }\n            }\n        });\n\n        // Flatten columnSizes so there are not columns with colSpan > 1\n        for (let i = 0; i < columnSizes.length; i++) {\n            if (columnSizes[i] && columnSizes[i].colSpan > 1) {\n                let j = 1;\n\n                // Replace all empty places depending on how much the current column spans starting from next col.\n                for (; j < columnSizes[i].colSpan && i + j + 1 < columnSizes[i].colEnd; j++) {\n                    if (columnSizes[i + j] &&\n                        ((!columnSizes[i].width && columnSizes[i + j].width) ||\n                            (!columnSizes[i].width && !columnSizes[i + j].width && columnSizes[i + j].colSpan <= columnSizes[i].colSpan) ||\n                            (!!columnSizes[i + j].width && columnSizes[i + j].colSpan <= columnSizes[i].colSpan))) {\n                        // If we reach an already defined column that has width and the current doesn't have or\n                        // if the reached column has bigger colSpan we stop.\n                        break;\n                    } else {\n                        const width = columnSizes[i].widthSetByUser ?\n                            columnSizes[i].width / columnSizes[i].colSpan :\n                            columnSizes[i].width;\n                        columnSizes[i + j] = {\n                            ref: columnSizes[i].ref,\n                            width,\n                            colSpan: 1,\n                            colEnd: columnSizes[i].colEnd,\n                            widthSetByUser: columnSizes[i].widthSetByUser\n                        };\n                    }\n                }\n\n                // Update the current column width so it is divided between all columns it spans and set it to 1.\n                columnSizes[i].width = columnSizes[i].widthSetByUser ?\n                    columnSizes[i].width / columnSizes[i].colSpan :\n                    columnSizes[i].width;\n                columnSizes[i].colSpan = 1;\n\n                // Update the index based on how much we have replaced. Subtract 1 because we started from 1.\n                i += j - 1;\n            }\n        }\n\n        return columnSizes;\n    }\n\n    /** @hidden @internal **/\n    public getFilledChildColumnSizes(children: QueryList<IgxColumnComponent>): Array<string> {\n        const columnSizes = this.getInitialChildColumnSizes(children);\n\n        // fill the gaps if there are any\n        const result: string[] = [];\n        for (const size of columnSizes) {\n            if (size && !!size.width) {\n                result.push(size.width + 'px');\n            } else {\n                result.push(parseFloat(this.grid.getPossibleColumnWidth()) + 'px');\n            }\n        }\n        return result;\n    }\n\n    /** @hidden @internal **/\n    public getResizableColUnderEnd(): MRLResizeColumnInfo[] {\n        if (this.columnLayout || !this.columnLayoutChild || this.columnGroup) {\n            return [{ target: this, spanUsed: 1 }];\n        }\n\n        const columnSized = this.getInitialChildColumnSizes(this.parent.children);\n        const targets: MRLResizeColumnInfo[] = [];\n        const colEnd = this.colEnd ? this.colEnd : this.colStart + 1;\n\n        for (let i = 0; i < columnSized.length; i++) {\n            if (this.colStart <= i + 1 && i + 1 < colEnd) {\n                targets.push({ target: columnSized[i].ref, spanUsed: 1 });\n            }\n        }\n\n        const targetsSquashed: MRLResizeColumnInfo[] = [];\n        for (const target of targets) {\n            if (targetsSquashed.length && targetsSquashed[targetsSquashed.length - 1].target.field === target.target.field) {\n                targetsSquashed[targetsSquashed.length - 1].spanUsed++;\n            } else {\n                targetsSquashed.push(target);\n            }\n        }\n\n        return targetsSquashed;\n    }\n\n    /**\n     * Pins the column at the provided index in the pinned area.\n     * Defaults to index `0` if not provided, or to the initial index in the pinned area.\n     * Returns `true` if the column is successfully pinned. Returns `false` if the column cannot be pinned.\n     * Column cannot be pinned if:\n     * - Is already pinned\n     * - index argument is out of range\n     * - The pinned area exceeds 80% of the grid width\n     * ```typescript\n     * let success = this.column.pin();\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public pin(index?: number): boolean {\n        // TODO: Probably should the return type of the old functions\n        // should be moved as a event parameter.\n        const grid = (this.grid as any);\n        if (this._pinned) {\n            return false;\n        }\n\n        if (this.parent && !this.parent.pinned) {\n            return this.topLevelParent.pin(index);\n        }\n\n        const hasIndex = index !== undefined;\n        if (hasIndex && (index < 0 || index > grid.pinnedColumns.length)) {\n            return false;\n        }\n\n        if (!this.parent && !this.pinnable) {\n            return false;\n        }\n\n        const rootPinnedCols = grid._pinnedColumns.filter((c) => c.level === 0);\n        index = hasIndex ? index : rootPinnedCols.length;\n        const args: IPinColumnCancellableEventArgs = { column: this, insertAtIndex: index, isPinned: false, cancel: false };\n        this.grid.columnPin.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        this.grid.crudService.endEdit(false);\n\n        this._pinned = true;\n        this.pinnedChange.emit(this._pinned);\n        // it is possible that index is the last position, so will need to find target column by [index-1]\n        const targetColumn = args.insertAtIndex === grid._pinnedColumns.length ?\n            grid._pinnedColumns[args.insertAtIndex - 1] : grid._pinnedColumns[args.insertAtIndex];\n\n        if (grid._pinnedColumns.indexOf(this) === -1) {\n            if (!grid.hasColumnGroups) {\n                grid._pinnedColumns.splice(args.insertAtIndex, 0, this);\n            } else {\n                // insert based only on root collection\n                if (this.level === 0) {\n                    rootPinnedCols.splice(args.insertAtIndex, 0, this);\n                }\n                let allPinned = [];\n                // FIX: this is duplicated on every step in the hierarchy....\n                // re-create hierarchy\n                rootPinnedCols.forEach(group => {\n                    allPinned.push(group);\n                    allPinned = allPinned.concat(group.allChildren);\n                });\n                grid._pinnedColumns = allPinned;\n            }\n\n            if (grid._unpinnedColumns.indexOf(this) !== -1) {\n                const childrenCount = this.allChildren.length;\n                grid._unpinnedColumns.splice(grid._unpinnedColumns.indexOf(this), 1 + childrenCount);\n            }\n        }\n\n        if (hasIndex) {\n            index === grid._pinnedColumns.length - 1 ?\n                grid._moveColumns(this, targetColumn, DropPosition.AfterDropTarget) : grid._moveColumns(this, targetColumn, DropPosition.BeforeDropTarget);\n        }\n\n        if (this.columnGroup) {\n            this.allChildren.forEach(child => child.pin());\n            grid.reinitPinStates();\n        }\n\n        grid.resetCaches();\n        grid.notifyChanges();\n        if (this.columnLayoutChild) {\n            this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n        this.grid.filteringService.refreshExpressions();\n        const eventArgs: IPinColumnEventArgs = { column: this, insertAtIndex: index, isPinned: true };\n        this.grid.columnPinned.emit(eventArgs);\n        return true;\n    }\n    /**\n     * Unpins the column and place it at the provided index in the unpinned area.\n     * Defaults to index `0` if not provided, or to the initial index in the unpinned area.\n     * Returns `true` if the column is successfully unpinned. Returns `false` if the column cannot be unpinned.\n     * Column cannot be unpinned if:\n     * - Is already unpinned\n     * - index argument is out of range\n     * ```typescript\n     * let success = this.column.unpin();\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public unpin(index?: number): boolean {\n        const grid = (this.grid as any);\n        if (!this._pinned) {\n            return false;\n        }\n\n        if (this.parent && this.parent.pinned) {\n            return this.topLevelParent.unpin(index);\n        }\n        const hasIndex = index !== undefined;\n        if (hasIndex && (index < 0 || index > grid._unpinnedColumns.length)) {\n            return false;\n        }\n\n        // estimate the exact index at which column will be inserted\n        // takes into account initial unpinned index of the column\n        if (!hasIndex) {\n            const indices = grid.unpinnedColumns.map(col => col.index);\n            indices.push(this.index);\n            indices.sort((a, b) => a - b);\n            index = indices.indexOf(this.index);\n        }\n\n        const args: IPinColumnCancellableEventArgs = { column: this, insertAtIndex: index, isPinned: true, cancel: false };\n        this.grid.columnPin.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        this.grid.crudService.endEdit(false);\n\n        this._pinned = false;\n        this.pinnedChange.emit(this._pinned);\n\n        // it is possible that index is the last position, so will need to find target column by [index-1]\n        const targetColumn = args.insertAtIndex === grid._unpinnedColumns.length ?\n            grid._unpinnedColumns[args.insertAtIndex - 1] : grid._unpinnedColumns[args.insertAtIndex];\n\n        if (!hasIndex) {\n            grid._unpinnedColumns.splice(index, 0, this);\n            if (grid._pinnedColumns.indexOf(this) !== -1) {\n                grid._pinnedColumns.splice(grid._pinnedColumns.indexOf(this), 1);\n            }\n        }\n\n        if (hasIndex) {\n            grid.moveColumn(this, targetColumn);\n        }\n\n        if (this.columnGroup) {\n            this.allChildren.forEach(child => child.unpin());\n        }\n\n        grid.reinitPinStates();\n        grid.resetCaches();\n\n        grid.notifyChanges();\n        if (this.columnLayoutChild) {\n            this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n        this.grid.filteringService.refreshExpressions();\n\n        this.grid.columnPinned.emit({ column: this, insertAtIndex: index, isPinned: false });\n\n        return true;\n    }\n\n    /**\n     * Moves a column to the specified visible index.\n     * If passed index is invalid, or if column would receive a different visible index after moving, moving is not performed.\n     * If passed index would move the column to a different column group. moving is not performed.\n     *\n     * @example\n     * ```typescript\n     * column.move(index);\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    public move(index: number) {\n        let target;\n        let columns = this.grid.columns.filter(c => c.visibleIndex > -1);\n        // grid last visible index\n        const li = columns.map(c => c.visibleIndex).reduce((a, b) => Math.max(a, b));\n        const parent = this.parent;\n        const isPreceding = this.visibleIndex < index;\n\n        if (index === this.visibleIndex || index < 0 || index > li) {\n            return;\n        }\n\n        if (parent) {\n            columns = columns.filter(c => c.level >= this.level && c !== this && c.parent !== this &&\n                c.topLevelParent === this.topLevelParent);\n        }\n\n        // If isPreceding, find a target such that when the current column is placed after it, current colummn will receive a visibleIndex === index. This takes into account visible children of the columns.\n        // If !isPreceding, finds a column of the same level and visible index that equals the passed index agument (c.visibleIndex === index). No need to consider the children here.\n\n        if (isPreceding) {\n            columns = columns.filter(c => c.visibleIndex > this.visibleIndex);\n            target = columns.find(c => c.level === this.level && c.visibleIndex + (c as any).calcChildren() - this.calcChildren() === index);\n        } else {\n            columns = columns.filter(c => c.visibleIndex < this.visibleIndex);\n            target = columns.find(c => c.level === this.level && c.visibleIndex === index);\n        }\n\n        if (!target || (target.pinned && this.disablePinning)) {\n            return;\n        }\n\n        const pos = isPreceding ? DropPosition.AfterDropTarget : DropPosition.BeforeDropTarget;\n        this.grid.moveColumn(this, target as IgxColumnComponent, pos);\n    }\n\n    /**\n     * No children for the column, so will returns 1 or 0, if the column is hidden.\n     *\n     * @hidden\n     */\n    public calcChildren(): number {\n        const children = this.hidden ? 0 : 1;\n        return children;\n    }\n\n    /**\n     * Toggles column vibisility and emits the respective event.\n     *\n     * @hidden\n     */\n    public toggleVisibility(value?: boolean) {\n        const newValue = value ?? !this.hidden;\n        const eventArgs: IColumnVisibilityChangingEventArgs = { column: this, newValue, cancel: false };\n        this.grid.columnVisibilityChanging.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        this.hidden = newValue;\n        this.grid.columnVisibilityChanged.emit({ column: this, newValue });\n    }\n\n    /**\n     * Returns a reference to the top level parent column.\n     * ```typescript\n     * let topLevelParent =  this.column.topLevelParent;\n     * ```\n     */\n    public get topLevelParent(): ColumnType | undefined {\n        let parent = this.parent;\n        while (parent && parent.parent) {\n            parent = parent.parent;\n        }\n        return parent ?? undefined;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get headerCell(): IgxGridHeaderComponent {\n        return this.grid.headerCellList.find((header) => header.column === this);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get filterCell(): IgxGridFilteringCellComponent {\n        return this.grid.filterCellList.find((filterCell) => filterCell.column === this);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get headerGroup(): IgxGridHeaderGroupComponent {\n        return this.grid.headerGroupsList.find(group => group.column === this);\n    }\n\n    /**\n     * Autosize the column to the longest currently visible cell value, including the header cell.\n     * ```typescript\n     * @ViewChild('grid') grid: IgxGridComponent;\n     * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n     * column.autosize();\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     * @param byHeaderOnly Set if column should be autosized based only on the header content.\n     */\n    public autosize(byHeaderOnly = false) {\n        if (!this.columnGroup) {\n            this.width = this.getAutoSize(byHeaderOnly);\n            this.grid.reflow();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getAutoSize(byHeader = false): string {\n        const size = !byHeader ? this.getLargestCellWidth() :\n            (Object.values(this.getHeaderCellWidths()).reduce((a, b) => a + b) + 'px');\n        const isPercentageWidth = this.width && typeof this.width === 'string' && this.width.indexOf('%') !== -1;\n\n        let newWidth;\n        if (isPercentageWidth) {\n            const gridAvailableSize = this.grid.calcWidth;\n            const percentageSize = parseFloat(size) / gridAvailableSize * 100;\n            newWidth = percentageSize + '%';\n        } else {\n            newWidth = size;\n        }\n\n        const maxWidth = isPercentageWidth ? this.maxWidthPercent : this.maxWidthPx;\n        const minWidth = isPercentageWidth ? this.minWidthPercent : this.minWidthPx;\n        if (this.maxWidth && (parseFloat(newWidth) > maxWidth)) {\n            newWidth = isPercentageWidth ? maxWidth + '%' : maxWidth + 'px';\n        } else if (parseFloat(newWidth) < minWidth) {\n            newWidth = isPercentageWidth ? minWidth + '%' : minWidth + 'px';\n        }\n\n        return newWidth;\n    }\n\n    /**\n     * @hidden\n     */\n    public getCalcWidth(): any {\n        if (this._calcWidth && !isNaN(this.calcPixelWidth)) {\n            return this._calcWidth;\n        }\n        this.cacheCalcWidth();\n        return this._calcWidth;\n    }\n\n\n    /**\n     * @hidden\n     * Returns the width and padding of a header cell.\n     */\n    public getHeaderCellWidths() {\n        return this.grid.getHeaderCellWidth(this.headerCell.nativeElement);\n    }\n\n    /**\n     * @hidden\n     * Returns the size (in pixels) of the longest currently visible cell, including the header cell.\n     * ```typescript\n     * @ViewChild('grid') grid: IgxGridComponent;\n     *\n     * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n     * let size = column.getLargestCellWidth();\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    public getLargestCellWidth(): string {\n        const range = this.grid.document.createRange();\n        const largest = new Map<number, number>();\n\n        if (this._cells.length > 0) {\n            const cellsContentWidths = [];\n            this._cells.forEach((cell) => cellsContentWidths.push(cell.calculateSizeToFit(range)));\n\n            const index = cellsContentWidths.indexOf(Math.max(...cellsContentWidths));\n            const cellStyle = this.grid.document.defaultView.getComputedStyle(this._cells[index].nativeElement);\n            const cellPadding = parseFloat(cellStyle.paddingLeft) + parseFloat(cellStyle.paddingRight) +\n                parseFloat(cellStyle.borderLeftWidth) + parseFloat(cellStyle.borderRightWidth);\n\n            largest.set(Math.max(...cellsContentWidths), cellPadding);\n        }\n\n        if (this.headerCell && this.autosizeHeader) {\n            const headerCellWidths = this.getHeaderCellWidths();\n            largest.set(headerCellWidths.width, headerCellWidths.padding);\n        }\n\n        const largestCell = Math.max(...Array.from(largest.keys()));\n        const width = Math.ceil(largestCell + largest.get(largestCell));\n\n        if (Number.isNaN(width)) {\n            return this.width;\n        } else {\n            return width + 'px';\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getCellWidth() {\n        const colWidth = this.width;\n        const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n\n        if (this.columnLayoutChild) {\n            return '';\n        }\n\n        if (colWidth && !isPercentageWidth) {\n\n            let cellWidth = colWidth;\n            if (typeof cellWidth !== 'string' || cellWidth.endsWith('px') === false) {\n                cellWidth += 'px';\n            }\n\n            return cellWidth;\n        } else {\n            return colWidth;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public populateVisibleIndexes() { }\n\n    protected getColumnSizesString(children: QueryList<IgxColumnComponent>): string {\n        const res = this.getFilledChildColumnSizes(children);\n        return res.join(' ');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected cacheCalcWidth(): any {\n        const colWidth = this.width;\n        const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n        const isAutoWidth = colWidth && typeof colWidth === 'string' && colWidth === 'fit-content';\n        if (isPercentageWidth && this.grid.isColumnWidthSum) {\n            this._calcWidth = this.grid.minColumnWidth;\n        } else if (isPercentageWidth) {\n            this._calcWidth = parseFloat(colWidth) / 100 * this.grid.calcWidth;\n        } else if (!colWidth || isAutoWidth && !this.autoSize) {\n            // no width\n            this._calcWidth = this.defaultWidth || this.grid.getPossibleColumnWidth();\n        } else {\n            this._calcWidth = this.width;\n        }\n        this.calcPixelWidth = parseFloat(this._calcWidth);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected setExpandCollapseState() {\n        this.children.filter(col => (col.visibleWhenCollapsed !== undefined)).forEach(c => {\n            if (!this.collapsible) {\n                c.hidden = this.hidden; return;\n            }\n            c.hidden = this._expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;\n        });\n    }\n    /**\n     * @hidden\n     * @internal\n     */\n    protected checkCollapsibleState() {\n        if (!this.children) {\n            return false;\n        }\n        const cols = this.children.map(child => child.visibleWhenCollapsed);\n        return (cols.some(c => c === true) && cols.some(c => c === false));\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnable() {\n        return (this.grid as any)._init || !this.pinned;\n    }\n\n    /**\n     * @hidden\n     */\n    public get applySelectableClass(): boolean {\n        return this._applySelectableClass;\n    }\n\n    /**\n     * @hidden\n     */\n    public set applySelectableClass(value: boolean) {\n        if (this.selectable) {\n            this._applySelectableClass = value;\n        }\n    }\n}\n","import {\n    AfterContentInit,\n    Component,\n    ContentChildren,\n    ChangeDetectionStrategy,\n    Input,\n    forwardRef,\n    QueryList,\n    TemplateRef,\n    booleanAttribute\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { IgxColumnComponent } from './column.component';\nimport { flatten } from '../../core/utils';\nimport { CellType, ColumnType, IgxColumnTemplateContext } from '../common/grid.interface';\n\n/* blazorElement */\n/* omitModule */\n/* wcElementTag: igc-column-group */\n/* additionalIdentifier: Children.Field */\n/* jsonAPIManageCollectionInMarkup */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Column Group**\n *\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxColumnGroupComponent, IgxRowIslandComponent\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnGroupComponent) }],\n    selector: 'igx-column-group',\n    template: `@if (platform.isElements) {\n        <div #sink style=\"display: none;\">\n            <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group\"></ng-content>\n        </div>\n    }`,\n    standalone: true\n})\nexport class IgxColumnGroupComponent extends IgxColumnComponent implements AfterContentInit {\n\n    /* blazorInclude */\n    /* contentChildren */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ColumnCollection */\n    /* blazorCollectionItemName: Column */\n    /* alternateType: HTMLCollection */\n    /**\n     * @deprecated in version 18.1.0. Use the `childColumns` property instead.\n     */\n    @ContentChildren(IgxColumnComponent, { read: IgxColumnComponent,  })\n    public override children = new QueryList<IgxColumnComponent>();\n\n    /**\n     * Set if the column group is collapsible.\n     * Default value is `false`\n     * ```html\n     *  <igx-column-group [collapsible] = \"true\"></igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override set collapsible(value: boolean) {\n        this._collapsible = value;\n        this.collapsibleChange.emit(this._collapsible);\n        if (this.children && !this.hidden) {\n            if (this._collapsible) {\n                this.setExpandCollapseState();\n            } else {\n                this.children.forEach(child => child.hidden = false);\n            }\n        }\n    }\n    public override get collapsible() {\n        return this._collapsible && this.checkCollapsibleState();\n    }\n\n    /**\n     * Set whether the group is expanded or collapsed initially.\n     * Applied only if the collapsible property is set to `true`\n     * Default value is `true`\n     * ```html\n     *  const state = false\n     *  <igx-column-group [(expand)] = \"state\"></igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override set expanded(value: boolean) {\n        this._expanded = value;\n        this.expandedChange.emit(this._expanded);\n        if (!this.collapsible) {\n            return;\n        }\n        if (!this.hidden && this.children) {\n            this.setExpandCollapseState();\n        }\n    }\n    public override get expanded() {\n        return this._expanded;\n    }\n\n    /**\n     * Gets the column group `summaries`.\n     * ```typescript\n     * let columnGroupSummaries = this.columnGroup.summaries;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input()\n    public override get summaries(): any {\n        return this._summaries;\n    }\n\n     /* blazorSuppress */\n    /**\n     * Sets the column group `summaries`.\n     * ```typescript\n     * this.columnGroup.summaries = IgxNumberSummaryOperand;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set summaries(classRef: any) { }\n\n     /* blazorSuppress */\n    /**\n     * Sets/gets whether the column group is `searchable`.\n     * Default value is `true`.\n     * ```typescript\n     * let isSearchable =  this.columnGroup.searchable;\n     * ```\n     * ```html\n     *  <igx-column-group [searchable] = \"false\"></igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override searchable = true;\n    /**\n     * Gets the column group `filters`.\n     * ```typescript\n     * let columnGroupFilters = this.columnGroup.filters;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input()\n    public override get filters(): any {\n        return this._filters;\n    }\n\n     /* blazorSuppress */\n    /**\n     * Sets the column group `filters`.\n     * ```typescript\n     * this.columnGroup.filters = IgxStringFilteringOperand;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set filters(classRef: any) { }\n\n    /**\n     * Returns if the column group is selectable\n     * ```typescript\n     * let columnGroupSelectable = this.columnGroup.selectable;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get selectable(): boolean {\n        return this.children && this.children.some(child => child.selectable);\n    }\n\n    /**\n     * @hidden\n     */\n    public override set selectable(value: boolean) { }\n\n    /**\n     * @hidden\n     */\n    public override get bodyTemplate(): TemplateRef<any> {\n        return this._bodyTemplate;\n    }\n    /**\n     * @hidden\n     */\n    public override set bodyTemplate(template: TemplateRef<any>) { }\n\n    /**\n     * Allows you to define a custom template for expand/collapse indicator\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input()\n    public override collapsibleIndicatorTemplate: TemplateRef<IgxColumnTemplateContext>;\n\n    /**\n     * @hidden\n     */\n    public override get inlineEditorTemplate(): TemplateRef<any> {\n        return this._inlineEditorTemplate;\n    }\n    /**\n     * @hidden\n     */\n    public override set inlineEditorTemplate(template: TemplateRef<any>) { }\n    /**\n     * @hidden @internal\n     */\n    public override get cells(): CellType[] {\n        return [];\n    }\n    /**\n     * Gets whether the column group is hidden.\n     * ```typescript\n     * let isHidden = this.columnGroup.hidden;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override get hidden() {\n        return this.allChildren.every(c => c.hidden);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Sets the column group hidden property.\n     * ```html\n     * <igx-column [hidden] = \"true\"></igx-column>\n     * ```\n     *\n     * Two-way data binding\n     * ```html\n     * <igx-column [(hidden)] = \"model.columns[0].isHidden\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set hidden(value: boolean) {\n        this._hidden = value;\n        this.hiddenChange.emit(this._hidden);\n        if (this._hidden || !this.collapsible) {\n            this.children.forEach(child => child.hidden = this._hidden);\n        } else {\n            this.children.forEach(c => {\n                if (c.visibleWhenCollapsed === undefined) {\n                    c.hidden = false; return;\n                }\n                c.hidden = this.expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;\n            });\n        }\n    }\n\n    /**\n     * Returns if the column group is selected.\n     * ```typescript\n     * let isSelected = this.columnGroup.selected;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get selected(): boolean {\n        const selectableChildren = this.allChildren.filter(c => !c.columnGroup && c.selectable && !c.hidden);\n        return selectableChildren.length > 0 && selectableChildren.every(c => c.selected);\n    }\n\n     /* blazorSuppress */\n    /**\n     * Select/deselect the column group.\n     * ```typescript\n     * this.columnGroup.selected = true;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set selected(value: boolean) {\n        if (this.selectable) {\n            this.children.forEach(c => {\n                c.selected = value;\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        /*\n            @ContentChildren with descendants still returns the `parent`\n            component in the query list.\n        */\n        if (this.headTemplate && this.headTemplate.length) {\n            this._headerTemplate = this.headTemplate.toArray()[0].template;\n        }\n        if (this.collapseIndicatorTemplate) {\n            this.collapsibleIndicatorTemplate = this.collapseIndicatorTemplate.template;\n        }\n        // currently only ivy fixes the issue, we have to slice only if the first child is group\n        if (this.children.first === this) {\n            this.children.reset(this.children.toArray().slice(1));\n        }\n        this.children.forEach(child => {\n            child.parent = this;\n            if (this.pinned) {\n                child.pinned = this.pinned;\n            }\n            if (this._hidden) {\n                child.hidden = this._hidden;\n            }\n        });\n        if (this.collapsible) {\n            this.setExpandCollapseState();\n        }\n\n        this.children.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxColumnComponent>) => {\n                let shouldReinitPinning = false;\n                change.forEach(x => {\n                    x.parent = this;\n                    if (this.pinned && x.pinned !== this.pinned) {\n                        shouldReinitPinning = true;\n                        x.pinned = this.pinned;\n                    }\n                });\n                if (this.collapsible) {\n                    this.setExpandCollapseState();\n                }\n                if (shouldReinitPinning) {\n                    (this.grid as any).initPinning();\n                }\n            });\n\n    }\n\n    /**\n     * A list containing all the child columns under this column (if any).\n     * Empty without children or if this column is not Group or Layout.\n     */\n    public override get childColumns(): ColumnType[] {\n        return this.children.toArray();\n    }\n\n    /** @hidden @internal **/\n    public override get allChildren(): IgxColumnComponent[] {\n        return flatten(this.children.toArray());\n    }\n    /**\n     * Returns a boolean indicating if the column is a `ColumnGroup`.\n     * ```typescript\n     * let isColumnGroup =  this.columnGroup.columnGroup\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get columnGroup() {\n        return true;\n    }\n    /**\n     * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.\n     * ```typescript\n     * let columnGroup =  this.column.columnGroup;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public override get columnLayout() {\n        return false;\n    }\n    /**\n     * Gets the width of the column group.\n     * ```typescript\n     * let columnGroupWidth = this.columnGroup.width;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get width() {\n        const width = `${this.children.reduce((acc, val) => {\n            if (val.hidden) {\n                return acc;\n            }\n            return acc + parseFloat(val.calcWidth);\n        }, 0)}`;\n        return width + 'px';\n    }\n\n     /* blazorSuppress */\n    public override set width(val) { }\n\n    /** @hidden @internal **/\n    public override get resolvedWidth() {\n        return this.width;\n    }\n\n    /**\n     * @hidden\n     */\n    public override get applySelectableClass(): boolean {\n        return this._applySelectableClass;\n    }\n\n    /**\n     * @hidden\n     */\n    public override set applySelectableClass(value: boolean) {\n        if (this.selectable) {\n            this._applySelectableClass = value;\n            this.children.forEach(c => {\n                c.applySelectableClass = value;\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * Calculates the number of visible columns, based on indexes of first and last visible columns.\n     */\n    public override calcChildren(): number {\n        const visibleChildren = this.allChildren.filter(c => c.visibleIndex > -1);\n        const fi = visibleChildren[0].visibleIndex;\n        const li = visibleChildren[visibleChildren.length - 1].visibleIndex;\n        return li - fi + 1;\n    }\n}\n","import {\n    AfterContentInit,\n    Component,\n    ChangeDetectionStrategy,\n    forwardRef,\n    Input,\n    booleanAttribute\n} from '@angular/core';\nimport { IgxColumnComponent } from './column.component';\nimport { IgxColumnGroupComponent } from './column-group.component';\n\n/* blazorIndirectRender */\n/* blazorElement */\n/* omitModule */\n/* wcElementTag: igc-column-layout */\n/* additionalIdentifier: Children.Field */\n/* jsonAPIManageCollectionInMarkup */\n/**\n * Column layout for declaration of Multi-row Layout\n *\n * @igxParent IgxGridComponent\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnLayoutComponent) }],\n    selector: 'igx-column-layout',\n    template: `@if (platform.isElements) {\n        <div #sink style=\"display: none;\">\n            <ng-content select=\"igx-column,igc-column\"></ng-content>\n        </div>\n    }`,\n    standalone: true\n})\nexport class IgxColumnLayoutComponent extends IgxColumnGroupComponent implements AfterContentInit {\n    /** @hidden @internal **/\n    public childrenVisibleIndexes = [];\n    /**\n     * Gets the width of the column layout.\n     * ```typescript\n     * let columnGroupWidth = this.columnGroup.width;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get width(): any {\n        const width = this.getFilledChildColumnSizes(this.children).reduce((acc, val) => acc + parseFloat(val), 0);\n        return width;\n    }\n\n    /* blazorSuppress */\n    public override set width(val: any) { }\n\n    public override get columnLayout() {\n        return true;\n    }\n\n    /**\n     * @hidden\n     */\n    public override getCalcWidth(): any {\n        let borderWidth = 0;\n\n        if (this.headerGroup && this.headerGroup.hasLastPinnedChildColumn) {\n            const headerStyles = this.grid.document.defaultView.getComputedStyle(this.headerGroup.nativeElement.children[0]);\n            borderWidth = parseFloat(headerStyles.borderRightWidth);\n        }\n\n        return super.getCalcWidth() + borderWidth;\n    }\n\n    /**\n     * Gets the column visible index.\n     * If the column is not visible, returns `-1`.\n     * ```typescript\n     * let visibleColumnIndex =  this.column.visibleIndex;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public override get visibleIndex(): number {\n        if (!isNaN(this._vIndex)) {\n            return this._vIndex;\n        }\n\n        const unpinnedColumns = this.grid.unpinnedColumns.filter(c => c.columnLayout && !c.hidden);\n        const pinnedColumns = this.grid.pinnedColumns.filter(c => c.columnLayout && !c.hidden);\n        let vIndex = -1;\n\n        if (!this.pinned) {\n            const indexInCollection = unpinnedColumns.indexOf(this);\n            vIndex = indexInCollection === -1 ? -1 : pinnedColumns.length + indexInCollection;\n        } else {\n            vIndex = pinnedColumns.indexOf(this);\n        }\n        this._vIndex = vIndex;\n        return vIndex;\n    }\n\n    /*\n     * Gets whether the column layout is hidden.\n     * ```typescript\n     * let isHidden = this.columnGroup.hidden;\n     * ```\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override get hidden() {\n        return this._hidden;\n    }\n\n     /* blazorSuppress */\n    /**\n     * Sets the column layout hidden property.\n     * ```typescript\n     * <igx-column-layout [hidden] = \"true\"></igx-column->\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set hidden(value: boolean) {\n        this._hidden = value;\n        this.children.forEach(child => child.hidden = value);\n        if (this.grid && this.grid.columns && this.grid.columns.length > 0) {\n            // reset indexes in case columns are hidden/shown runtime\n            const columns = this.grid && this.grid.pinnedColumns && this.grid.unpinnedColumns ?\n                this.grid.pinnedColumns.concat(this.grid.unpinnedColumns) : [];\n            if (!this._hidden && !columns.find(c => c.field === this.field)) {\n                this.grid.resetColumnCollections();\n            }\n            this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        super.ngAfterContentInit();\n        if (!this.hidden) {\n            this.hidden = this.allChildren.some(x => x.hidden);\n        } else {\n            this.children.forEach(child => child.hidden = this.hidden);\n        }\n    }\n\n    /** @hidden @internal **/\n    public get hasLastPinnedChildColumn() {\n        return this.children.some(child => child.isLastPinned);\n    }\n\n    /** @hidden @internal **/\n    public get hasFirstPinnedChildColumn() {\n        return this.children.some(child => child.isFirstPinned);\n    }\n\n    /**\n     * @hidden\n     */\n    public override populateVisibleIndexes() {\n        this.childrenVisibleIndexes = [];\n        const columns = this.grid?.pinnedColumns && this.grid?.unpinnedColumns\n            ? this.grid.pinnedColumns.concat(this.grid.unpinnedColumns)\n            : [];\n        const orderedCols = columns\n            .filter(x => !x.columnGroup && !x.hidden)\n            .sort((a, b) => a.rowStart - b.rowStart || columns.indexOf(a.parent) - columns.indexOf(b.parent) || a.colStart - b.colStart);\n        this.children.forEach(child => {\n            const rs = child.rowStart || 1;\n            let vIndex = 0;\n            // filter out all cols with larger rowStart\n            const cols = orderedCols.filter(c =>\n                !c.columnGroup && (c.rowStart || 1) <= rs);\n            vIndex = cols.indexOf(child);\n            this.childrenVisibleIndexes.push({ column: child, index: vIndex });\n        });\n    }\n}\n","// import { IgxColumnGroupComponent } from './column-group.component';\n// import { IgxColumnLayoutComponent } from './column-layout.component';\n// import { IgxColumnComponent } from './column.component';\n// import {\n//     IgxCellEditorTemplateDirective,\n//     IgxCellFooterTemplateDirective,\n//     IgxCellHeaderTemplateDirective,\n//     IgxCellTemplateDirective,\n//     IgxCellValidationErrorDirective,\n//     IgxCollapsibleIndicatorTemplateDirective,\n//     IgxFilterCellTemplateDirective,\n//     IgxSummaryTemplateDirective\n// } from './templates.directive';\nimport {\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnRequiredValidatorDirective,\n    IgxColumPatternValidatorDirective\n} from './validators.directive';\n\nexport * from './column.component';\nexport * from './column-group.component';\nexport * from './column-layout.component';\nexport * from './templates.directive';\nexport * from './validators.directive';\nexport * from './interfaces';\n\n/* NOTE: Grid column validation directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_GRID_VALIDATION_DIRECTIVES = [\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective\n] as const;\n\n/* NOTE: Grid column validation directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_COLUMN_DIRECTIVES = [\n//     IgxFilterCellTemplateDirective,\n//     IgxSummaryTemplateDirective,\n//     IgxCellTemplateDirective,\n//     IgxCellValidationErrorDirective,\n//     IgxCellHeaderTemplateDirective,\n//     IgxCellFooterTemplateDirective,\n//     IgxCellEditorTemplateDirective,\n//     IgxCollapsibleIndicatorTemplateDirective,\n//     IgxColumnComponent,\n//     IgxColumnGroupComponent,\n//     IgxColumnLayoutComponent\n// ] as const;\n","export interface IQueryBuilderResourceStrings {\n    igx_query_builder_date_placeholder?: string;\n    igx_query_builder_time_placeholder?: string;\n    igx_query_builder_datetime_placeholder?: string;\n    igx_query_builder_filter_operator_and?: string;\n    igx_query_builder_filter_operator_or?: string;\n    igx_query_builder_filter_contains?: string;\n    igx_query_builder_filter_doesNotContain?: string;\n    igx_query_builder_filter_startsWith?: string;\n    igx_query_builder_filter_endsWith?: string;\n    igx_query_builder_filter_equals?: string;\n    igx_query_builder_filter_doesNotEqual?: string;\n    igx_query_builder_filter_empty?: string;\n    igx_query_builder_filter_notEmpty?: string;\n    igx_query_builder_filter_null?: string;\n    igx_query_builder_filter_notNull?: string;\n    igx_query_builder_filter_in?: string;\n    igx_query_builder_filter_notIn?: string;\n    igx_query_builder_filter_before?: string;\n    igx_query_builder_filter_after?: string;\n    igx_query_builder_filter_at?: string;\n    igx_query_builder_filter_not_at?: string;\n    igx_query_builder_filter_at_before?: string;\n    igx_query_builder_filter_at_after?: string;\n    igx_query_builder_filter_today?: string;\n    igx_query_builder_filter_yesterday?: string;\n    igx_query_builder_filter_thisMonth?: string;\n    igx_query_builder_filter_lastMonth?: string;\n    igx_query_builder_filter_nextMonth?: string;\n    igx_query_builder_filter_thisYear?: string;\n    igx_query_builder_filter_lastYear?: string;\n    igx_query_builder_filter_nextYear?: string;\n    igx_query_builder_filter_greaterThan?: string;\n    igx_query_builder_filter_lessThan?: string;\n    igx_query_builder_filter_greaterThanOrEqualTo?: string;\n    igx_query_builder_filter_lessThanOrEqualTo?: string;\n    igx_query_builder_filter_true?: string;\n    igx_query_builder_filter_false?: string;\n    igx_query_builder_filter_all?: string;\n    igx_query_builder_from_label?: string;\n    igx_query_builder_select_label?: string;\n    igx_query_builder_where_label?: string;\n    igx_query_builder_and_group?: string;\n    igx_query_builder_or_group?: string;\n    igx_query_builder_end_group?: string;\n    igx_query_builder_and_label?: string;\n    igx_query_builder_or_label?: string;\n    igx_query_builder_switch_group?: string;\n    igx_query_builder_add_condition?: string;\n    igx_query_builder_add_group?: string;\n    igx_query_builder_add_condition_root?: string;\n    igx_query_builder_add_group_root?: string;\n    igx_query_builder_ungroup?: string;\n    igx_query_builder_delete?: string;\n    igx_query_builder_delete_filters?: string;\n    igx_query_builder_initial_text?: string;\n    igx_query_builder_column_placeholder?: string;\n    igx_query_builder_condition_placeholder?: string;\n    igx_query_builder_value_placeholder?: string;\n    igx_query_builder_query_value_placeholder?: string;\n    igx_query_builder_all_fields?: string;\n    igx_query_builder_details?: string;\n    igx_query_builder_search?: string;\n    igx_query_builder_select_all?: string;\n    igx_query_builder_select_entity?: string;\n    igx_query_builder_select_return_field_single?: string;\n    igx_query_builder_select_return_fields?: string;\n    igx_query_builder_dialog_title?: string;\n    igx_query_builder_dialog_message?: string;\n    igx_query_builder_dialog_checkbox_text?: string;\n    igx_query_builder_dialog_cancel?: string;\n    igx_query_builder_dialog_confirm?: string;\n    igx_query_builder_drop_ghost_text?: string;\n}\n\nexport const QueryBuilderResourceStringsEN: IQueryBuilderResourceStrings = {\n    igx_query_builder_date_placeholder: 'Select date',\n    igx_query_builder_time_placeholder: 'Select time',\n    igx_query_builder_datetime_placeholder: 'Select date & time',\n    igx_query_builder_filter_operator_and: 'And',\n    igx_query_builder_filter_operator_or: 'Or',\n    igx_query_builder_filter_contains: 'Contains',\n    igx_query_builder_filter_doesNotContain: 'Does Not Contain',\n    igx_query_builder_filter_startsWith: 'Starts With',\n    igx_query_builder_filter_endsWith: 'Ends With',\n    igx_query_builder_filter_equals: 'Equals',\n    igx_query_builder_filter_doesNotEqual: 'Does Not Equal',\n    igx_query_builder_filter_empty: 'Empty',\n    igx_query_builder_filter_notEmpty: 'Not Empty',\n    igx_query_builder_filter_null: 'Null',\n    igx_query_builder_filter_notNull: 'Not Null',\n    igx_query_builder_filter_in: 'In',\n    igx_query_builder_filter_notIn: 'Not In',\n    igx_query_builder_filter_before: 'Before',\n    igx_query_builder_filter_after: 'After',\n    igx_query_builder_filter_at: 'At',\n    igx_query_builder_filter_not_at: 'Not At',\n    igx_query_builder_filter_at_before: 'At or Before',\n    igx_query_builder_filter_at_after: 'At or After',\n    igx_query_builder_filter_today: 'Today',\n    igx_query_builder_filter_yesterday: 'Yesterday',\n    igx_query_builder_filter_thisMonth: 'This Month',\n    igx_query_builder_filter_lastMonth: 'Last Month',\n    igx_query_builder_filter_nextMonth: 'Next Month',\n    igx_query_builder_filter_thisYear: 'This Year',\n    igx_query_builder_filter_lastYear: 'Last Year',\n    igx_query_builder_filter_nextYear: 'Next Year',\n    igx_query_builder_filter_greaterThan: 'Greater Than',\n    igx_query_builder_filter_lessThan: 'Less Than',\n    igx_query_builder_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n    igx_query_builder_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n    igx_query_builder_filter_true: 'True',\n    igx_query_builder_filter_false: 'False',\n    igx_query_builder_filter_all: 'All',\n    igx_query_builder_from_label: 'From',\n    igx_query_builder_select_label: 'Select',\n    igx_query_builder_where_label: 'Where',\n    igx_query_builder_and_group: '\"And\" Group',\n    igx_query_builder_or_group: '\"Or\" Group',\n    igx_query_builder_end_group: 'End Group',\n    igx_query_builder_and_label: 'and',\n    igx_query_builder_or_label: 'or',\n    igx_query_builder_switch_group: 'Switch to {0}',\n    igx_query_builder_add_condition: 'Add condition',\n    igx_query_builder_add_group: 'Add group',\n    igx_query_builder_add_condition_root: 'Condition',\n    igx_query_builder_add_group_root: 'Group',\n    igx_query_builder_ungroup: 'Ungroup',\n    igx_query_builder_delete: 'Delete',\n    igx_query_builder_delete_filters: 'Delete filters',\n    igx_query_builder_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n    igx_query_builder_column_placeholder: 'Select column',\n    igx_query_builder_condition_placeholder: 'Select filter',\n    igx_query_builder_value_placeholder: 'Value',\n    igx_query_builder_query_value_placeholder: 'Sub-query results',\n    igx_query_builder_all_fields: 'All fields',\n    igx_query_builder_details: 'Details',\n    igx_query_builder_search: 'Search',\n    igx_query_builder_select_all: 'Select All',\n    igx_query_builder_select_entity: 'Select entity',\n    igx_query_builder_select_return_field_single: 'Select return field',\n    igx_query_builder_select_return_fields: 'Select return fields',\n    igx_query_builder_dialog_title: 'Confirmation',\n    igx_query_builder_dialog_message: 'By changing the entity, you will lose your current settings. Are you sure you want to do that?',\n    igx_query_builder_dialog_checkbox_text: 'Do not show this dialog again',\n    igx_query_builder_dialog_cancel: 'Cancel',\n    igx_query_builder_dialog_confirm: 'Confirm',\n    igx_query_builder_drop_ghost_text: 'Drop here to insert'\n};","import { IgxDropDownItemComponent } from './../drop-down/drop-down-item.component';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n    selector: 'igx-select-item',\n\ttemplateUrl: 'select-item.component.html',\n    standalone: true\n})\nexport class IgxSelectItemComponent extends IgxDropDownItemComponent {\n    /** @hidden @internal */\n    public override isHeader: boolean;\n\n    private _text: any;\n\n    /**\n     * Gets/Sets the item's text to be displayed in the select component's input when the item is selected.\n     *\n     * ```typescript\n     *  //get\n     *  let mySelectedItem = this.dropDown.selectedItem;\n     *  let selectedItemText = mySelectedItem.text;\n     * ```\n     *\n     * ```html\n     * // set\n     * <igx-select-item [text]=\"'London'\"></igx-select-item>\n     * ```\n     */\n    @Input()\n    public get text(): string {\n        return this._text;\n    }\n\n    public set text(text: string) {\n        this._text = text;\n    }\n\n    /** @hidden @internal */\n    public get itemText() {\n        if (this._text !== undefined) {\n            return this._text;\n        }\n        // If text @Input is undefined, try extract a meaningful item text out of the item template\n        return this.elementRef.nativeElement.textContent.trim();\n    }\n\n    /**\n     * Sets/Gets if the item is the currently selected one in the select\n     *\n     * ```typescript\n     *  let mySelectedItem = this.select.selectedItem;\n     *  let isMyItemSelected = mySelectedItem.selected; // true\n     * ```\n     */\n    public override get selected() {\n        return !this.isHeader && !this.disabled && this.selection.is_item_selected(this.dropDown.id, this);\n    }\n\n    public override set selected(value: any) {\n        if (value && !this.isHeader && !this.disabled) {\n            this.dropDown.selectItem(this);\n        }\n    }\n}\n","<span class=\"igx-drop-down__content\">\n    <ng-content select=\"igx-prefix, [igxPrefix]\"></ng-content>\n    <span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n    <ng-content select=\"igx-suffix, [igxSuffix]\"></ng-content>\n</span>\n","import { VerticalAlignment, HorizontalAlignment, PositionSettings, Size, Util, ConnectedFit, Point  } from '../services/overlay/utilities';\nimport { IPositionStrategy } from '../services/overlay/position';\n\nimport { IgxSelectBase } from './select.common';\nimport { BaseFitPositionStrategy } from '../services/overlay/position/base-fit-position-strategy';\nimport { PlatformUtil } from '../core/utils';\nimport { Optional } from '@angular/core';\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\n\n/** @hidden @internal */\nexport class SelectPositioningStrategy extends BaseFitPositionStrategy implements IPositionStrategy {\n    private _selectDefaultSettings = {\n        horizontalDirection: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Bottom,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalStartPoint: VerticalAlignment.Top,\n        openAnimation: fadeIn,\n        closeAnimation: fadeOut\n    };\n\n    // Global variables required for cases of !initialCall (page scroll/overlay repositionAll)\n    private global_yOffset = 0;\n    private global_xOffset = 0;\n    private global_styles: SelectStyles = {};\n\n    constructor(public select: IgxSelectBase, settings?: PositionSettings, @Optional() protected platform?: PlatformUtil) {\n        super();\n        this.settings = Object.assign({}, this._selectDefaultSettings, settings);\n    }\n\n    /**\n     * Position the element based on the PositionStrategy implementing this interface.\n     *\n     * @param contentElement The HTML element to be positioned\n     * @param size Size of the element\n     * @param document reference to the Document object\n     * @param initialCall should be true if this is the initial call to the method\n     * @param target attaching target for the component to show\n     * ```typescript\n     * settings.positionStrategy.position(content, size, document, true);\n     * ```\n     */\n    public override position(contentElement: HTMLElement,\n                    size: Size,\n                    document?: Document,\n                    initialCall?: boolean,\n                    target?: Point | HTMLElement): void {\n        const targetElement = target;\n        const rects = super.calculateElementRectangles(contentElement, targetElement);\n        // selectFit obj, to be used for both cases of initialCall and !initialCall(page scroll/overlay repositionAll)\n        const selectFit: SelectFit = {\n            verticalOffset: this.global_yOffset,\n            horizontalOffset: this.global_xOffset,\n            targetRect: rects.targetRect,\n            contentElementRect: rects.elementRect,\n            styles: this.global_styles,\n            scrollContainer: this.select.scrollContainer,\n            scrollContainerRect: this.select.scrollContainer.getBoundingClientRect()\n        };\n\n        if (initialCall) {\n            this.select.scrollContainer.scrollTop = 0;\n            // Fill in the required selectFit object properties.\n            selectFit.viewPortRect = Util.getViewportRect(document);\n            selectFit.itemElement = this.getInteractionItemElement();\n            selectFit.itemRect = selectFit.itemElement.getBoundingClientRect();\n\n            // Calculate input and selected item elements style related variables\n            selectFit.styles = this.calculateStyles(selectFit, targetElement);\n\n            selectFit.scrollAmount = this.calculateScrollAmount(selectFit);\n            // Calculate how much to offset the overlay container.\n            this.calculateYoffset(selectFit);\n            this.calculateXoffset(selectFit);\n\n            super.updateViewPortFit(selectFit);\n            // container does not fit in viewPort and is out on Top or Bottom\n            if (selectFit.fitVertical.back < 0 || selectFit.fitVertical.forward < 0) {\n                this.fitInViewport(contentElement, selectFit);\n            }\n            // Calculate scrollTop independently of the dropdown, as we cover all `igsSelect` specific positioning and\n            // scrolling to selected item scenarios here.\n            this.select.scrollContainer.scrollTop = selectFit.scrollAmount;\n        }\n        this.setStyles(contentElement, selectFit);\n    }\n\n    /**\n     * Obtain the selected item if there is such one or otherwise use the first one\n     */\n    public getInteractionItemElement(): HTMLElement {\n        let itemElement;\n        if (this.select.selectedItem) {\n            itemElement = this.select.selectedItem.element.nativeElement;\n        } else {\n            itemElement = this.select.getFirstItemElement();\n        }\n        return itemElement;\n    }\n\n    /**\n     * Position the items outer container so selected item text is positioned over input text and if header\n     * And/OR footer - both header/footer are visible\n     *\n     * @param selectFit selectFit to use for computation.\n     */\n    protected fitInViewport(contentElement: HTMLElement, selectFit: SelectFit) {\n        const footer = selectFit.scrollContainerRect.bottom - selectFit.contentElementRect.bottom;\n        const header = selectFit.scrollContainerRect.top - selectFit.contentElementRect.top;\n        const lastItemFitSize = selectFit.targetRect.bottom + selectFit.styles.itemTextToInputTextDiff - footer;\n        const firstItemFitSize = selectFit.targetRect.top - selectFit.styles.itemTextToInputTextDiff - header;\n        // out of viewPort on Top\n        if (selectFit.fitVertical.back < 0) {\n            const possibleScrollAmount = selectFit.scrollContainer.scrollHeight -\n                selectFit.scrollContainerRect.height - selectFit.scrollAmount;\n            if (possibleScrollAmount + selectFit.fitVertical.back > 0 && firstItemFitSize > selectFit.viewPortRect.top) {\n                selectFit.scrollAmount -= selectFit.fitVertical.back;\n                selectFit.verticalOffset -= selectFit.fitVertical.back;\n                this.global_yOffset = selectFit.verticalOffset;\n            } else {\n                selectFit.verticalOffset = 0 ;\n                this.global_yOffset = 0;\n            }\n        // out of viewPort on Bottom\n        } else if (selectFit.fitVertical.forward < 0) {\n            if (selectFit.scrollAmount + selectFit.fitVertical.forward > 0 && lastItemFitSize < selectFit.viewPortRect.bottom) {\n                selectFit.scrollAmount += selectFit.fitVertical.forward;\n                selectFit.verticalOffset += selectFit.fitVertical.forward;\n                this.global_yOffset = selectFit.verticalOffset;\n            } else {\n                selectFit.verticalOffset = -selectFit.contentElementRect.height + selectFit.targetRect.height;\n                this.global_yOffset = selectFit.verticalOffset;\n            }\n        }\n    }\n\n    /**\n     * Sets element's style which effectively positions the provided element\n     *\n     * @param element Element to position\n     * @param selectFit selectFit to use for computation.\n     * @param initialCall should be true if this is the initial call to the position method calling setStyles\n     */\n    protected setStyles(contentElement: HTMLElement, selectFit: SelectFit) {\n        super.setStyle(contentElement, selectFit.targetRect, selectFit.contentElementRect, selectFit);\n        contentElement.style.width = `${selectFit.styles.contentElementNewWidth}px`; // manage container based on paddings?\n        this.global_styles.contentElementNewWidth = selectFit.styles.contentElementNewWidth;\n    }\n\n    /**\n     * Calculate selected item scroll position.\n     */\n    private calculateScrollAmount(selectFit: SelectFit): number {\n        const itemElementRect = selectFit.itemRect;\n        const scrollContainer = selectFit.scrollContainer;\n        const scrollContainerRect = selectFit.scrollContainerRect;\n        const scrollDelta = scrollContainerRect.top - itemElementRect.top;\n        let scrollPosition = scrollContainer.scrollTop - scrollDelta;\n\n        const dropDownHeight = scrollContainer.clientHeight;\n        scrollPosition -= dropDownHeight / 2;\n        scrollPosition += itemElementRect.height / 2;\n\n        return Math.round(Math.min(Math.max(0, scrollPosition), scrollContainer.scrollHeight - scrollContainerRect.height));\n    }\n\n    /**\n     * Calculate the necessary input and selected item styles to be used for positioning item text over input text.\n     * Calculate & Set default items container width.\n     *\n     * @param selectFit selectFit to use for computation.\n     */\n    private calculateStyles(selectFit: SelectFit, target: Point | HTMLElement): SelectStyles  {\n        const styles: SelectStyles = {};\n        const inputElementStyles = window.getComputedStyle(target as Element);\n        const itemElementStyles = window.getComputedStyle(selectFit.itemElement);\n        const numericInputFontSize = parseFloat(inputElementStyles.fontSize);\n        const numericInputPaddingTop = parseFloat(inputElementStyles.paddingTop);\n        const numericInputPaddingBottom = parseFloat(inputElementStyles.paddingBottom);\n        const numericItemFontSize = parseFloat(itemElementStyles.fontSize);\n        const inputTextToInputTop = ((selectFit.targetRect.bottom - numericInputPaddingBottom)\n            - (selectFit.targetRect.top + numericInputPaddingTop) - numericInputFontSize) / 2;\n        const itemTextToItemTop = (selectFit.itemRect.height - numericItemFontSize) / 2;\n        styles.itemTextToInputTextDiff = Math.round(itemTextToItemTop - inputTextToInputTop - numericInputPaddingTop);\n\n        const numericLeftPadding = parseFloat(itemElementStyles.paddingLeft);\n        const numericTextIndent = parseFloat(itemElementStyles.textIndent);\n\n        styles.itemTextPadding = numericLeftPadding;\n        styles.itemTextIndent = numericTextIndent;\n        // 24 is the input's toggle ddl icon width\n        styles.contentElementNewWidth = selectFit.targetRect.width + 24 + numericLeftPadding * 2;\n\n        return styles;\n    }\n\n    /**\n     * Calculate how much to offset the overlay container for Y-axis.\n     */\n    private calculateYoffset(selectFit: SelectFit) {\n        selectFit.verticalOffset = -(selectFit.itemRect.top - selectFit.contentElementRect.top +\n            selectFit.styles.itemTextToInputTextDiff - selectFit.scrollAmount);\n        this.global_yOffset = selectFit.verticalOffset;\n    }\n\n    /**\n     * Calculate how much to offset the overlay container for X-axis.\n     */\n    private calculateXoffset(selectFit: SelectFit) {\n        selectFit.horizontalOffset = selectFit.styles.itemTextIndent - selectFit.styles.itemTextPadding;\n        this.global_xOffset = selectFit.horizontalOffset;\n    }\n}\n\n/** @hidden */\nexport interface SelectFit extends ConnectedFit {\n    itemElement?: HTMLElement;\n    scrollContainer: HTMLElement;\n    scrollContainerRect: ClientRect;\n    itemRect?: ClientRect;\n    styles?: SelectStyles;\n    scrollAmount?: number;\n}\n\n/** @hidden */\nexport interface SelectStyles {\n    itemTextPadding?: number;\n    itemTextIndent?: number;\n    itemTextToInputTextDiff?: number;\n    contentElementNewWidth?: number;\n    numericLeftPadding?: number;\n}\n","import { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive';\nimport { Directive, Input, OnDestroy } from '@angular/core';\nimport { Subscription, timer } from 'rxjs';\nimport { IgxSelectItemComponent } from './select-item.component';\nimport { IgxSelectBase } from './select.common';\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxSelectItemNavigation]',\n    standalone: true\n})\nexport class IgxSelectItemNavigationDirective extends IgxDropDownItemNavigationDirective implements OnDestroy {\n    protected override _target: IgxSelectBase = null;\n\n    @Input('igxSelectItemNavigation')\n    public override get target(): IgxSelectBase {\n        return this._target;\n    }\n    public override set target(target: IgxSelectBase) {\n        this._target = target ? target : this.dropdown as IgxSelectBase;\n    }\n\n    constructor() {\n        super(null);\n    }\n\n    /** Captures keydown events and calls the appropriate handlers on the target component */\n    public override handleKeyDown(event: KeyboardEvent) {\n        if (!event) {\n            return;\n        }\n\n        const key = event.key.toLowerCase();\n        if (event.altKey && (key === 'arrowdown' || key === 'arrowup' || key === 'down' || key === 'up')) {\n            this.target.toggle();\n            return;\n        }\n\n        if (this.target.collapsed) {\n            switch (key) {\n                case 'space':\n                case 'spacebar':\n                case ' ':\n                case 'enter':\n                    event.preventDefault();\n                    this.target.open();\n                    return;\n                case 'arrowdown':\n                case 'down':\n                    this.target.navigateNext();\n                    this.target.selectItem(this.target.focusedItem);\n                    event.preventDefault();\n                    return;\n                case 'arrowup':\n                case 'up':\n                    this.target.navigatePrev();\n                    this.target.selectItem(this.target.focusedItem);\n                    event.preventDefault();\n                    return;\n                default:\n                    break;\n            }\n        } else if (key === 'tab' || event.shiftKey && key === 'tab') {\n            this.target.close();\n        }\n\n        super.handleKeyDown(event);\n        this.captureKey(event);\n    }\n\n    private inputStream = '';\n    private clearStream$ = Subscription.EMPTY;\n\n    public captureKey(event: KeyboardEvent) {\n        // relying only on key, available on all major browsers:\n        // https://caniuse.com/#feat=keyboardevent-key (IE/Edge quirk doesn't affect letter typing)\n        if (!event || !event.key || event.key.length > 1 || event.key === ' ' || event.key === 'spacebar') {\n            // ignore longer keys ('Alt', 'ArrowDown', etc) AND spacebar (used of open/close)\n            return;\n        }\n\n        this.clearStream$.unsubscribe();\n        this.clearStream$ = timer(500).subscribe(() => {\n            this.inputStream = '';\n        });\n\n        this.inputStream += event.key;\n        const focusedItem = this.target.focusedItem as IgxSelectItemComponent;\n\n        // select the item\n        if (focusedItem && this.inputStream.length > 1 && focusedItem.itemText.toLowerCase().startsWith(this.inputStream.toLowerCase())) {\n            return;\n        }\n        this.activateItemByText(this.inputStream);\n    }\n\n    public activateItemByText(text: string) {\n        const items = this.target.items as IgxSelectItemComponent[];\n\n        // ^ this is focused OR selected if the dd is closed\n\n        let nextItem = this.findNextItem(items, text);\n\n        // If there is no such an item starting with the current text input stream AND the last Char in the input stream\n        // is the same as the first one, find next item starting with the same first Char.\n        // Covers cases of holding down the same key Ex: \"pppppp\" that iterates trough list items starting with \"p\".\n        if (!nextItem && text.charAt(0) === text.charAt(text.length - 1)) {\n            text = text.slice(0, 1);\n            nextItem = this.findNextItem(items, text);\n        }\n\n        // If there is no other item to be found, do not change the active item.\n        if (!nextItem) {\n            return;\n        }\n\n        if (this.target.collapsed) {\n            this.target.selectItem(nextItem);\n        }\n        this.target.navigateItem(items.indexOf(nextItem));\n    }\n\n    public ngOnDestroy(): void {\n        this.clearStream$.unsubscribe();\n    }\n\n    private findNextItem(items: IgxSelectItemComponent[],  text: string) {\n        const activeItemIndex = items.indexOf(this.target.focusedItem as IgxSelectItemComponent) || 0;\n\n        // Match next item in ddl items and wrap around if needed\n        return items.slice(activeItemIndex + 1).find(x => !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase()))) ||\n            items.slice(0, activeItemIndex).find(x => !x.disabled && (x.itemText.toLowerCase().startsWith(text.toLowerCase())));\n    }\n}\n","import {\n    AfterContentChecked,\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    Inject,\n    Injector,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport { AbstractControl, ControlValueAccessor, NgControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { noop } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { EditorProvider } from '../core/edit-provider';\nimport { IgxSelectionAPIService } from '../core/selection';\nimport { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxDropDownItemBaseDirective } from '../drop-down/drop-down-item.base';\nimport { IGX_DROPDOWN_BASE, ISelectionEventArgs, Navigate } from '../drop-down/drop-down.common';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\nimport { AbsoluteScrollStrategy } from '../services/overlay/scroll/absolute-scroll-strategy';\nimport { OverlaySettings } from '../services/overlay/utilities';\nimport { IgxDropDownComponent } from './../drop-down/drop-down.component';\nimport { IgxSelectItemComponent } from './select-item.component';\nimport { SelectPositioningStrategy } from './select-positioning-strategy';\nimport { IgxSelectBase } from './select.common';\nimport { IgxHintDirective, IgxInputGroupType, IgxPrefixDirective, IGX_INPUT_GROUP_TYPE } from '../input-group/public_api';\nimport { ToggleViewCancelableEventArgs, ToggleViewEventArgs, IgxToggleDirective } from '../directives/toggle/toggle.directive';\nimport { IgxOverlayService } from '../services/overlay/overlay';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxSelectItemNavigationDirective } from './select-navigation.directive';\nimport { IgxInputDirective, IgxInputState } from '../directives/input/input.directive';\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxSelectToggleIcon]',\n    standalone: true\n})\nexport class IgxSelectToggleIconDirective {\n}\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxSelectHeader]',\n    standalone: true\n})\nexport class IgxSelectHeaderDirective {\n}\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxSelectFooter]',\n    standalone: true\n})\nexport class IgxSelectFooterDirective {\n}\n\n/**\n * **Ignite UI for Angular Select** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/select)\n *\n * The `igxSelect` provides an input with dropdown list allowing selection of a single item.\n *\n * Example:\n * ```html\n * <igx-select #select1 [placeholder]=\"'Pick One'\">\n *   <label igxLabel>Select Label</label>\n *   <igx-select-item *ngFor=\"let item of items\" [value]=\"item.field\">\n *     {{ item.field }}\n *   </igx-select-item>\n * </igx-select>\n * ```\n */\n@Component({\n    selector: 'igx-select',\n    templateUrl: './select.component.html',\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxSelectComponent, multi: true },\n        { provide: IGX_DROPDOWN_BASE, useExisting: IgxSelectComponent }\n    ],\n    styles: [`\n        :host {\n            display: block;\n        }\n    `],\n    imports: [IgxInputGroupComponent, IgxInputDirective, IgxSelectItemNavigationDirective, IgxSuffixDirective, NgTemplateOutlet, IgxIconComponent, IgxToggleDirective]\n})\nexport class IgxSelectComponent extends IgxDropDownComponent implements IgxSelectBase, ControlValueAccessor,\n    AfterContentInit, OnInit, AfterViewInit, OnDestroy, EditorProvider, AfterContentChecked {\n\n    /** @hidden @internal */\n    @ViewChild('inputGroup', { read: IgxInputGroupComponent, static: true }) public inputGroup: IgxInputGroupComponent;\n\n    /** @hidden @internal */\n    @ViewChild('input', { read: IgxInputDirective, static: true }) public input: IgxInputDirective;\n\n    /** @hidden @internal */\n    @ContentChildren(forwardRef(() => IgxSelectItemComponent), { descendants: true })\n    public override children: QueryList<IgxSelectItemComponent>;\n\n    @ContentChildren(IgxPrefixDirective, { descendants: true })\n    protected prefixes: QueryList<IgxPrefixDirective>;\n\n    @ContentChildren(IgxSuffixDirective, { descendants: true })\n    protected suffixes: QueryList<IgxSuffixDirective>;\n\n    /** @hidden @internal */\n    @ContentChild(forwardRef(() => IgxLabelDirective), { static: true }) public label: IgxLabelDirective;\n\n    /**\n     * Sets input placeholder.\n     *\n     */\n    @Input() public placeholder;\n\n\n    /**\n     * Disables the component.\n     * ```html\n     * <igx-select [disabled]=\"'true'\"></igx-select>\n     * ```\n     */\n    @Input({ transform: booleanAttribute }) public disabled = false;\n\n    /**\n     * Sets custom OverlaySettings `IgxSelectComponent`.\n     * ```html\n     * <igx-select [overlaySettings] = \"customOverlaySettings\"></igx-select>\n     * ```\n     */\n    @Input()\n    public overlaySettings: OverlaySettings;\n\n    /** @hidden @internal */\n    @HostBinding('style.maxHeight')\n    public override maxHeight = '256px';\n\n    /**\n     * Emitted before the dropdown is opened\n     *\n     * ```html\n     * <igx-select opening='handleOpening($event)'></igx-select>\n     * ```\n     */\n    @Output()\n    public override opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is opened\n     *\n     * ```html\n     * <igx-select (opened)='handleOpened($event)'></igx-select>\n     * ```\n     */\n    @Output()\n    public override opened = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * Emitted before the dropdown is closed\n     *\n     * ```html\n     * <igx-select (closing)='handleClosing($event)'></igx-select>\n     * ```\n     */\n    @Output()\n    public override closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n    /**\n     * Emitted after the dropdown is closed\n     *\n     * ```html\n     * <igx-select (closed)='handleClosed($event)'></igx-select>\n     * ```\n     */\n    @Output()\n    public override closed = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * The custom template, if any, that should be used when rendering the select TOGGLE(open/close) button\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.select.toggleIconTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-select #select>\n     *      ...\n     *      <ng-template igxSelectToggleIcon let-collapsed>\n     *          <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n     *      </ng-template>\n     *  </igx-select>\n     * ```\n     */\n    @ContentChild(IgxSelectToggleIconDirective, { read: TemplateRef })\n    public toggleIconTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the HEADER for the select items list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.select.headerTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-select #select>\n     *      ...\n     *      <ng-template igxSelectHeader>\n     *          <div class=\"select__header\">\n     *              This is a custom header\n     *          </div>\n     *      </ng-template>\n     *  </igx-select>\n     * ```\n     */\n    @ContentChild(IgxSelectHeaderDirective, { read: TemplateRef, static: false })\n    public headerTemplate: TemplateRef<any> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering the FOOTER for the select items list\n     *\n     * ```typescript\n     * // Set in typescript\n     * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n     * myComponent.select.footerTemplate = myCustomTemplate;\n     * ```\n     * ```html\n     * <!-- Set in markup -->\n     *  <igx-select #select>\n     *      ...\n     *      <ng-template igxSelectFooter>\n     *          <div class=\"select__footer\">\n     *              This is a custom footer\n     *          </div>\n     *      </ng-template>\n     *  </igx-select>\n     * ```\n     */\n    @ContentChild(IgxSelectFooterDirective, { read: TemplateRef, static: false })\n    public footerTemplate: TemplateRef<any> = null;\n\n    @ContentChild(IgxHintDirective, { read: ElementRef }) private hintElement: ElementRef;\n\n    /** @hidden @internal */\n    public override width: string;\n\n    /** @hidden @internal do not use the drop-down container class */\n    public override cssClass = false;\n\n    /** @hidden @internal */\n    public override allowItemsFocus = false;\n\n    /** @hidden @internal */\n    public override height: string;\n\n    private ngControl: NgControl = null;\n    private _overlayDefaults: OverlaySettings;\n    private _value: any;\n    private _type = null;\n\n    /**\n     * Gets/Sets the component value.\n     *\n     * ```typescript\n     * // get\n     * let selectValue = this.select.value;\n     * ```\n     *\n     * ```typescript\n     * // set\n     * this.select.value = 'London';\n     * ```\n     * ```html\n     * <igx-select [value]=\"value\"></igx-select>\n     * ```\n     */\n    @Input()\n    public get value(): any {\n        return this._value;\n    }\n    public set value(v: any) {\n        if (this._value === v) {\n            return;\n        }\n        this._value = v;\n        this.setSelection(this.items.find(x => x.value === this.value));\n    }\n\n    /**\n     * Sets how the select will be styled.\n     * The allowed values are `line`, `box` and `border`. The input-group default is `line`.\n     * ```html\n     * <igx-select [type]=\"'box'\"></igx-select>\n     * ```\n     */\n    @Input()\n    public get type(): IgxInputGroupType {\n        return this._type || this._inputGroupType || 'line';\n    }\n\n    public set type(val: IgxInputGroupType) {\n        this._type = val;\n    }\n\n    /** @hidden @internal */\n    public get selectionValue() {\n        const selectedItem = this.selectedItem;\n        return selectedItem ? selectedItem.itemText : '';\n    }\n\n    /** @hidden @internal */\n    public override get selectedItem(): IgxSelectItemComponent {\n        return this.selection.first_item(this.id);\n    }\n\n    private _onChangeCallback: (_: any) => void = noop;\n    private _onTouchedCallback: () => void = noop;\n\n    constructor(\n        elementRef: ElementRef,\n        cdr: ChangeDetectorRef,\n        @Inject(DOCUMENT) document: any,\n        selection: IgxSelectionAPIService,\n        @Inject(IgxOverlayService) protected overlayService: IgxOverlayService,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) private _inputGroupType: IgxInputGroupType,\n        private _injector: Injector,\n    ) {\n        super(elementRef, cdr, document, selection);\n    }\n\n    //#region ControlValueAccessor\n\n    /** @hidden @internal */\n    public writeValue = (value: any) => {\n        this.value = value;\n    };\n\n    /** @hidden @internal */\n    public registerOnChange(fn: any): void {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: any): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    //#endregion\n\n    /** @hidden @internal */\n    public getEditElement(): HTMLInputElement {\n        return this.input.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public override selectItem(newSelection: IgxDropDownItemBaseDirective, event?) {\n        const oldSelection = this.selectedItem ?? <IgxDropDownItemBaseDirective>{};\n\n        if (newSelection === null || newSelection.disabled || newSelection.isHeader) {\n            return;\n        }\n\n        if (newSelection === oldSelection) {\n            this.toggleDirective.close();\n            return;\n        }\n\n        const args: ISelectionEventArgs = { oldSelection, newSelection, cancel: false, owner: this };\n        this.selectionChanging.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        this.setSelection(newSelection);\n        this._value = newSelection.value;\n\n        if (event) {\n            this.toggleDirective.close();\n        }\n\n        this.cdr.detectChanges();\n        this._onChangeCallback(this.value);\n    }\n\n    /** @hidden @internal */\n    public getFirstItemElement(): HTMLElement {\n        return this.children.first.element.nativeElement;\n    }\n\n    /**\n     * Opens the select\n     *\n     * ```typescript\n     * this.select.open();\n     * ```\n     */\n    public override open(overlaySettings?: OverlaySettings) {\n        if (this.disabled || this.items.length === 0) {\n            return;\n        }\n        if (!this.selectedItem) {\n            this.navigateFirst();\n        }\n\n        super.open(Object.assign({}, this._overlayDefaults, this.overlaySettings, overlaySettings));\n    }\n\n    public inputGroupClick(event: MouseEvent, overlaySettings?: OverlaySettings) {\n        const targetElement = event.target as HTMLElement;\n\n        if (this.hintElement && targetElement.contains(this.hintElement.nativeElement)) {\n            return;\n        }\n        this.toggle(Object.assign({}, this._overlayDefaults, this.overlaySettings, overlaySettings));\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentInit() {\n        this._overlayDefaults = {\n            target: this.getEditElement(),\n            modal: false,\n            positionStrategy: new SelectPositioningStrategy(this),\n            scrollStrategy: new AbsoluteScrollStrategy(),\n            excludeFromOutsideClick: [this.inputGroup.element.nativeElement as HTMLElement]\n        };\n        const changes$ = this.children.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.setSelection(this.items.find(x => x.value === this.value));\n            this.cdr.detectChanges();\n        });\n        Promise.resolve().then(() => {\n            if (!changes$.closed) {\n                this.children.notifyOnChanges();\n            }\n        });\n    }\n\n    /**\n     * Event handlers\n     *\n     * @hidden @internal\n     */\n    public handleOpening(e: ToggleViewCancelableEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.opening.emit(args);\n\n        e.cancel = args.cancel;\n        if (args.cancel) {\n            return;\n        }\n    }\n\n    /** @hidden @internal */\n    public override onToggleContentAppended(event: ToggleViewEventArgs) {\n        const info = this.overlayService.getOverlayById(event.id);\n        if (info?.settings?.positionStrategy instanceof SelectPositioningStrategy) {\n            return;\n        }\n        super.onToggleContentAppended(event);\n    }\n\n    /** @hidden @internal */\n    public handleOpened() {\n        this.updateItemFocus();\n        this.opened.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public handleClosing(e: ToggleViewCancelableEventArgs) {\n        const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n        this.closing.emit(args);\n        e.cancel = args.cancel;\n    }\n\n    /** @hidden @internal */\n    public handleClosed() {\n        this.focusItem(false);\n        this.closed.emit({ owner: this });\n    }\n\n    /** @hidden @internal */\n    public onBlur(): void {\n        this._onTouchedCallback();\n        if (this.ngControl && this.ngControl.invalid) {\n            this.input.valid = IgxInputState.INVALID;\n        } else {\n            this.input.valid = IgxInputState.INITIAL;\n        }\n    }\n\n    /** @hidden @internal */\n    public onFocus(): void {\n        this._onTouchedCallback();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngOnInit() {\n        this.ngControl = this._injector.get<NgControl>(NgControl, null);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n\n        if (this.ngControl) {\n            this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged.bind(this));\n            this.manageRequiredAsterisk();\n        }\n\n        this.cdr.detectChanges();\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentChecked() {\n        if (this.inputGroup && this.prefixes?.length > 0) {\n            this.inputGroup.prefixes = this.prefixes;\n        }\n\n        if (this.inputGroup && this.suffixes?.length > 0) {\n            this.inputGroup.suffixes = this.suffixes;\n        }\n    }\n\n    /** @hidden @internal */\n    public get toggleIcon(): string {\n        return this.collapsed ? 'input_expand' : 'input_collapse';\n    }\n\n    /**\n     * @hidden @internal\n     * Prevent input blur - closing the items container on Header/Footer Template click.\n     */\n    public mousedownHandler(event) {\n        event.preventDefault();\n    }\n\n    protected onStatusChanged() {\n        this.manageRequiredAsterisk();\n        if (this.ngControl && !this.disabled && this.isTouchedOrDirty) {\n            if (this.hasValidators && this.inputGroup.isFocused) {\n                this.input.valid = this.ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n            } else {\n                // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n                this.input.valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n            }\n        } else {\n            this.input.valid = IgxInputState.INITIAL;\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this.ngControl.control.touched || this.ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this.ngControl.control.validator || !!this.ngControl.control.asyncValidator);\n    }\n\n    protected override navigate(direction: Navigate, currentIndex?: number) {\n        if (this.collapsed && this.selectedItem) {\n            this.navigateItem(this.selectedItem.itemIndex);\n        }\n        super.navigate(direction, currentIndex);\n    }\n\n    protected manageRequiredAsterisk(): void {\n        const hasRequiredHTMLAttribute = this.elementRef.nativeElement.hasAttribute('required');\n        if (this.ngControl && this.ngControl.control.validator) {\n            // Run the validation with empty object to check if required is enabled.\n            const error = this.ngControl.control.validator({} as AbstractControl);\n            this.inputGroup.isRequired = error && error.required;\n            this.cdr.markForCheck();\n\n            // If validator is dynamically cleared and no required HTML attribute is set,\n            // reset label's required class(asterisk) and IgxInputState #6896\n        } else if (this.inputGroup.isRequired && this.ngControl && !this.ngControl.control.validator && !hasRequiredHTMLAttribute) {\n            this.input.valid = IgxInputState.INITIAL;\n            this.inputGroup.isRequired = false;\n            this.cdr.markForCheck();\n        }\n    }\n\n    private setSelection(item: IgxDropDownItemBaseDirective) {\n        if (item && item.value !== undefined && item.value !== null) {\n            this.selection.set(this.id, new Set([item]));\n        } else {\n            this.selection.clear(this.id);\n        }\n    }\n}\n\n","<igx-input-group #inputGroup class=\"input-group\" (click)=\"inputGroupClick($event)\" [type]=\"type === 'search' ? 'line' : type\">\n    <ng-container ngProjectAs=\"[igxLabel]\">\n        <ng-content select=\"[igxLabel]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-prefix\">\n        <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n    </ng-container>\n    <input #input class=\"input\" type=\"text\" igxInput [igxSelectItemNavigation]=\"this\"\n        [disabled]=\"disabled\"\n        readonly=\"true\"\n        [attr.placeholder]=\"this.placeholder\"\n        [value]=\"this.selectionValue\"\n        role=\"combobox\"\n        aria-haspopup=\"listbox\"\n        [attr.aria-labelledby]=\"this.label?.id\"\n        [attr.aria-expanded]=\"!this.collapsed\"\n        [attr.aria-owns]=\"this.listId\"\n        [attr.aria-activedescendant]=\"!this.collapsed ? this.focusedItem?.id : null\"\n        (blur)=\"onBlur()\"\n        (focus)=\"onFocus()\"\n    />\n    <ng-container ngProjectAs=\"igx-suffix\">\n        <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n    </ng-container>\n    <igx-suffix class=\"igx-select__toggle-button\">\n        @if (toggleIconTemplate) {\n            <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: this.collapsed}\"></ng-container>\n        }\n        @if (!toggleIconTemplate) {\n            <igx-icon family=\"default\" [name]=\"toggleIcon\" [attr.aria-hidden]=\"true\"></igx-icon>\n        }\n    </igx-suffix>\n    <ng-container ngProjectAs=\"igx-hint, [igxHint]\" >\n        <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n    </ng-container>\n</igx-input-group>\n<div igxToggle class=\"igx-drop-down__list\" (mousedown)=\"mousedownHandler($event);\"\n    (appended)=\"onToggleContentAppended($event)\"\n    (opening)=\"handleOpening($event)\"\n    (opened)=\"handleOpened()\"\n    (closing)=\"handleClosing($event)\"\n    (closed)=\"handleClosed()\">\n\n    @if (headerTemplate) {\n        <div class=\"igx-drop-down__select-header\">\n            <ng-content *ngTemplateOutlet=\"headerTemplate\"></ng-content>\n        </div>\n    }\n\n    <!-- #7436 LMB scrolling closes items container - unselectable attribute is IE specific  -->\n    <div #scrollContainer class=\"igx-drop-down__list-scroll\" unselectable=\"on\" [style.maxHeight]=\"maxHeight\"\n        [attr.id]=\"this.listId\" role=\"listbox\" [attr.aria-labelledby]=\"this.label?.id\">\n        <ng-content select=\"igx-select-item, igx-select-item-group\"></ng-content>\n    </div>\n\n    @if (footerTemplate) {\n        <div class=\"igx-drop-down__select-footer\">\n            <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n        </div>\n    }\n</div>\n","import { ElementRef } from '@angular/core';\nimport { DatePartDeltas } from '../directives/date-time-editor/public_api';\n\n/** @hidden */\nexport const IGX_TIME_PICKER_COMPONENT = 'IgxTimePickerComponentToken';\n\n/** @hidden */\nexport interface IgxTimePickerBase {\n    hourList: ElementRef;\n    locale: string;\n    minuteList: ElementRef;\n    secondsList: ElementRef;\n    ampmList: ElementRef;\n    inputFormat: string;\n    itemsDelta: Pick<DatePartDeltas, 'hours' | 'minutes' | 'seconds' | 'fractionalSeconds'>;\n\tspinLoop: boolean;\n    selectedDate: Date;\n    maxDropdownValue: Date;\n    minDropdownValue: Date;\n    isTwelveHourFormat: boolean;\n    showHoursList: boolean;\n    showMinutesList: boolean;\n    showSecondsList: boolean;\n    showAmPmList: boolean;\n    minDateValue: Date;\n    maxDateValue: Date;\n    /** @hidden @internal */\n    appliedFormat: string;\n    nextHour(delta: number);\n    nextMinute(delta: number);\n    nextSeconds(delta: number);\n    nextAmPm(delta: number);\n    close(): void;\n    cancelButtonClick(): void;\n    okButtonClick(): void;\n    onItemClick(item: string, dateType: string): void;\n    getPartValue(value: Date, type: string): string;\n    toISOString(value: Date): string;\n}\n","/**\n * This file contains all the directives used by the @link IgxTimePickerComponent.\n * You should generally not use them directly.\n *\n * @preferred\n */\nimport {\n    Directive,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit\n} from '@angular/core';\nimport { HammerGesturesManager } from '../core/touch';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { IgxTimePickerBase, IGX_TIME_PICKER_COMPONENT } from './time-picker.common';\nimport { HammerInput, HammerOptions } from '../core/touch-annotations';\n\n/** @hidden */\n@Directive({\n    selector: '[igxItemList]',\n    providers: [HammerGesturesManager],\n    standalone: true\n})\nexport class IgxItemListDirective implements OnInit, OnDestroy {\n    @HostBinding('attr.tabindex')\n    public tabindex = 0;\n\n    @Input('igxItemList')\n    public type: string;\n\n    public isActive: boolean;\n\n    constructor(\n        @Inject(IGX_TIME_PICKER_COMPONENT) public timePicker: IgxTimePickerBase,\n        private elementRef: ElementRef,\n        private touchManager: HammerGesturesManager\n    ) { }\n\n    @HostBinding('class.igx-time-picker__column')\n    public get defaultCSS(): boolean {\n        return true;\n    }\n\n    @HostBinding('class.igx-time-picker__hourList')\n    public get hourCSS(): boolean {\n        return this.type === 'hourList';\n    }\n\n    @HostBinding('class.igx-time-picker__minuteList')\n    public get minuteCSS(): boolean {\n        return this.type === 'minuteList';\n    }\n\n    @HostBinding('class.igx-time-picker__secondsList')\n    public get secondsCSS(): boolean {\n        return this.type === 'secondsList';\n    }\n\n    @HostBinding('class.igx-time-picker__ampmList')\n    public get ampmCSS(): boolean {\n        return this.type === 'ampmList';\n    }\n\n    @HostListener('focus')\n    public onFocus() {\n        this.isActive = true;\n    }\n\n    @HostListener('blur')\n    public onBlur() {\n        this.isActive = false;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowdown', ['$event'])\n    public onKeydownArrowDown(event: KeyboardEvent) {\n        event.preventDefault();\n\n        this.nextItem(1);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowup', ['$event'])\n    public onKeydownArrowUp(event: KeyboardEvent) {\n        event.preventDefault();\n\n        this.nextItem(-1);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowright', ['$event'])\n    public onKeydownArrowRight(event: KeyboardEvent) {\n        event.preventDefault();\n\n        const listName = (event.target as HTMLElement).className;\n\n        if (listName.indexOf('hourList') !== -1 && this.timePicker.minuteList) {\n            this.timePicker.minuteList.nativeElement.focus();\n        } else if ((listName.indexOf('hourList') !== -1 || listName.indexOf('minuteList') !== -1) && this.timePicker.secondsList) {\n            this.timePicker.secondsList.nativeElement.focus();\n        } else if ((listName.indexOf('hourList') !== -1 || listName.indexOf('minuteList') !== -1 ||\n            listName.indexOf('secondsList') !== -1) && this.timePicker.ampmList) {\n            this.timePicker.ampmList.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.arrowleft', ['$event'])\n    public onKeydownArrowLeft(event: KeyboardEvent) {\n        event.preventDefault();\n        const listName = (event.target as HTMLElement).className;\n\n        if (listName.indexOf('ampmList') !== -1 && this.timePicker.secondsList) {\n            this.timePicker.secondsList.nativeElement.focus();\n        } else if (listName.indexOf('secondsList') !== -1 && this.timePicker.secondsList\n            && listName.indexOf('minutesList') && this.timePicker.minuteList) {\n            this.timePicker.minuteList.nativeElement.focus();\n        } else if (listName.indexOf('ampmList') !== -1 && this.timePicker.minuteList) {\n            this.timePicker.minuteList.nativeElement.focus();\n        } else if ((listName.indexOf('ampmList') !== -1 || listName.indexOf('secondsList') !== -1 ||\n            listName.indexOf('minuteList') !== -1) && this.timePicker.hourList) {\n            this.timePicker.hourList.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.enter', ['$event'])\n    public onKeydownEnter(event: KeyboardEvent) {\n        event.preventDefault();\n        this.timePicker.okButtonClick();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('keydown.escape', ['$event'])\n    public onKeydownEscape(event: KeyboardEvent) {\n        event.preventDefault();\n\n        this.timePicker.cancelButtonClick();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mouseover')\n    public onHover() {\n        this.elementRef.nativeElement.focus();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('wheel', ['$event'])\n    public onScroll(event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const delta = event.deltaY;\n        if (delta !== 0) {\n            this.nextItem(delta);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnInit() {\n        const hammerOptions: HammerOptions = { recognizers: [[HammerGesturesManager.Hammer?.Pan, { direction: HammerGesturesManager.Hammer?.DIRECTION_VERTICAL, threshold: 10 }]] };\n        this.touchManager.addEventListener(this.elementRef.nativeElement, 'pan', this.onPanMove, hammerOptions);\n    }\n\n    /**\n     * @hidden @internal\n     */\n     public ngOnDestroy() {\n        this.touchManager.destroy();\n    }\n\n    private onPanMove = (event: HammerInput) => {\n        const delta = event.deltaY < 0 ? -1 : event.deltaY > 0 ? 1 : 0;\n        if (delta !== 0) {\n            this.nextItem(delta);\n        }\n    };\n\n    private nextItem(delta: number): void {\n        switch (this.type) {\n            case 'hourList': {\n                this.timePicker.nextHour(delta);\n                break;\n            }\n            case 'minuteList': {\n                this.timePicker.nextMinute(delta);\n                break;\n            }\n            case 'secondsList': {\n                this.timePicker.nextSeconds(delta);\n                break;\n            }\n            case 'ampmList': {\n                this.timePicker.nextAmPm(delta);\n                break;\n            }\n        }\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxTimeItem]',\n    exportAs: 'timeItem',\n    standalone: true\n})\nexport class IgxTimeItemDirective {\n    @Input('igxTimeItem')\n    public value: string;\n\n    @HostBinding('class.igx-time-picker__item')\n    public get defaultCSS(): boolean {\n        return true;\n    }\n\n    @HostBinding('class.igx-time-picker__item--selected')\n    public get selectedCSS(): boolean {\n        return this.isSelectedTime;\n    }\n\n    @HostBinding('class.igx-time-picker__item--active')\n    public get activeCSS(): boolean {\n        return this.isSelectedTime && this.itemList.isActive;\n    }\n\n    public get isSelectedTime(): boolean {\n        const currentValue = this.value.length < 2 ? `0${this.value}` : this.value;\n        const dateType = this.itemList.type;\n        const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.appliedFormat);\n        switch (dateType) {\n            case 'hourList':\n                const hourPart = inputDateParts.find(element => element.type === 'hours');\n                return DateTimeUtil.getPartValue(this.timePicker.selectedDate, hourPart, hourPart.format.length) === currentValue;\n            case 'minuteList':\n                const minutePart = inputDateParts.find(element => element.type === 'minutes');\n                return DateTimeUtil.getPartValue(this.timePicker.selectedDate, minutePart, minutePart.format.length) === currentValue;\n            case 'secondsList':\n                const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n                return DateTimeUtil.getPartValue(this.timePicker.selectedDate, secondsPart, secondsPart.format.length) === currentValue;\n            case 'ampmList':\n                const ampmPart = inputDateParts.find(element => element.format.indexOf('a') !== -1 || element.format === 'tt');\n                return DateTimeUtil.getPartValue(this.timePicker.selectedDate, ampmPart, ampmPart.format.length) === this.value;\n        }\n    }\n\n    public get minValue(): string {\n        const dateType = this.itemList.type;\n        const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.appliedFormat);\n        switch (dateType) {\n            case 'hourList':\n                return this.getHourPart(this.timePicker.minDropdownValue);\n            case 'minuteList':\n                if (this.timePicker.selectedDate.getHours() === this.timePicker.minDropdownValue.getHours()) {\n                    const minutePart = inputDateParts.find(element => element.type === 'minutes');\n                    return DateTimeUtil.getPartValue(this.timePicker.minDropdownValue, minutePart, minutePart.format.length);\n                }\n                return '00';\n            case 'secondsList':\n                const date = new Date(this.timePicker.selectedDate);\n                const min = new Date(this.timePicker.minDropdownValue);\n                date.setSeconds(0);\n                min.setSeconds(0);\n                if (date.getTime() === min.getTime()) {\n                    const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n                    return DateTimeUtil.getPartValue(this.timePicker.minDropdownValue, secondsPart, secondsPart.format.length);\n                }\n                return '00';\n            case 'ampmList':\n                const ampmPart = inputDateParts.find(element => element.format.indexOf('a') !== -1 || element.format === 'tt');\n                return DateTimeUtil.getPartValue(this.timePicker.minDropdownValue, ampmPart, ampmPart.format.length);\n        }\n    }\n\n    public get maxValue(): string {\n        const dateType = this.itemList.type;\n        const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.appliedFormat);\n        switch (dateType) {\n            case 'hourList':\n                return this.getHourPart(this.timePicker.maxDropdownValue);\n            case 'minuteList':\n                if (this.timePicker.selectedDate.getHours() === this.timePicker.maxDropdownValue.getHours()) {\n                    const minutePart = inputDateParts.find(element => element.type === 'minutes');\n                    return DateTimeUtil.getPartValue(this.timePicker.maxDropdownValue, minutePart, minutePart.format.length);\n                } else {\n                    const currentTime = new Date(this.timePicker.selectedDate);\n                    const minDelta = this.timePicker.itemsDelta.minutes;\n                    const remainder = 60 % minDelta;\n                    const delta = remainder === 0 ? 60 - minDelta : 60 - remainder;\n                    currentTime.setMinutes(delta);\n                    const minutePart = inputDateParts.find(element => element.type === 'minutes');\n                    return DateTimeUtil.getPartValue(currentTime, minutePart, minutePart.format.length);\n                }\n            case 'secondsList':\n                const date = new Date(this.timePicker.selectedDate);\n                const max = new Date(this.timePicker.maxDropdownValue);\n                date.setSeconds(0);\n                max.setSeconds(0);\n                if (date.getTime() === max.getTime()) {\n                    const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n                    return DateTimeUtil.getPartValue(this.timePicker.maxDropdownValue, secondsPart, secondsPart.format.length);\n                } else {\n                    const secDelta = this.timePicker.itemsDelta.seconds;\n                    const remainder = 60 % secDelta;\n                    const delta = remainder === 0 ? 60 - secDelta : 60 - remainder;\n                    date.setSeconds(delta);\n                    const secondsPart = inputDateParts.find(element => element.type === 'seconds');\n                    return DateTimeUtil.getPartValue(date, secondsPart, secondsPart.format.length);\n                }\n            case 'ampmList':\n                const ampmPart = inputDateParts.find(element => element.format.indexOf('a') !== -1 || element.format === 'tt');\n                return DateTimeUtil.getPartValue(this.timePicker.maxDropdownValue, ampmPart, ampmPart.format.length);\n        }\n    }\n\n    public get hourValue(): string {\n        return this.getHourPart(this.timePicker.selectedDate);\n    }\n\n    constructor(@Inject(IGX_TIME_PICKER_COMPONENT)\n    public timePicker: IgxTimePickerBase,\n        private itemList: IgxItemListDirective) { }\n\n    @HostListener('click', ['value'])\n    public onClick(item) {\n        if (item !== '') {\n            const dateType = this.itemList.type;\n            this.timePicker.onItemClick(item, dateType);\n        }\n    }\n\n    private getHourPart(date: Date): string {\n        const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.timePicker.appliedFormat);\n        const hourPart = inputDateParts.find(element => element.type === 'hours');\n        const ampmPart = inputDateParts.find(element =>element.format.indexOf('a') !== -1 || element.format === 'tt');\n        const hour = DateTimeUtil.getPartValue(date, hourPart, hourPart.format.length);\n        if (ampmPart) {\n            const ampm = DateTimeUtil.getPartValue(date, ampmPart, ampmPart.format.length);\n            return `${hour} ${ampm}`;\n        }\n        return hour;\n    }\n}\n","export interface ITimePickerResourceStrings {\n    igx_time_picker_ok?: string;\n    igx_time_picker_cancel?: string;\n    igx_time_picker_change_time?: string;\n    igx_time_picker_choose_time?: string;\n}\n\nexport const TimePickerResourceStringsEN: ITimePickerResourceStrings = {\n    igx_time_picker_ok: 'OK',\n    igx_time_picker_cancel: 'Cancel',\n    igx_time_picker_change_time: 'Change Time',\n    igx_time_picker_choose_time: 'Choose Time'\n};\n","import { Pipe, PipeTransform, Inject } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { IGX_TIME_PICKER_COMPONENT, IgxTimePickerBase } from './time-picker.common';\nimport { DatePart } from '../directives/date-time-editor/public_api';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\n\nconst ITEMS_COUNT = 7;\n\n@Pipe({\n    name: 'timeFormatPipe',\n    standalone: true\n})\nexport class TimeFormatPipe implements PipeTransform {\n    constructor(@Inject(IGX_TIME_PICKER_COMPONENT) private timePicker: IgxTimePickerBase) { }\n\n    public transform(value: Date): string {\n        const format = this.timePicker.appliedFormat.replace('tt', 'aa');\n        const datePipe = new DatePipe(this.timePicker.locale);\n        return datePipe.transform(value, format);\n    }\n}\n\n@Pipe({\n    name: 'timeItemPipe',\n    standalone: true\n})\nexport class TimeItemPipe implements PipeTransform {\n    constructor(@Inject(IGX_TIME_PICKER_COMPONENT) private timePicker: IgxTimePickerBase) { }\n\n    public transform(_collection: any[], timePart: string, selectedDate: Date, min: Date, max: Date) {\n        let list;\n        let part;\n        switch (timePart) {\n            case 'hour':\n                list = this.generateHours(min, max);\n                const hours = this.timePicker.isTwelveHourFormat ? this.toTwelveHourFormat(selectedDate.getHours())\n                    : selectedDate.getHours();\n                list = this.scrollListItem(hours, list);\n                part = DatePart.Hours;\n                break;\n            case 'minutes':\n                list = this.generateMinutes(selectedDate, min, max);\n                list = this.scrollListItem(selectedDate.getMinutes(), list);\n                part = DatePart.Minutes;\n                break;\n            case 'seconds':\n                list = this.generateSeconds(selectedDate, min, max);\n                list = this.scrollListItem(selectedDate.getSeconds(), list);\n                part = DatePart.Seconds;\n                break;\n            case 'ampm':\n                const selectedAmPm = this.timePicker.getPartValue(selectedDate, 'ampm');\n                list = this.generateAmPm(min, max, selectedAmPm);\n                list = this.scrollListItem(selectedAmPm, list);\n                part = DatePart.AmPm;\n                break;\n        }\n        return this.getListView(list, part);\n    }\n\n    private getListView(view: any, dateType: DatePart): any {\n        for (let i = 0; i < view.length; i++) {\n            view[i] = this.getItemView(view[i], dateType);\n        }\n        return view;\n    }\n\n    private getItemView(item: any, dateType: DatePart): string {\n        if (item === null) {\n            item = '';\n        } else if (dateType && typeof (item) !== 'string') {\n            const leadZeroHour = (item < 10 && (this.timePicker.appliedFormat?.indexOf('hh') !== -1\n                || this.timePicker.appliedFormat?.indexOf('HH') !== -1));\n            const leadZeroMinute = (item < 10 && this.timePicker.appliedFormat?.indexOf('mm') !== -1);\n            const leadZeroSeconds = (item < 10 && this.timePicker.appliedFormat?.indexOf('ss') !== -1);\n\n            const leadZero = {\n                hours: leadZeroHour,\n                minutes: leadZeroMinute,\n                seconds: leadZeroSeconds\n            }[dateType];\n\n            item = (leadZero) ? '0' + item : `${item}`;\n        }\n        return item;\n    }\n\n    private scrollListItem(item: number | string, items: any[]): any[] {\n        const itemsCount = items.length;\n        let view;\n        if (items) {\n            const index = items.indexOf(item);\n            if (index < 3) {\n                view = items.slice(itemsCount - (3 - index), itemsCount);\n                view = view.concat(items.slice(0, index + 4));\n            } else if (index + 4 > itemsCount) {\n                view = items.slice(index - 3, itemsCount);\n                view = view.concat(items.slice(0, index + 4 - itemsCount));\n            } else {\n                view = items.slice(index - 3, index + 4);\n            }\n        }\n        return view;\n    }\n\n    private generateHours(min: Date, max: Date): any[] {\n        const hourItems = [];\n        let hoursCount = this.timePicker.isTwelveHourFormat ? 13 : 24;\n        hoursCount /= this.timePicker.itemsDelta.hours;\n        const minHours = min.getHours();\n        const maxHours = max.getHours();\n\n        if (hoursCount > 1) {\n            for (let hourIndex = 0; hourIndex < 24; hourIndex++) {\n                let hours = hourIndex * this.timePicker.itemsDelta.hours;\n                if (hours >= minHours && hours <= maxHours) {\n                    hours = this.timePicker.isTwelveHourFormat ? this.toTwelveHourFormat(hours) : hours;\n                    if (!hourItems.find((element => element === hours))) {\n                        hourItems.push(hours);\n                    }\n                }\n            }\n        } else {\n            hourItems.push(0);\n        }\n\n        if (hourItems.length < ITEMS_COUNT || hoursCount < ITEMS_COUNT || !this.timePicker.spinLoop) {\n            const index = !this.timePicker.spinLoop || (hourItems.length < ITEMS_COUNT && hoursCount < ITEMS_COUNT) ? 6 : 3;\n            for (let i = 0; i < index; i++) {\n                hourItems.push(null);\n            }\n        }\n\n        return hourItems;\n    }\n\n    private generateMinutes(time: Date, min: Date, max: Date): any[] {\n        const minuteItems = [];\n        const minuteItemsCount = 60 / this.timePicker.itemsDelta.minutes;\n        time = new Date(time);\n\n        for (let i = 0; i < minuteItemsCount; i++) {\n            const minutes = i * this.timePicker.itemsDelta.minutes;\n            time.setMinutes(minutes);\n            if (time >= min && time <= max) {\n                minuteItems.push(i * this.timePicker.itemsDelta.minutes);\n            }\n        }\n\n        if (minuteItems.length < ITEMS_COUNT || minuteItemsCount < ITEMS_COUNT || !this.timePicker.spinLoop) {\n            const index = !this.timePicker.spinLoop || (minuteItems.length < ITEMS_COUNT && minuteItemsCount < ITEMS_COUNT) ? 6 : 3;\n            for (let i = 0; i < index; i++) {\n                minuteItems.push(null);\n            }\n        }\n\n        return minuteItems;\n    }\n\n    private generateSeconds(time: Date, min: Date, max: Date): any[] {\n        const secondsItems = [];\n        const secondsItemsCount = 60 / this.timePicker.itemsDelta.seconds;\n        time = new Date(time);\n\n        for (let i = 0; i < secondsItemsCount; i++) {\n            const seconds = i * this.timePicker.itemsDelta.seconds;\n            time.setSeconds(seconds);\n            if (time.getTime() >= min.getTime()\n                && time.getTime() <= max.getTime()) {\n                secondsItems.push(i * this.timePicker.itemsDelta.seconds);\n            }\n        }\n\n        if (secondsItems.length < ITEMS_COUNT || secondsItemsCount < ITEMS_COUNT || !this.timePicker.spinLoop) {\n            const index = !this.timePicker.spinLoop || (secondsItems.length < ITEMS_COUNT && secondsItemsCount < ITEMS_COUNT) ? 6 : 3;\n            for (let i = 0; i < index; i++) {\n                secondsItems.push(null);\n            }\n        }\n\n        return secondsItems;\n    }\n\n    private generateAmPm(min: Date, max: Date, selectedAmPm: string): any[] {\n        const ampmItems = [];\n        const minHour = min.getHours();\n        const maxHour = max.getHours();\n\n        if (minHour < 12) {\n            ampmItems.push(DateTimeUtil.getAmPmValue(selectedAmPm.length, true));\n        }\n\n        if (minHour >= 12 || maxHour >= 12) {\n            ampmItems.push(DateTimeUtil.getAmPmValue(selectedAmPm.length, false));\n        }\n\n        for (let i = 0; i < 5; i++) {\n            ampmItems.push(null);\n        }\n\n        return ampmItems;\n    }\n\n    private toTwelveHourFormat(hour: number): number {\n        if (hour > 12) {\n            hour -= 12;\n        } else if (hour === 0) {\n            hour = 12;\n        }\n\n        return hour;\n    }\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n    ContentChild,\n    Inject,\n    AfterViewInit,\n    Injector,\n    PipeTransform,\n    ChangeDetectorRef,\n    LOCALE_ID, Optional, ContentChildren, QueryList, HostListener, booleanAttribute\n} from '@angular/core';\nimport {\n    ControlValueAccessor,\n    NG_VALUE_ACCESSOR,\n    NgControl,\n    AbstractControl,\n    ValidationErrors,\n    Validator,\n    NG_VALIDATORS\n} from '@angular/forms';\n\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\nimport { IgxInputDirective, IgxInputState } from '../directives/input/input.directive';\nimport { IgxInputGroupType, IGX_INPUT_GROUP_TYPE } from '../input-group/public_api';\nimport {\n    IgxItemListDirective,\n    IgxTimeItemDirective\n} from './time-picker.directives';\nimport { Subscription, noop, fromEvent } from 'rxjs';\nimport { IgxTimePickerBase, IGX_TIME_PICKER_COMPONENT } from './time-picker.common';\nimport { AbsoluteScrollStrategy } from '../services/overlay/scroll';\nimport { AutoPositionStrategy } from '../services/overlay/position';\nimport { OverlaySettings } from '../services/overlay/utilities';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\n\nimport { IgxDateTimeEditorDirective } from '../directives/date-time-editor/date-time-editor.directive';\nimport { IgxToggleDirective } from '../directives/toggle/toggle.directive';\nimport { ITimePickerResourceStrings, TimePickerResourceStringsEN } from '../core/i18n/time-picker-resources';\nimport { IBaseEventArgs, isEqual, isDate, PlatformUtil, IBaseCancelableBrowserEventArgs } from '../core/utils';\nimport { PickerInteractionMode } from '../date-common/types';\nimport { IgxTextSelectionDirective } from '../directives/text-selection/text-selection.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { PickerBaseDirective } from '../date-common/picker-base.directive';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { DatePart, DatePartDeltas } from '../directives/date-time-editor/public_api';\nimport { PickerHeaderOrientation } from '../date-common/types';\nimport { IgxPickerActionsDirective, IgxPickerClearComponent } from '../date-common/picker-icons.common';\nimport { TimeFormatPipe, TimeItemPipe } from './time-picker.pipes';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { IgxDividerDirective } from '../directives/divider/divider.directive';\n\nlet NEXT_ID = 0;\nexport interface IgxTimePickerValidationFailedEventArgs extends IBaseEventArgs {\n    previousValue: Date | string;\n    currentValue: Date | string;\n}\n\n@Component({\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: IgxTimePickerComponent,\n            multi: true\n        },\n        {\n            provide: IGX_TIME_PICKER_COMPONENT,\n            useExisting: IgxTimePickerComponent\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: IgxTimePickerComponent,\n            multi: true\n        }\n    ],\n    selector: 'igx-time-picker',\n    templateUrl: 'time-picker.component.html',\n    styles: [\n        `:host {\n            display: block;\n        }`\n    ],\n    imports: [IgxInputGroupComponent, IgxInputDirective, IgxDateTimeEditorDirective, IgxTextSelectionDirective, IgxPrefixDirective, IgxIconComponent, IgxSuffixDirective, IgxButtonDirective, IgxToggleDirective, NgClass, IgxItemListDirective, IgxTimeItemDirective, NgTemplateOutlet, TimeFormatPipe, TimeItemPipe, IgxDividerDirective]\n})\nexport class IgxTimePickerComponent extends PickerBaseDirective\n    implements\n    IgxTimePickerBase,\n    ControlValueAccessor,\n    OnInit,\n    OnDestroy,\n    AfterViewInit,\n    Validator {\n    /**\n     * Sets the value of the `id` attribute.\n     * ```html\n     * <igx-time-picker [id]=\"'igx-time-picker-5'\" [displayFormat]=\"h:mm tt\" ></igx-time-picker>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-time-picker-${NEXT_ID++}`;\n\n    /**\n     * The format used when editable input is not focused. Defaults to the `inputFormat` if not set.\n     *\n     * @remarks\n     * Uses Angular's `DatePipe`.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker displayFormat=\"mm:ss\"></igx-time-picker>\n     * ```\n     *\n     */\n    @Input()\n    public override displayFormat: string;\n\n    /**\n     * The expected user input format and placeholder.\n     *\n     * @remarks\n     * Default is `hh:mm tt`\n     *\n     * @example\n     * ```html\n     * <igx-time-picker inputFormat=\"HH:mm\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public override inputFormat: string;\n\n    /**\n     * Gets/Sets the interaction mode - dialog or drop down.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker mode=\"dialog\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public override mode: PickerInteractionMode = PickerInteractionMode.DropDown;\n\n    /**\n     * The minimum value the picker will accept.\n     *\n     * @remarks\n     * If a `string` value is passed in, it must be in ISO format.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker [minValue]=\"18:00:00\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public set minValue(value: Date | string) {\n        this._minValue = value;\n        const date = this.parseToDate(value);\n        if (date) {\n            this._dateMinValue = new Date();\n            this._dateMinValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n            this.minDropdownValue = this.setMinMaxDropdownValue('min', this._dateMinValue);\n        }\n        this.setSelectedValue(this._selectedDate);\n        this._onValidatorChange();\n    }\n\n    public get minValue(): Date | string {\n        return this._minValue;\n    }\n\n    /**\n     * Gets if the dropdown/dialog is collapsed\n     *\n     * ```typescript\n     * let isCollapsed = this.timePicker.collapsed;\n     * ```\n     */\n    public override get collapsed(): boolean {\n        return this.toggleRef?.collapsed;\n    }\n\n    /**\n     * The maximum value the picker will accept.\n     *\n     * @remarks\n     * If a `string` value is passed in, it must be in ISO format.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker [maxValue]=\"20:30:00\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public set maxValue(value: Date | string) {\n        this._maxValue = value;\n        const date = this.parseToDate(value);\n        if (date) {\n            this._dateMaxValue = new Date();\n            this._dateMaxValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n            this.maxDropdownValue = this.setMinMaxDropdownValue('max', this._dateMaxValue);\n        }\n        this.setSelectedValue(this._selectedDate);\n        this._onValidatorChange();\n    }\n\n    public get maxValue(): Date | string {\n        return this._maxValue;\n    }\n\n    /**\n     * Sets whether the seconds, minutes and hour spinning will loop back around when end value is reached.\n     * By default it's set to true.\n     * ```html\n     * <igx-time-picker [spinLoop]=\"false\"></igx-time-picker>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public spinLoop = true;\n\n    /**\n     * Gets/Sets a custom formatter function on the selected or passed date.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker [value]=\"date\" [formatter]=\"formatter\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public formatter: (val: Date) => string;\n\n    /**\n     * Sets the orientation of the picker's header.\n     *\n     * @remarks\n     * Available in dialog mode only. Default value is `horizontal`.\n     *\n     * ```html\n     * <igx-time-picker [headerOrientation]=\"'vertical'\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public headerOrientation: PickerHeaderOrientation = PickerHeaderOrientation.Horizontal;\n\n    /** @hidden @internal */\n    @Input({ transform: booleanAttribute })\n    public readOnly = false;\n\n    /**\n     * Emitted after a selection has been done.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker (selected)=\"onSelection($event)\"></igx-time-picker>\n     * ```\n     */\n    @Output()\n    public selected = new EventEmitter<Date>();\n\n    /**\n     * Emitted when the picker's value changes.\n     *\n     * @remarks\n     * Used for `two-way` bindings.\n     *\n     * @example\n     * ```html\n     * <igx-time-picker [(value)]=\"date\"></igx-time-picker>\n     * ```\n     */\n    @Output()\n    public valueChange = new EventEmitter<Date | string>();\n\n    /**\n     * Emitted when the user types/spins invalid time in the time-picker editor.\n     *\n     *  @example\n     * ```html\n     * <igx-time-picker (validationFailed)=\"onValidationFailed($event)\"></igx-time-picker>\n     * ```\n     */\n    @Output()\n    public validationFailed = new EventEmitter<IgxTimePickerValidationFailedEventArgs>();\n\n    /** @hidden */\n    @ViewChild('hourList')\n    public hourList: ElementRef;\n\n    /** @hidden */\n    @ViewChild('minuteList')\n    public minuteList: ElementRef;\n\n    /** @hidden */\n    @ViewChild('secondsList')\n    public secondsList: ElementRef;\n\n    /** @hidden */\n    @ViewChild('ampmList')\n    public ampmList: ElementRef;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxPickerClearComponent)\n    public clearComponents: QueryList<IgxPickerClearComponent>;\n\n    /** @hidden @internal */\n    @ContentChild(IgxLabelDirective)\n    public label: IgxLabelDirective;\n\n    /** @hidden @internal */\n    @ContentChild(IgxPickerActionsDirective)\n    public timePickerActionsDirective: IgxPickerActionsDirective;\n\n    @ViewChild(IgxInputDirective, { read: IgxInputDirective })\n    private inputDirective: IgxInputDirective;\n\n    @ViewChild('inputGroup', { read: IgxInputGroupComponent, static: true })\n    private _inputGroup: IgxInputGroupComponent;\n\n    @ViewChild(IgxDateTimeEditorDirective, { static: true })\n    private dateTimeEditor: IgxDateTimeEditorDirective;\n\n    @ViewChild(IgxToggleDirective)\n    private toggleRef: IgxToggleDirective;\n\n    /** @hidden */\n    public cleared = false;\n\n    /** @hidden */\n    public isNotEmpty = false;\n\n    /** @hidden */\n    public currentHour: number;\n\n    /** @hidden */\n    public currentMinutes: number;\n\n    /** @hidden */\n    public get showClearButton(): boolean {\n        if (this.clearComponents.length) {\n            return false;\n        }\n        if (DateTimeUtil.isValidDate(this.value)) {\n            // TODO: Update w/ clear behavior\n            return this.value.getHours() !== 0 || this.value.getMinutes() !== 0 ||\n                   this.value.getSeconds() !== 0 || this.value.getMilliseconds() !== 0;\n        }\n        return !!this.dateTimeEditor.value;\n    }\n\n    /** @hidden */\n    public get showHoursList(): boolean {\n        return this.appliedFormat?.indexOf('h') !== - 1 || this.appliedFormat?.indexOf('H') !== - 1;\n    }\n\n    /** @hidden */\n    public get showMinutesList(): boolean {\n        return this.appliedFormat?.indexOf('m') !== - 1;\n    }\n\n    /** @hidden */\n    public get showSecondsList(): boolean {\n        return this.appliedFormat?.indexOf('s') !== - 1;\n    }\n\n    /** @hidden */\n    public get showAmPmList(): boolean {\n        return this.appliedFormat?.indexOf('t') !== - 1 || this.appliedFormat?.indexOf('a') !== - 1;\n    }\n\n    /** @hidden */\n    public get isTwelveHourFormat(): boolean {\n        return this.appliedFormat?.indexOf('h') !== - 1;\n    }\n\n    /** @hidden @internal */\n    public get isVertical(): boolean {\n        return this.headerOrientation === PickerHeaderOrientation.Vertical;\n    }\n\n    /** @hidden @internal */\n    public get selectedDate(): Date {\n        return this._selectedDate;\n    }\n\n    /** @hidden @internal */\n    public get minDateValue(): Date {\n        if (!this._dateMinValue) {\n            const minDate = new Date();\n            minDate.setHours(0, 0, 0, 0);\n            return minDate;\n        }\n\n        return this._dateMinValue;\n    }\n\n    /** @hidden @internal */\n    public get maxDateValue(): Date {\n        if (!this._dateMaxValue) {\n            const maxDate = new Date();\n            maxDate.setHours(23, 59, 59, 999);\n            return maxDate;\n        }\n\n        return this._dateMaxValue;\n    }\n\n    /** @hidden @internal */\n    public get appliedFormat(): string {\n        return this.inputFormat || this.dateTimeEditor?.inputFormat;\n    }\n\n    protected override get toggleContainer(): HTMLElement | undefined {\n        return this.toggleRef?.element;\n    }\n\n    private get required(): boolean {\n        if (this._ngControl && this._ngControl.control && this._ngControl.control.validator) {\n            // Run the validation with empty object to check if required is enabled.\n            const error = this._ngControl.control.validator({} as AbstractControl);\n            return !!(error && error.required);\n        }\n\n        return false;\n    }\n\n    private get dialogOverlaySettings(): OverlaySettings {\n        return Object.assign({}, this._defaultDialogOverlaySettings, this.overlaySettings);\n    }\n\n    private get dropDownOverlaySettings(): OverlaySettings {\n        return Object.assign({}, this._defaultDropDownOverlaySettings, this.overlaySettings);\n    }\n\n    /** @hidden @internal */\n    public displayValue: PipeTransform = { transform: (date: Date) => this.formatter(date) };\n    /** @hidden @internal */\n    public minDropdownValue: Date;\n    /** @hidden @internal */\n    public maxDropdownValue: Date;\n    /** @hidden @internal */\n    public hourItems = [];\n    /** @hidden @internal */\n    public minuteItems = [];\n    /** @hidden @internal */\n    public secondsItems = [];\n    /** @hidden @internal */\n    public ampmItems = [];\n\n    private _value: Date | string;\n    private _dateValue: Date;\n    private _dateMinValue: Date;\n    private _dateMaxValue: Date;\n    private _selectedDate: Date;\n    private _resourceStrings = getCurrentResourceStrings(TimePickerResourceStringsEN);\n    private _okButtonLabel = null;\n    private _cancelButtonLabel = null;\n    private _itemsDelta: Pick<DatePartDeltas, 'hours' | 'minutes' | 'seconds' | 'fractionalSeconds'> =\n                                             { hours: 1, minutes: 1, seconds: 1, fractionalSeconds: 1 };\n\n    private _statusChanges$: Subscription;\n    private _ngControl: NgControl = null;\n    private _onChangeCallback: (_: Date | string) => void = noop;\n    private _onTouchedCallback: () => void = noop;\n    private _onValidatorChange: () => void = noop;\n\n    private _defaultDialogOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: true,\n        closeOnEscape: true,\n        outlet: this.outlet\n    };\n    private _defaultDropDownOverlaySettings: OverlaySettings = {\n        target: this.element.nativeElement,\n        modal: false,\n        closeOnOutsideClick: true,\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        positionStrategy: new AutoPositionStrategy(),\n        outlet: this.outlet\n    };\n\n\n    /**\n     * The currently selected value / time from the drop-down/dialog\n     *\n     * @remarks\n     * The current value is of type `Date`\n     *\n     * @example\n     * ```typescript\n     * const newValue: Date = new Date(2000, 2, 2, 10, 15, 15);\n     * this.timePicker.value = newValue;\n     * ```\n     */\n    public get value(): Date | string {\n        return this._value;\n    }\n\n    /**\n     * An accessor that allows you to set a time using the `value` input.\n     * ```html\n     * public date: Date = new Date(Date.now());\n     *  //...\n     * <igx-time-picker [value]=\"date\" format=\"h:mm tt\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public set value(value: Date | string) {\n        const oldValue = this._value;\n        this._value = value;\n        const date = this.parseToDate(value);\n        if (date) {\n            this._dateValue = new Date();\n            this._dateValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n            this.setSelectedValue(this._dateValue);\n        } else {\n            this._dateValue = null;\n            this.setSelectedValue(null);\n        }\n        if (this.dateTimeEditor) {\n            this.dateTimeEditor.value = date;\n        }\n        this.emitValueChange(oldValue, this._value);\n        this._onChangeCallback(this._value);\n    }\n\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: ITimePickerResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): ITimePickerResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Overrides the default text of the **OK** button.\n     *\n     * @remarks\n     * Defaults to the value from resource strings, `\"OK\"` for the built-in EN.\n     *\n     * ```html\n     * <igx-time-picker okButtonLabel='SET' [value]=\"date\" format=\"h:mm tt\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public set okButtonLabel(value: string) {\n        this._okButtonLabel = value;\n    }\n\n    /**\n     * An accessor that returns the label of ok button.\n     */\n    public get okButtonLabel(): string {\n        if (this._okButtonLabel === null) {\n            return this.resourceStrings.igx_time_picker_ok;\n        }\n        return this._okButtonLabel;\n    }\n\n    /**\n     * Overrides the default text of the **Cancel** button.\n     * @remarks\n     * Defaults to the value from resource strings, `\"Cancel\"` for the built-in EN.\n     * ```html\n     * <igx-time-picker cancelButtonLabel='Exit' [value]=\"date\" format=\"h:mm tt\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public set cancelButtonLabel(value: string) {\n        this._cancelButtonLabel = value;\n    }\n\n    /**\n     * An accessor that returns the label of cancel button.\n     */\n    public get cancelButtonLabel(): string {\n        if (this._cancelButtonLabel === null) {\n            return this.resourceStrings.igx_time_picker_cancel;\n        }\n        return this._cancelButtonLabel;\n    }\n\n    /**\n     * Delta values used to increment or decrement each editor date part on spin actions and\n     * to display time portions in the dropdown/dialog.\n     * By default `itemsDelta` is set to `{hour: 1, minute: 1, second: 1}`\n     * ```html\n     * <igx-time-picker [itemsDelta]=\"{hour:3, minute:5, second:10}\" id=\"time-picker\"></igx-time-picker>\n     * ```\n     */\n    @Input()\n    public set itemsDelta(value: Pick<DatePartDeltas, 'hours' | 'minutes' | 'seconds' | 'fractionalSeconds'>) {\n        Object.assign(this._itemsDelta, value);\n    }\n\n    public get itemsDelta(): Pick<DatePartDeltas, 'hours' | 'minutes' | 'seconds' | 'fractionalSeconds'> {\n        return this._itemsDelta;\n    }\n\n    constructor(\n        element: ElementRef,\n        @Inject(LOCALE_ID) _localeId: string,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) _inputGroupType: IgxInputGroupType,\n        private _injector: Injector,\n        private platform: PlatformUtil,\n        private cdr: ChangeDetectorRef,\n    ) {\n        super(element, _localeId, _inputGroupType);\n        this.locale = this.locale || this._localeId;\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent): void {\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_UP:\n                if (event.altKey && this.isDropdown) {\n                    this.close();\n                }\n                break;\n            case this.platform.KEYMAP.ARROW_DOWN:\n                if (event.altKey && this.isDropdown) {\n                    this.open();\n                }\n                break;\n            case this.platform.KEYMAP.ESCAPE:\n                this.cancelButtonClick();\n                break;\n            case this.platform.KEYMAP.SPACE:\n                this.open();\n                event.preventDefault();\n                break;\n        }\n    }\n\n    /** @hidden @internal */\n    public getPartValue(value: Date, type: string): string {\n        const inputDateParts = DateTimeUtil.parseDateTimeFormat(this.appliedFormat);\n        const part = inputDateParts.find(element => element.type === type);\n        return DateTimeUtil.getPartValue(value, part, part.format?.length);\n    }\n\n    /** @hidden @internal */\n    public toISOString(value: Date): string {\n        return value.toLocaleTimeString('en-GB', {\n            hour: '2-digit',\n            minute: '2-digit',\n            second: '2-digit',\n            fractionalSecondDigits: 3\n        });\n    }\n\n    // #region ControlValueAccessor\n\n    /** @hidden @internal */\n    public writeValue(value: Date | string) {\n        this._value = value;\n        const date = this.parseToDate(value);\n        if (date) {\n            this._dateValue = new Date();\n            this._dateValue.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n            this.setSelectedValue(this._dateValue);\n        } else {\n            this.setSelectedValue(null);\n        }\n        if (this.dateTimeEditor) {\n            this.dateTimeEditor.value = date;\n        }\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn: (_: Date | string) => void) {\n        this._onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: () => void) {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnValidatorChange(fn: any) {\n        this._onValidatorChange = fn;\n    }\n\n    /** @hidden @internal */\n    public validate(control: AbstractControl): ValidationErrors | null {\n        if (!control.value) {\n            return null;\n        }\n        // InvalidDate handling\n        if (isDate(control.value) && !DateTimeUtil.isValidDate(control.value)) {\n            return { value: true };\n        }\n\n        const errors = {};\n        const value = DateTimeUtil.isValidDate(control.value) ? control.value : DateTimeUtil.parseIsoDate(control.value);\n        Object.assign(errors, DateTimeUtil.validateMinMax(value, this.minValue, this.maxValue, true, false));\n        return Object.keys(errors).length > 0 ? errors : null;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n    //#endregion\n\n    /** @hidden */\n    public ngOnInit(): void {\n        this._ngControl = this._injector.get<NgControl>(NgControl, null);\n        this.minDropdownValue = this.setMinMaxDropdownValue('min', this.minDateValue);\n        this.maxDropdownValue = this.setMinMaxDropdownValue('max', this.maxDateValue);\n        this.setSelectedValue(this._dateValue);\n    }\n\n    /** @hidden */\n    public override ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n        this.subscribeToDateEditorEvents();\n        this.subscribeToToggleDirectiveEvents();\n\n        this._defaultDropDownOverlaySettings.excludeFromOutsideClick = [this._inputGroup.element.nativeElement];\n\n        fromEvent(this.inputDirective.nativeElement, 'blur')\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(() => {\n                if (this.collapsed) {\n                    this.updateValidityOnBlur();\n                }\n            });\n\n        this.subToIconsClicked(this.clearComponents, () => this.clear());\n        this.clearComponents.changes.pipe(takeUntil(this._destroy$))\n            .subscribe(() => this.subToIconsClicked(this.clearComponents, () => this.clear()));\n\n        if (this._ngControl) {\n            this._statusChanges$ = this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n            this._inputGroup.isRequired = this.required;\n            this.cdr.detectChanges();\n        }\n    }\n\n    /** @hidden */\n    public override ngOnDestroy(): void {\n        super.ngOnDestroy();\n        if (this._statusChanges$) {\n            this._statusChanges$.unsubscribe();\n        }\n    }\n\n    /** @hidden */\n    public getEditElement(): HTMLInputElement {\n        return this.dateTimeEditor.nativeElement;\n    }\n\n    /**\n     * Opens the picker's dialog UI.\n     *\n     * @param settings OverlaySettings - the overlay settings to use for positioning the drop down or dialog container according to\n     * ```html\n     * <igx-time-picker #picker [value]=\"date\"></igx-time-picker>\n     * <button type=\"button\" igxButton (click)=\"picker.open()\">Open Dialog</button>\n     * ```\n     */\n    public open(settings?: OverlaySettings): void {\n        if (this.disabled || !this.toggleRef.collapsed) {\n            return;\n        }\n\n        this.setSelectedValue(this._dateValue);\n        const overlaySettings = Object.assign({}, this.isDropdown\n            ? this.dropDownOverlaySettings\n            : this.dialogOverlaySettings\n            , settings);\n\n        this.toggleRef.open(overlaySettings);\n    }\n\n    /**\n     * Closes the dropdown/dialog.\n     * ```html\n     * <igx-time-picker #timePicker></igx-time-picker>\n     * ```\n     * ```typescript\n     * @ViewChild('timePicker', { read: IgxTimePickerComponent }) picker: IgxTimePickerComponent;\n     * picker.close();\n     * ```\n     */\n    public close(): void {\n        this.toggleRef.close();\n    }\n\n    public toggle(settings?: OverlaySettings): void {\n        if (this.toggleRef.collapsed) {\n            this.open(settings);\n        } else {\n            this.close();\n        }\n    }\n\n    /**\n     * Clears the time picker value if it is a `string` or resets the time to `00:00:00` if the value is a Date object.\n     *\n     * @example\n     * ```typescript\n     * this.timePicker.clear();\n     * ```\n     */\n    public clear(): void {\n        if (this.disabled) {\n            return;\n        }\n\n        if (!this.toggleRef.collapsed) {\n            this.close();\n        }\n\n        if (DateTimeUtil.isValidDate(this.value)) {\n            const oldValue = new Date(this.value);\n            this.value.setHours(0, 0, 0, 0);\n            if (this.value.getTime() !== oldValue.getTime()) {\n                this.emitValueChange(oldValue, this.value);\n                this._dateValue.setHours(0, 0, 0, 0);\n                this.dateTimeEditor.value = new Date(this.value);\n                this.setSelectedValue(this._dateValue);\n            }\n        } else {\n            this.value = null;\n        }\n    }\n\n    /**\n     * Selects time from the igxTimePicker.\n     *\n     * @example\n     * ```typescript\n     * this.timePicker.select(date);\n     *\n     * @param date Date object containing the time to be selected.\n     */\n    public select(date: Date | string): void {\n        this.value = date;\n    }\n\n    /**\n     * Increment a specified `DatePart`.\n     *\n     * @param datePart The optional DatePart to increment. Defaults to Hour.\n     * @param delta The optional delta to increment by. Overrides `itemsDelta`.\n     * @example\n     * ```typescript\n     * this.timePicker.increment(DatePart.Hours);\n     * ```\n     */\n    public increment(datePart?: DatePart, delta?: number): void {\n        this.dateTimeEditor.increment(datePart, delta);\n    }\n\n    /**\n     * Decrement a specified `DatePart`\n     *\n     * @param datePart The optional DatePart to decrement. Defaults to Hour.\n     * @param delta The optional delta to decrement by. Overrides `itemsDelta`.\n     * @example\n     * ```typescript\n     * this.timePicker.decrement(DatePart.Seconds);\n     * ```\n     */\n    public decrement(datePart?: DatePart, delta?: number): void {\n        this.dateTimeEditor.decrement(datePart, delta);\n    }\n\n    /** @hidden @internal */\n    public cancelButtonClick(): void {\n        this.setSelectedValue(this._dateValue);\n        this.dateTimeEditor.value = this.parseToDate(this.value);\n        this.close();\n    }\n\n    /** @hidden @internal */\n    public okButtonClick(): void {\n        this.updateValue(this._selectedDate);\n        this.close();\n    }\n\n    /** @hidden @internal */\n    public onItemClick(item: string, dateType: string): void {\n        let date = new Date(this._selectedDate);\n        switch (dateType) {\n            case 'hourList': {\n                let ampm: string;\n                const selectedHour = parseInt(item, 10);\n                let hours = selectedHour;\n\n                if (this.showAmPmList) {\n                    ampm = this.getPartValue(date, 'ampm');\n                    hours = this.toTwentyFourHourFormat(hours, ampm);\n                    const minHours = this.minDropdownValue?.getHours() || 0;\n                    const maxHours = this.maxDropdownValue?.getHours() || 24;\n                    if (hours < minHours || hours > maxHours) {\n                        hours = hours < 12 ? hours + 12 : hours - 12;\n                    }\n                }\n\n                date.setHours(hours);\n                date = this.validateDropdownValue(date);\n\n                if (this.valueInRange(date, this.minDropdownValue, this.maxDropdownValue)) {\n                    this.setSelectedValue(date);\n                }\n                break;\n            }\n            case 'minuteList': {\n                const minutes = parseInt(item, 10);\n                date.setMinutes(minutes);\n                date = this.validateDropdownValue(date);\n                this.setSelectedValue(date);\n                break;\n            }\n            case 'secondsList': {\n                const seconds = parseInt(item, 10);\n                date.setSeconds(seconds);\n                if (this.valueInRange(date, this.minDropdownValue, this.maxDropdownValue)) {\n                    this.setSelectedValue(date);\n                }\n                break;\n            }\n            case 'ampmList': {\n                let hour = this._selectedDate.getHours();\n                hour = DateTimeUtil.isAm(item)\n                    ? hour % 12\n                    : (hour % 12) + 12;\n\n                date.setHours(hour);\n                date = this.validateDropdownValue(date, true);\n                this.setSelectedValue(date);\n                break;\n            }\n        }\n        this.updateEditorValue();\n    }\n\n    /** @hidden @internal */\n    public nextHour(delta: number) {\n        delta = delta > 0 ? 1 : -1;\n        const previousDate = new Date(this._selectedDate);\n        const minHours = this.minDropdownValue?.getHours();\n        const maxHours = this.maxDropdownValue?.getHours();\n        const previousHours = previousDate.getHours();\n        let hours = previousHours + delta * this.itemsDelta.hours;\n        if ((previousHours === maxHours && delta > 0) || (previousHours === minHours && delta < 0)) {\n            hours = !this.spinLoop ? previousHours : delta > 0 ? minHours : maxHours;\n        }\n\n        this._selectedDate.setHours(hours);\n        this._selectedDate = this.validateDropdownValue(this._selectedDate);\n        this._selectedDate = new Date(this._selectedDate);\n        this.updateEditorValue();\n    }\n\n    /** @hidden @internal */\n    public nextMinute(delta: number) {\n        delta = delta > 0 ? 1 : -1;\n        const minHours = this.minDropdownValue.getHours();\n        const maxHours = this.maxDropdownValue.getHours();\n        const hours = this._selectedDate.getHours();\n        let minutes = this._selectedDate.getMinutes();\n        const minMinutes = hours === minHours ? this.minDropdownValue.getMinutes() : 0;\n        const maxMinutes = hours === maxHours ? this.maxDropdownValue.getMinutes() :\n            60 % this.itemsDelta.minutes > 0 ? 60 - (60 % this.itemsDelta.minutes) :\n                60 - this.itemsDelta.minutes;\n\n        if ((delta < 0 && minutes === minMinutes) || (delta > 0 && minutes === maxMinutes)) {\n            minutes = this.spinLoop && minutes === minMinutes ? maxMinutes : this.spinLoop && minutes === maxMinutes ? minMinutes : minutes;\n        } else {\n            minutes = minutes + delta * this.itemsDelta.minutes;\n        }\n\n        this._selectedDate.setMinutes(minutes);\n        this._selectedDate = this.validateDropdownValue(this._selectedDate);\n        this._selectedDate = new Date(this._selectedDate);\n        this.updateEditorValue();\n    }\n\n    /** @hidden @internal */\n    public nextSeconds(delta: number) {\n        delta = delta > 0 ? 1 : -1;\n        const minHours = this.minDropdownValue.getHours();\n        const maxHours = this.maxDropdownValue.getHours();\n        const hours = this._selectedDate.getHours();\n        const minutes = this._selectedDate.getMinutes();\n        const minMinutes = this.minDropdownValue.getMinutes();\n        const maxMinutes = this.maxDropdownValue.getMinutes();\n        let seconds = this._selectedDate.getSeconds();\n        const minSeconds = (hours === minHours && minutes === minMinutes) ? this.minDropdownValue.getSeconds() : 0;\n        const maxSeconds = (hours === maxHours && minutes === maxMinutes) ? this.maxDropdownValue.getSeconds() :\n            60 % this.itemsDelta.seconds > 0 ? 60 - (60 % this.itemsDelta.seconds) :\n                60 - this.itemsDelta.seconds;\n\n        if ((delta < 0 && seconds === minSeconds) || (delta > 0 && seconds === maxSeconds)) {\n            seconds = this.spinLoop && seconds === minSeconds ? maxSeconds : this.spinLoop && seconds === maxSeconds ? minSeconds : seconds;\n        } else {\n            seconds = seconds + delta * this.itemsDelta.seconds;\n        }\n\n        this._selectedDate.setSeconds(seconds);\n        this._selectedDate = this.validateDropdownValue(this._selectedDate);\n        this._selectedDate = new Date(this._selectedDate);\n        this.updateEditorValue();\n    }\n\n    /** @hidden @internal */\n    public nextAmPm(delta?: number) {\n        const ampm = this.getPartValue(this._selectedDate, 'ampm');\n        if (!delta || (DateTimeUtil.isAm(ampm) && delta > 0)\n                   || (DateTimeUtil.isPm(ampm) && delta < 0)) {\n            let hours = this._selectedDate.getHours();\n            const sign = hours < 12 ? 1 : -1;\n            hours = hours + sign * 12;\n            this._selectedDate.setHours(hours);\n            this._selectedDate = this.validateDropdownValue(this._selectedDate, true);\n            this._selectedDate = new Date(this._selectedDate);\n            this.updateEditorValue();\n        }\n    }\n\n    /** @hidden @internal */\n    public setSelectedValue(value: Date) {\n        this._selectedDate = value ? new Date(value) : null;\n        if (!DateTimeUtil.isValidDate(this._selectedDate)) {\n            this._selectedDate = new Date(this.minDropdownValue);\n            return;\n        }\n        if (this.minValue && DateTimeUtil.lessThanMinValue(this._selectedDate, this.minDropdownValue, true, false)) {\n            this._selectedDate = new Date(this.minDropdownValue);\n            return;\n        }\n        if (this.maxValue && DateTimeUtil.greaterThanMaxValue(this._selectedDate, this.maxDropdownValue, true, false)) {\n            this._selectedDate = new Date(this.maxDropdownValue);\n            return;\n        }\n\n        if (this._selectedDate.getHours() % this.itemsDelta.hours > 0) {\n            this._selectedDate.setHours(\n                this._selectedDate.getHours() + this.itemsDelta.hours - this._selectedDate.getHours() % this.itemsDelta.hours,\n                0,\n                0\n            );\n        }\n\n        if (this._selectedDate.getMinutes() % this.itemsDelta.minutes > 0) {\n            this._selectedDate.setHours(\n                this._selectedDate.getHours(),\n                this._selectedDate.getMinutes() + this.itemsDelta.minutes - this._selectedDate.getMinutes() % this.itemsDelta.minutes,\n                0\n            );\n        }\n\n        if (this._selectedDate.getSeconds() % this.itemsDelta.seconds > 0) {\n            this._selectedDate.setSeconds(\n                this._selectedDate.getSeconds() + this.itemsDelta.seconds - this._selectedDate.getSeconds() % this.itemsDelta.seconds\n            );\n        }\n    }\n\n    protected onStatusChanged() {\n        if (this._ngControl && !this._ngControl.disabled && this.isTouchedOrDirty) {\n            if (this.hasValidators && this._inputGroup.isFocused) {\n                this.inputDirective.valid = this._ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n            } else {\n                this.inputDirective.valid = this._ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n            }\n        } else {\n            // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n            this.inputDirective.valid = IgxInputState.INITIAL;\n        }\n\n        if (this._inputGroup && this._inputGroup.isRequired !== this.required) {\n            this._inputGroup.isRequired = this.required;\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this._ngControl.control.touched || this._ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this._ngControl.control.validator || !!this._ngControl.control.asyncValidator);\n    }\n\n    private setMinMaxDropdownValue(type: string, time: Date): Date {\n        let delta: number;\n\n        const sign = type === 'min' ? 1 : -1;\n\n        const hours = time.getHours();\n        let minutes = time.getMinutes();\n        let seconds = time.getSeconds();\n\n        if (this.showHoursList && hours % this.itemsDelta.hours > 0) {\n            delta = type === 'min' ? this.itemsDelta.hours - hours % this.itemsDelta.hours\n                : hours % this.itemsDelta.hours;\n            minutes = type === 'min' ? 0\n                : 60 % this.itemsDelta.minutes > 0 ? 60 - 60 % this.itemsDelta.minutes\n                    : 60 - this.itemsDelta.minutes;\n            seconds = type === 'min' ? 0\n                : 60 % this.itemsDelta.seconds > 0 ? 60 - 60 % this.itemsDelta.seconds\n                    : 60 - this.itemsDelta.seconds;\n            time.setHours(hours + sign * delta, minutes, seconds);\n        } else if (this.showMinutesList && minutes % this.itemsDelta.minutes > 0) {\n            delta = type === 'min' ? this.itemsDelta.minutes - minutes % this.itemsDelta.minutes\n                : minutes % this.itemsDelta.minutes;\n            seconds = type === 'min' ? 0\n                : 60 % this.itemsDelta.seconds > 0 ? 60 - 60 % this.itemsDelta.seconds\n                    : 60 - this.itemsDelta.seconds;\n            time.setHours(hours, minutes + sign * delta, seconds);\n        } else if (this.showSecondsList && seconds % this.itemsDelta.seconds > 0) {\n            delta = type === 'min' ? this.itemsDelta.seconds - seconds % this.itemsDelta.seconds\n                : seconds % this.itemsDelta.seconds;\n            time.setHours(hours, minutes, seconds + sign * delta);\n        }\n\n        return time;\n    }\n\n    private initializeContainer() {\n        requestAnimationFrame(() => {\n            if (this.hourList) {\n                this.hourList.nativeElement.focus();\n            } else if (this.minuteList) {\n                this.minuteList.nativeElement.focus();\n            } else if (this.secondsList) {\n                this.secondsList.nativeElement.focus();\n            }\n        });\n    }\n\n    private validateDropdownValue(date: Date, isAmPm = false): Date {\n        if (date > this.maxDropdownValue) {\n            if (isAmPm && date.getHours() !== this.maxDropdownValue.getHours()) {\n                date.setHours(12);\n            } else {\n                date = new Date(this.maxDropdownValue);\n            }\n        }\n\n        if (date < this.minDropdownValue) {\n            date = new Date(this.minDropdownValue);\n        }\n\n        return date;\n    }\n\n    private emitValueChange(oldValue: Date | string, newValue: Date | string) {\n        if (!isEqual(oldValue, newValue)) {\n            this.valueChange.emit(newValue);\n        }\n    }\n\n    private emitValidationFailedEvent(previousValue: Date | string) {\n        const args: IgxTimePickerValidationFailedEventArgs = {\n            owner: this,\n            previousValue,\n            currentValue: this.value\n        };\n        this.validationFailed.emit(args);\n    }\n\n    private updateValidityOnBlur() {\n        this._onTouchedCallback();\n        if (this._ngControl) {\n            if (!this._ngControl.valid) {\n                this.inputDirective.valid = IgxInputState.INVALID;\n            } else {\n                this.inputDirective.valid = IgxInputState.INITIAL;\n            }\n        }\n    }\n\n    private valueInRange(value: Date, minValue: Date, maxValue: Date): boolean {\n        if (minValue && DateTimeUtil.lessThanMinValue(value, minValue, true, false)) {\n            return false;\n        }\n        if (maxValue && DateTimeUtil.greaterThanMaxValue(value, maxValue, true, false)) {\n            return false;\n        }\n\n        return true;\n    }\n\n    private parseToDate(value: Date | string): Date | null {\n        return DateTimeUtil.isValidDate(value) ? value : DateTimeUtil.parseIsoDate(value);\n    }\n\n    private toTwentyFourHourFormat(hour: number, ampm: string): number {\n        if (DateTimeUtil.isPm(ampm) && hour < 12) {\n            hour += 12;\n        } else if (DateTimeUtil.isAm(ampm) && hour === 12) {\n            hour = 0;\n        }\n\n        return hour;\n    }\n\n    private updateValue(newValue: Date | null): void {\n        if (!this.value) {\n            this.value = newValue ? new Date(newValue) : newValue;\n        } else if (isDate(this.value)) {\n            const date = new Date(this.value);\n            date.setHours(newValue?.getHours() || 0, newValue?.getMinutes() || 0, newValue?.getSeconds() || 0, newValue?.getMilliseconds() || 0);\n            this.value = date;\n        } else {\n            this.value = newValue ? this.toISOString(newValue) : newValue;\n        }\n    }\n\n    private updateEditorValue(): void {\n        const date = this.dateTimeEditor.value ? new Date(this.dateTimeEditor.value) : new Date();\n        date.setHours(this._selectedDate.getHours(), this._selectedDate.getMinutes(), this._selectedDate.getSeconds(), this._selectedDate.getMilliseconds());\n        this.dateTimeEditor.value = date;\n    }\n\n    private subscribeToDateEditorEvents(): void {\n        this.dateTimeEditor.valueChange.pipe(\n            // internal date editor directive is only used w/ Date object values:\n            takeUntil(this._destroy$)).subscribe((date: Date | null) => {\n                this.updateValue(date);\n            });\n\n        this.dateTimeEditor.validationFailed.pipe(\n            takeUntil(this._destroy$)).subscribe((event) => {\n                this.emitValidationFailedEvent(event.oldValue);\n            });\n    }\n\n    private subscribeToToggleDirectiveEvents(): void {\n        if (this.toggleRef) {\n            if (this._inputGroup && this.platform.isBrowser) {\n                this.toggleRef.element.style.width = this._inputGroup.element.nativeElement.getBoundingClientRect().width + 'px';\n            }\n\n            this.toggleRef.opening.pipe(takeUntil(this._destroy$)).subscribe((e) => {\n                const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: false };\n                this.opening.emit(args);\n                e.cancel = args.cancel;\n                if (args.cancel) {\n                    return;\n                }\n                this.initializeContainer();\n            });\n\n            this.toggleRef.opened.pipe(takeUntil(this._destroy$)).subscribe(() => {\n                this.opened.emit({ owner: this });\n            });\n\n            this.toggleRef.closed.pipe(takeUntil(this._destroy$)).subscribe(() => {\n                this.closed.emit({ owner: this });\n            });\n\n            this.toggleRef.closing.pipe(takeUntil(this._destroy$)).subscribe((e) => {\n                const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: false };\n                this.closing.emit(args);\n                e.cancel = args.cancel;\n                if (args.cancel) {\n                    return;\n                }\n                const value = this.parseToDate(this.value);\n                if ((this.dateTimeEditor.value as Date)?.getTime() !== value?.getTime()) {\n                    this.updateValue(this._selectedDate);\n                }\n                // Do not focus the input if clicking outside in dropdown mode\n                const input = this.getEditElement();\n                if (input && !(e.event && this.isDropdown)) {\n                    input.focus();\n                } else {\n                    this.updateValidityOnBlur();\n                }\n            });\n        }\n    }\n}\n","<igx-input-group #inputGroup [type]=\"type\">\n    <input [displayValuePipe]=\"formatter ? displayValue : null\" igxInput [igxDateTimeEditor]=\"inputFormat\"\n        type=\"text\" [readonly]=\"!isDropdown || readOnly\" [minValue]=\"minValue\" [maxValue]=\"maxValue\"\n        [locale]=\"locale\" [spinDelta]=\"itemsDelta\" [spinLoop]=\"spinLoop\" [placeholder]=\"placeholder\"\n        [disabled]=\"disabled\" [displayFormat]=\"displayFormat\" defaultFormatType=\"time\"\n        [igxTextSelection]=\"isDropdown && !readOnly\" role=\"combobox\" aria-haspopup=\"dialog\"\n        [attr.aria-expanded]=\"!toggleDirective.collapsed\" [attr.aria-labelledby]=\"label?.id\"\n        (click)=\"!isDropdown && toggle()\"/>\n\n    @if (!toggleComponents.length) {\n        <igx-prefix (click)=\"toggle()\">\n            <igx-icon\n                [title]=\"\n                    value\n                        ? resourceStrings.igx_time_picker_change_time\n                        : resourceStrings.igx_time_picker_choose_time\n                \"\n                family=\"default\"\n                name=\"clock\"\n            ></igx-icon>\n        </igx-prefix>\n    }\n\n    <ng-container ngProjectAs=\"[igxLabel]\">\n        <ng-content select=\"[igxLabel]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-prefix\">\n        <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n    </ng-container>\n\n    @if (showClearButton) {\n        <igx-suffix (click)=\"clear(); $event.stopPropagation()\">\n            <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n        </igx-suffix>\n    }\n\n    <ng-container ngProjectAs=\"igx-suffix\">\n        <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n    </ng-container>\n    <ng-container ngProjectAs=\"igx-hint\">\n        <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n    </ng-container>\n</igx-input-group>\n\n<ng-template #defaultTimePickerActions>\n    @if (cancelButtonLabel || okButtonLabel) {\n        <div class=\"igx-time-picker__buttons\">\n            @if (cancelButtonLabel) {\n                <button type=\"button\" igxButton=\"flat\" (click)=\"cancelButtonClick()\">\n                    {{cancelButtonLabel}}\n                </button>\n            }\n            @if (okButtonLabel) {\n                <button type=\"button\" igxButton=\"flat\" (click)=\"okButtonClick()\">\n                    {{okButtonLabel}}\n                </button>\n            }\n        </div>\n    }\n</ng-template>\n\n<div #toggleDirective=\"toggle\" igxToggle role=\"dialog\" class=\"igx-time-picker\"\n    [ngClass]=\"{'igx-time-picker--dropdown': isDropdown, 'igx-time-picker--vertical': isVertical && !isDropdown}\">\n    <div class=\"igx-time-picker__main\">\n        @if (!isDropdown) {\n            <div class=\"igx-time-picker__header\">\n                <h2 class=\"igx-time-picker__header-hour\">\n                    <span>{{ selectedDate | timeFormatPipe }}</span>\n                </h2>\n            </div>\n        }\n        <div class=\"igx-time-picker__body\">\n            @if (showHoursList) {\n                <div #hourList [igxItemList]=\"'hourList'\">\n                    @for (hour of hourItems | timeItemPipe:'hour':selectedDate:minDropdownValue:maxDropdownValue; track hour+$index) {\n                        <span [igxTimeItem]=\"hour\" #timeItem=\"timeItem\" aria-label=\"hour\"\n                            [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n                            [attr.aria-valuenow]=\"timeItem.isSelectedTime ? timeItem.hourValue : null\"\n                            [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n                            [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n                        >{{ hour }}</span>\n                    }\n                </div>\n            }\n            @if (showMinutesList) {\n                <div #minuteList [igxItemList]=\"'minuteList'\">\n                    @for (minute of minuteItems | timeItemPipe:'minutes':selectedDate:minDropdownValue:maxDropdownValue; track minute+$index) {\n                        <span [igxTimeItem]=\"minute\" #timeItem=\"timeItem\" aria-label=\"minutes\"\n                            [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n                            [attr.aria-valuenow]=\"timeItem.isSelectedTime ? minute : null\"\n                            [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n                            [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n                        >{{ minute }}</span>\n                    }\n                </div>\n            }\n            @if (showSecondsList) {\n                <div #secondsList [igxItemList]=\"'secondsList'\">\n                    @for (seconds of secondsItems | timeItemPipe:'seconds':selectedDate:minDropdownValue:maxDropdownValue; track seconds+$index) {\n                        <span [igxTimeItem]=\"seconds\" #timeItem=\"timeItem\" aria-label=\"seconds\"\n                            [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n                            [attr.aria-valuenow]=\"timeItem.isSelectedTime ? seconds : null\"\n                            [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n                            [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n                        >{{ seconds }}</span>\n                    }\n                </div>\n            }\n            @if (showAmPmList) {\n                <div #ampmList [igxItemList]=\"'ampmList'\">\n                    @for (ampm of ampmItems | timeItemPipe:'ampm':selectedDate:minDropdownValue:maxDropdownValue; track ampm+$index) {\n                        <span [igxTimeItem]=\"ampm\" #timeItem=\"timeItem\" aria-label=\"ampm\"\n                            [attr.role]=\"timeItem.isSelectedTime ? 'spinbutton' : null\"\n                            [attr.aria-valuenow]=\"timeItem.isSelectedTime ? ampm : null\"\n                            [attr.aria-valuemin]=\"timeItem.isSelectedTime ? timeItem.minValue : null\"\n                            [attr.aria-valuemax]=\"timeItem.isSelectedTime ? timeItem.maxValue : null\"\n                        >{{ ampm }}</span>\n                    }\n                </div>\n            }\n        </div>\n    </div>\n    <igx-divider></igx-divider>\n    <ng-container\n            *ngTemplateOutlet=\"timePickerActionsDirective ? timePickerActionsDirective.template : defaultTimePickerActions\">\n    </ng-container>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FilteringLogic, IFilteringExpression } from '../data-operations/filtering-expression.interface';\n\n@Pipe({\n    name: 'fieldFormatter',\n    standalone: true\n})\nexport class IgxFieldFormatterPipe implements PipeTransform {\n\n    public transform(value: any, formatter: (v: any, data: any, fieldData?: any) => any, rowData: any, fieldData?: any) {\n        return formatter(value, rowData, fieldData);\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionItem {\n    public parent: ExpressionGroupItem;\n    public expanded: boolean;\n    constructor(parent?: ExpressionGroupItem) {\n        this.parent = parent;\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionGroupItem extends ExpressionItem {\n    public operator: FilteringLogic;\n    public children: ExpressionItem[];\n    constructor(operator: FilteringLogic, parent?: ExpressionGroupItem) {\n        super(parent);\n        this.operator = operator;\n        this.children = [];\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ExpressionOperandItem extends ExpressionItem {\n    public expression: IFilteringExpression;\n    public inEditMode: boolean;\n    public inAddMode: boolean;\n    public hovered: boolean;\n    public focused: boolean;\n    public fieldLabel: string;\n    constructor(expression: IFilteringExpression, parent: ExpressionGroupItem) {\n        super(parent);\n        this.expression = expression;\n    }\n}\n\nconst IGX_QUERY_BUILDER = 'igx-query-builder';\nconst IGX_FILTER_TREE = 'igx-filter-tree';\n\n/**\n * @hidden @internal\n */\nexport const QueryBuilderSelectors = {\n    DRAG_INDICATOR: 'igx-drag-indicator',\n    CHIP_GHOST: 'igx-chip__ghost',\n\n    DROP_DOWN_LIST_SCROLL: 'igx-drop-down__list-scroll',\n    DROP_DOWN_ITEM_DISABLED: 'igx-drop-down__item--disabled',\n\n    FILTER_TREE: IGX_FILTER_TREE,\n    FILTER_TREE_EXPRESSION_CONTEXT_MENU: IGX_FILTER_TREE + '__expression-context-menu',\n    FILTER_TREE_EXPRESSION_ITEM: IGX_FILTER_TREE + '__expression-item',\n    FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST: IGX_FILTER_TREE + '__expression-item-drop-ghost',\n    FILTER_TREE_EXPRESSION_ITEM_KEYBOARD_GHOST: IGX_FILTER_TREE + '__expression-item-keyboard-ghost',\n    FILTER_TREE_EXPRESSION_ITEM_GHOST: IGX_FILTER_TREE + '__expression-item-ghost',\n    FILTER_TREE_EXPRESSION_SECTION: IGX_FILTER_TREE + '__expression-section',\n\n    FILTER_TREE_LINE_AND: IGX_FILTER_TREE + '__line--and',\n    FILTER_TREE_LINE_OR: IGX_FILTER_TREE + '__line--or',\n    FILTER_TREE_SUBQUERY: IGX_FILTER_TREE + '__subquery',\n\n    QUERY_BUILDER: IGX_QUERY_BUILDER,\n    QUERY_BUILDER_BODY: IGX_QUERY_BUILDER + '__main',\n    QUERY_BUILDER_HEADER: IGX_QUERY_BUILDER + '__header',\n    QUERY_BUILDER_TREE: IGX_QUERY_BUILDER + '-tree',\n}\n","import { filter, fromEvent, sampleTime, Subscription } from 'rxjs';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { ElementRef, Injectable } from '@angular/core';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, QueryBuilderSelectors } from './query-builder.common';\nimport { IgxChipComponent } from '../chips/chip.component';\n\nconst DEFAULT_SET_Z_INDEX_DELAY = 10;\nconst Z_INDEX_TO_SET = 10010; //overlay z-index is 10005\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxQueryBuilderDragService {\n\n    /** The ExpressionItem that's actually the drop ghost's content */\n    public dropGhostExpression: ExpressionItem;\n    public isKeyboardDrag: boolean;\n    private _queryBuilderTreeComponent: IgxQueryBuilderTreeComponent;\n    private _queryBuilderTreeComponentElRef: ElementRef;\n    private _sourceExpressionItem: ExpressionItem;\n    private _sourceElement: HTMLElement;\n    private _targetExpressionItem: ExpressionItem;\n    private _dropUnder: boolean;\n    private _ghostChipMousemoveSubscription$: Subscription;\n    private _keyboardSubscription$: Subscription;\n    private _keyDragCurrentIndex: number = 0;\n    private _keyDragInitialIndex: number = 0;\n    private _isKeyDragsFirstMove: boolean = true;\n    /** Stores a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n    private _possibleDropLocations: Array<[ExpressionItem, boolean]>;\n    private _timeoutId: any;\n\n\n    /** Get the dragged ghost as a HTMLElement*/\n    private get getDragGhostElement(): HTMLElement {\n        return (document.querySelector(`.${QueryBuilderSelectors.CHIP_GHOST}[ghostclass=\"${QueryBuilderSelectors.CHIP_GHOST}\"]`) as HTMLElement);\n    }\n\n    /** Get the drop ghost chip component */\n    private get getDropGhostElement(): IgxChipComponent {\n        return this._queryBuilderTreeComponent.expressionsChips.find(x => x.data === this.dropGhostExpression);\n    }\n\n    private get getMainExpressionTree(): HTMLElement {\n        return this._queryBuilderTreeComponentElRef.nativeElement.querySelector(`.${QueryBuilderSelectors.FILTER_TREE}`);\n    }\n\n\n    public register(tree: IgxQueryBuilderTreeComponent, el: ElementRef) {\n        this._queryBuilderTreeComponent = tree;\n        this._queryBuilderTreeComponentElRef = el;\n    }\n\n    /** When chip is picked up for dragging\n     * \n     * @param sourceDragElement The HTML element of the chip that's been dragged\n     * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n     * @param isKeyboardDrag If it's a mouse drag or keyboard reorder\n     * \n    */\n    public onMoveStart(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem, isKeyboardDrag: boolean): void {\n        this.resetDragAndDrop(true);\n        this._queryBuilderTreeComponent._expressionTreeCopy = this._queryBuilderTreeComponent._expressionTree;\n        this.isKeyboardDrag = isKeyboardDrag;\n        this._sourceExpressionItem = sourceExpressionItem;\n        this._sourceElement = sourceDragElement;\n\n        this.listenToKeyboard();\n\n        if (!this.isKeyboardDrag) {\n            this._sourceElement.style.display = 'none';\n            this.setDragGhostZIndex();\n        }\n    }\n\n    /** When dragged chip is let go outside a proper drop zone */\n    public onMoveEnd(): void {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        if (this.dropGhostExpression) {\n            //If there is a ghost chip presented to the user, execute drop\n            this.onChipDropped();\n        } else {\n            this.resetDragAndDrop(true);\n        }\n\n        this._ghostChipMousemoveSubscription$?.unsubscribe();\n        this._keyboardSubscription$?.unsubscribe();\n    }\n\n    /** When mouse drag enters a chip's area\n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onChipEnter(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //If entering the one that's been picked up don't do any thing\n        if (targetExpressionItem === this.dropGhostExpression) {\n            return;\n        }\n\n        //Simulate leaving the last entered chip in case of no Leave event triggered due to the artificial drop zone of a north positioned ghost chip\n        if (this._targetExpressionItem) {\n            this.resetDragAndDrop(false);\n        }\n\n        this._targetExpressionItem = targetExpressionItem;\n\n        //Determine the middle point of the chip.\n        const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n        this.renderDropGhostChip(appendUnder);\n    }\n\n    /** When mouse drag moves in a div's drop area \n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onDivOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {\n        if (this._targetExpressionItem === targetExpressionItem) {\n            this.onChipOver(targetDragElement)\n        } else {\n            this.onChipEnter(targetDragElement, targetExpressionItem);\n        }\n    }\n\n    /** When mouse drag moves in a chip's drop area \n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n    */\n    public onChipOver(targetDragElement: HTMLElement): void {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //Determine the middle point of the chip.\n        const appendUnder = this.ghostInLowerPart(targetDragElement);\n\n        this.renderDropGhostChip(appendUnder);\n    }\n\n    /** When mouse drag leaves a chip's drop area */\n    public onChipLeave() {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //if the drag ghost is on the drop ghost row don't trigger leave\n        if (this.dragGhostIsOnDropGhostRow()) {\n            return;\n        }\n\n        if (this._targetExpressionItem) {\n            this.resetDragAndDrop(false)\n        }\n    }\n\n    /** When dragged chip is let go in div's drop area \n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onDivDropped(targetExpressionItem: ExpressionItem) {\n        if (targetExpressionItem !== this._sourceExpressionItem) {\n            this.onChipDropped();\n        }\n    }\n\n    /** When dragged chip is let go in chip's drop area */\n    public onChipDropped() {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        //Determine which chip to be focused after drop completes\n        const [dropLocationIndex, _] = this.countChipsBeforeDropLocation(this._queryBuilderTreeComponent.rootGroup);\n\n        //Delete from old place\n        this._queryBuilderTreeComponent.deleteItem(this._sourceExpressionItem);\n        this.dropGhostExpression = null;\n\n        this._queryBuilderTreeComponent.focusChipAfterDrag(dropLocationIndex);\n\n        this.resetDragAndDrop(true);\n\n        this._queryBuilderTreeComponent.exitEditAddMode();\n    }\n\n    /** When mouse drag moves in a AND/OR drop area \n     * @param targetDragElement The HTML element of the drop area chip that's been dragged to\n     * @param targetExpressionItem The expressionItem of the drop area chip that's been dragged to\n    */\n    public onGroupRootOver(targetDragElement: HTMLElement, targetExpressionItem: ExpressionGroupItem) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        let newTargetExpressionItem;\n\n        if (this.ghostInLowerPart(targetDragElement) || !targetExpressionItem.parent) {\n            //if ghost is in lower part of the AND/OR (or it's the main group) => drop as first child of that group    \n            //accounting for the fact that the drop ghost might already be there as first child        \n            if (targetExpressionItem.children[0] !== this.dropGhostExpression) {\n                newTargetExpressionItem = targetExpressionItem.children[0];\n            } else {\n                newTargetExpressionItem = targetExpressionItem.children[1];\n            }\n        } else {\n            //if ghost is in upper part => drop before the group starts             \n            newTargetExpressionItem = targetExpressionItem;\n        }\n\n        if (this._targetExpressionItem !== newTargetExpressionItem) {\n            this.resetDragAndDrop(false);\n            this._targetExpressionItem = newTargetExpressionItem;\n            this.renderDropGhostChip(false);\n        }\n    }\n\n    /** When mouse drag moves in 'Add condition' button's drop area \n     * @param addConditionElement The Add condition button HTML Element\n     * @param rootGroup The root group of the query tree\n    */\n    public onAddConditionEnter(addConditionElement: HTMLElement, rootGroup: ExpressionGroupItem) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n        const lastElement = addConditionElement.parentElement.previousElementSibling.lastElementChild;\n\n        //simulate entering in the lower part of the last chip/group\n        this.onChipEnter(lastElement as HTMLElement, rootGroup.children[rootGroup.children.length - 1]);\n    }\n\n    /** When chip's drag indicator is focused\n     * \n     * @param sourceDragElement The HTML element of the chip that's been dragged\n     * @param sourceExpressionItem The expressionItem of the chip that's been dragged\n     * \n    */\n    public onChipDragIndicatorFocus(sourceDragElement: HTMLElement, sourceExpressionItem: ExpressionItem) {\n        //if drag is not underway, already\n        if (!this.getDropGhostElement) {\n            this.onMoveStart(sourceDragElement, sourceExpressionItem, true);\n        }\n    }\n\n    /** When chip's drag indicator looses focus*/\n    public onChipDragIndicatorFocusOut() {\n        if (this._sourceElement?.style?.display !== 'none') {\n            this.resetDragAndDrop(true);\n            this._keyboardSubscription$?.unsubscribe();\n        }\n    }\n\n    /** Upon blurring the tree, if Keyboard drag is underway and the next active item is not the drop ghost's drag indicator icon, cancel the drag&drop procedure*/\n    public onDragFocusOut() {\n        if (this.isKeyboardDrag && this.getDropGhostElement) {\n            //have to wait a tick because upon blur, the next activeElement is always body, right before the next element gains focus\n            setTimeout(() => {\n                if (document.activeElement.className.indexOf(QueryBuilderSelectors.DRAG_INDICATOR) === -1) {\n                    this.resetDragAndDrop(true);\n                    this._keyboardSubscription$?.unsubscribe();\n                }\n            }, 0);\n        }\n    }\n\n    /** Checks if the dragged ghost is horizontally on the same line with the drop ghost*/\n    private dragGhostIsOnDropGhostRow() {\n        const dragGhostBounds = this.getDragGhostElement.getBoundingClientRect();\n\n        const dropGhostBounds = this.getDropGhostElement?.nativeElement?.parentElement.getBoundingClientRect();\n\n        if (!dragGhostBounds || !dropGhostBounds) {\n            return false;\n        }\n\n        const tolerance = dragGhostBounds.bottom - dragGhostBounds.top;\n\n        return !(dragGhostBounds.bottom < dropGhostBounds.top - tolerance || dragGhostBounds.top > dropGhostBounds.bottom + tolerance);\n    }\n\n    /** Checks if the dragged ghost is north or south of a target element's center*/\n    private ghostInLowerPart(ofElement: HTMLElement) {\n        const ghostBounds = this.getDragGhostElement.getBoundingClientRect();\n        const targetBounds = ofElement.getBoundingClientRect();\n\n        return ((ghostBounds.top + ghostBounds.bottom) / 2) >= ((targetBounds.top + targetBounds.bottom) / 2);\n    }\n\n    /** Make a copy of the _sourceExpressionItem's chip and paste it in the tree north or south of the _targetExpressionItem's chip */\n    private renderDropGhostChip(appendUnder: boolean): void {\n        if (appendUnder !== this._dropUnder || this.isKeyboardDrag) {\n            this.clearDropGhost();\n\n            //Copy dragged chip\n            const dragCopy = { ...this._sourceExpressionItem };\n            dragCopy.parent = this._targetExpressionItem.parent;\n            this.dropGhostExpression = dragCopy;\n\n            //Paste chip\n            this._dropUnder = appendUnder;\n            const pasteIndex = this._targetExpressionItem.parent.children.indexOf(this._targetExpressionItem);\n            this._targetExpressionItem.parent.children.splice(pasteIndex + (this._dropUnder ? 1 : 0), 0, dragCopy);\n        }\n\n        //Put focus on the drag icon of the ghost while performing keyboard drag\n        if (this.isKeyboardDrag) {\n            setTimeout(() => { // this will make the execution after the drop ghost is rendered\n                const dropGhostDragIndicator = this.getDropGhostElement?.nativeElement?.querySelector(`.${QueryBuilderSelectors.DRAG_INDICATOR}`) as HTMLElement;\n                if (dropGhostDragIndicator) {\n                    dropGhostDragIndicator.focus();\n                }\n            }, 0);\n        }\n\n        //Attach a mousemove event listener (if not already in place) to the dragged ghost (if present)\n        if (!this.isKeyboardDrag && this.getDragGhostElement && (!this._ghostChipMousemoveSubscription$ || this._ghostChipMousemoveSubscription$?.closed === true)) {\n            const mouseMoves = fromEvent<MouseEvent>(this.getDragGhostElement, 'mousemove');\n\n            //When mouse moves and there is a drop ghost => trigger onChipLeave to check if the drop ghost has to be removed \n            //effectively solving the case when mouse leaves the QB and a drop ghost is still in place\n            this._ghostChipMousemoveSubscription$ = mouseMoves.pipe(sampleTime(100)).subscribe(() => {\n                if (this.getDropGhostElement) {\n                    this.onChipLeave();\n                }\n            });\n        }\n\n        this.setDragCursor('grab');\n    }\n\n    /** Set the cursor when dragging a ghost*/\n    private setDragCursor(cursor: string) {\n        if (this.getDragGhostElement) {\n            this.getDragGhostElement.style.cursor = cursor;\n        }\n    }\n\n    /** Removes the drop ghost expression from the tree and it's chip effectively  */\n    private clearDropGhost() {\n        if (this.dropGhostExpression) {\n            const children = this.dropGhostExpression.parent.children;\n            const delIndex = children.indexOf(this.dropGhostExpression);\n            children.splice(delIndex, 1);\n            this.dropGhostExpression = null;\n        }\n    }\n\n    /** Reset Drag&Drop vars. Optionally the drag source vars too*/\n    private resetDragAndDrop(clearDragged: boolean) {\n        this._targetExpressionItem = null;\n        this._dropUnder = null;\n        this.clearDropGhost();\n        this._keyDragInitialIndex = 0;\n        this._keyDragCurrentIndex = 0;\n        this._possibleDropLocations = null;\n        this._isKeyDragsFirstMove = true;\n        this.setDragCursor('no-drop');\n\n        if (this._queryBuilderTreeComponent._expressionTreeCopy) {\n            this._queryBuilderTreeComponent._expressionTree = this._queryBuilderTreeComponent._expressionTreeCopy;\n        }\n\n        if ((clearDragged || this.isKeyboardDrag) && this._sourceElement) {\n            this._sourceElement.style.display = '';\n        }\n\n        if (clearDragged) {\n            this._queryBuilderTreeComponent._expressionTreeCopy = null;\n            this._sourceExpressionItem = null;\n            this._sourceElement = null;\n        }\n    }\n\n    /** Start listening for drag and drop specific keys */\n    private listenToKeyboard() {\n        this._keyboardSubscription$?.unsubscribe();\n        this._keyboardSubscription$ = fromEvent<KeyboardEvent>(this.getMainExpressionTree, 'keydown')\n            .pipe(filter(e => ['ArrowUp', 'ArrowDown', 'Enter', 'Space', 'Escape', 'Tab'].includes(e.key)))\n            // .pipe(tap(e => {\n            //     //Inhibit Tabs if keyboard drag is underway (don't allow to loose focus of the drop ghost's drag indicator)\n            //     if (e.key === 'Tab' && this.getDropGhostElement) {\n            //         e.preventDefault();\n            //     }\n            // }))\n            .pipe(filter(event => !event.repeat))\n            .subscribe(e => {\n                if (e.key === 'Escape') {\n                    //TODO cancel mouse drag once it's implemented in igx-chip draggable\n                    this.resetDragAndDrop(false);\n                    //Regain focus on the drag icon after keyboard drag cancel\n                    if (this.isKeyboardDrag) {\n                        (this._sourceElement.firstElementChild.firstElementChild.firstElementChild.firstElementChild as HTMLElement).focus();\n                    }\n                } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n                    this.arrowDrag(e.key);\n                } else if (e.key === 'Enter' || e.key === 'Space') {\n                    //this.platform.isActivationKey(eventArgs) Maybe use this rather that Enter/Space?\n                    this.onChipDropped();\n                    this._keyboardSubscription$.unsubscribe();\n                }\n            });\n    }\n\n    /** Perform up/down movement of drop ghost along the expression tree*/\n    private arrowDrag(key: string) {\n        if (!this._sourceElement || !this._sourceExpressionItem) {\n            return;\n        }\n\n        const rootGroup = this._queryBuilderTreeComponent.rootGroup;\n\n        if (this._isKeyDragsFirstMove) {\n            this._possibleDropLocations = this.getPossibleDropLocations(rootGroup, true);\n            this._keyDragInitialIndex = this._possibleDropLocations.findIndex(e => e[0] === this._sourceExpressionItem && e[1] === true);\n            this._keyDragCurrentIndex = this._keyDragInitialIndex;\n            if (this._keyDragInitialIndex === -1) {\n                console.error(\"Dragged expression not found\");\n            }\n            this._sourceElement.style.display = 'none';\n        }\n\n        let newKeyIndexOffset = this._keyDragCurrentIndex;\n        if (key === 'ArrowUp') {\n            //decrease index capped at top of tree\n            newKeyIndexOffset && newKeyIndexOffset--;\n        } else if (key === 'ArrowDown') {\n            //increase index capped at bottom of tree\n            newKeyIndexOffset < this._possibleDropLocations.length - 1 && newKeyIndexOffset++;\n        } else {\n            console.error('wrong key');\n            return;\n        }\n\n        //if drop location has no change\n        if (newKeyIndexOffset !== this._keyDragCurrentIndex || this._isKeyDragsFirstMove) {\n            this._keyDragCurrentIndex = newKeyIndexOffset;\n\n            const newDropTarget = this._possibleDropLocations[this._keyDragCurrentIndex];\n            this._targetExpressionItem = newDropTarget[0]\n\n            this.renderDropGhostChip(newDropTarget[1]);\n\n            //Situations when drop ghost hasn't really moved, run one more time\n            if (this._keyDragCurrentIndex === this._keyDragInitialIndex ||\n                (this._isKeyDragsFirstMove && this._keyDragCurrentIndex === this._keyDragInitialIndex - 1)) {\n                this._isKeyDragsFirstMove = false;\n                this.arrowDrag(key);\n            }\n\n            this._isKeyDragsFirstMove = false;\n        }\n\n        return;\n    }\n\n    /** Produces a flat ordered list of possible drop locations as Tuple <[targetExpression, dropUnder]>, while performing the keyboard drag&drop */\n    private getPossibleDropLocations(group: ExpressionGroupItem, isRoot: boolean): Array<[ExpressionItem, boolean]> {\n        const result = new Array() as Array<[ExpressionItem, boolean]>;\n\n        //Add dropZone under AND/OR (as first child of group)\n        result.push([(group as ExpressionGroupItem).children[0], false]);\n\n        for (let i = 0; i < group.children.length; i++) {\n            if (group.children[i] instanceof ExpressionGroupItem) {\n                result.push(...this.getPossibleDropLocations(group.children[i] as ExpressionGroupItem, false));\n            } else {\n                result.push([group.children[i], true]);\n            }\n        }\n\n        //Add dropZone under the whole group\n        if (!isRoot) {\n            result.push([group, true]);\n        }\n\n        return result;\n    }\n\n    /** Counts how many chips will be in the tree (from top to bottom) before the dropped one */\n    private countChipsBeforeDropLocation(group: ExpressionGroupItem): [number, boolean] {\n        let count = 0, totalCount = 0, targetReached = false;\n\n        for (let i = 0; i < group.children.length; i++) {\n            const child = group.children[i];\n\n            if (targetReached) {\n                break;\n            }\n\n            if (child instanceof ExpressionGroupItem) {\n                if (child === this._targetExpressionItem) {\n                    if (this._dropUnder) {\n                        [count] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n                        totalCount += count;\n                    }\n                    targetReached = true;\n                } else {\n                    [count, targetReached] = this.countChipsBeforeDropLocation(child as ExpressionGroupItem);\n                    totalCount += count;\n                }\n            } else {\n                if (child !== this._sourceExpressionItem && //not the hidden source chip\n                    child !== this.dropGhostExpression && //not the drop ghost\n                    !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true) //not a chip in edit mode that will be discarded\n                ) {\n                    totalCount++;\n                }\n\n                if (child === this._targetExpressionItem) {\n                    targetReached = true;\n                    if (!this._dropUnder &&\n                        !((child as ExpressionOperandItem).inEditMode && this._queryBuilderTreeComponent.operandCanBeCommitted() !== true)) {\n                        totalCount--;\n                    }\n                }\n            }\n        }\n\n        totalCount === -1 && totalCount++;\n\n        return [totalCount, targetReached];\n    }\n\n    /** Sets the z-index of the drag ghost with a little delay, since we don't have access to ghostCreated() but we know it's executed right after moveStart() */\n    private setDragGhostZIndex() {\n        if (this._timeoutId) {\n            clearTimeout(this._timeoutId);\n        }\n\n        this._timeoutId = setTimeout(() => {\n            if (this.getDragGhostElement?.style) {\n                this.getDragGhostElement.style.zIndex = `${Z_INDEX_TO_SET}`;\n            }\n        }, DEFAULT_SET_Z_INDEX_DELAY);\n    }\n}","import {\n    AfterViewInit,\n    EventEmitter,\n    LOCALE_ID,\n    Output,\n    TemplateRef\n} from '@angular/core';\nimport { getLocaleFirstDayOfWeek, NgTemplateOutlet, NgClass, DatePipe } from '@angular/common';\nimport { Inject } from '@angular/core';\nimport {\n    Component, Input, ViewChild, ChangeDetectorRef, ViewChildren, QueryList, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { IgxChipComponent } from '../chips/chip.component';\nimport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from '../core/i18n/query-builder-resources';\nimport { PlatformUtil, trackByIdentity } from '../core/utils';\nimport { DataType, DataUtil } from '../data-operations/data-util';\nimport { IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand, IgxTimeFilteringOperand } from '../data-operations/filtering-condition';\nimport { FilteringLogic, IFilteringExpression } from '../data-operations/filtering-expression.interface';\nimport { FilteringExpressionsTree, IExpressionTree, IFilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';\nimport { IgxDatePickerComponent } from '../date-picker/date-picker.component';\n\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxDateTimeEditorDirective } from '../directives/date-time-editor/date-time-editor.directive';\n\nimport { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';\nimport { FieldType, EntityType } from '../grids/common/grid.interface';\nimport { IgxSelectComponent } from '../select/select.component';\nimport { HorizontalAlignment, OverlaySettings, VerticalAlignment } from '../services/overlay/utilities';\nimport { AbsoluteScrollStrategy, AutoPositionStrategy, CloseScrollStrategy, ConnectedPositioningStrategy } from '../services/public_api';\nimport { IgxTimePickerComponent } from '../time-picker/time-picker.component';\nimport { IgxPickerToggleComponent, IgxPickerClearComponent } from '../date-common/picker-icons.common';\nimport { IgxInputDirective } from '../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\nimport { IgxSelectItemComponent } from '../select/select-item.component';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { IgxIconButtonDirective } from '../directives/button/icon-button.directive';\nimport { IComboSelectionChangingEventArgs, IgxComboComponent } from \"../combo/combo.component\";\nimport { IgxComboHeaderDirective } from '../combo/public_api';\nimport { IgxCheckboxComponent } from \"../checkbox/checkbox.component\";\nimport { IChangeCheckboxEventArgs } from '../checkbox/checkbox-base.directive';\nimport { IgxDialogComponent } from \"../dialog/dialog.component\";\nimport { ISelectionEventArgs } from '../drop-down/drop-down.common';\nimport { IgxTooltipDirective } from '../directives/tooltip/tooltip.directive';\nimport { IgxTooltipTargetDirective } from '../directives/tooltip/tooltip-target.directive';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxDragIgnoreDirective, IgxDropDirective } from '../directives/drag-drop/drag-drop.directive';\nimport { IgxDropDownComponent } from '../drop-down/drop-down.component';\nimport { IgxDropDownItemComponent } from '../drop-down/drop-down-item.component';\nimport { IgxDropDownItemNavigationDirective } from '../drop-down/drop-down-navigation.directive';\nimport { IgxQueryBuilderDragService } from './query-builder-drag.service';\nimport { isTree } from '../data-operations/expressions-tree-util';\nimport { ExpressionGroupItem, ExpressionItem, ExpressionOperandItem, IgxFieldFormatterPipe } from './query-builder.common';\n\nconst DEFAULT_PIPE_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_PIPE_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_PIPE_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_PIPE_DIGITS_INFO = '1.0-3';\nconst DEFAULT_CHIP_FOCUS_DELAY = 50;\n\n/** @hidden */\n@Component({\n    selector: 'igx-query-builder-tree',\n    templateUrl: './query-builder-tree.component.html',\n    host: { 'class': 'igx-query-builder-tree' },\n    imports: [\n        DatePipe,\n        FormsModule,\n        IgxButtonDirective,\n        IgxCheckboxComponent,\n        IgxChipComponent,\n        IgxComboComponent,\n        IgxComboHeaderDirective,\n        IgxDatePickerComponent,\n        IgxDateTimeEditorDirective,\n        IgxDialogComponent,\n        IgxDragIgnoreDirective,\n        IgxDropDirective,\n        IgxDropDownComponent,\n        IgxDropDownItemComponent,\n        IgxDropDownItemNavigationDirective,\n        IgxFieldFormatterPipe,\n        IgxIconButtonDirective,\n        IgxIconComponent,\n        IgxInputDirective,\n        IgxInputGroupComponent,\n        IgxOverlayOutletDirective,\n        IgxPickerClearComponent,\n        IgxPickerToggleComponent,\n        IgxPrefixDirective,\n        IgxSelectComponent,\n        IgxSelectItemComponent,\n        IgxTimePickerComponent,\n        IgxTooltipDirective,\n        IgxTooltipTargetDirective,\n        NgClass,\n        NgTemplateOutlet\n    ],\n    providers: [\n        IgxQueryBuilderDragService\n    ],\n})\nexport class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {\n    /**\n     * @hidden @internal\n     */\n    public _expressionTree: IExpressionTree;\n\n    /**\n     * @hidden @internal\n     */\n    public _expressionTreeCopy: IExpressionTree;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class') public get getClass() {\n        return `igx-query-builder-tree--level-${this.level}`;\n    }\n\n    /**\n     * Sets/gets the entities.\n     */\n    @Input()\n    public entities: EntityType[];\n\n    /**\n     * Sets/gets the parent query builder component.\n     */\n    @Input()\n    public queryBuilder: IgxQueryBuilderComponent;\n\n    /**\n     * Sets/gets the search value template.\n     */\n    @Input()\n    public searchValueTemplate: TemplateRef<IgxQueryBuilderSearchValueTemplateDirective> = null;\n\n    /**\n    * Returns the parent expression operand.\n    */\n    @Input()\n    public get parentExpression(): ExpressionOperandItem {\n        return this._parentExpression;\n    }\n\n    /**\n     * Sets the parent expression operand.\n     */\n    public set parentExpression(value: ExpressionOperandItem) {\n        this._parentExpression = value;\n    }\n\n    /**\n    * Returns the fields.\n    */\n    public get fields(): FieldType[] {\n        if (!this._fields && this.isAdvancedFiltering()) {\n            this._fields = this.entities[0].fields;\n        }\n\n        return this._fields;\n    }\n\n    /**\n     * Sets the fields.\n     */\n    @Input()\n    public set fields(fields: FieldType[]) {\n        this._fields = fields;\n        \n        this._fields = this._fields?.map(f => ({...f, filters: this.getFilters(f), pipeArgs: this.getPipeArgs(f) }));\n        \n        if (!this._fields && this.isAdvancedFiltering()) {\n            this._fields = this.entities[0].fields;\n        }\n    }\n\n    /**\n    * Returns the expression tree.\n    */\n    public get expressionTree(): IExpressionTree {\n        return this._expressionTree;\n    }\n\n    /**\n     * Sets the expression tree.\n     */\n    @Input()\n    public set expressionTree(expressionTree: IExpressionTree) {\n        this._expressionTree = expressionTree;\n        if (!expressionTree) {\n            this._selectedEntity = null;\n            this._selectedReturnFields = [];\n        }\n\n        if (!this._preventInit) {\n            this.init();\n        }\n    }\n\n    /**\n     * Gets the `locale` of the query builder.\n     * If not set, defaults to application's locale.\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale;\n    }\n\n    /**\n     * Sets the `locale` of the query builder.\n     * Expects a valid BCP 47 language tag.\n     */\n    public set locale(value: string) {\n        this._locale = value;\n        // if value is invalid, set it back to _localeId\n        try {\n            getLocaleFirstDayOfWeek(this._locale);\n        } catch {\n            this._locale = this._localeId;\n        }\n    }\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IQueryBuilderResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IQueryBuilderResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Event fired as the expression tree is changed.\n     */\n    @Output()\n    public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n    /**\n     * Event fired if a nested query builder tree is being edited.\n     */\n    @Output()\n    public inEditModeChange = new EventEmitter<ExpressionOperandItem>();\n\n    @ViewChild('entitySelect', { read: IgxSelectComponent })\n    protected entitySelect: IgxSelectComponent;\n\n    @ViewChild('editingInputs', { read: ElementRef })\n    private editingInputs: ElementRef;\n\n    @ViewChild('returnFieldsCombo', { read: IgxComboComponent })\n    private returnFieldsCombo: IgxComboComponent;\n\n    @ViewChild('returnFieldSelect', { read: IgxSelectComponent })\n    protected returnFieldSelect: IgxSelectComponent;\n\n    @ViewChild('fieldSelect', { read: IgxSelectComponent })\n    private fieldSelect: IgxSelectComponent;\n\n    @ViewChild('conditionSelect', { read: IgxSelectComponent })\n    private conditionSelect: IgxSelectComponent;\n\n    @ViewChild('searchValueInput', { read: ElementRef })\n    private searchValueInput: ElementRef;\n\n    @ViewChild('picker')\n    private picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n    @ViewChild('addRootAndGroupButton', { read: ElementRef })\n    private addRootAndGroupButton: ElementRef;\n\n    @ViewChild('addConditionButton', { read: ElementRef })\n    private addConditionButton: ElementRef;\n\n    @ViewChild('entityChangeDialog', { read: IgxDialogComponent })\n    private entityChangeDialog: IgxDialogComponent;\n\n    @ViewChild('addOptionsDropDown', { read: IgxDropDownComponent })\n    private addExpressionItemDropDown: IgxDropDownComponent;\n\n    @ViewChild('groupContextMenuDropDown', { read: IgxDropDownComponent })\n    private groupContextMenuDropDown: IgxDropDownComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxChipComponent, { read: IgxChipComponent })\n    public expressionsChips: QueryList<IgxChipComponent>;\n\n    @ViewChild('editingInputsContainer', { read: ElementRef })\n    protected set editingInputsContainer(value: ElementRef) {\n        if ((value && !this._editingInputsContainer) ||\n            (value && this._editingInputsContainer && this._editingInputsContainer.nativeElement !== value.nativeElement)) {\n            requestAnimationFrame(() => {\n                this.scrollElementIntoView(value.nativeElement);\n            });\n        }\n\n        this._editingInputsContainer = value;\n    }\n\n    /** @hidden */\n    protected get editingInputsContainer(): ElementRef {\n        return this._editingInputsContainer;\n    }\n\n    @ViewChild('currentGroupButtonsContainer', { read: ElementRef })\n    protected set currentGroupButtonsContainer(value: ElementRef) {\n        if ((value && !this._currentGroupButtonsContainer) ||\n            (value && this._currentGroupButtonsContainer && this._currentGroupButtonsContainer.nativeElement !== value.nativeElement)) {\n            requestAnimationFrame(() => {\n                this.scrollElementIntoView(value.nativeElement);\n            });\n        }\n\n        this._currentGroupButtonsContainer = value;\n    }\n\n    /** @hidden */\n    protected get currentGroupButtonsContainer(): ElementRef {\n        return this._currentGroupButtonsContainer;\n    }\n\n    @ViewChild('expressionsContainer')\n    private expressionsContainer: ElementRef;\n\n    @ViewChild('overlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    private overlayOutlet: IgxOverlayOutletDirective;\n\n    @ViewChildren(IgxQueryBuilderTreeComponent)\n    private innerQueries: QueryList<IgxQueryBuilderTreeComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    public innerQueryNewExpressionTree: IExpressionTree;\n\n    /**\n     * @hidden @internal\n     */\n    public rootGroup: ExpressionGroupItem;\n\n    /**\n     * @hidden @internal\n     */\n    public selectedExpressions: ExpressionOperandItem[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public currentGroup: ExpressionGroupItem;\n\n    /**\n     * @hidden @internal\n     */\n    public contextualGroup: ExpressionGroupItem;\n\n    /**\n     * @hidden @internal\n     */\n    public filteringLogics;\n\n    /**\n     * @hidden @internal\n     */\n    public selectedCondition: string;\n\n    /**\n     * @hidden @internal\n     */\n    public searchValue: { value: any } = { value: null };\n\n    /**\n     * @hidden @internal\n     */\n    public pickerOutlet: IgxOverlayOutletDirective | ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    public prevFocusedExpression: ExpressionOperandItem;\n\n    /**\n     * @hidden @internal\n     */\n    public initialOperator = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public returnFieldSelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public entitySelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public fieldSelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public conditionSelectOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public addExpressionDropDownOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * @hidden @internal\n     */\n    public groupContextMenuDropDownOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    private destroy$ = new Subject<any>();\n    private _timeoutId: any;\n    private _lastFocusedChipIndex: number;\n    private _focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n    private _parentExpression: ExpressionOperandItem;\n    private _selectedEntity: EntityType;\n    private _selectedReturnFields: string | string[];\n    private _selectedField: FieldType;\n    private _editingInputsContainer: ElementRef;\n    private _currentGroupButtonsContainer: ElementRef;\n    private _addModeExpression: ExpressionOperandItem;\n    private _editedExpression: ExpressionOperandItem;\n    private _preventInit = false;\n    private _prevFocusedContainer: ElementRef;\n    private _expandedExpressions: IFilteringExpression[] = [];\n    private _fields: FieldType[];\n    private _locale;\n    private _entityNewValue: EntityType;\n    private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n    /**\n     * Returns if the select entity dropdown at the root level is disabled after the initial selection.\n     */\n    public get disableEntityChange(): boolean {\n\n        return !this.parentExpression && this.selectedEntity ? this.queryBuilder.disableEntityChange : false;\n    }\n\n    /**\n     * Returns if the fields combo at the root level is disabled.\n     */\n    public get disableReturnFieldsChange(): boolean {\n\n        return !this.selectedEntity || this.queryBuilder.disableReturnFieldsChange;\n    }\n\n    /**\n     * Returns the current level.\n     */\n    public get level(): number {\n        let parent = this.elRef.nativeElement.parentElement;\n        let _level = 0;\n        while (parent) {\n            if (parent.localName === 'igx-query-builder-tree') {\n                _level++;\n            }\n            parent = parent.parentElement;\n        }\n        return _level;\n    }\n\n    private _positionSettings = {\n        horizontalStartPoint: HorizontalAlignment.Right,\n        verticalStartPoint: VerticalAlignment.Top\n    };\n\n    private _overlaySettings: OverlaySettings = {\n        closeOnOutsideClick: false,\n        modal: false,\n        positionStrategy: new ConnectedPositioningStrategy(this._positionSettings),\n        scrollStrategy: new CloseScrollStrategy()\n    };\n\n    /** @hidden */\n    protected isAdvancedFiltering(): boolean {\n        return this.entities?.length === 1 && !this.entities[0]?.name;\n    }\n\n    /** @hidden */\n    protected isSearchValueInputDisabled(): boolean {\n        return !this.selectedField ||\n            !this.selectedCondition ||\n            (this.selectedField &&\n                (this.selectedField.filters.condition(this.selectedCondition).isUnary ||\n                    this.selectedField.filters.condition(this.selectedCondition).isNestedQuery));\n    }\n\n    constructor(public cdr: ChangeDetectorRef,\n        public dragService: IgxQueryBuilderDragService,\n        protected platform: PlatformUtil,\n        private elRef: ElementRef,\n        @Inject(LOCALE_ID) protected _localeId: string) {\n        this.locale = this.locale || this._localeId;\n        this.dragService.register(this, elRef);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngAfterViewInit(): void {\n        this._overlaySettings.outlet = this.overlayOutlet;\n        this.entitySelectOverlaySettings.outlet = this.overlayOutlet;\n        this.fieldSelectOverlaySettings.outlet = this.overlayOutlet;\n        this.conditionSelectOverlaySettings.outlet = this.overlayOutlet;\n        this.returnFieldSelectOverlaySettings.outlet = this.overlayOutlet;\n        this.addExpressionDropDownOverlaySettings.outlet = this.overlayOutlet;\n        this.groupContextMenuDropDownOverlaySettings.outlet = this.overlayOutlet;\n        // Trigger additional change detection cycle\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set selectedEntity(value: string) {\n        this._selectedEntity = this.entities?.find(el => el.name === value);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedEntity(): EntityType {\n        return this._selectedEntity;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onEntitySelectChanging(event: ISelectionEventArgs) {\n        event.cancel = true;\n        this._entityNewValue = event.newSelection.value;\n        if (event.oldSelection.value && this.queryBuilder.showEntityChangeDialog) {\n            this.entityChangeDialog.open();\n        } else {\n            this.onEntityChangeConfirm();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onShowEntityChangeDialogChange(eventArgs: IChangeCheckboxEventArgs) {\n        this.queryBuilder.showEntityChangeDialog = !eventArgs.checked;\n    }\n\n    /**\n     * @hidden\n     */\n    public onEntityChangeCancel() {\n        this.entityChangeDialog.close();\n        this.entitySelect.close();\n        this._entityNewValue = null;\n    }\n\n    /**\n     * @hidden\n     */\n    public onEntityChangeConfirm() {\n        if (this._parentExpression) {\n            this._expressionTree = this.createExpressionTreeFromGroupItem(this.createExpressionGroupItem(this._expressionTree));\n        }\n\n        this._selectedEntity = this._entityNewValue;\n        if (!this._selectedEntity.fields) {\n            this._selectedEntity.fields = [];\n        }\n        this.fields = this._entityNewValue ? this._entityNewValue.fields : [];\n\n        this._selectedReturnFields = this.parentExpression ? [] : this._entityNewValue.fields?.map(f => f.field);\n\n        if (this._expressionTree) {\n            this._expressionTree.entity = this._entityNewValue.name;\n            this._expressionTree.returnFields = [];\n            this._expressionTree.filteringOperands = [];\n\n            this._editedExpression = null;\n            if (!this.parentExpression) {\n                this.expressionTreeChange.emit(this._expressionTree);\n            }\n\n            this.rootGroup = null;\n            this.currentGroup = this.rootGroup;\n        }\n\n        this._selectedField = null;\n        this.selectedCondition = null;\n        this.searchValue.value = null;\n\n        this.entityChangeDialog.close();\n        this.entitySelect.close();\n\n        this._entityNewValue = null;\n        this.innerQueryNewExpressionTree = null;\n\n        this.initExpressionTree(this._selectedEntity.name, this.selectedReturnFields);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set selectedReturnFields(value: string[]) {\n        if (this._selectedReturnFields !== value) {\n            this._selectedReturnFields = value;\n\n            if (this._expressionTree && !this.parentExpression) {\n                this._expressionTree.returnFields = value;\n                this.expressionTreeChange.emit(this._expressionTree);\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedReturnFields(): string[] {\n        if (typeof this._selectedReturnFields == 'string') {\n            return [this._selectedReturnFields];\n        }\n        return this._selectedReturnFields;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set selectedField(value: FieldType) {\n        const oldValue = this._selectedField;\n\n        if (this._selectedField !== value) {\n            this._selectedField = value;\n            this.selectDefaultCondition();\n            if (oldValue && this._selectedField && this._selectedField.dataType !== oldValue.dataType) {\n                this.searchValue.value = null;\n                this.cdr.detectChanges();\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedField(): FieldType {\n        return this._selectedField;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n        this.pickerOutlet = outlet;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public get isContextMenuVisible(): boolean {\n        return !this.groupContextMenuDropDown.collapsed;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get hasEditedExpression(): boolean {\n        return this._editedExpression !== undefined && this._editedExpression !== null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public addCondition(parent: ExpressionGroupItem, afterExpression?: ExpressionOperandItem, isUIInteraction?: boolean) {\n        this.cancelOperandAdd();\n\n        const operandItem = new ExpressionOperandItem({\n            fieldName: null,\n            condition: null,\n            conditionName: null,\n            ignoreCase: true,\n            searchVal: null\n        }, parent);\n\n        const groupItem = new ExpressionGroupItem(this.getOperator(null) ?? FilteringLogic.And, parent);\n        this.contextualGroup = groupItem;\n        this.initialOperator = null;\n\n        this._lastFocusedChipIndex = this._lastFocusedChipIndex === undefined ? -1 : this._lastFocusedChipIndex;\n\n        if (parent) {\n            if (afterExpression) {\n                const index = parent.children.indexOf(afterExpression);\n                parent.children.splice(index + 1, 0, operandItem);\n            } else {\n                parent.children.push(operandItem);\n            }\n            this._lastFocusedChipIndex++;\n        } else {\n            this.rootGroup = groupItem;\n            operandItem.parent = groupItem;\n            this.rootGroup.children.push(operandItem);\n            this._lastFocusedChipIndex = 0;\n        }\n\n        this._focusDelay = 250;\n\n        if (isUIInteraction && !afterExpression) {\n            this._lastFocusedChipIndex = this.expressionsChips.length;\n            this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n        }\n\n        this.enterExpressionEdit(operandItem);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public addReverseGroup(parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n        parent = parent ?? this.rootGroup;\n\n        if (parent.operator === FilteringLogic.And) {\n            this.addGroup(FilteringLogic.Or, parent, afterExpression);\n        } else {\n            this.addGroup(FilteringLogic.And, parent, afterExpression);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public endGroup(groupItem: ExpressionGroupItem) {\n        this.currentGroup = groupItem.parent;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public commitExpression() {\n        this.commitOperandEdit();\n        this.focusEditedExpressionChip();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public discardExpression(expressionItem?: ExpressionOperandItem) {\n        this.cancelOperandEdit();\n        if (expressionItem && expressionItem.expression.fieldName) {\n            this.focusEditedExpressionChip();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public commitOperandEdit() {\n        const actualSearchValue = this.searchValue.value;\n        if (this._editedExpression) {\n            this._editedExpression.expression.fieldName = this.selectedField.field;\n            this._editedExpression.expression.condition = this.selectedField.filters.condition(this.selectedCondition);\n            this._editedExpression.expression.conditionName = this.selectedCondition;\n            this._editedExpression.expression.searchVal = DataUtil.parseValue(this.selectedField.dataType, actualSearchValue) || actualSearchValue;\n            this._editedExpression.fieldLabel = this.selectedField.label\n                ? this.selectedField.label\n                : this.selectedField.header\n                    ? this.selectedField.header\n                    : this.selectedField.field;\n\n            const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0]\n            if (innerQuery && this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery) {\n                innerQuery.exitEditAddMode();\n                this._editedExpression.expression.searchTree = this.getExpressionTreeCopy(innerQuery.expressionTree);\n                this._editedExpression.expression.searchTree.returnFields = innerQuery.selectedReturnFields;\n            } else {\n                this._editedExpression.expression.searchTree = null;\n            }\n            this.innerQueryNewExpressionTree = null;\n\n            if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary || this.selectedField.filters.condition(this.selectedCondition)?.isNestedQuery) {\n                this._editedExpression.expression.searchVal = null;\n            }\n\n            this._editedExpression.inEditMode = false;\n            this._editedExpression = null;\n        }\n\n        this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, this.selectedEntity?.name, this.selectedReturnFields);\n        if (!this.parentExpression) {\n            this.expressionTreeChange.emit(this._expressionTree);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancelOperandAdd() {\n        if (this._addModeExpression) {\n            this._addModeExpression.inAddMode = false;\n            this._addModeExpression = null;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {\n        if (!expressionItem.parent) {\n            this.rootGroup = null;\n            this.currentGroup = null;\n            //this._expressionTree = null;\n            return;\n        }\n\n        if (expressionItem === this.currentGroup) {\n            this.currentGroup = this.currentGroup.parent;\n        }\n\n        const children = expressionItem.parent.children;\n        const index = children.indexOf(expressionItem);\n        children.splice(index, 1);\n        const entity = this.expressionTree ? this.expressionTree.entity : null;\n        const returnFields = this.expressionTree ? this.expressionTree.returnFields : null;\n        this._expressionTree = this.createExpressionTreeFromGroupItem(this.rootGroup, entity, returnFields); // TODO: don't recreate if not necessary\n\n        if (!children.length) {\n            this.deleteItem(expressionItem.parent, true);\n        }\n\n        if (!this.parentExpression && !skipEmit) {\n            this.expressionTreeChange.emit(this._expressionTree);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancelOperandEdit() {\n        if (this.innerQueries) {\n            const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n            if (innerQuery) {\n                if (innerQuery._editedExpression) {\n                    innerQuery.cancelOperandEdit();\n                }\n\n                innerQuery.expressionTree = this.getExpressionTreeCopy(this._editedExpression.expression.searchTree);\n                this.innerQueryNewExpressionTree = null;\n            }\n        }\n\n        if (this._editedExpression) {\n            this._editedExpression.inEditMode = false;\n\n            if (!this._editedExpression.expression.fieldName) {\n                this.deleteItem(this._editedExpression);\n            }\n\n            this._editedExpression = null;\n        }\n\n        if (!this.expressionTree && this.contextualGroup) {\n            this.initialOperator = this.contextualGroup.operator;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public operandCanBeCommitted(): boolean {\n        const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n\n        return this.selectedField && this.selectedCondition &&\n            (\n                (\n                    ((!Array.isArray(this.searchValue.value) && !!this.searchValue.value) || (Array.isArray(this.searchValue.value) && this.searchValue.value.length !== 0)) &&\n                    !(this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery)\n                ) ||\n                (\n                    this.selectedField?.filters?.condition(this.selectedCondition)?.isNestedQuery && innerQuery && !!innerQuery.expressionTree && innerQuery.selectedReturnFields?.length > 0\n                ) ||\n                this.selectedField.filters.condition(this.selectedCondition)?.isUnary\n            );\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public canCommitCurrentState(): boolean {\n        const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n        if (innerQuery) {\n            return this.selectedReturnFields?.length > 0 && innerQuery.canCommitCurrentState();\n        } else {\n            return this.selectedReturnFields?.length > 0 &&\n                (\n                    (!this._editedExpression) || // no edited expr\n                    (this._editedExpression && !this.selectedField) || // empty edited expr\n                    (this._editedExpression && this.operandCanBeCommitted() === true) // valid edited expr\n                );\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public commitCurrentState(): void {\n        const innerQuery = this.innerQueries.filter(q => q.isInEditMode())[0];\n        if (innerQuery) {\n            innerQuery.commitCurrentState();\n        }\n\n        if (this._editedExpression) {\n            if (this.selectedField) {\n                this.commitOperandEdit();\n            } else {\n                this.deleteItem(this._editedExpression);\n                this._editedExpression = null;\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public exitEditAddMode(shouldPreventInit = false) {\n        if (!this._editedExpression) {\n            return;\n        }\n\n        this.exitOperandEdit();\n        this.cancelOperandAdd();\n\n        if (shouldPreventInit) {\n            this._preventInit = true;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public exitOperandEdit() {\n        if (!this._editedExpression) {\n            return;\n        }\n\n        if (this.operandCanBeCommitted()) {\n            this.commitOperandEdit();\n        } else {\n            this.cancelOperandEdit();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isExpressionGroup(expression: ExpressionItem): boolean {\n        return expression instanceof ExpressionGroupItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onExpressionFocus(expressionItem: ExpressionOperandItem) {\n        if (this.prevFocusedExpression) {\n            this.prevFocusedExpression.focused = false;\n        }\n        expressionItem.focused = true;\n        this.prevFocusedExpression = expressionItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onExpressionBlur(event, expressionItem: ExpressionOperandItem) {\n        if (this._prevFocusedContainer && this._prevFocusedContainer !== event.target.closest('.igx-filter-tree__expression-item')) {\n            expressionItem.focused = false;\n        }\n        this._prevFocusedContainer = event.target.closest('.igx-filter-tree__expression-item');\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onChipRemove(expressionItem: ExpressionItem) {\n        this.exitEditAddMode();\n        this.deleteItem(expressionItem);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public focusChipAfterDrag = (index: number) => {\n        this._lastFocusedChipIndex = index;\n        this.focusEditedExpressionChip();\n    }\n    /**\n     * @hidden @internal\n     */\n    public addExpressionBlur() {\n        if (this.prevFocusedExpression) {\n            this.prevFocusedExpression.focused = false;\n        }\n        if (this.addExpressionItemDropDown && !this.addExpressionItemDropDown.collapsed) {\n            this.addExpressionItemDropDown.close();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onChipClick(expressionItem: ExpressionOperandItem, chip: IgxChipComponent) {\n        this.enterExpressionEdit(expressionItem, chip);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public enterExpressionEdit(expressionItem: ExpressionOperandItem, chip?: IgxChipComponent) {\n        this.exitEditAddMode(true);\n        this.cdr.detectChanges();\n        this._lastFocusedChipIndex = chip ? this.expressionsChips.toArray().findIndex(expr => expr === chip) : this._lastFocusedChipIndex;\n        this.enterEditMode(expressionItem);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public clickExpressionAdd(targetButton: HTMLElement, chip: IgxChipComponent) {\n        this.exitEditAddMode(true);\n        this.cdr.detectChanges();\n        this._lastFocusedChipIndex = this.expressionsChips.toArray().findIndex(expr => expr === chip);\n        this.openExpressionAddDialog(targetButton);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public openExpressionAddDialog(targetButton: HTMLElement) {\n        this.addExpressionDropDownOverlaySettings.target = targetButton;\n        this.addExpressionDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n            horizontalDirection: HorizontalAlignment.Right,\n            horizontalStartPoint: HorizontalAlignment.Left,\n            verticalStartPoint: VerticalAlignment.Bottom\n        });\n\n        this.addExpressionItemDropDown.open(this.addExpressionDropDownOverlaySettings);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public enterExpressionAdd(event: ISelectionEventArgs, expressionItem: ExpressionOperandItem) {\n        if (this._addModeExpression) {\n            this._addModeExpression.inAddMode = false;\n        }\n\n        if (this.parentExpression) {\n            this.inEditModeChange.emit(this.parentExpression);\n        }\n\n        const parent = expressionItem.parent ?? this.rootGroup;\n        requestAnimationFrame(() => {\n            if (event.newSelection.value === 'addCondition') {\n                this.addCondition(parent, expressionItem);\n            } else if (event.newSelection.value === 'addGroup') {\n                this.addReverseGroup(parent, expressionItem);\n            }\n            expressionItem.inAddMode = true;\n            this._addModeExpression = expressionItem;\n        })\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public enterEditMode(expressionItem: ExpressionOperandItem) {\n        if (this._editedExpression) {\n            this._editedExpression.inEditMode = false;\n        }\n\n        if (this.parentExpression) {\n            this.inEditModeChange.emit(this.parentExpression);\n        }\n\n        expressionItem.hovered = false;\n        this.fields = this.selectedEntity ? this.selectedEntity.fields : null;\n        this.selectedField =\n            expressionItem.expression.fieldName ?\n                this.fields?.find(field => field.field === expressionItem.expression.fieldName)\n                : null;\n        this.selectedCondition =\n            expressionItem.expression.condition ?\n                expressionItem.expression.condition.name :\n                null;\n        this.searchValue.value = expressionItem.expression.searchVal instanceof Set ?\n            Array.from(expressionItem.expression.searchVal) :\n            expressionItem.expression.searchVal;\n\n        expressionItem.inEditMode = true;\n        this._editedExpression = expressionItem;\n        this.cdr.detectChanges();\n\n        this.entitySelectOverlaySettings.target = this.entitySelect.element;\n        this.entitySelectOverlaySettings.excludeFromOutsideClick = [this.entitySelect.element as HTMLElement];\n        this.entitySelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n\n        if (this.returnFieldSelect) {\n            this.returnFieldSelectOverlaySettings.target = this.returnFieldSelect.element;\n            this.returnFieldSelectOverlaySettings.excludeFromOutsideClick = [this.returnFieldSelect.element as HTMLElement];\n            this.returnFieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n        }\n        if (this.fieldSelect) {\n            this.fieldSelectOverlaySettings.target = this.fieldSelect.element;\n            this.fieldSelectOverlaySettings.excludeFromOutsideClick = [this.fieldSelect.element as HTMLElement];\n            this.fieldSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n        }\n        if (this.conditionSelect) {\n            this.conditionSelectOverlaySettings.target = this.conditionSelect.element;\n            this.conditionSelectOverlaySettings.excludeFromOutsideClick = [this.conditionSelect.element as HTMLElement];\n            this.conditionSelectOverlaySettings.positionStrategy = new AutoPositionStrategy();\n        }\n\n        if (!this.selectedField) {\n            this.fieldSelect.input.nativeElement.focus();\n        } else if (this.selectedField.filters.condition(this.selectedCondition)?.isUnary) {\n            this.conditionSelect?.input.nativeElement.focus();\n        } else {\n            const input = this.searchValueInput?.nativeElement || this.picker?.getEditElement();\n            input?.focus();\n        }\n\n        (this.editingInputs?.nativeElement.parentElement as HTMLElement)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onConditionSelectChanging(event: ISelectionEventArgs) {\n        event.cancel = true;\n        this.selectedCondition = event.newSelection.value;\n        this.conditionSelect.close();\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        eventArgs.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onGroupClick(groupContextMenuDropDown: any, targetButton: HTMLButtonElement, groupItem: ExpressionGroupItem) {\n        this.exitEditAddMode();\n        this.cdr.detectChanges();\n\n        this.groupContextMenuDropDown = groupContextMenuDropDown;\n        this.groupContextMenuDropDownOverlaySettings.target = targetButton;\n        this.groupContextMenuDropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy({\n            horizontalDirection: HorizontalAlignment.Right,\n            horizontalStartPoint: HorizontalAlignment.Left,\n            verticalStartPoint: VerticalAlignment.Bottom\n        });\n\n        if (groupContextMenuDropDown.collapsed) {\n            this.contextualGroup = groupItem;\n            groupContextMenuDropDown.open(this.groupContextMenuDropDownOverlaySettings);\n        } else {\n            groupContextMenuDropDown.close();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getOperator(expressionItem: any) {\n        // if (!expressionItem && !this.expressionTree && !this.initialOperator) {\n        //     this.initialOperator = 0;\n        // }\n\n        const operator = expressionItem ?\n            expressionItem.operator :\n            this.expressionTree ?\n                this.expressionTree.operator :\n                this.initialOperator;\n        return operator;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getSwitchGroupText(expressionItem: any) {\n        const operator = this.getOperator(expressionItem);\n        const condition = operator === FilteringLogic.Or ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label\n        return this.resourceStrings.igx_query_builder_switch_group.replace('{0}', condition.toUpperCase());\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onGroupContextMenuDropDownSelectionChanging(event: ISelectionEventArgs) {\n        event.cancel = true;\n\n        if (event.newSelection.value === 'switchCondition') {\n            const newOperator = (!this.expressionTree ? this.initialOperator : (this.contextualGroup ?? this._expressionTree).operator) === 0 ? 1 : 0;\n            this.selectFilteringLogic(newOperator);\n        } else if (event.newSelection.value === 'ungroup') {\n            this.ungroup();\n        }\n\n        this.groupContextMenuDropDown.close();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ungroup() {\n        const selectedGroup = this.contextualGroup;\n        const parent = selectedGroup.parent;\n        if (parent) {\n            const index = parent.children.indexOf(selectedGroup);\n            parent.children.splice(index, 1, ...selectedGroup.children);\n\n            for (const expr of selectedGroup.children) {\n                expr.parent = parent;\n            }\n        }\n        this.commitOperandEdit();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public selectFilteringLogic(index: number) {\n        if (!this.expressionTree) {\n            this.initialOperator = index;\n            return;\n        }\n\n        if (this.contextualGroup) {\n            this.contextualGroup.operator = index as FilteringLogic;\n            this.commitOperandEdit();\n        } else if (this.expressionTree) {\n            this._expressionTree.operator = index as FilteringLogic;\n        }\n\n        this.initialOperator = null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getConditionFriendlyName(name: string): string {\n        // As we have an 'In' condition already used in ESF to search in a Set, we add the 'Query' suffix to the newly introduced nested query condition names.\n        // So instead of in/notIn we end up with 'inQuery'/'notInQuery', hence removing the suffix from the friendly name.\n        return this.resourceStrings[`igx_query_builder_filter_${name?.replace('Query', '')}`] || name;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isDate(value: any) {\n        return value instanceof Date;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public invokeClick(eventArgs: KeyboardEvent) {\n        if (!this.dragService.dropGhostExpression && this.platform.isActivationKey(eventArgs)) {\n            eventArgs.preventDefault();\n            (eventArgs.currentTarget as HTMLElement).click();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public openPicker(args: KeyboardEvent) {\n        if (this.platform.isActivationKey(args)) {\n            args.preventDefault();\n            this.picker.open();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onOutletPointerDown(event) {\n        // This prevents closing the select's dropdown when clicking the scroll\n        event.preventDefault();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getConditionList(): string[] {\n        if (!this.selectedField) return [];\n\n        if (this.entities?.length === 1 && !this.entities[0].name) {\n            return this.selectedField.filters.conditionList();\n        }\n\n        return this.selectedField.filters.extendedConditionList();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getFormatter(field: string) {\n        return this.fields?.find(el => el.field === field)?.formatter;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getFormat(field: string) {\n        return this.fields?.find(el => el.field === field).pipeArgs.format;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setAddButtonFocus() {\n        if (this.addRootAndGroupButton) {\n            this.addRootAndGroupButton.nativeElement.focus();\n        } else if (this.addConditionButton) {\n            this.addConditionButton.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public context(expression: ExpressionItem, afterExpression?: ExpressionItem) {\n        return {\n            $implicit: expression,\n            afterExpression\n        };\n    }\n\n    public formatReturnFields(innerTree: IFilteringExpressionsTree) {\n        const returnFields = innerTree.returnFields;\n        let text = returnFields.join(', ');\n        const innerTreeEntity = this.entities?.find(el => el.name === innerTree.entity);\n        if (returnFields.length === innerTreeEntity?.fields.length) {\n            text = this.resourceStrings.igx_query_builder_all_fields;\n        } else {\n            text = returnFields.join(', ');\n            text = text.length > 25 ? text.substring(0, 25) + ' ...' : text;\n        }\n        return text;\n    }\n\n    public isInEditMode(): boolean {\n        return !this.parentExpression || (this.parentExpression && this.parentExpression.inEditMode);\n    }\n\n    public onInEditModeChanged(expressionItem: ExpressionOperandItem) {\n        if (!expressionItem.inEditMode) {\n            this.enterExpressionEdit(expressionItem);\n        }\n    }\n\n    public getExpressionTreeCopy(expressionTree: IExpressionTree, shouldAssignInnerQueryExprTree?: boolean): IExpressionTree {\n        if (!expressionTree) {\n            return null;\n        }\n\n        const exprTreeCopy = new FilteringExpressionsTree(expressionTree.operator, expressionTree.fieldName, expressionTree.entity, expressionTree.returnFields);\n        exprTreeCopy.filteringOperands = [];\n\n        expressionTree.filteringOperands.forEach(o => isTree(o) ? exprTreeCopy.filteringOperands.push(this.getExpressionTreeCopy(o)) : exprTreeCopy.filteringOperands.push(o));\n\n        if (!this.innerQueryNewExpressionTree && shouldAssignInnerQueryExprTree) {\n            this.innerQueryNewExpressionTree = exprTreeCopy;\n        }\n\n        return exprTreeCopy;\n    }\n\n    public onSelectAllClicked() {\n        if (\n            (this._selectedReturnFields.length > 0 && this._selectedReturnFields.length < this._selectedEntity.fields.length) ||\n            this._selectedReturnFields.length == this._selectedEntity.fields.length\n        ) {\n            this.returnFieldsCombo.deselectAllItems();\n        } else {\n            this.returnFieldsCombo.selectAllItems();\n        }\n    }\n\n    public onReturnFieldSelectChanging(event: IComboSelectionChangingEventArgs | ISelectionEventArgs) {\n        let newSelection = [];\n        if (Array.isArray(event.newSelection)) {\n            newSelection = event.newSelection.map(item => item.field)\n        } else {\n            newSelection.push(event.newSelection.value);\n            this._selectedReturnFields = newSelection;\n        }\n\n        this.initExpressionTree(this.selectedEntity.name, newSelection);\n    }\n\n    public initExpressionTree(selectedEntityName: string, selectedReturnFields: string[]) {\n        if (!this._expressionTree) {\n            this._expressionTree = this.createExpressionTreeFromGroupItem(new ExpressionGroupItem(FilteringLogic.And, this.rootGroup), selectedEntityName, selectedReturnFields);\n        }\n\n        if (!this.parentExpression) {\n            this.expressionTreeChange.emit(this._expressionTree);\n        }\n    }\n\n    public getSearchValueTemplateContext(defaultSearchValueTemplate): any {\n        const ctx = {\n            $implicit: this.searchValue,\n            selectedField: this.selectedField,\n            selectedCondition: this.selectedCondition,\n            defaultSearchValueTemplate: defaultSearchValueTemplate\n        };\n        return ctx;\n    }\n\n    private getPipeArgs(field: FieldType) {\n        let pipeArgs = {...field.pipeArgs};\n        if (!pipeArgs) {\n            pipeArgs = { digitsInfo: DEFAULT_PIPE_DIGITS_INFO };\n        }\n\n        if (!pipeArgs.format) {\n            pipeArgs.format = field.dataType === DataType.Time ?\n                DEFAULT_PIPE_TIME_FORMAT : field.dataType === DataType.DateTime ?\n                    DEFAULT_PIPE_DATE_TIME_FORMAT : DEFAULT_PIPE_DATE_FORMAT;\n        }\n        \n        return pipeArgs;\n    }\n\n    private selectDefaultCondition() {\n        if (this.selectedField && this.selectedField.filters) {\n            this.selectedCondition = this.selectedField.filters.conditionList().indexOf('equals') >= 0 ? 'equals' : this.selectedField.filters.conditionList()[0];\n        }\n    }\n\n    private getFilters(field: FieldType) {\n        if (!field.filters) {\n            switch (field.dataType) {\n                case DataType.Boolean:\n                    return IgxBooleanFilteringOperand.instance();\n                case DataType.Number:\n                case DataType.Currency:\n                case DataType.Percent:\n                    return IgxNumberFilteringOperand.instance();\n                case DataType.Date:\n                    return IgxDateFilteringOperand.instance();\n                case DataType.Time:\n                    return IgxTimeFilteringOperand.instance();\n                case DataType.DateTime:\n                    return IgxDateTimeFilteringOperand.instance();\n                case DataType.String:\n                default:\n                    return IgxStringFilteringOperand.instance();\n            }\n        }\n    }\n\n\n    private addGroup(operator: FilteringLogic, parent?: ExpressionGroupItem, afterExpression?: ExpressionItem) {\n        this.cancelOperandAdd();\n\n        const groupItem = new ExpressionGroupItem(operator, parent);\n\n        if (parent) {\n            if (afterExpression) {\n                const index = parent.children.indexOf(afterExpression);\n                parent.children.splice(index + 1, 0, groupItem);\n            } else {\n                parent.children.push(groupItem);\n            }\n        } else {\n            this.rootGroup = groupItem;\n        }\n\n        this.addCondition(groupItem);\n        this.currentGroup = groupItem;\n    }\n\n    private createExpressionGroupItem(expressionTree: IExpressionTree, parent?: ExpressionGroupItem, entityName?: string): ExpressionGroupItem {\n        let groupItem: ExpressionGroupItem;\n        if (expressionTree) {\n            groupItem = new ExpressionGroupItem(expressionTree.operator, parent);\n            if (!expressionTree.filteringOperands) {\n                return groupItem;\n            }\n\n            for (let i = 0; i < expressionTree.filteringOperands.length; i++) {\n                const expr = expressionTree.filteringOperands[i];\n\n                if (isTree(expr)) {\n                    groupItem.children.push(this.createExpressionGroupItem(expr, groupItem, expressionTree.entity));\n                } else {\n                    const filteringExpr = expr as IFilteringExpression;\n                    const exprCopy: IFilteringExpression = {\n                        fieldName: filteringExpr.fieldName,\n                        condition: filteringExpr.condition,\n                        conditionName: filteringExpr.condition?.name || filteringExpr.conditionName,\n                        searchVal: filteringExpr.searchVal,\n                        searchTree: filteringExpr.searchTree,\n                        ignoreCase: filteringExpr.ignoreCase\n                    };\n                    const operandItem = new ExpressionOperandItem(exprCopy, groupItem);\n                    const field = this.fields?.find(el => el.field === filteringExpr.fieldName);\n                    operandItem.fieldLabel = field?.label || field?.header || field?.field;\n                    if (this._expandedExpressions.filter(e => e.searchTree == operandItem.expression.searchTree).length > 0) {\n                        operandItem.expanded = true;\n                    }\n                    groupItem.children.push(operandItem);\n                }\n            }\n\n\n            if (expressionTree.entity) {\n                entityName = expressionTree.entity;\n            }\n            const entity = this.entities?.find(el => el.name === entityName);\n            if (entity) {\n                this.fields = entity.fields;\n            }\n\n            this._selectedEntity = this.entities?.find(el => el.name === entityName);\n            this._selectedReturnFields =\n                !expressionTree.returnFields || expressionTree.returnFields.includes('*') || expressionTree.returnFields.includes('All') || expressionTree.returnFields.length === 0\n                    ? this.fields?.map(f => f.field)\n                    : this.fields?.filter(f => expressionTree.returnFields.indexOf(f.field) >= 0).map(f => f.field);\n        }\n        return groupItem;\n    }\n\n    private createExpressionTreeFromGroupItem(groupItem: ExpressionGroupItem, entity?: string, returnFields?: string[]): FilteringExpressionsTree {\n        if (!groupItem) {\n            return null;\n        }\n\n        const expressionTree = new FilteringExpressionsTree(groupItem.operator, undefined, entity, returnFields);\n\n        for (let i = 0; i < groupItem.children.length; i++) {\n            const item = groupItem.children[i];\n\n            if (item instanceof ExpressionGroupItem) {\n                const subTree = this.createExpressionTreeFromGroupItem((item as ExpressionGroupItem), entity, returnFields);\n                expressionTree.filteringOperands.push(subTree);\n            } else {\n                expressionTree.filteringOperands.push((item as ExpressionOperandItem).expression);\n            }\n        }\n\n        return expressionTree;\n    }\n\n    private scrollElementIntoView(target: HTMLElement) {\n        const container = this.expressionsContainer.nativeElement;\n        const targetOffset = target.offsetTop - container.offsetTop;\n        const delta = 10;\n\n        if (container.scrollTop + delta > targetOffset) {\n            container.scrollTop = targetOffset - delta;\n        } else if (container.scrollTop + container.clientHeight < targetOffset + target.offsetHeight + delta) {\n            container.scrollTop = targetOffset + target.offsetHeight + delta - container.clientHeight;\n        }\n    }\n\n    private focusEditedExpressionChip() {\n        if (this._timeoutId) {\n            clearTimeout(this._timeoutId);\n        }\n\n        this._timeoutId = setTimeout(() => {\n            if (this._lastFocusedChipIndex != -1) {\n                //Sort the expression chip list.\n                //If there was a recent drag&drop and the tree hasn't rerendered(child query), they will be unordered\n                const sortedChips = this.expressionsChips.toArray().sort(function (a, b) {\n                    if (a === b) return 0;\n                    if (a.chipArea.nativeElement.compareDocumentPosition(b.chipArea.nativeElement) & 2) {\n                        // b comes before a\n                        return 1;\n                    }\n                    return -1;\n                });\n                const chipElement = sortedChips[this._lastFocusedChipIndex]?.nativeElement;\n                if (chipElement) {\n                    chipElement.focus();\n                }\n                this._lastFocusedChipIndex = -1;\n                this._focusDelay = DEFAULT_CHIP_FOCUS_DELAY;\n            }\n        }, this._focusDelay);\n    }\n\n    private init() {\n        this.cancelOperandAdd();\n        this.cancelOperandEdit();\n\n        // Ignore values of certain properties for the comparison\n        const propsToIgnore = ['parent', 'hovered', 'ignoreCase', 'inEditMode', 'inAddMode'];\n        const propsReplacer = function replacer(key, value) {\n            if (propsToIgnore.indexOf(key) >= 0) {\n                return undefined;\n            } else {\n                return value;\n            }\n        };\n\n        // Skip root being recreated if the same\n        const newRootGroup = this.createExpressionGroupItem(this.expressionTree);\n        if (JSON.stringify(this.rootGroup, propsReplacer) !== JSON.stringify(newRootGroup, propsReplacer)) {\n            this.rootGroup = this.createExpressionGroupItem(this.expressionTree);\n            this.currentGroup = this.rootGroup;\n        }\n\n        if (this.rootGroup?.children?.length == 0) {\n            this.rootGroup = null;\n            this.currentGroup = null;\n        }\n    }\n\n    /** rootGroup is recreated after clicking Apply, which sets new expressionTree and calls init()*/\n    protected trackExpressionItem = trackByIdentity;\n}\n","<ng-template #addIcon>\n    <igx-icon family=\"default\" name=\"add\"></igx-icon>\n</ng-template>\n\n<ng-template #closeIcon>\n    <igx-icon family=\"default\" name=\"close\"></igx-icon>\n</ng-template>\n\n<ng-template #selectFromTemplate>\n    <div class=\"igx-filter-tree__inputs\" [style.display]=\"(isInEditMode() && !this.isAdvancedFiltering()) ? 'flex' : 'none'\">\n        <div class=\"igx-filter-tree__inputs-field\">\n            <span class=\"igx-query-builder__label\">From</span>\n            <igx-select #entitySelect\n                type=\"box\"\n                (selectionChanging)=\"onEntitySelectChanging($event)\"\n                (opening)=\"exitEditAddMode(true)\"\n                [overlaySettings]=\"entitySelectOverlaySettings\"\n                [ngModel]=\"selectedEntity\"\n                [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n                [placeholder]=\"this.resourceStrings.igx_query_builder_select_entity\"\n                [disabled]=\"disableEntityChange\"\n            >\n                @for (entity of entities; track entity.name) {\n                    <igx-select-item [value]=\"entity\">\n                        {{entity.name}}\n                    </igx-select-item>\n                }\n            </igx-select>\n        </div>\n\n        <div class=\"igx-filter-tree__inputs-field\">\n            <span class=\"igx-query-builder__label\">Select</span>\n            @if (!parentExpression) {\n                <igx-combo\n                    #returnFieldsCombo\n                    [itemsMaxHeight]=\"250\"\n                    [data]=\"fields\"\n                    [displayKey]=\"'field'\"\n                    [valueKey]=\"'field'\"\n                    [disabled]=\"disableReturnFieldsChange\"\n                    [(ngModel)]=\"selectedReturnFields\"\n                    [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n                    [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_fields\"\n                    searchPlaceholder=\"{{ this.resourceStrings.igx_query_builder_search }}\"\n                    [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n                    (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n                    (opening)=\"exitEditAddMode()\"\n                >\n                    <ng-template igxComboHeader>\n                        <div\n                            class=\"igx-drop-down__item igx-drop-down__item--query-builder\"\n                            (click)=\"onSelectAllClicked()\"\n                            [ngClass]=\"{'igx-drop-down__item--selected': this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length}\"\n                        >\n                            <igx-checkbox\n                                    [checked]=\"this.selectedEntity && this.selectedReturnFields && this.selectedEntity.fields.length === this.selectedReturnFields.length\"\n                                    [indeterminate]=\"this.selectedEntity && this.selectedReturnFields && this.selectedReturnFields.length > 0 && this.selectedReturnFields.length < this.selectedEntity.fields?.length\"\n                                    [readonly]=\"true\"\n                                    [disableRipple]=\"true\"\n                                    [tabindex]=\"-1\"\n                                    class=\"igx-combo__checkbox\">\n                            </igx-checkbox>\n                            <div class=\"igx-drop-down__inner\">\n                                {{ this.resourceStrings.igx_query_builder_select_all }}\n                            </div>\n                        </div>\n                    </ng-template>\n                </igx-combo>\n            }\n            @else {\n                <igx-select #returnFieldSelect\n                    type=\"box\"\n                    (selectionChanging)=\"onReturnFieldSelectChanging($event)\"\n                    [overlaySettings]=\"returnFieldSelectOverlaySettings\"\n                    [disabled]=\"!selectedEntity\"\n                    [ngModel]=\"selectedReturnFields[0]\"\n                    [placeholder]=\"this.resourceStrings.igx_query_builder_select_return_field_single\"\n                    [style.display]=\"isInEditMode() ? 'block' : 'none'\"\n                    (opening)=\"exitEditAddMode()\"\n                >\n                    @for (field of fields; track field.field) {\n                        <igx-select-item [value]=\"field.field\">\n                            {{ field.field }}\n                        </igx-select-item>\n                    }\n                </igx-select>\n            }\n        </div>\n    </div>\n</ng-template>\n\n<div\n    #expressionsContainer\n    class=\"igx-query-builder__main\"\n>\n    <ng-container *ngTemplateOutlet=\"selectFromTemplate\"></ng-container>\n\n    <ng-template #addExpressionsTemplate let-expressionItem let-afterExpression=\"afterExpression\">\n        <button type=\"button\"\n            #addConditionButton\n            igxButton=\"flat\"\n            [disabled]=\"hasEditedExpression\"\n            (click)=\"addCondition(expressionItem, afterExpression, true)\"\n            igxDrop\n            (enter)=\"dragService.onAddConditionEnter(addConditionButton, expressionItem)\"\n            (leave)=\"dragService.onChipLeave()\"\n        >\n            <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n            <span>{{\n                this.resourceStrings.igx_query_builder_add_condition_root\n            }}</span>\n        </button>\n\n        @if (this.rootGroup) {\n            <button type=\"button\"\n                igxButton=\"flat\"\n                [disabled]=\"hasEditedExpression\"\n                (click)=\"addReverseGroup(expressionItem, afterExpression)\"\n            >\n                <ng-container *ngTemplateOutlet=\"addIcon\"></ng-container>\n                <span>{{ this.resourceStrings.igx_query_builder_add_group_root }}</span>\n            </button>\n        }\n    </ng-template>\n\n    <ng-template #operandTemplate let-expressionItem>\n        @if (!expressionItem.inEditMode) {\n            @if(dragService.dropGhostExpression && expressionItem === dragService.dropGhostExpression && dragService.isKeyboardDrag === false){\n                <div class=\"igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost\">\n                    <igx-chip [data]=\"expressionItem\">\n                        {{this.resourceStrings.igx_query_builder_drop_ghost_text}}\n                    </igx-chip>\n                </div>\n            } @else {\n            <div\n                #dragRef\n                igxDrop\n                (enter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n                (over)=\"dragService.onDivOver(dragRef, expressionItem)\"\n                (leave)=\"dragService.onChipLeave()\"\n                (dropped)=\"dragService.onDivDropped(expressionItem)\"\n                [ngClass]=\"{\n                    'igx-filter-tree__expression-item': true,\n                    'igx-filter-tree__expression-item-keyboard-ghost': expressionItem === dragService.dropGhostExpression\n                  }\"\n                (mouseenter)=\"expressionItem.hovered = true\"\n                (mouseleave)=\"expressionItem.hovered = false\"\n                (focusin)=\"onExpressionFocus(expressionItem)\"\n                (focusout)=\"onExpressionBlur($event, expressionItem)\"\n            >\n                <igx-chip\n                    #expressionChip\n                    [draggable]=\"true\"\n                    [hideBaseOnDrag]=\"false\"\n                    [animateOnRelease]=\"false\"\n                    (moveStart)=\"dragService.onMoveStart(dragRef, expressionItem, false)\"\n                    (moveEnd)=\"dragService.onMoveEnd()\"\n                    (dragEnter)=\"dragService.onChipEnter(dragRef, expressionItem)\"\n                    (dragOver)=\"dragService.onChipOver(dragRef)\"\n                    (dragLeave)=\"dragService.onChipLeave()\"\n                    (dragDrop)=\"dragService.onChipDropped()\"\n                    #target=\"tooltipTarget\"\n                    [igxTooltipTarget]=\"tooltipRef\"\n                    [data]=\"expressionItem\"\n                    [removable]=\"isInEditMode() ? 'true' : 'false'\"\n                    (keydown)=\"invokeClick($event)\"\n                    (click)=\"onChipClick(expressionItem, expressionChip)\"\n                    (remove)=\"onChipRemove(expressionItem)\"\n\n                >\n                    <igx-icon igxPrefix\n                        class=\"igx-drag-indicator\"\n                        tabindex=\"0\"\n                        (focus)=\"dragService.onChipDragIndicatorFocus(dragRef, expressionItem)\"\n                        (focusout)=\"dragService.onChipDragIndicatorFocusOut()\"\n                        family=\"default\" name=\"drag_indicator\"\n                    >\n                    </igx-icon>\n                    <span igxPrefix class=\"igx-filter-tree__expression-column\">\n                        {{expressionItem.fieldLabel || expressionItem.expression.fieldName}}\n                    </span>\n                    <span igxPrefix class=\"igx-filter-tree__expression-condition\">\n                        {{\n                            getConditionFriendlyName(\n                                expressionItem.expression.condition?.name\n                            )\n                        }}\n                    </span>\n                    @if (!expressionItem.expression.condition?.isUnary) {\n                        <span>\n                            @if (expressionItem.expression.searchTree) {\n                                <ng-container>\n                                    <strong>{{expressionItem.expression.searchTree.entity}}</strong>&nbsp;/ {{formatReturnFields(expressionItem.expression.searchTree)}}\n                                </ng-container>\n                            }\n                            @else {\n                                <ng-container>\n                                    @if(isDate(expressionItem.expression.searchVal)) {\n                                        @if(getFormatter(expressionItem.expression.fieldName)) {\n                                        {{\n                                                expressionItem.expression.searchVal\n                                                | fieldFormatter\n                                                    : getFormatter(\n                                                            expressionItem.expression.fieldName\n                                                        )\n                                                    : undefined\n                                        }}\n                                        } @else {\n                                            {{\n                                                expressionItem.expression.searchVal\n                                                | date\n                                                    : getFormat(\n                                                            expressionItem.expression.fieldName\n                                                        )\n                                                    : undefined\n                                                    : this.locale\n                                            }}\n                                        }\n                                    } @else {\n                                        @if (getFormatter(expressionItem.expression.fieldName)) {\n                                            {{\n                                                expressionItem.expression.searchVal\n                                                    | fieldFormatter\n                                                    : getFormatter(expressionItem.expression.fieldName)\n                                                    : (expressionItem.expression.conditionName ||  expressionItem.expression.condition?.name)\n                                            }}\n                                        } @else {\n                                            {{ expressionItem.expression.searchVal }}\n                                        }\n                                    }\n                                </ng-container>\n                            }\n                        </span>\n                    }\n                </igx-chip>\n                <div #tooltipRef=\"tooltip\" igxTooltip>\n                    @if (expressionItem.expression.searchTree){\n                        {{expressionItem.expression.searchTree.returnFields.join(', ')}}\n                    } @else if (expressionItem.expression.condition?.isUnary) {\n                        {{getConditionFriendlyName(expressionItem.expression.condition?.name)}}\n                    } @else {\n                        @if(getFormatter(expressionItem.expression.fieldName)) {\n                            {{\n                                expressionItem.expression.searchVal\n                                    | fieldFormatter\n                                    : getFormatter(expressionItem.expression.fieldName)\n                                    : (expressionItem.expression.conditionName || expressionItem.expression.condition?.name)\n                            }}\n                        } @else {\n                            {{ expressionItem.expression.searchVal }}\n                        }\n                    }\n                </div>\n\n                @if (expressionItem.focused || expressionItem.hovered) {\n                    <div igxDragIgnore class=\"igx-filter-tree__expression-actions\">\n                        <button #addExpressionButton igxDragIgnore igxIconButton=\"outlined\" [igxDropDownItemNavigation]=\"addOptionsDropDown\"\n                        aria-labelledby=\"add-expression\" (keydown)=\"invokeClick($event)\"\n                            (click)=\"clickExpressionAdd(addExpressionButton, expressionChip)\"\n                            (blur)=\"addExpressionBlur()\">\n                            <igx-icon id=\"add-expression\" family=\"default\" name=\"add\"></igx-icon>\n                        </button>\n                        <igx-drop-down #addOptionsDropDown\n                            (selectionChanging)=\"enterExpressionAdd($event, expressionItem)\">\n                            <igx-drop-down-item [value]=\"'addCondition'\">\n                                <span>{{this.resourceStrings.igx_query_builder_add_condition}}</span>\n                            </igx-drop-down-item>\n                            <igx-drop-down-item [value]=\"'addGroup'\">\n                                <span>{{this.resourceStrings.igx_query_builder_add_group}}</span>\n                            </igx-drop-down-item>\n                        </igx-drop-down>\n                    </div>\n                }\n            </div>\n        }\n    }\n        <div #editingInputsContainer class=\"igx-filter-tree__subquery\" >\n            @if (expressionItem.inEditMode) {\n                <div\n                    #editingInputs\n                    igxDrop\n                    (enter)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n                    (over)=\"dragService.onChipEnter(editingInputsContainer, expressionItem)\"\n                    (leave)=\"dragService.onChipLeave()\"\n                    (dropped)=\"dragService.onDivDropped(expressionItem)\"\n                    class=\"igx-filter-tree__inputs\"\n                >\n                    <igx-select\n                        #fieldSelect\n                        type=\"box\"\n                        [overlaySettings]=\"fieldSelectOverlaySettings\"\n                        [(ngModel)]=\"selectedField\"\n                        [disabled]=\"!fields\"\n                        [placeholder]=\"this.resourceStrings.igx_query_builder_column_placeholder\"\n                    >\n\n                        @for (field of fields; track field) {\n                            <igx-select-item [value]=\"field\">\n                                {{ field.label || field.header || field.field }}\n                            </igx-select-item>\n                        }\n                    </igx-select>\n\n                    <igx-select\n                        #conditionSelect\n                        type=\"box\"\n                        [overlaySettings]=\"conditionSelectOverlaySettings\"\n                        [(ngModel)]=\"selectedCondition\"\n                        (selectionChanging)=\"onConditionSelectChanging($event)\"\n                        [disabled]=\"!selectedField\"\n                        [placeholder]=\"this.resourceStrings.igx_query_builder_condition_placeholder\"\n                    >\n                        @if (\n                            selectedField &&\n                            conditionSelect.value &&\n                            selectedField.filters.condition(conditionSelect.value)\n                        ) {\n                            <igx-prefix>\n                                <igx-icon\n                                    family=\"default\"\n                                    [name]=\"\n                                        selectedField.filters.condition(\n                                            conditionSelect.value\n                                        ).iconName\n                                    \"\n                                >\n                                </igx-icon>\n                            </igx-prefix>\n                        }\n\n                        @for (condition of getConditionList(); track condition) {\n                            <igx-select-item\n                                [value]=\"condition\"\n                                [text]=\"getConditionFriendlyName(condition)\"\n                            >\n                                <div class=\"igx-grid__filtering-dropdown-items\">\n                                    <igx-icon\n                                        family=\"default\"\n                                        [name]=\"\n                                            selectedField.filters.condition(condition)\n                                                .iconName\n                                        \"\n                                    >\n                                    </igx-icon>\n                                    <span class=\"igx-grid__filtering-dropdown-text\">{{\n                                        getConditionFriendlyName(condition)\n                                    }}</span>\n                                </div>\n                            </igx-select-item>\n                        }\n                    </igx-select>\n\n                    <ng-container\n                        *ngTemplateOutlet=\"\n                            searchValueTemplate ? searchValueTemplate : defaultSearchValueTemplate;\n                            context: getSearchValueTemplateContext(defaultSearchValueTemplate)\n                        \"\n                    >\n                    </ng-container>\n\n                    <ng-template #defaultSearchValueTemplate>\n                        @if(!selectedField ||\n                            (selectedField.dataType !== 'date' && selectedField.dataType !== 'time' && selectedField.dataType !== 'dateTime')) {\n                                <igx-input-group type=\"box\">\n\n                                        <input\n                                            #searchValueInput\n                                            igxInput\n                                            [disabled]=\"isSearchValueInputDisabled()\"\n                                            [placeholder]=\"this.selectedCondition === 'inQuery' || this.selectedCondition === 'notInQuery' ?\n                                            this.resourceStrings.igx_query_builder_query_value_placeholder :\n                                            this.resourceStrings.igx_query_builder_value_placeholder\"\n                                            [type]=\"\n                                            selectedField && selectedField.dataType === 'number'\n                                                ? 'number'\n                                                : 'text'\n                                        \"\n                                        [(ngModel)]=\"searchValue.value\"\n                                    />\n                                </igx-input-group>\n                        }\n                        @else if (selectedField && selectedField.dataType === 'date') {\n                            <igx-date-picker\n                                #picker\n                                [(value)]=\"searchValue.value\"\n                                (keydown)=\"openPicker($event)\"\n                                (click)=\"picker.open()\"\n                                type=\"box\"\n                                [readOnly]=\"true\"\n                                [disabled]=\"isSearchValueInputDisabled()\"\n                                [locale]=\"this.locale\"\n                                [outlet]=\"pickerOutlet\"\n                                [formatter]=\"selectedField.formatter\"\n                                [displayFormat]=\"selectedField.pipeArgs.format\"\n                                [weekStart]=\"selectedField.pipeArgs.weekStart\"\n                                [placeholder]=\"this.resourceStrings.igx_query_builder_date_placeholder\"\n                            >\n                                <!-- disable default icons -->\n                                <igx-picker-toggle></igx-picker-toggle>\n                                <igx-picker-clear></igx-picker-clear>\n                            </igx-date-picker>\n                        }\n                        @else if (selectedField && selectedField.dataType === 'time') {\n                            <igx-time-picker\n                                #picker\n                                [(value)]=\"searchValue.value\"\n                                (click)=\"picker.open()\"\n                                (keydown)=\"openPicker($event)\"\n                                type=\"box\"\n                                [readOnly]=\"true\"\n                                [disabled]=\"isSearchValueInputDisabled()\"\n                                [locale]=\"this.locale\"\n                                [outlet]=\"pickerOutlet\"\n                                [formatter]=\"selectedField.formatter\"\n                                [displayFormat]=\"selectedField.pipeArgs.format\"\n                                [inputFormat]=\"selectedField.editorOptions?.dateTimeFormat\"\n                                [placeholder]=\"this.resourceStrings.igx_query_builder_time_placeholder\"\n                            >\n                                <!-- disable default icons -->\n                                <igx-picker-toggle></igx-picker-toggle>\n                                <igx-picker-clear></igx-picker-clear>\n                            </igx-time-picker>\n                        }\n                        @else if (selectedField && selectedField.dataType === 'dateTime') {\n                            <igx-input-group #inputGroup type=\"box\">\n                                <input\n                                    #input\n                                    igxInput\n                                    tabindex=\"0\"\n                                    [placeholder]=\"this.resourceStrings.igx_query_builder_datetime_placeholder\"\n                                    [(ngModel)]=\"searchValue.value\"\n                                    [disabled]=\"isSearchValueInputDisabled()\"\n                                    [locale]=\"this.locale\"\n                                    [igxDateTimeEditor]=\"selectedField.editorOptions?.dateTimeFormat\"\n                                    [defaultFormatType]=\"selectedField.dataType\"\n                                    [displayFormat]=\"selectedField.pipeArgs.format\"\n                                />\n                            </igx-input-group>\n                        }\n                    </ng-template>\n\n                    <div class=\"igx-filter-tree__inputs-actions\">\n                        <button type=\"button\"\n                            igxIconButton=\"outlined\"\n                            [disabled]=\"!operandCanBeCommitted()\"\n                            (click)=\"commitExpression()\"\n                        >\n                            <igx-icon family=\"default\" name=\"confirm\"></igx-icon>\n                        </button>\n                        <button type=\"button\"\n                            igxIconButton=\"outlined\"\n                            (click)=\"discardExpression(expressionItem)\"\n                        >\n                            <ng-container *ngTemplateOutlet=\"closeIcon\"></ng-container>\n                        </button>\n                    </div>\n                </div>\n            }\n\n            @if (\n                (!expressionItem.inEditMode && expressionItem.expression.searchTree && expressionItem.expression.searchTree.filteringOperands?.length > 0) ||\n                (expressionItem.inEditMode && selectedField?.filters?.condition(selectedCondition)?.isNestedQuery)\n            ) {\n                <ng-container>\n                    <igx-query-builder-tree\n                        [style.display]=\"expressionItem.inEditMode || expressionItem.expanded ? 'block' : 'none'\"\n                        [entities]=\"entities\"\n                        [queryBuilder]=\"this.queryBuilder\"\n                        [parentExpression]=\"expressionItem\"\n                        [expressionTree]=\"expressionItem.inEditMode ? (innerQueryNewExpressionTree ?? getExpressionTreeCopy(expressionItem.expression.searchTree, true)) : expressionItem.expression.searchTree\"\n                        (inEditModeChange)=\"onInEditModeChanged($event)\"\n                        [searchValueTemplate]=\"searchValueTemplate\">\n                    </igx-query-builder-tree>\n                </ng-container>\n            }\n        </div>\n    </ng-template>\n\n    <ng-template #expressionGroupTemplate let-expressionItem>\n        <div class=\"igx-filter-tree\"\n            (focusout)=\"parentExpression? null : dragService.onDragFocusOut()\">\n            <div\n                class=\"igx-filter-tree__line\"\n                [ngClass]=\"{\n                    'igx-filter-tree__line--and': getOperator(expressionItem) === 0,\n                    'igx-filter-tree__line--or': getOperator(expressionItem) === 1\n                }\"\n            ></div>\n\n            <div class=\"igx-filter-tree__expressions\">\n                <div class=\"igx-filter-tree__expression-context-menu\"\n                    #groupRef\n                    igxDrop\n                    (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                    (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                    (leave)=\"dragService.onChipLeave()\"\n                >\n                    <button #changeGroupButton\n                            [ngClass]=\"{\n                                'igx-filter-tree__button--and': getOperator(expressionItem) === 0,\n                                'igx-filter-tree__button--or': getOperator(expressionItem) === 1\n                            }\"\n                            [igxDropDownItemNavigation]=\"groupContextMenuDropDown\"\n                            igxDragIgnore\n                            igxButton=\"flat\"\n                            aria-labelledby=\"change-group\"\n                            (keydown)=\"invokeClick($event)\"\n                            (click)=\"onGroupClick(groupContextMenuDropDown, changeGroupButton, expressionItem)\"\n                    >\n                        <span\n                            igxDrop\n                            (enter)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                            (over)=\"dragService.onGroupRootOver(groupRef, expressionItem)\"\n                            (leave)=\"dragService.onChipLeave()\"\n                        >\n                            {{getOperator(expressionItem) === 0 ? this.resourceStrings.igx_query_builder_and_label : this.resourceStrings.igx_query_builder_or_label}}\n                        </span>\n                        <igx-icon family=\"default\" name=\"arrow_drop_down\" role=\"button\"></igx-icon>\n                    </button>\n                    <igx-drop-down #groupContextMenuDropDown\n                                   (selectionChanging)=\"onGroupContextMenuDropDownSelectionChanging($event)\"\n                                   [width]=\"'fit-content'\">\n                        <igx-drop-down-item [value]=\"'switchCondition'\"\n                        >\n                            {{getSwitchGroupText(expressionItem)}}\n                        </igx-drop-down-item>\n                        <igx-drop-down-item [value]=\"'ungroup'\"\n                                            [disabled]=\"this.rootGroup === this.contextualGroup\"\n                        >\n                            {{this.resourceStrings.igx_query_builder_ungroup}}\n                        </igx-drop-down-item>\n                    </igx-drop-down>\n                </div>\n                <div class=\"igx-filter-tree__expression-section\">\n                    @for (expr of expressionItem?.children; track trackExpressionItem(expr)) {\n                        <ng-container>\n                            <ng-container\n                                    *ngTemplateOutlet=\"\n                                isExpressionGroup(expr)\n                                    ? expressionGroupTemplate\n                                    : operandTemplate;\n                                context: context(expr)\n                            \"\n                            >\n                            </ng-container>\n                        </ng-container>\n                    }\n                </div>\n\n                @if (expressionItem === rootGroup && !hasEditedExpression) {\n                    <div\n                            #currentGroupButtonsContainer\n                            class=\"igx-filter-tree__buttons\"\n                    >\n                        <ng-container\n                                *ngTemplateOutlet=\"\n                                addExpressionsTemplate;\n                                context: context(expressionItem)\n                            \"\n                        >\n                        </ng-container>\n                    </div>\n                }\n            </div>\n        </div>\n    </ng-template>\n\n    @if (rootGroup || (!rootGroup && (selectedEntity || (entities?.length === 1 && !entities[0]?.name)))) {\n        <div class=\"igx-filter-tree__section\">\n            @if (!this.isAdvancedFiltering()) {\n                <span class=\"igx-query-builder__label\">Where</span>\n            }\n            <ng-container\n                *ngTemplateOutlet=\"\n                    expressionGroupTemplate;\n                    context: context(rootGroup)\n                \"\n            ></ng-container>\n        </div>\n    }\n</div>\n\n<div\n    #overlayOutlet\n    igxOverlayOutlet\n    class=\"igx-query-builder__outlet\"\n    (pointerdown)=\"onOutletPointerDown($event)\"\n></div>\n\n<igx-dialog\n    #entityChangeDialog\n    title=\"{{ this.resourceStrings.igx_query_builder_dialog_title }}\"\n    leftButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_cancel }}\"\n    rightButtonLabel=\"{{ this.resourceStrings.igx_query_builder_dialog_confirm }}\"\n    (leftButtonSelect)=\"onEntityChangeCancel()\"\n    (rightButtonSelect)=\"onEntityChangeConfirm()\">\n    <section class=\"igx-query-builder-dialog\">\n        <p>{{ this.resourceStrings.igx_query_builder_dialog_message }}</p>\n        <igx-checkbox\n                (change)=\"onShowEntityChangeDialogChange($event)\"\n                [disableRipple]=\"true\"\n                [tabindex]=\"-1\">\n            {{ this.resourceStrings.igx_query_builder_dialog_checkbox_text }}\n        </igx-checkbox>\n    </section>\n</igx-dialog>\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Defines the custom template that will be used for the search value input of condition in edit mode\n * \n * @igxModule IgxQueryBuilderModule\n * @igxKeywords query builder, query builder search value\n * @igxGroup Data entry and display\n *\n * @example\n * <igx-query-builder>\n *      <ng-template igxQueryBuilderSearchValue let-expression=\"expression\">\n *          <input type=\"text\" required [(ngModel)]=\"expression.searchVal\"/>\n *      </ng-template>\n *  </igx-query-builder>\n */\n@Directive({\n    selector: '[igxQueryBuilderSearchValue]',\n    standalone: true\n})\nexport class IgxQueryBuilderSearchValueTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n","import { booleanAttribute, ContentChild, EventEmitter, Output, TemplateRef } from '@angular/core';\nimport {\n    Component, Input, ViewChild, ElementRef, OnDestroy, HostBinding\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from '../core/i18n/query-builder-resources';\nimport { IExpressionTree } from '../data-operations/filtering-expressions-tree';\nimport { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';\nimport { EntityType, FieldType } from '../grids/common/grid.interface';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';\nimport { IgxIconService } from '../icon/icon.service';\nimport { editor } from '@igniteui/material-icons-extended';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\nimport { recreateTree } from '../data-operations/expressions-tree-util';\n\n/**\n * A component used for operating with complex filters by creating or editing conditions\n * and grouping them using AND/OR logic.\n * It is used internally in the Advanced Filtering of the Grid.\n *\n * @example\n * ```html\n * <igx-query-builder [entities]=\"this.entities\">\n * </igx-query-builder>\n * ```\n */\n@Component({\n    selector: 'igx-query-builder',\n    templateUrl: './query-builder.component.html',\n    imports: [IgxQueryBuilderTreeComponent]\n})\nexport class IgxQueryBuilderComponent implements OnDestroy {\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-query-builder')\n    public cssClass = 'igx-query-builder';\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('style.display')\n    public display = 'block';\n\n    /**\n     * Gets/sets whether the confirmation dialog should be shown when changing entity.\n     * Default value is `true`.\n     */\n    @Input({ transform: booleanAttribute })\n    public showEntityChangeDialog = true;\n\n    /**\n     * Returns the entities.\n     * @hidden\n     */\n    public get entities(): EntityType[] {\n        return this._entities;\n    }\n\n    /**\n     * Sets the entities.\n     * @hidden\n     */\n    @Input()\n    public set entities(entities: EntityType[]) {\n        if (entities !== this._entities) {\n            if (entities && this.expressionTree) {\n                this._expressionTree = recreateTree(this._expressionTree, entities);\n            }\n        }\n        this._entities = entities;\n    }\n\n    /**\n     * Returns the fields.\n     * @hidden\n     * @deprecated in version 19.1.0. Use the `entities` property instead.\n     */\n    public get fields(): FieldType[] {\n        return this._fields;\n    }\n\n    /**\n     * Sets the fields.\n     * @hidden\n     * @deprecated in version 19.1.0. Use the `entities` property instead.\n     */\n    @Input()\n    public set fields(fields: FieldType[]) {\n        if (fields) {\n            this._fields = fields;\n            this.entities = [\n                {\n                    name: null,\n                    fields: fields\n                }\n            ];\n        }\n    }\n\n    /**\n    * Returns the expression tree.\n    */\n    public get expressionTree(): IExpressionTree {\n        return this._expressionTree;\n    }\n\n    /**\n     * Sets the expression tree.\n     */\n    @Input()\n    public set expressionTree(expressionTree: IExpressionTree) {\n        if (expressionTree !== this._expressionTree) {\n            if (this.entities && expressionTree) {\n                this._expressionTree = recreateTree(expressionTree, this.entities);\n            } else {\n                this._expressionTree = expressionTree;\n            }\n        }\n    }\n\n    /**\n     * Gets the `locale` of the query builder.\n     * If not set, defaults to application's locale.\n     */\n    @Input()\n    public locale: string;\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IQueryBuilderResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IQueryBuilderResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Disables subsequent entity changes at the root level after the initial selection.\n     */\n    @Input()\n    public disableEntityChange = false;\n\n    /**\n     * Disables return fields changes at the root level.\n     */\n     @Input()\n     public disableReturnFieldsChange = false;\n\n    /**\n     * Event fired as the expression tree is changed.\n     *\n     * ```html\n     *  <igx-query-builder (expressionTreeChange)='onExpressionTreeChange()'></igx-query-builder>\n     * ```\n     */\n    @Output()\n    public expressionTreeChange = new EventEmitter<IExpressionTree>();\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxQueryBuilderSearchValueTemplateDirective, { read: TemplateRef })\n    public searchValueTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxQueryBuilderTreeComponent)\n    public queryTree: IgxQueryBuilderTreeComponent;\n\n    private destroy$ = new Subject<any>();\n    private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n    private _expressionTree: IExpressionTree;\n    private _fields: FieldType[];\n    private _entities: EntityType[];\n    private _shouldEmitTreeChange = true;\n\n    constructor(protected iconService: IgxIconService) {\n        this.registerSVGIcons();\n    }\n\n    /**\n     * Returns whether the expression tree can be committed in the current state.\n     */\n    public canCommit(): boolean {\n        return this.queryTree?.canCommitCurrentState() === true;\n    }\n\n    /**\n     * Commits the expression tree in the current state if it is valid. If not throws an exception.\n     */\n    public commit(): void {\n        if (this.canCommit()) {\n            this._shouldEmitTreeChange = false;\n            this.queryTree.commitCurrentState();\n            this._shouldEmitTreeChange = true;\n        } else {\n            throw new Error('Expression tree can\\'t be committed in the current state. Use `canCommit` method to check if the current state is valid.');\n        }\n    }\n\n    /**\n     * Discards all unsaved changes to the expression tree.\n     */\n    public discard(): void {\n        this.queryTree.cancelOperandEdit();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setPickerOutlet(outlet?: IgxOverlayOutletDirective | ElementRef) {\n        this.queryTree.setPickerOutlet(outlet);\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public get isContextMenuVisible(): boolean {\n        return this.queryTree.isContextMenuVisible;\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public exitOperandEdit() {\n        this.queryTree.exitOperandEdit();\n    }\n\n    /**\n     * @hidden @internal\n     *\n     * used by the grid\n     */\n    public setAddButtonFocus() {\n        this.queryTree.setAddButtonFocus();\n    }\n\n    public onExpressionTreeChange(tree: IExpressionTree) {\n        if (tree && this.entities && tree !== this._expressionTree) {\n            this._expressionTree = recreateTree(tree, this.entities);\n        } else {\n            this._expressionTree = tree;\n        }\n        if (this._shouldEmitTreeChange) {\n            this.expressionTreeChange.emit(tree);\n        }\n    }\n\n    private registerSVGIcons(): void {\n        const editorIcons = editor as any[];\n\n        editorIcons.forEach((icon) => {\n            this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons');\n            this.iconService.addIconRef(icon.name, 'default', {\n                name: icon.name,\n                family: 'imx-icons'\n            });\n        });\n\n        const inIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm560 200v-120H640v-80h120v-120h80v120h120v80H840v120h-80Z\"/></svg>';\n        this.iconService.addSvgIconFromText('in', inIcon, 'imx-icons');\n        this.iconService.addIconRef('in', 'default', {\n            name: 'in',\n            family: 'imx-icons'\n        });\n\n        const notInIcon = '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#5f6368\"><path d=\"M560-280H120v-400h720v120h-80v-40H200v240h360v80Zm-360-80v-240 240Zm440 104 84-84-84-84 56-56 84 84 84-84 56 56-83 84 83 84-56 56-84-83-84 83-56-56Z\"/></svg>';\n        this.iconService.addSvgIconFromText('not-in', notInIcon, 'imx-icons');\n        this.iconService.addIconRef('not-in', 'default', {\n            name: 'not-in',\n            family: 'imx-icons'\n        });\n\n        this.iconService.addIconRef('add', 'default', {\n            name: 'add',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('close', 'default', {\n            name: 'close',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('check', 'default', {\n            name: 'check',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('delete', 'default', {\n            name: 'delete',\n            family: 'material',\n        });\n\n        this.iconService.addIconRef('edit', 'default', {\n            name: 'edit',\n            family: 'material',\n        });\n    }\n}\n\n","<ng-content select=\"igx-query-builder-header\"></ng-content>\n\n<igx-query-builder-tree\n    [entities]=\"this.entities\"\n    [expressionTree]=\"this.expressionTree\"\n    [locale]=\"this.locale\"\n    [resourceStrings]=\"this.resourceStrings\"\n    [queryBuilder]=\"this\"\n    (expressionTreeChange)=\"onExpressionTreeChange($event)\"\n    [searchValueTemplate]=\"searchValueTemplate\">\n</igx-query-builder-tree>\n","export interface IGridResourceStrings {\n    igx_grid_groupByArea_message?: string;\n    igx_grid_groupByArea_select_message?: string;\n    igx_grid_groupByArea_deselect_message?: string;\n    igx_grid_emptyFilteredGrid_message?: string;\n    igx_grid_emptyGrid_message?: string;\n    igx_grid_filter?: string;\n    igx_grid_filter_row_close?: string;\n    igx_grid_filter_row_reset?: string;\n    igx_grid_filter_row_placeholder?: string;\n    igx_grid_filter_row_boolean_placeholder?: string;\n    igx_grid_filter_row_date_placeholder?: string;\n    igx_grid_filter_row_time_placeholder?: string;\n    igx_grid_filter_operator_and?: string;\n    igx_grid_complex_filter?: string;\n    igx_grid_filter_operator_or?: string;\n    igx_grid_filter_contains?: string;\n    igx_grid_filter_doesNotContain?: string;\n    igx_grid_filter_startsWith?: string;\n    igx_grid_filter_endsWith?: string;\n    igx_grid_filter_equals?: string;\n    igx_grid_filter_doesNotEqual?: string;\n    igx_grid_filter_empty?: string;\n    igx_grid_filter_notEmpty?: string;\n    igx_grid_filter_null?: string;\n    igx_grid_filter_notNull?: string;\n    igx_grid_filter_before?: string;\n    igx_grid_filter_after?: string;\n    igx_grid_filter_at?: string;\n    igx_grid_filter_not_at?: string;\n    igx_grid_filter_at_before?: string;\n    igx_grid_filter_at_after?: string;\n    igx_grid_filter_today?: string;\n    igx_grid_filter_yesterday?: string;\n    igx_grid_filter_thisMonth?: string;\n    igx_grid_filter_lastMonth?: string;\n    igx_grid_filter_nextMonth?: string;\n    igx_grid_filter_thisYear?: string;\n    igx_grid_filter_lastYear?: string;\n    igx_grid_filter_nextYear?: string;\n    igx_grid_filter_greaterThan?: string;\n    igx_grid_filter_lessThan?: string;\n    igx_grid_filter_greaterThanOrEqualTo?: string;\n    igx_grid_filter_lessThanOrEqualTo?: string;\n    igx_grid_filter_true?: string;\n    igx_grid_filter_false?: string;\n    igx_grid_filter_all?: string;\n    igx_grid_filter_condition_placeholder?: string;\n    igx_grid_summary_count?: string;\n    igx_grid_summary_min?: string;\n    igx_grid_summary_max?: string;\n    igx_grid_summary_sum?: string;\n    igx_grid_summary_average?: string;\n    igx_grid_summary_earliest?: string;\n    igx_grid_summary_latest?: string;\n    igx_grid_excel_filter_moving_left?: string;\n    igx_grid_excel_filter_moving_left_short?: string;\n    igx_grid_excel_filter_moving_right?: string;\n    igx_grid_excel_filter_moving_right_short?: string;\n    igx_grid_excel_filter_moving_header?: string;\n    igx_grid_excel_filter_sorting_asc?: string;\n    igx_grid_excel_filter_sorting_asc_short?: string;\n    igx_grid_excel_filter_sorting_desc?: string;\n    igx_grid_excel_filter_sorting_desc_short?: string;\n    igx_grid_excel_filter_sorting_header?: string;\n    igx_grid_excel_filter_clear?: string;\n    igx_grid_excel_custom_dialog_add?: string;\n    igx_grid_excel_custom_dialog_clear?: string;\n    igx_grid_excel_custom_dialog_header?: string;\n    igx_grid_excel_cancel?: string;\n    igx_grid_excel_apply?: string;\n    igx_grid_excel_search_placeholder?: string;\n    igx_grid_excel_select_all?: string;\n    igx_grid_excel_select_all_search_results?: string;\n    igx_grid_excel_add_to_filter?: string;\n    igx_grid_excel_blanks?: string;\n    igx_grid_excel_hide?: string;\n    igx_grid_excel_show?: string;\n    igx_grid_excel_pin?: string;\n    igx_grid_excel_unpin?: string;\n    igx_grid_excel_select?: string;\n    igx_grid_excel_deselect?: string;\n    igx_grid_excel_text_filter?: string;\n    igx_grid_excel_number_filter?: string;\n    igx_grid_excel_date_filter?: string;\n    igx_grid_excel_boolean_filter?: string;\n    igx_grid_excel_currency_filter?: string;\n    igx_grid_excel_custom_filter?: string;\n    igx_grid_excel_no_matches?: string;\n    igx_grid_excel_matches_count?: string;\n    igx_grid_advanced_filter_title?: string;\n    igx_grid_advanced_filter_and_group?: string;\n    igx_grid_advanced_filter_or_group?: string;\n    igx_grid_advanced_filter_end_group?: string;\n    igx_grid_advanced_filter_create_and_group?: string;\n    igx_grid_advanced_filter_create_or_group?: string;\n    igx_grid_advanced_filter_and_label?: string;\n    igx_grid_advanced_filter_or_label?: string;\n    igx_grid_advanced_filter_add_condition?: string;\n    igx_grid_advanced_filter_ungroup?: string;\n    igx_grid_advanced_filter_delete?: string;\n    igx_grid_advanced_filter_delete_filters?: string;\n    igx_grid_advanced_filter_initial_text?: string;\n    igx_grid_advanced_filter_column_placeholder?: string;\n    igx_grid_advanced_filter_value_placeholder?: string;\n    igx_grid_pinned_row_indicator?: string;\n    igx_grid_hiding_check_all_label?: string;\n    igx_grid_hiding_uncheck_all_label?: string;\n    igx_grid_pinning_check_all_label?: string;\n    igx_grid_pinning_uncheck_all_label?: string;\n    igx_grid_row_edit_btn_done?: string;\n    igx_grid_row_edit_btn_cancel?: string;\n    igx_grid_row_edit_text?: string;\n    igx_grid_toolbar_actions_filter_prompt?: string;\n    igx_grid_toolbar_pinning_button_tooltip?: string;\n    igx_grid_toolbar_hiding_button_tooltip?: string;\n    igx_grid_toolbar_pinning_title?: string;\n    igx_grid_toolbar_hiding_title?: string;\n    igx_grid_toolbar_advanced_filtering_button_tooltip?: string;\n    igx_grid_toolbar_advanced_filtering_button_label?: string;\n    igx_grid_toolbar_exporter_button_tooltip?: string;\n    igx_grid_toolbar_exporter_button_label?: string;\n    igx_grid_toolbar_exporter_excel_entry_text?: string;\n    igx_grid_toolbar_exporter_csv_entry_text?: string;\n    igx_grid_snackbar_addrow_label?: string;\n    igx_grid_snackbar_addrow_actiontext?: string;\n    igx_grid_actions_edit_label?: string;\n    igx_grid_actions_add_label?: string;\n    igx_grid_add_row_label?: string;\n    igx_grid_actions_add_child_label?: string;\n    igx_grid_actions_delete_label?: string;\n    igx_grid_actions_pin_label?: string;\n    igx_grid_actions_unpin_label?: string;\n    igx_grid_actions_jumpUp_label?: string;\n    igx_grid_actions_jumpDown_label?: string;\n    igx_grid_pivot_date_dimension_total?: string;\n    igx_grid_pivot_aggregate_count?: string;\n    igx_grid_pivot_aggregate_min?: string;\n    igx_grid_pivot_aggregate_max?: string;\n    igx_grid_pivot_aggregate_sum?: string;\n    igx_grid_pivot_aggregate_avg?: string;\n    igx_grid_pivot_aggregate_date_latest?: string;\n    igx_grid_pivot_aggregate_date_earliest?: string;\n    igx_grid_pivot_aggregate_time_latest?: string;\n    igx_grid_pivot_aggregate_time_earliest?: string;\n    igx_grid_pivot_empty_row_drop_area?: string;\n    igx_grid_pivot_empty_column_drop_area?: string;\n    igx_grid_pivot_empty_filter_drop_area?: string;\n    igx_grid_pivot_empty_value_drop_area?: string;\n    igx_grid_pivot_row_drop_chip?: string;\n    igx_grid_pivot_column_drop_chip?: string;\n    igx_grid_pivot_filter_drop_chip?: string;\n    igx_grid_pivot_value_drop_chip?: string;\n    igx_grid_pivot_empty_message?: string;\n    igx_grid_pivot_selector_filters?: string;\n    igx_grid_pivot_selector_rows?: string;\n    igx_grid_pivot_selector_columns?: string;\n    igx_grid_pivot_selector_values?: string;\n    igx_grid_pivot_selector_panel_empty?: string;\n    igx_grid_required_validation_error?: string;\n    igx_grid_min_validation_error?: string;\n    igx_grid_max_validation_error?: string;\n    igx_grid_min_length_validation_error?: string;\n    igx_grid_max_length_validation_error?: string;\n    igx_grid_email_validation_error?: string;\n    igx_grid_pattern_validation_error?: string;\n}\n\nexport const GridResourceStringsEN: IGridResourceStrings = {\n    igx_grid_groupByArea_message: 'Drag a column header and drop it here to group by that column.',\n    igx_grid_groupByArea_select_message: 'Select all rows in the group with field name {0} and value {1}.',\n    igx_grid_groupByArea_deselect_message: 'Deselect all rows in the group with field name {0} and value {1}.',\n    igx_grid_emptyFilteredGrid_message: 'No records found.',\n    igx_grid_emptyGrid_message: 'Grid has no data.',\n    igx_grid_filter: 'Filter',\n    igx_grid_filter_row_close: 'Close',\n    igx_grid_filter_row_reset: 'Reset',\n    igx_grid_filter_row_placeholder: 'Add filter value',\n    igx_grid_filter_row_boolean_placeholder: 'All',\n    igx_grid_filter_row_date_placeholder: 'Pick up date',\n    igx_grid_filter_row_time_placeholder: 'Pick up time',\n    igx_grid_filter_operator_and: 'And',\n    igx_grid_filter_operator_or: 'Or',\n    igx_grid_complex_filter: 'Complex Filter',\n    igx_grid_filter_contains: 'Contains',\n    igx_grid_filter_doesNotContain: 'Does Not Contain',\n    igx_grid_filter_startsWith: 'Starts With',\n    igx_grid_filter_endsWith: 'Ends With',\n    igx_grid_filter_equals: 'Equals',\n    igx_grid_filter_doesNotEqual: 'Does Not Equal',\n    igx_grid_filter_empty: 'Empty',\n    igx_grid_filter_notEmpty: 'Not Empty',\n    igx_grid_filter_null: 'Null',\n    igx_grid_filter_notNull: 'Not Null',\n    igx_grid_filter_before: 'Before',\n    igx_grid_filter_after: 'After',\n    igx_grid_filter_at: 'At',\n    igx_grid_filter_not_at: 'Not At',\n    igx_grid_filter_at_before: 'At or Before',\n    igx_grid_filter_at_after: 'At or After',\n    igx_grid_filter_today: 'Today',\n    igx_grid_filter_yesterday: 'Yesterday',\n    igx_grid_filter_thisMonth: 'This Month',\n    igx_grid_filter_lastMonth: 'Last Month',\n    igx_grid_filter_nextMonth: 'Next Month',\n    igx_grid_filter_thisYear: 'This Year',\n    igx_grid_filter_lastYear: 'Last Year',\n    igx_grid_filter_nextYear: 'Next Year',\n    igx_grid_filter_greaterThan: 'Greater Than',\n    igx_grid_filter_lessThan: 'Less Than',\n    igx_grid_filter_greaterThanOrEqualTo: 'Greater Than Or Equal To',\n    igx_grid_filter_lessThanOrEqualTo: 'Less Than Or Equal To',\n    igx_grid_filter_true: 'True',\n    igx_grid_filter_false: 'False',\n    igx_grid_filter_all: 'All',\n    igx_grid_filter_condition_placeholder: 'Select filter',\n    igx_grid_summary_count: 'Count',\n    igx_grid_summary_min: 'Min',\n    igx_grid_summary_max: 'Max',\n    igx_grid_summary_sum: 'Sum',\n    igx_grid_summary_average: 'Avg',\n    igx_grid_summary_earliest: 'Earliest',\n    igx_grid_summary_latest: 'Latest',\n    igx_grid_excel_filter_moving_left: 'move left',\n    igx_grid_excel_filter_moving_left_short: 'left',\n    igx_grid_excel_filter_moving_right: 'move right',\n    igx_grid_excel_filter_moving_right_short: 'right',\n    igx_grid_excel_filter_moving_header: 'move',\n    igx_grid_excel_filter_sorting_asc: 'ascending',\n    igx_grid_excel_filter_sorting_asc_short: 'asc',\n    igx_grid_excel_filter_sorting_desc: 'descending',\n    igx_grid_excel_filter_sorting_desc_short: 'desc',\n    igx_grid_excel_filter_sorting_header: 'sort',\n    igx_grid_excel_filter_clear: 'Clear column filters',\n    igx_grid_excel_custom_dialog_add: 'add filter',\n    igx_grid_excel_custom_dialog_clear: 'Clear filter',\n    igx_grid_excel_custom_dialog_header: 'Custom auto-filter on column: ',\n    igx_grid_excel_cancel: 'Cancel',\n    igx_grid_excel_apply: 'Apply',\n    igx_grid_excel_search_placeholder: 'Search',\n    igx_grid_excel_select_all: 'Select All',\n    igx_grid_excel_select_all_search_results: 'Select all search results',\n    igx_grid_excel_add_to_filter: 'Add current selection to filter',\n    igx_grid_excel_blanks: '(Blanks)',\n    igx_grid_excel_hide: 'Hide column',\n    igx_grid_excel_show: 'Show column',\n    igx_grid_excel_pin: 'Pin column',\n    igx_grid_excel_unpin: 'Unpin column',\n    igx_grid_excel_select: 'Select column',\n    igx_grid_excel_deselect: 'Deselect column',\n    igx_grid_excel_text_filter: 'Text filter',\n    igx_grid_excel_number_filter: 'Number filter',\n    igx_grid_excel_date_filter: 'Date filter',\n    igx_grid_excel_boolean_filter: 'Boolean filter',\n    igx_grid_excel_currency_filter: 'Currency filter',\n    igx_grid_excel_custom_filter: 'Custom filter...',\n    igx_grid_excel_no_matches: 'No matches',\n    igx_grid_excel_matches_count: '{0} matches.',\n    igx_grid_advanced_filter_title: 'Advanced Filtering',\n    igx_grid_advanced_filter_and_group: '\"And\" Group',\n    igx_grid_advanced_filter_or_group: '\"Or\" Group',\n    igx_grid_advanced_filter_end_group: 'End Group',\n    igx_grid_advanced_filter_create_and_group: 'Create \"And\" Group',\n    igx_grid_advanced_filter_create_or_group: 'Create \"Or\" Group',\n    igx_grid_advanced_filter_and_label: 'and',\n    igx_grid_advanced_filter_or_label: 'or',\n    igx_grid_advanced_filter_add_condition: 'Condition',\n    igx_grid_advanced_filter_ungroup: 'Ungroup',\n    igx_grid_advanced_filter_delete: 'Delete',\n    igx_grid_advanced_filter_delete_filters: 'Delete filters',\n    igx_grid_advanced_filter_initial_text: 'Start with creating a group of conditions linked with \"And\" or \"Or\"',\n    igx_grid_advanced_filter_column_placeholder: 'Select column',\n    igx_grid_advanced_filter_value_placeholder: 'Value',\n    igx_grid_pinned_row_indicator: 'Pinned',\n    igx_grid_hiding_check_all_label: 'Show All',\n    igx_grid_hiding_uncheck_all_label: 'Hide All',\n    igx_grid_pinning_check_all_label: 'Pin All',\n    igx_grid_pinning_uncheck_all_label: 'Unpin All',\n    igx_grid_row_edit_btn_done: 'Done',\n    igx_grid_row_edit_btn_cancel: 'Cancel',\n    igx_grid_row_edit_text: 'You have {0} changes in this row and {1} hidden columns',\n    igx_grid_toolbar_actions_filter_prompt: 'Filter columns list ...',\n    igx_grid_toolbar_pinning_button_tooltip: 'Open column pinning dropdown',\n    igx_grid_toolbar_hiding_button_tooltip: 'Open column hiding dropdown',\n    igx_grid_toolbar_pinning_title: 'Pinned columns',\n    igx_grid_toolbar_hiding_title: 'Visible columns',\n    igx_grid_toolbar_advanced_filtering_button_tooltip: 'Open advanced filtering dialog',\n    igx_grid_toolbar_advanced_filtering_button_label: 'Advanced filtering',\n    igx_grid_toolbar_exporter_button_tooltip: 'Open exporter dropdown',\n    igx_grid_toolbar_exporter_button_label: 'Export',\n    igx_grid_toolbar_exporter_excel_entry_text: 'Export to Excel',\n    igx_grid_toolbar_exporter_csv_entry_text: 'Export to CSV',\n    igx_grid_snackbar_addrow_label: 'Row added',\n    igx_grid_snackbar_addrow_actiontext: 'SHOW',\n    igx_grid_actions_edit_label: 'Edit',\n    igx_grid_actions_add_label: 'Add',\n    igx_grid_add_row_label: 'ADD ROW',\n    igx_grid_actions_add_child_label: 'Add Child',\n    igx_grid_actions_delete_label: 'Delete',\n    igx_grid_actions_pin_label: 'Pin',\n    igx_grid_actions_unpin_label: 'Unpin',\n    igx_grid_actions_jumpUp_label: 'Jump up',\n    igx_grid_actions_jumpDown_label: 'Jump down',\n    igx_grid_pivot_date_dimension_total: 'All Periods',\n    igx_grid_pivot_aggregate_count: 'Count',\n    igx_grid_pivot_aggregate_min: 'Minimum',\n    igx_grid_pivot_aggregate_max: 'Maximum',\n    igx_grid_pivot_aggregate_sum: 'Sum',\n    igx_grid_pivot_aggregate_avg: 'Average',\n    igx_grid_pivot_aggregate_date_latest: 'Latest Date',\n    igx_grid_pivot_aggregate_date_earliest: 'Earliest Date',\n    igx_grid_pivot_aggregate_time_latest: 'Latest Time',\n    igx_grid_pivot_aggregate_time_earliest: 'Earliest Time',\n    igx_grid_pivot_empty_row_drop_area: 'Drop Row Fields here.',\n    igx_grid_pivot_empty_column_drop_area: 'Drop Column Fields here.',\n    igx_grid_pivot_empty_filter_drop_area: 'Drop Filter Fields here.',\n    igx_grid_pivot_empty_value_drop_area: 'Drop Value Fields here.',\n    igx_grid_pivot_row_drop_chip: 'Drop here to use as row',\n    igx_grid_pivot_column_drop_chip: 'Drop here to use as column',\n    igx_grid_pivot_filter_drop_chip: 'Drop here to use as filter',\n    igx_grid_pivot_value_drop_chip: 'Drop here to use as value',\n    igx_grid_pivot_empty_message: 'Pivot grid has no dimensions and values.',\n    igx_grid_pivot_selector_filters: 'Filters',\n    igx_grid_pivot_selector_rows: 'Rows',\n    igx_grid_pivot_selector_columns: 'Columns',\n    igx_grid_pivot_selector_values: 'Values',\n    igx_grid_pivot_selector_panel_empty: 'Drop Items Here',\n    igx_grid_required_validation_error: 'This field is required',\n    igx_grid_min_validation_error: 'A value of at least {0} should be entered',\n    igx_grid_max_validation_error: 'A value no more than {0} should be entered',\n    igx_grid_min_length_validation_error: 'Entry should be at least {0} character(s) long',\n    igx_grid_max_length_validation_error: 'Entry should be no more than {0} character(s) long',\n    igx_grid_email_validation_error: 'A valid email address should be entered',\n    igx_grid_pattern_validation_error: 'Entry does not match the required pattern'\n};\n","import { Component, HostBinding, Input } from '@angular/core';\nimport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from '../core/i18n/query-builder-resources';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\n\n@Component({\n    selector: 'igx-query-builder-header',\n    templateUrl: 'query-builder-header.component.html'\n})\nexport class IgxQueryBuilderHeaderComponent {\n\n    private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class') public get getClass() {\n        return 'igx-query-builder__header';\n    }\n\n    /**\n     * Sets the title of the `IgxQueryBuilderHeaderComponent`.\n     *\n     * @example\n     * ```html\n     * <igx-query-builder-header title=\"Sample Query Builder\"></igx-query-builder-header>\n     * ```\n     */\n    @Input()\n    public title: string;\n\n    /**\n     * Show/hide the legend.\n     *\n     * @example\n     * ```html\n     * <igx-query-builder-header [showLegend]=\"false\"></igx-query-builder-header>\n     * ```\n     * @deprecated in version 19.1.0.\n     */\n    @Input()\n    public showLegend = true;\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     *\n     * @deprecated in version 19.1.0.\n     */\n    @Input()\n    public set resourceStrings(value: IQueryBuilderResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IQueryBuilderResourceStrings {\n        return this._resourceStrings;\n    }\n}\n","<div class=\"igx-query-builder__title\">{{ title }}</div>\n<ng-content></ng-content>\n","import {\n    Component, Input, ViewChild, ChangeDetectorRef, AfterViewInit, OnDestroy, HostBinding\n} from '@angular/core';\nimport { IgxOverlayService } from '../../../services/overlay/overlay';\nimport { IDragStartEventArgs, IgxDragDirective, IgxDragHandleDirective } from '../../../directives/drag-drop/drag-drop.directive';\nimport { Subject } from 'rxjs';\nimport { IActiveNode } from '../../grid-navigation.service';\nimport { PlatformUtil } from '../../../core/utils';\nimport { FieldType, GridType } from '../../common/grid.interface';\nimport { IgxQueryBuilderComponent } from '../../../query-builder/query-builder.component';\nimport { GridResourceStringsEN } from '../../../core/i18n/grid-resources';\nimport { IFilteringExpressionsTree } from '../../../data-operations/filtering-expressions-tree';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { IgxQueryBuilderHeaderComponent } from '../../../query-builder/query-builder-header.component';\nimport { NgClass } from '@angular/common';\nimport { getCurrentResourceStrings } from '../../../core/i18n/resources';\nimport { QueryBuilderResourceStringsEN } from '../../../core/i18n/query-builder-resources';\n\n/**\n * A component used for presenting advanced filtering UI for a Grid.\n * It is used internally in the Grid, but could also be hosted in a container outside of it.\n *\n * Example:\n * ```html\n * <igx-advanced-filtering-dialog\n *     [grid]=\"grid1\">\n * </igx-advanced-filtering-dialog>\n * ```\n */\n@Component({\n    selector: 'igx-advanced-filtering-dialog',\n    templateUrl: './advanced-filtering-dialog.component.html',\n    imports: [IgxDragDirective, NgClass, IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxDragHandleDirective, IgxButtonDirective]\n})\nexport class IgxAdvancedFilteringDialogComponent implements AfterViewInit, OnDestroy {\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('queryBuilder', { read: IgxQueryBuilderComponent })\n    public queryBuilder: IgxQueryBuilderComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('style.display')\n    public display = 'block';\n\n    /**\n     * @hidden @internal\n     */\n    public inline = true;\n\n    /**\n     * @hidden @internal\n     */\n    public lastActiveNode = {} as IActiveNode;\n\n    private destroy$ = new Subject<any>();\n    private _overlayComponentId: string;\n    private _overlayService: IgxOverlayService;\n    private _grid: GridType;\n\n    constructor(public cdr: ChangeDetectorRef, protected platform: PlatformUtil) { }\n    /**\n     * @hidden @internal\n     */\n    public ngAfterViewInit(): void {\n        this.queryBuilder.setPickerOutlet(this.grid.outlet);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * Assigns the grid instance corresponding to the advanced filtering dialog instance.\n     */\n    @Input()\n    public set grid(grid: GridType) {\n        this._grid = grid;\n\n        if (this._grid) {\n            this._grid.filteringService.registerSVGIcons();\n        }\n\n        this.assignResourceStrings();\n    }\n\n    /**\n     * Returns the grid.\n     */\n    public get grid(): GridType {\n        return this._grid;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get filterableFields(): FieldType[] {\n        return this.grid.columns.filter((column) => !column.columnGroup && column.filterable)\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dragStart(dragArgs: IDragStartEventArgs) {\n        if (!this._overlayComponentId) {\n            dragArgs.cancel = true;\n            return;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onDragMove(e) {\n        const deltaX = e.nextPageX - e.pageX;\n        const deltaY = e.nextPageY - e.pageY;\n        e.cancel = true;\n        this._overlayService.setOffset(this._overlayComponentId, deltaX, deltaY);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        eventArgs.stopPropagation();\n        const key = eventArgs.key;\n        if (key === this.platform.KEYMAP.ESCAPE) {\n            this.closeDialog();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public initialize(grid: GridType, overlayService: IgxOverlayService,\n        overlayComponentId: string) {\n        this.inline = false;\n        this.grid = grid;\n        this._overlayService = overlayService;\n        this._overlayComponentId = overlayComponentId;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onClearButtonClick(event?: Event) {\n        this.grid.crudService.endEdit(false, event);\n        this.queryBuilder.expressionTree = this.grid.advancedFilteringExpressionsTree = null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public closeDialog() {\n        if (this._overlayComponentId) {\n            this._overlayService.hide(this._overlayComponentId);\n        }\n        this.grid.navigation.activeNode = this.lastActiveNode;\n        if (this.grid.navigation.activeNode && this.grid.navigation.activeNode.row === -1) {\n            (this.grid as any).theadRow.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public applyChanges(event?: Event) {\n        this.grid.crudService.endEdit(false, event);\n        this.queryBuilder.exitOperandEdit();\n        this.grid.advancedFilteringExpressionsTree = this.queryBuilder.expressionTree as IFilteringExpressionsTree;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancelChanges() {\n        this.closeDialog();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onApplyButtonClick(event?: Event) {\n        this.applyChanges(event);\n        this.closeDialog();\n    }\n\n    \n    /**\n     * @hidden @internal\n     */\n    public generateEntity() {\n        const entities = [\n            {\n                name: null, \n                fields: this.filterableFields\n            }\n        ];\n        return entities;\n    }\n\n    private assignResourceStrings() {\n        // If grid has custom resource strings set for the advanced filtering,\n        // they are passed to the query builder resource strings.\n        const gridRS = this.grid.resourceStrings;\n\n        if (gridRS !== GridResourceStringsEN) {\n            const queryBuilderRS = getCurrentResourceStrings(QueryBuilderResourceStringsEN);\n            Object.keys(gridRS).forEach((prop) => {\n                const reg = /^igx_grid_(advanced_)?filter_(row_)?/;\n                if (!reg.test(prop)) {\n                    return;\n                }\n                const affix = prop.replace(reg, '');\n                const filterProp = `igx_query_builder_filter_${affix}`;\n                const generalProp = `igx_query_builder_${affix}`\n                if (queryBuilderRS[filterProp] !== undefined) {\n                    queryBuilderRS[filterProp] = gridRS[prop];\n                } else if (queryBuilderRS[generalProp] !== undefined) {\n                    queryBuilderRS[generalProp] = gridRS[prop];\n                }\n            });\n        }\n    }\n}\n","@if (grid) {\n    <article class=\"igx-advanced-filter\" igxDrag [ghost]=\"false\" [dragTolerance]=\"0\"\n        (dragStart)=\"dragStart($event)\" (dragMove)=\"onDragMove($event)\" (keydown)=\"onKeyDown($event)\"\n        [ngClass]=\"{\n            'igx-advanced-filter': true,\n            'igx-advanced-filter--inline': inline\n        }\">\n        <igx-query-builder #queryBuilder\n            [locale]=\"grid.locale\"\n            [entities]=\"generateEntity()\"\n            [expressionTree]=\"this.grid.advancedFilteringExpressionsTree\">\n            <igx-query-builder-header\n                [title]=\"grid.resourceStrings.igx_grid_advanced_filter_title\"\n                igxDragHandle>\n            </igx-query-builder-header>\n        </igx-query-builder>\n\n        <footer class=\"igx-excel-filter__secondary-footer\">\n            <div class=\"igx-excel-filter__clear\">\n                <button igxButton=\"flat\" type=\"button\"\n                    (click)=\"onClearButtonClick($event)\">\n                    {{ grid.resourceStrings.igx_grid_excel_custom_dialog_clear }}\n                </button>\n            </div>\n            <div class=\"igx-excel-filter__cancel\">\n                <button igxButton=\"outlined\" type=\"button\" (click)=\"cancelChanges()\">\n                    {{ grid.resourceStrings.igx_grid_excel_cancel }}\n                </button>\n            </div>\n            <div class=\"igx-excel-filter__apply\">\n                <button igxButton=\"contained\" type=\"button\"\n                    (click)=\"onApplyButtonClick($event)\">\n                    {{ grid.resourceStrings.igx_grid_excel_apply }}\n                </button>\n            </div>\n        </footer>\n    </article>\n}\n","import { ChangeDetectorRef, Directive, ElementRef, EventEmitter } from '@angular/core';\nimport { PlatformUtil } from '../../../core/utils';\nimport { IgxOverlayService } from '../../../services/overlay/overlay';\nimport { ExpressionUI, FilterListItem } from './common';\n\n\n\n@Directive()\nexport abstract class BaseFilteringComponent {\n\n    public abstract column: any;\n    public abstract get grid(): any;\n\n    public abstract overlayComponentId: string;\n    public abstract mainDropdown: ElementRef<HTMLElement>;\n    public abstract expressionsList: ExpressionUI[];\n    public abstract listData: FilterListItem[];\n    public abstract isHierarchical: boolean;\n\n    public abstract loadingStart: EventEmitter<undefined>;\n    public abstract loadingEnd: EventEmitter<undefined>;\n    public abstract initialized: EventEmitter<undefined>;\n    public abstract columnChange: EventEmitter<any>;\n    public abstract sortingChanged: EventEmitter<undefined>;\n    public abstract listDataLoaded: EventEmitter<undefined>;\n\n    constructor(\n        protected cdr: ChangeDetectorRef,\n        public element: ElementRef<HTMLElement>,\n        protected platform: PlatformUtil\n    ) { }\n\n\n    public abstract initialize(column: any, overlayService: IgxOverlayService): void;\n    public abstract detectChanges(): void;\n    public abstract hide(): void;\n    public abstract closeDropdown(): void;\n    public abstract onSelect(): void;\n    public abstract onPin(): void;\n    public abstract onHideToggle(): void;\n    public abstract cancel(): void;\n}\n","import { Component } from '@angular/core';\nimport { PlatformUtil } from '../../../core/utils';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { NgClass } from '@angular/common';\n\n/**\n * A component used for presenting Excel style clear filters UI.\n */\n@Component({\n    selector: 'igx-excel-style-clear-filters',\n    templateUrl: './excel-style-clear-filters.component.html',\n    imports: [NgClass, IgxIconComponent]\n})\nexport class IgxExcelStyleClearFiltersComponent {\n    constructor(\n        public esf: BaseFilteringComponent,\n        protected platform: PlatformUtil,\n    ) { }\n\n    /**\n     * @hidden @internal\n     */\n    public clearFilterClass() {\n        if (this.esf.column.filteringExpressionsTree) {\n            return 'igx-excel-filter__actions-clear';\n        }\n\n        return 'igx-excel-filter__actions-clear--disabled';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public clearFilter() {\n        this.esf.grid.filteringService.clearFilter(this.esf.column.field);\n        this.selectAllFilterItems();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onClearFilterKeyDown(eventArgs: KeyboardEvent) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            this.clearFilter();\n        }\n    }\n\n    private selectAllFilterItems() {\n        this.esf.listData.forEach(filterListItem => {\n            filterListItem.isSelected = true;\n            filterListItem.indeterminate = false;\n        });\n        this.esf.detectChanges();\n    }\n}\n","@if (esf.column) {\n    <div\n        tabindex=\"0\"\n        [ngClass]=\"clearFilterClass()\"\n        (keydown)=\"onClearFilterKeyDown($event)\"\n        (click)=\"clearFilter()\"\n        role=\"menuitem\"\n        [attr.aria-disabled]=\"!this.esf.column.filteringExpressionsTree\">\n        <span>{{ esf.grid.resourceStrings.igx_grid_excel_filter_clear }}</span>\n        <igx-icon family=\"default\" name=\"cancel\"></igx-icon>\n    </div>\n}\n","import {\n    Component,\n    AfterViewInit,\n    Input,\n    Output,\n    EventEmitter,\n    ChangeDetectorRef,\n    ViewChild\n} from '@angular/core';\nimport { IgxButtonGroupComponent } from '../../../buttonGroup/buttonGroup.component';\nimport { GridColumnDataType, DataUtil } from '../../../data-operations/data-util';\nimport { IFilteringOperation } from '../../../data-operations/filtering-condition';\nimport { IBaseEventArgs, PlatformUtil } from '../../../core/utils';\nimport { FilteringLogic } from '../../../data-operations/filtering-expression.interface';\nimport { IgxSelectComponent } from '../../../select/select.component';\nimport { IgxOverlayOutletDirective } from '../../../directives/toggle/toggle.directive';\nimport { ExpressionUI } from './common';\nimport { ColumnType } from '../../common/grid.interface';\nimport { OverlaySettings } from '../../../services/overlay/utilities';\nimport { AbsoluteScrollStrategy } from '../../../services/overlay/scroll/absolute-scroll-strategy';\nimport { ConnectedPositioningStrategy } from '../../../services/overlay/position/connected-positioning-strategy';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { IgxInputDirective } from '../../../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../../../input-group/input-group.component';\nimport { IgxSelectItemComponent } from '../../../select/select-item.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxPrefixDirective } from '../../../directives/prefix/prefix.directive';\nimport { IgxIconButtonDirective } from '../../../directives/button/icon-button.directive';\n\n/**\n * @hidden\n */\nexport interface ILogicOperatorChangedArgs extends IBaseEventArgs {\n    target: ExpressionUI;\n    newValue: FilteringLogic;\n}\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-excel-style-default-expression',\n    templateUrl: './excel-style-default-expression.component.html',\n    imports: [IgxSelectComponent, IgxPrefixDirective, IgxIconComponent, IgxSelectItemComponent, IgxInputGroupComponent, IgxInputDirective, IgxButtonDirective, IgxButtonGroupComponent, IgxOverlayOutletDirective, IgxIconButtonDirective]\n})\nexport class IgxExcelStyleDefaultExpressionComponent implements AfterViewInit {\n    @Input()\n    public column: ColumnType;\n\n    @Input()\n    public expressionUI: ExpressionUI;\n\n    @Input()\n    public expressionsList: Array<ExpressionUI>;\n\n    @Input()\n    public grid: any;\n\n    @Output()\n    public expressionRemoved = new EventEmitter<ExpressionUI>();\n\n    @Output()\n    public logicOperatorChanged = new EventEmitter<ILogicOperatorChangedArgs>();\n\n    @ViewChild('overlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    public overlayOutlet: IgxOverlayOutletDirective;\n\n    @ViewChild('dropdownConditions', { read: IgxSelectComponent, static: true })\n    protected dropdownConditions: IgxSelectComponent;\n\n    @ViewChild('logicOperatorButtonGroup', { read: IgxButtonGroupComponent })\n    protected logicOperatorButtonGroup: IgxButtonGroupComponent;\n\n    @ViewChild('inputValues', { read: IgxInputDirective, static: true })\n    protected inputValuesDirective: IgxInputDirective;\n\n    public dropDownOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    public get isLast(): boolean {\n        return this.expressionsList[this.expressionsList.length - 1] === this.expressionUI;\n    }\n\n    public get isSingle(): boolean {\n        return this.expressionsList.length === 1;\n    }\n\n    public get conditionsPlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_condition_placeholder'];\n    }\n\n    public get inputValuePlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_row_placeholder'];\n    }\n\n    public get type() {\n        switch (this.column.dataType) {\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n            case GridColumnDataType.Percent:\n                return 'number';\n            default:\n                return 'text';\n        }\n    }\n\n    constructor(public cdr: ChangeDetectorRef, protected platform: PlatformUtil) { }\n\n    public get conditions() {\n        return this.column.filters.conditionList();\n    }\n\n    protected get inputValuesElement() {\n        return this.inputValuesDirective.nativeElement;\n    }\n\n    public ngAfterViewInit(): void {\n        this.dropDownOverlaySettings.outlet = this.overlayOutlet;\n        this.dropDownOverlaySettings.target = this.dropdownConditions.inputGroup.element.nativeElement;\n        this.dropDownOverlaySettings.excludeFromOutsideClick = [this.dropdownConditions.inputGroup.element.nativeElement as HTMLElement];\n        this.dropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy();\n    }\n\n    public focus() {\n        // use requestAnimationFrame to focus the values input because when initializing the component\n        // datepicker's input group is not yet fully initialized\n        requestAnimationFrame(() => this.inputValuesElement.focus());\n    }\n\n    public translateCondition(value: string): string {\n        return this.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n    }\n\n    public getIconName(): string {\n        if (this.column.dataType === GridColumnDataType.Boolean && this.expressionUI.expression.condition === null) {\n            return this.getCondition(this.conditions[0]).iconName;\n        } else if (!this.expressionUI.expression.condition) {\n            return 'filter_list';\n        } else {\n            return this.expressionUI.expression.condition.iconName;\n        }\n    }\n\n    public isConditionSelected(conditionName: string): boolean {\n        return this.expressionUI.expression.condition && this.expressionUI.expression.condition.name === conditionName;\n    }\n\n    public onConditionsChanged(eventArgs: any) {\n        const value = (eventArgs.newSelection as IgxSelectComponent).value;\n        this.expressionUI.expression.condition = this.getCondition(value);\n\n        this.focus();\n    }\n\n    public getCondition(value: string): IFilteringOperation {\n        return this.column.filters.condition(value);\n    }\n\n    public getConditionFriendlyName(name: string): string {\n        return this.grid.resourceStrings[`igx_grid_filter_${name}`] || name;\n    }\n\n    public onValuesInput(eventArgs) {\n        this.expressionUI.expression.searchVal = DataUtil.parseValue(this.column.dataType, eventArgs.target.value);\n    }\n\n    public onLogicOperatorButtonClicked(eventArgs, buttonIndex: number) {\n        if (this.logicOperatorButtonGroup.selectedButtons.length === 0) {\n            eventArgs.stopPropagation();\n            this.logicOperatorButtonGroup.selectButton(buttonIndex);\n        } else {\n            this.logicOperatorChanged.emit({\n                target: this.expressionUI,\n                newValue: buttonIndex as FilteringLogic\n            });\n        }\n    }\n\n    public onLogicOperatorKeyDown(eventArgs: KeyboardEvent, buttonIndex: number) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            this.logicOperatorButtonGroup.selectButton(buttonIndex);\n            this.logicOperatorChanged.emit({\n                target: this.expressionUI,\n                newValue: buttonIndex as FilteringLogic\n            });\n        }\n    }\n\n    public onRemoveButtonClick() {\n        this.expressionRemoved.emit(this.expressionUI);\n    }\n\n    public onOutletPointerDown(event) {\n        event.preventDefault();\n    }\n}\n","<igx-select #dropdownConditions\n        type=\"box\"\n        [placeholder]=\"conditionsPlaceholder\"\n        (selectionChanging)=\"onConditionsChanged($event)\"\n        [overlaySettings]=\"dropDownOverlaySettings\">\n    <igx-prefix>\n        @if (expressionUI.expression.condition) {\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        }\n        @if (!expressionUI.expression.condition) {\n            <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n        }\n    </igx-prefix>\n    @for (condition of conditions; track condition) {\n        <igx-select-item [value]=\"condition\" [text]=\"getConditionFriendlyName(condition)\" [selected]=\"isConditionSelected(condition)\">\n            <div class=\"igx-grid__filtering-dropdown-items\">\n                <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n                <span class=\"igx-grid__filtering-dropdown-text\">{{translateCondition(condition)}}</span>\n            </div>\n        </igx-select-item>\n    }\n</igx-select>\n\n<igx-input-group #inputGroupValues type=\"box\">\n    <input\n        #inputValues\n        igxInput\n        [type]=\"type\"\n        tabindex=\"0\"\n        [placeholder]=\"inputValuePlaceholder\"\n        [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n        autocomplete=\"off\"\n        [value]=\"expressionUI.expression.searchVal\"\n        (input)=\"onValuesInput($event)\"\n    />\n</igx-input-group>\n\n@if (!isSingle) {\n    <button type=\"button\" (click)=\"onRemoveButtonClick()\" igxIconButton=\"flat\">\n        <igx-icon family=\"default\" name=\"remove\"></igx-icon>\n    </button>\n}\n\n@if (!isLast) {\n    <igx-buttongroup #logicOperatorButtonGroup>\n        <span igxButton\n            tabindex=\"0\"\n            #andButton\n            (keydown)=\"onLogicOperatorKeyDown($event, 0)\"\n            [selected]=\"expressionUI.afterOperator === 0\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 0)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_and }}\n        </span>\n        <span igxButton\n            tabindex=\"0\"\n            #orButton\n            (keydown)=\"onLogicOperatorKeyDown($event, 1)\"\n            [selected]=\"expressionUI.afterOperator === 1\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 1)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_or }}\n        </span>\n    </igx-buttongroup>\n}\n\n<div #overlayOutlet\n     igxOverlayOutlet\n     (pointerdown)=\"onOutletPointerDown($event)\">\n</div>\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IgxExcelStyleDefaultExpressionComponent } from './excel-style-default-expression.component';\nimport { IgxInputDirective } from '../../../directives/input/input.directive';\nimport { IgxTimePickerComponent } from '../../../time-picker/time-picker.component';\nimport { getLocaleFirstDayOfWeek } from \"@angular/common\";\nimport { IgxOverlayOutletDirective } from '../../../directives/toggle/toggle.directive';\nimport { IgxButtonGroupComponent } from '../../../buttonGroup/buttonGroup.component';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { IgxDateTimeEditorDirective } from '../../../directives/date-time-editor/date-time-editor.directive';\nimport { FormsModule } from '@angular/forms';\nimport { IgxInputGroupComponent } from '../../../input-group/input-group.component';\nimport { IgxPickerToggleComponent, IgxPickerClearComponent } from '../../../date-common/picker-icons.common';\nimport { IgxDatePickerComponent } from '../../../date-picker/date-picker.component';\nimport { IgxSelectItemComponent } from '../../../select/select-item.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxPrefixDirective } from '../../../directives/prefix/prefix.directive';\nimport { IgxSelectComponent } from '../../../select/select.component';\nimport { IgxIconButtonDirective } from '../../../directives/button/icon-button.directive';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-excel-style-date-expression',\n    templateUrl: './excel-style-date-expression.component.html',\n    imports: [IgxSelectComponent, IgxPrefixDirective, IgxIconComponent, IgxSelectItemComponent, IgxDatePickerComponent, IgxPickerToggleComponent, IgxPickerClearComponent, IgxTimePickerComponent, IgxInputGroupComponent, FormsModule, IgxInputDirective, IgxDateTimeEditorDirective, IgxButtonDirective, IgxButtonGroupComponent, IgxOverlayOutletDirective, IgxIconButtonDirective]\n})\nexport class IgxExcelStyleDateExpressionComponent extends IgxExcelStyleDefaultExpressionComponent {\n    @ViewChild('input', { read: IgxInputDirective, static: false })\n    private input: IgxInputDirective;\n\n    @ViewChild('picker')\n    private picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n    @Input()\n    public get searchVal(): any {\n        return this.expressionUI.expression.searchVal;\n    }\n\n    public set searchVal(value: any) {\n        this.expressionUI.expression.searchVal = value ? new Date(Date.parse(value.toString())) : null;\n    }\n\n    protected override get inputValuesElement() {\n        return this.picker?.getEditElement() || this.input?.nativeElement;\n    }\n\n    public get inputDatePlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_row_date_placeholder'];\n    }\n\n    public get inputTimePlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_row_time_placeholder'];\n    }\n\n    public get weekStart(): number {\n        return getLocaleFirstDayOfWeek(this.grid.locale);\n    }\n}\n","<igx-select #dropdownConditions\n        type=\"box\"\n        [placeholder]=\"conditionsPlaceholder\"\n        (selectionChanging)=\"onConditionsChanged($event)\"\n        [overlaySettings]=\"dropDownOverlaySettings\">\n    <igx-prefix>\n        @if (expressionUI.expression.condition) {\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        }\n        @if (!expressionUI.expression.condition) {\n            <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n        }\n    </igx-prefix>\n    @for (condition of conditions; track condition) {\n        <igx-select-item [value]=\"condition\" [text]=\"getConditionFriendlyName(condition)\" [selected]=\"isConditionSelected(condition)\">\n            <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n            <span>{{translateCondition(condition)}}</span>\n        </igx-select-item>\n    }\n</igx-select>\n\n@if (column.dataType === 'date') {\n    <igx-date-picker #picker\n        [weekStart]=\"column.pipeArgs.weekStart ?? weekStart\"\n        [(value)]=\"searchVal\"\n        [locale]=\"grid.locale\"\n        [outlet]=\"grid.outlet\"\n        (click)=\"picker.open()\"\n        [readOnly]=\"true\"\n        [placeholder]=\"inputDatePlaceholder\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [formatter]=\"column.formatter\"\n        [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n        type=\"box\"\n    >\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-date-picker>\n}\n\n@if (column.dataType === 'time') {\n    <igx-time-picker #picker\n        [(ngModel)]=\"searchVal\"\n        [locale]=\"grid.locale\"\n        [outlet]=\"grid.outlet\"\n        (click)=\"picker.open()\"\n        [readOnly]=\"true\"\n        [placeholder]=\"inputTimePlaceholder\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n        [formatter]=\"column.formatter\"\n        [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n        type=\"box\"\n    >\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-time-picker>\n}\n\n@if (column.dataType === 'dateTime') {\n    <igx-input-group #dropDownTarget #inputGroup type=\"box\">\n        <input #input igxInput tabindex=\"0\"\n            [placeholder]=\"inputDatePlaceholder\"\n            [locale]=\"column.grid.locale\"\n            [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n            [defaultFormatType]=\"column.dataType\"\n            [displayFormat]=\"column.pipeArgs.format\"\n            [(ngModel)]=\"searchVal\"\n            [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"/>\n    </igx-input-group>\n}\n\n@if (!isSingle) {\n    <button type=\"button\" (click)=\"onRemoveButtonClick()\" igxIconButton=\"flat\" >\n        <igx-icon family=\"default\" name=\"remove\"></igx-icon>\n    </button>\n}\n\n@if (!isLast) {\n    <igx-buttongroup #logicOperatorButtonGroup>\n        <span igxButton\n            #andButton\n            (keydown)=\"onLogicOperatorKeyDown($event, 0)\"\n            tabindex=\"0\"\n            [selected]=\"expressionUI.afterOperator === 0\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 0)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_and }}\n        </span>\n        <span igxButton\n            #orButton\n            tabindex=\"0\"\n            (keydown)=\"onLogicOperatorKeyDown($event, 1)\"\n            [selected]=\"expressionUI.afterOperator === 1\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 1)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_or }}\n        </span>\n    </igx-buttongroup>\n}\n\n<div #overlayOutlet\n     igxOverlayOutlet\n     (pointerdown)=\"onOutletPointerDown($event)\">\n</div>\n","import { isTree } from '../../../data-operations/expressions-tree-util';\nimport { FilteringLogic, IFilteringExpression } from '../../../data-operations/filtering-expression.interface';\nimport { IFilteringExpressionsTree } from '../../../data-operations/filtering-expressions-tree';\n\n/**\n * @hidden @internal\n */\nexport class FilterListItem {\n    public value: any;\n    public label: any;\n    public isSelected: boolean;\n    public indeterminate: boolean;\n    public isFiltered: boolean;\n    public isSpecial = false;\n    public isBlanks = false;\n    public children?: Array<FilterListItem>;\n    public parent?: FilterListItem;\n}\n\n/**\n * @hidden\n */\nexport class ExpressionUI {\n    public expressionId: string;\n    public expression: IFilteringExpression;\n    public beforeOperator: FilteringLogic;\n    public afterOperator: FilteringLogic;\n    public isSelected = false;\n    public isVisible = true;\n\n    constructor() {\n        // Use IDs to identify expressions clearly and use to track them in template @for cycles.\n        this.expressionId = crypto.randomUUID();\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ActiveElement {\n    public index: number;\n    public id: string;\n    public checked: boolean;\n}\n\nexport function generateExpressionsList(expressions: IFilteringExpressionsTree | IFilteringExpression,\n    operator: FilteringLogic,\n    expressionsUIs: ExpressionUI[]): void {\n    generateExpressionsListRecursive(expressions, operator, expressionsUIs);\n\n    // The beforeOperator of the first expression and the afterOperator of the last expression should be null\n    if (expressionsUIs.length) {\n        expressionsUIs[expressionsUIs.length - 1].afterOperator = null;\n    }\n}\n\n\nfunction generateExpressionsListRecursive(expressions: IFilteringExpressionsTree | IFilteringExpression,\n    operator: FilteringLogic,\n    expressionsUIs: ExpressionUI[]): void {\n    if (!expressions) {\n        return;\n    }\n\n    if (isTree(expressions)) {\n        for (const operand of expressions.filteringOperands) {\n            generateExpressionsListRecursive(operand, expressions.operator, expressionsUIs);\n        }\n        if (expressionsUIs.length) {\n            expressionsUIs[expressionsUIs.length - 1].afterOperator = operator;\n        }\n    } else {\n        const exprUI = new ExpressionUI();\n        exprUI.expression = expressions;\n        exprUI.afterOperator = operator;\n\n        const prevExprUI = expressionsUIs[expressionsUIs.length - 1];\n        if (prevExprUI) {\n            exprUI.beforeOperator = prevExprUI.afterOperator;\n        }\n\n        expressionsUIs.push(exprUI);\n    }\n}\n","import {\n    Component,\n    Input,\n    ChangeDetectorRef,\n    ViewChild,\n    AfterViewInit,\n    TemplateRef,\n    ViewChildren,\n    QueryList,\n    ElementRef\n} from '@angular/core';\nimport { IgxFilteringService } from '../grid-filtering.service';\nimport { FilteringLogic } from '../../../data-operations/filtering-expression.interface';\nimport { GridColumnDataType } from '../../../data-operations/data-util';\nimport {\n    IgxStringFilteringOperand,\n    IgxBooleanFilteringOperand,\n    IgxNumberFilteringOperand,\n    IgxDateFilteringOperand,\n    IgxDateTimeFilteringOperand,\n    IgxTimeFilteringOperand\n} from '../../../data-operations/filtering-condition';\nimport { IgxToggleDirective } from '../../../directives/toggle/toggle.directive';\nimport { ILogicOperatorChangedArgs, IgxExcelStyleDefaultExpressionComponent } from './excel-style-default-expression.component';\nimport { IgxExcelStyleDateExpressionComponent } from './excel-style-date-expression.component';\nimport { PlatformUtil } from '../../../core/utils';\nimport { ExpressionUI } from './common';\nimport { ColumnType } from '../../common/grid.interface';\nimport { HorizontalAlignment, OverlaySettings, PositionSettings, VerticalAlignment } from '../../../services/overlay/utilities';\nimport { AutoPositionStrategy } from '../../../services/overlay/position/auto-position-strategy';\nimport { AbsoluteScrollStrategy } from '../../../services/overlay/scroll/absolute-scroll-strategy';\nimport { IgxOverlayService } from '../../../services/overlay/overlay';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { NgClass } from '@angular/common';\nimport { BaseFilteringComponent } from './base-filtering.component';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-excel-style-custom-dialog',\n    templateUrl: './excel-style-custom-dialog.component.html',\n    imports: [IgxToggleDirective, NgClass, IgxExcelStyleDateExpressionComponent, IgxExcelStyleDefaultExpressionComponent, IgxButtonDirective, IgxIconComponent]\n})\nexport class IgxExcelStyleCustomDialogComponent implements AfterViewInit {\n    @Input()\n    public expressionsList = new Array<ExpressionUI>();\n\n    @Input()\n    public column: ColumnType;\n\n    @Input()\n    public selectedOperator: string;\n\n    @Input()\n    public filteringService: IgxFilteringService;\n\n    @Input()\n    public overlayComponentId: string;\n\n    @ViewChild('toggle', { read: IgxToggleDirective, static: true })\n    public toggle: IgxToggleDirective;\n\n    @ViewChild('defaultExpressionTemplate', { read: TemplateRef })\n    protected defaultExpressionTemplate: TemplateRef<any>;\n\n    @ViewChild('dateExpressionTemplate', { read: TemplateRef })\n    protected dateExpressionTemplate: TemplateRef<any>;\n\n    @ViewChild('expressionsContainer', { static: true })\n    protected expressionsContainer: ElementRef;\n\n    @ViewChildren(IgxExcelStyleDefaultExpressionComponent)\n    private expressionComponents: QueryList<IgxExcelStyleDefaultExpressionComponent>;\n\n    @ViewChildren(IgxExcelStyleDateExpressionComponent)\n    private expressionDateComponents: QueryList<IgxExcelStyleDateExpressionComponent>;\n\n    private _customDialogPositionSettings: PositionSettings = {\n        verticalDirection: VerticalAlignment.Middle,\n        horizontalDirection: HorizontalAlignment.Center,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalStartPoint: VerticalAlignment.Middle\n    };\n\n    private _customDialogOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new AutoPositionStrategy(this._customDialogPositionSettings),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n\n\n    constructor(\n        protected overlayService: IgxOverlayService,\n        private cdr: ChangeDetectorRef,\n        protected platform: PlatformUtil,\n        public esf:BaseFilteringComponent\n    ) { }\n\n    public ngAfterViewInit(): void {\n        this._customDialogOverlaySettings.outlet = this.grid.outlet;\n    }\n\n    public get template(): TemplateRef<any> {\n        if (this.column.dataType === GridColumnDataType.Date) {\n            return this.dateExpressionTemplate;\n        }\n\n        return this.defaultExpressionTemplate;\n    }\n\n    public get grid(): any {\n        return this.filteringService.grid;\n    }\n\n    public onCustomDialogOpening() {\n        if (this.selectedOperator) {\n            this.createInitialExpressionUIElement();\n        }\n    }\n\n    public onCustomDialogOpened() {\n        if (this.expressionComponents.first) {\n            this.expressionComponents.first.focus();\n        }\n    }\n\n    public open(esf) {\n        this._customDialogOverlaySettings.target =\n            this.overlayComponentId ?\n                this.grid.rootGrid ? this.grid.rootGrid.nativeElement : this.grid.nativeElement :\n                esf;\n        this.toggle.open(this._customDialogOverlaySettings);\n        this.overlayComponentId = this.toggle.overlayId;\n    }\n\n    public onClearButtonClick() {\n        this.filteringService.clearFilter(this.column.field);\n        this.selectedOperator = null;\n        this.createInitialExpressionUIElement();\n        this.cdr.detectChanges();\n    }\n\n    public closeDialog() {\n        if (this.overlayComponentId) {\n            this.overlayService.hide(this.overlayComponentId);\n            this.overlayComponentId = null;\n        } else {\n            this.toggle.close();\n        }\n    }\n\n    public cancelDialog() {\n        this.esf.cancel();\n        this.closeDialog();\n    }\n\n    public onApplyButtonClick() {\n        this.expressionsList = this.expressionsList.filter(\n            element => element.expression.condition &&\n                (element.expression.searchVal || element.expression.searchVal === 0 || element.expression.condition.isUnary));\n\n        if (this.expressionsList.length > 0) {\n            this.expressionsList[0].beforeOperator = null;\n            this.expressionsList[this.expressionsList.length - 1].afterOperator = null;\n        }\n\n        this.filteringService.filterInternal(this.column.field, this.expressionsList);\n        this.closeDialog();\n    }\n\n    public onAddButtonClick() {\n        const exprUI = new ExpressionUI();\n        exprUI.expression = {\n            condition: null,\n            conditionName: null,\n            fieldName: this.column.field,\n            ignoreCase: this.column.filteringIgnoreCase,\n            searchVal: null\n        };\n\n        this.expressionsList[this.expressionsList.length - 1].afterOperator = FilteringLogic.And;\n        exprUI.beforeOperator = this.expressionsList[this.expressionsList.length - 1].afterOperator;\n\n        this.expressionsList.push(exprUI);\n\n        this.markChildrenForCheck();\n        this.scrollToBottom();\n    }\n\n    public onExpressionRemoved(event: ExpressionUI) {\n        const indexToRemove = this.expressionsList.indexOf(event);\n\n        if (indexToRemove === 0 && this.expressionsList.length > 1) {\n            this.expressionsList[1].beforeOperator = null;\n        } else if (indexToRemove === this.expressionsList.length - 1) {\n            this.expressionsList[indexToRemove - 1].afterOperator = null;\n        } else {\n            this.expressionsList[indexToRemove - 1].afterOperator = this.expressionsList[indexToRemove + 1].beforeOperator;\n            this.expressionsList[0].beforeOperator = null;\n            this.expressionsList[this.expressionsList.length - 1].afterOperator = null;\n        }\n\n        this.expressionsList.splice(indexToRemove, 1);\n\n        this.cdr.detectChanges();\n\n        this.markChildrenForCheck();\n    }\n\n    public onLogicOperatorChanged(event: ILogicOperatorChangedArgs) {\n        const index = this.expressionsList.indexOf(event.target);\n        event.target.afterOperator = event.newValue;\n        if (index + 1 < this.expressionsList.length) {\n            this.expressionsList[index + 1].beforeOperator = event.newValue;\n        }\n    }\n\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        eventArgs.stopPropagation();\n    }\n\n    public onApplyButtonKeyDown(eventArgs: KeyboardEvent) {\n        if (eventArgs.key === this.platform.KEYMAP.TAB && !eventArgs.shiftKey) {\n            eventArgs.stopPropagation();\n            eventArgs.preventDefault();\n        }\n    }\n\n    private createCondition(conditionName: string) {\n        switch (this.column.dataType) {\n            case GridColumnDataType.Boolean:\n                return IgxBooleanFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n            case GridColumnDataType.Percent:\n                return IgxNumberFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Date:\n                return IgxDateFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Time:\n                return IgxTimeFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.DateTime:\n                return IgxDateTimeFilteringOperand.instance().condition(conditionName);\n            default:\n                return IgxStringFilteringOperand.instance().condition(conditionName);\n        }\n    }\n\n    private markChildrenForCheck() {\n        this.expressionComponents.forEach(x => x.cdr.markForCheck());\n        this.expressionDateComponents.forEach(x => x.cdr.markForCheck());\n    }\n\n    private createInitialExpressionUIElement() {\n        let firstExprUI = new ExpressionUI();\n        if (this.expressionsList.length == 1 && this.expressionsList[0].expression.condition?.name === this.selectedOperator) {\n            firstExprUI = this.expressionsList.pop();\n        } else {\n            this.expressionsList = [];\n            const cond = this.createCondition(this.selectedOperator);\n            firstExprUI.expression = {\n                condition: cond,\n                conditionName: cond?.name,\n                fieldName: this.column.field,\n                ignoreCase: this.column.filteringIgnoreCase,\n                searchVal: null\n            };\n        }\n\n        firstExprUI.afterOperator = FilteringLogic.And;\n        this.expressionsList.push(firstExprUI);\n\n        const secondExprUI = new ExpressionUI();\n        secondExprUI.expression = {\n            condition: null,\n            conditionName: null,\n            fieldName: this.column.field,\n            ignoreCase: this.column.filteringIgnoreCase,\n            searchVal: null\n        };\n\n        secondExprUI.beforeOperator = FilteringLogic.And;\n\n        this.expressionsList.push(secondExprUI);\n    }\n\n    private scrollToBottom() {\n        requestAnimationFrame(() => {\n            this.expressionsContainer.nativeElement.scrollTop = this.expressionsContainer.nativeElement.scrollHeight;\n        });\n    }\n}\n","<article #toggle igxToggle\n    class=\"igx-excel-filter__secondary\"\n    [ngClass]=\"{\n        'igx-excel-filter__secondary--cosy': grid.gridSize === '2',\n        'igx-excel-filter__secondary--compact': grid.gridSize === '1'\n    }\"\n    (keydown)=\"onKeyDown($event)\"\n    (opening)=\"onCustomDialogOpening()\"\n    (opened)=\"onCustomDialogOpened()\">\n    <header class=\"igx-excel-filter__secondary-header\">\n        <h4 class=\"ig-typography__h6\">\n            {{ grid.resourceStrings.igx_grid_excel_custom_dialog_header }}{{ column.header || column.field }}\n        </h4>\n    </header>\n\n    <article #expressionsContainer class=\"igx-excel-filter__secondary-main\">\n        @if (column.dataType === 'date' || column.dataType === 'dateTime' || column.dataType === 'time') {\n            @for (expression of expressionsList; track expression.expressionId) {\n                <igx-excel-style-date-expression\n                    class=\"igx-excel-filter__condition\"\n                    [expressionUI]=\"expression\"\n                    [column]=\"column\"\n                    [grid]=\"grid\"\n                    [expressionsList]=\"expressionsList\"\n                    (expressionRemoved)=\"onExpressionRemoved($event)\"\n                    (logicOperatorChanged)=\"onLogicOperatorChanged($event)\">\n                </igx-excel-style-date-expression>\n            }\n        }\n\n        @if (column.dataType !== 'date' && column.dataType !== 'dateTime' && column.dataType !== 'time') {\n            @for (expression of expressionsList; track expression.expressionId) {\n                <igx-excel-style-default-expression\n                    class=\"igx-excel-filter__condition\"\n                    [expressionUI]=\"expression\"\n                    [column]=\"column\"\n                    [grid]=\"grid\"\n                    [expressionsList]=\"expressionsList\"\n                    (expressionRemoved)=\"onExpressionRemoved($event)\"\n                    (logicOperatorChanged)=\"onLogicOperatorChanged($event)\">\n                </igx-excel-style-default-expression>\n            }\n        }\n\n        <button type=\"button\" igxButton\n            class=\"igx-excel-filter__add-filter\"\n            (click)=\"onAddButtonClick()\">\n            <igx-icon family=\"default\" name=\"add\"></igx-icon>\n            <span>{{ grid.resourceStrings.igx_grid_excel_custom_dialog_add }}</span>\n        </button>\n    </article>\n\n    <footer class=\"igx-excel-filter__secondary-footer\">\n        <div class=\"igx-excel-filter__clear\">\n            <button type=\"button\"\n                igxButton=\"flat\"\n                (click)=\"onClearButtonClick()\">\n                    {{ grid.resourceStrings.igx_grid_excel_custom_dialog_clear }}\n            </button>\n        </div>\n        <div class=\"igx-excel-filter__cancel\">\n            <button type=\"button\"\n                igxButton=\"flat\"\n                (click)=\"cancelDialog()\">\n                    {{ grid.resourceStrings.igx_grid_excel_cancel }}\n            </button>\n        </div>\n        <div class=\"igx-excel-filter__apply\">\n            <button type=\"button\"\n                igxButton=\"contained\"\n                (click)=\"onApplyButtonClick()\"\n                (keydown)=\"onApplyButtonKeyDown($event)\">\n                {{ grid.resourceStrings.igx_grid_excel_apply }}\n            </button>\n        </div>\n    </footer>\n</article>\n","import { Component, OnDestroy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { GridColumnDataType } from '../../../data-operations/data-util';\nimport { IFilteringOperation } from '../../../data-operations/filtering-condition';\nimport { IFilteringExpression } from '../../../data-operations/filtering-expression.interface';\nimport { IgxExcelStyleCustomDialogComponent } from './excel-style-custom-dialog.component';\nimport { PlatformUtil } from '../../../core/utils';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { AutoPositionStrategy } from '../../../services/overlay/position/auto-position-strategy';\nimport { AbsoluteScrollStrategy } from '../../../services/overlay/scroll/absolute-scroll-strategy';\nimport { HorizontalAlignment, OverlaySettings, VerticalAlignment } from '../../../services/overlay/utilities';\nimport { IgxDropDownItemComponent } from '../../../drop-down/drop-down-item.component';\nimport { IgxDropDownComponent } from '../../../drop-down/drop-down.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxDropDownItemNavigationDirective } from '../../../drop-down/drop-down-navigation.directive';\nimport { NgClass } from '@angular/common';\nimport { ISelectionEventArgs } from '../../../drop-down/drop-down.common';\n\n\n/**\n * A component used for presenting Excel style conditional filter UI.\n */\n@Component({\n    selector: 'igx-excel-style-conditional-filter',\n    templateUrl: './excel-style-conditional-filter.component.html',\n    imports: [NgClass, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent]\n})\nexport class IgxExcelStyleConditionalFilterComponent implements OnDestroy {\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('customDialog', { read: IgxExcelStyleCustomDialogComponent })\n    public customDialog: IgxExcelStyleCustomDialogComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('subMenu', { read: IgxDropDownComponent })\n    public subMenu: IgxDropDownComponent;\n\n    protected get filterNumber() {\n        return this.esf.expressionsList.filter(e => e.expression.condition).length;\n    }\n\n    private shouldOpenSubMenu = true;\n    private destroy$ = new Subject<boolean>();\n\n    private _subMenuPositionSettings = {\n        verticalStartPoint: VerticalAlignment.Top\n    };\n\n    private _subMenuOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new AutoPositionStrategy(this._subMenuPositionSettings),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n\n    constructor(\n        public esf: BaseFilteringComponent,\n        protected platform: PlatformUtil,\n    ) {\n        this.esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.esf.grid) {\n                this.shouldOpenSubMenu = true;\n                this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;\n            }\n        });\n\n        if (this.esf.grid) {\n            this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onTextFilterKeyDown(eventArgs: KeyboardEvent) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            this.onTextFilterClick(eventArgs);\n        } else if (eventArgs.key === this.platform.KEYMAP.TAB) {\n            this.subMenu.close();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onTextFilterClick(eventArgs) {\n        if (this.shouldOpenSubMenu) {\n            this._subMenuOverlaySettings.target = eventArgs.currentTarget;\n\n            const gridRect = this.esf.grid.nativeElement.getBoundingClientRect();\n            const dropdownRect = this.esf.mainDropdown.nativeElement.getBoundingClientRect();\n\n            let x = dropdownRect.left + dropdownRect.width;\n            let x1 = gridRect.left + gridRect.width;\n            x += window.pageXOffset;\n            x1 += window.pageXOffset;\n            if (Math.abs(x - x1) < 200) {\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Left;\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Left;\n            } else {\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Right;\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Right;\n            }\n\n            this.subMenu.open(this._subMenuOverlaySettings);\n            this.shouldOpenSubMenu = false;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getCondition(value: string): IFilteringOperation {\n        return this.esf.column.filters.condition(value);\n    }\n\n    protected getSelectedCondition(condition: string): boolean {\n        const expressions = this.esf.expressionsList;\n        if (expressions.length < 1) {\n            return false;\n        }\n        return expressions.length === 1 ? expressions[0].expression.condition.name === condition : condition === 'custom';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public translateCondition(value: string): string {\n        return this.esf.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSubMenuSelection(eventArgs: ISelectionEventArgs) {\n        if (this.esf.expressionsList && this.esf.expressionsList.length &&\n            this.esf.expressionsList[0].expression.condition.name !== 'in') {\n            this.customDialog.expressionsList = this.esf.expressionsList;\n        } else {\n            this.customDialog.expressionsList = this.customDialog.expressionsList.filter(e => e.expression.fieldName === this.esf.column.field && e.expression.condition);\n        }\n\n        this.customDialog.selectedOperator = eventArgs.newSelection.value;\n        eventArgs.cancel = true;\n        if (this.esf.overlayComponentId) {\n            this.esf.hide();\n        }\n        this.subMenu.close();\n        this.customDialog.open(this.esf.mainDropdown.nativeElement);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSubMenuClosed() {\n        requestAnimationFrame(() => {\n            this.shouldOpenSubMenu = true;\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public showCustomFilterItem(): boolean {\n        const exprTree = this.esf.column.filteringExpressionsTree;\n        return exprTree && exprTree.filteringOperands && exprTree.filteringOperands.length &&\n            !((exprTree.filteringOperands[0] as IFilteringExpression).condition &&\n                (exprTree.filteringOperands[0] as IFilteringExpression).condition.name === 'in');\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get subMenuText() {\n        switch (this.esf.column.dataType) {\n            case GridColumnDataType.Boolean:\n                return this.esf.grid.resourceStrings.igx_grid_excel_boolean_filter;\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Percent:\n                return this.esf.grid.resourceStrings.igx_grid_excel_number_filter;\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return this.esf.grid.resourceStrings.igx_grid_excel_date_filter;\n            case GridColumnDataType.Currency:\n                return this.esf.grid.resourceStrings.igx_grid_excel_currency_filter;\n            default:\n                return this.esf.grid.resourceStrings.igx_grid_excel_text_filter;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get conditions() {\n        return this.esf.column.filters.conditionList();\n    }\n}\n","@if (esf.column) {\n    <div tabindex=\"0\"\n        class=\"igx-excel-filter__actions-filter\"\n        [ngClass]=\"filterNumber > 0 ? 'igx-excel-filter__actions-filter--active' : ''\"\n        (keydown)=\"onTextFilterKeyDown($event)\"\n        (click)=\"onTextFilterClick($event)\"\n        [igxDropDownItemNavigation]=\"subMenu\"\n        role=\"menuitem\"\n        aria-haspopup=\"true\"\n        [attr.aria-controls]=\"this.subMenu?.listId\"\n        [attr.aria-activedescendant]=\"!this.subMenu?.collapsed ? this.subMenu?.focusedItem?.id : null\">\n        <span class=\"igx-excel-filter__filter-number\">\n            {{ subMenuText }}\n            @if (filterNumber > 0) { ({{filterNumber}}) }\n        </span>\n        <igx-icon name=\"chevron_right\" family=\"default\"></igx-icon>\n    </div>\n\n    <igx-drop-down\n        #subMenu\n        [maxHeight]=\"'397px'\"\n        (selectionChanging)=\"onSubMenuSelection($event)\"\n        (closed)=\"onSubMenuClosed()\">\n        <div>\n            @for (condition of conditions; track condition) {\n                <igx-drop-down-item\n                    [selected]=\"getSelectedCondition(condition)\"\n                    [value]=\"condition\">\n                    <div class=\"igx-grid__filtering-dropdown-items\">\n                        <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n                        <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n                    </div>\n                </igx-drop-down-item>\n            }\n            @if (showCustomFilterItem()) {\n                <igx-drop-down-item\n                    [selected]=\"getSelectedCondition('custom')\" >\n                    <div class=\"igx-grid__filtering-dropdown-items\">\n                        <igx-icon name=\"filter_list\" family=\"default\"></igx-icon>\n                        <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n                    </div>\n                </igx-drop-down-item>\n            }\n        </div>\n    </igx-drop-down>\n\n    <igx-excel-style-custom-dialog\n        #customDialog\n        [column]=\"esf.column\"\n        [filteringService]=\"esf.grid.filteringService\"\n        [overlayComponentId]=\"esf.overlayComponentId\">\n    </igx-excel-style-custom-dialog>\n}\n","import { Component, Input, booleanAttribute } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { NgClass } from '@angular/common';\nimport { IgxIconButtonDirective } from '../../../directives/button/icon-button.directive';\n\n/**\n * A component used for presenting Excel style header UI.\n */\n@Component({\n    selector: 'igx-excel-style-header',\n    templateUrl: './excel-style-header.component.html',\n    imports: [NgClass, IgxIconComponent, IgxIconButtonDirective]\n})\nexport class IgxExcelStyleHeaderComponent {\n    /**\n     * Sets whether the column pinning icon should be shown in the header.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-excel-style-header [showPinning]=\"true\"></igx-excel-style-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showPinning: boolean;\n\n    /**\n     * Sets whether the column selecting icon should be shown in the header.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-excel-style-header [showSelecting]=\"true\"></igx-excel-style-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showSelecting: boolean;\n\n    /**\n     * Sets whether the column hiding icon should be shown in the header.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-excel-style-header [showHiding]=\"true\"></igx-excel-style-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showHiding: boolean;\n\n    constructor(public esf: BaseFilteringComponent) { }\n}\n","@if (esf.column) {\n    <header class=\"igx-excel-filter__menu-header\">\n        <h4>{{ esf.column.header || esf.column.field }}</h4>\n        <div class=\"igx-excel-filter__menu-header-actions\">\n            @if (showSelecting) {\n                <button\n                    type=\"button\"\n                    igxIconButton=\"flat\"\n                    (click)=\"esf.onSelect()\"\n                    [ngClass]=\"esf.column.selected ? 'igx-excel-filter__actions-selected' : 'igx-excel-filter__actions-select'\"\n                    [attr.aria-label]=\"esf.column.selected ? esf.grid.resourceStrings.igx_grid_excel_deselect : esf.grid.resourceStrings.igx_grid_excel_select\"\n                >\n                    <igx-icon family=\"default\" name=\"selected\"></igx-icon>\n                </button>\n            }\n            @if (showPinning) {\n                <button\n                    type=\"button\"\n                    igxIconButton=\"flat\"\n                    (click)=\"esf.onPin()\"\n                    [attr.aria-label]=\"esf.column.pinned ? esf.grid.resourceStrings.igx_grid_excel_unpin : esf.grid.resourceStrings.igx_grid_excel_pin\"\n                >\n                    <igx-icon family=\"default\" [name]=\"esf.column.pinned ? 'unpin' : 'pin'\"></igx-icon>\n                </button>\n            }\n            @if (showHiding) {\n                <button\n                    type=\"button\"\n                    igxIconButton=\"flat\"\n                    (click)=\"esf.onHideToggle()\"\n                    [attr.aria-label]=\"esf.column.hidden ? esf.grid.resourceStrings.igx_grid_excel_show : esf.grid.resourceStrings.igx_grid_excel_hide\"\n                >\n                    <igx-icon family=\"default\" [name]=\"esf.column.hidden ? 'show' : 'hide'\"></igx-icon>\n                </button>\n            }\n        </div>\n    </header>\n}\n","import { Component } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\n\n/**\n * A component used for presenting Excel style column hiding UI.\n */\n@Component({\n    selector: 'igx-excel-style-hiding',\n    templateUrl: './excel-style-hiding.component.html',\n    imports: [IgxIconComponent]\n})\nexport class IgxExcelStyleHidingComponent {\n    constructor(public esf: BaseFilteringComponent) { }\n}\n","@if (esf.column) {\n    <div\n        class=\"igx-excel-filter__actions-hide\"\n        tabindex=\"0\"\n        (click)=\"esf.onHideToggle()\"\n        role=\"menuitem\">\n        <span>{{ esf.column.hidden ? esf.grid.resourceStrings.igx_grid_excel_show : esf.grid.resourceStrings.igx_grid_excel_hide }}</span>\n        <igx-icon family=\"default\" [name]=\"esf.column.hidden ? 'show' : 'hide'\"></igx-icon>\n    </div>\n}\n","import { Component, HostBinding } from '@angular/core';\nimport { ColumnType } from '../../common/grid.interface';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { IgxButtonGroupComponent } from '../../../buttonGroup/buttonGroup.component';\n\n/**\n * A component used for presenting Excel style column moving UI.\n */\n@Component({\n    selector: 'igx-excel-style-moving',\n    templateUrl: './excel-style-moving.component.html',\n    imports: [IgxButtonGroupComponent, IgxButtonDirective, IgxIconComponent]\n})\nexport class IgxExcelStyleMovingComponent {\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter__move')\n    public defaultClass = true;\n\n    constructor(public esf: BaseFilteringComponent) { }\n\n    private get visibleColumns() {\n        return this.esf.grid.visibleColumns.filter(col => !col.columnGroup);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get canNotMoveLeft() {\n        return this.esf.column.visibleIndex === 0 ||\n            (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === 0 && this.esf.column.disablePinning) ||\n            (this.esf.column.level !== 0 && !this.findColumn(0, this.visibleColumns));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get canNotMoveRight() {\n        return this.esf.column.visibleIndex === this.visibleColumns.length - 1 ||\n            (this.esf.column.level !== 0 && !this.findColumn(1, this.visibleColumns));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onMoveButtonClicked(moveDirection) {\n        let targetColumn;\n        if (this.esf.column.pinned) {\n            if (this.esf.column.isLastPinned && moveDirection === 1 && this.esf.grid.isPinningToStart) {\n                targetColumn = this.esf.grid.unpinnedColumns[0];\n                moveDirection = 0;\n            } else if (this.esf.column.isFirstPinned && moveDirection === 0 && !this.esf.grid.isPinningToStart) {\n                targetColumn = this.esf.grid.unpinnedColumns[this.esf.grid.unpinnedColumns.length - 1];\n                moveDirection = 1;\n            } else {\n                targetColumn = this.findColumn(moveDirection, this.esf.grid.pinnedColumns);\n            }\n        } else if (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === 0 && moveDirection === 0 &&\n                    this.esf.grid.isPinningToStart) {\n            targetColumn = this.esf.grid.pinnedColumns[this.esf.grid.pinnedColumns.length - 1];\n            if (targetColumn.parent) {\n                targetColumn = targetColumn.topLevelParent;\n            }\n            moveDirection = 1;\n        } else if (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === this.esf.grid.unpinnedColumns.length - 1 &&\n            moveDirection === 1 && !this.esf.grid.isPinningToStart) {\n            targetColumn = this.esf.grid.pinnedColumns[0];\n            moveDirection = 0;\n        } else {\n            targetColumn = this.findColumn(moveDirection, this.esf.grid.unpinnedColumns);\n        }\n        this.esf.grid.moveColumn(this.esf.column, targetColumn, moveDirection);\n    }\n\n    protected get esfSize(): string {\n        const esf = this.esf as any;\n        return esf.size;\n    }\n\n    private findColumn(moveDirection: number, columns: ColumnType[]) {\n        let index = columns.indexOf(this.esf.column);\n        if (moveDirection === 0) {\n            while (index > 0) {\n                index--;\n                if (columns[index].level === this.esf.column.level && columns[index].parent === this.esf.column.parent) {\n                    return columns[index];\n                }\n            }\n            return columns[0];\n        } else {\n            while (index < columns.length - 1) {\n                index++;\n                if (columns[index].level === this.esf.column.level && columns[index].parent === this.esf.column.parent) {\n                    return columns[index];\n                }\n            }\n        }\n    }\n}\n","@if (esf.column) {\n    <header>\n        {{ esf.grid.resourceStrings.igx_grid_excel_filter_moving_header }}\n    </header>\n    <igx-buttongroup>\n        <button\n            type=\"button\"\n            igxButton\n            [disabled]=\"canNotMoveLeft\"\n            (click)=\"onMoveButtonClicked(0)\">\n            <igx-icon family=\"default\" name=\"arrow_back\"></igx-icon>\n            <span>\n                {{ esfSize === '1'?\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_left_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_left }}\n            </span>\n        </button>\n        <button\n            type=\"button\"\n            igxButton\n            [disabled]=\"canNotMoveRight\"\n            (click)=\"onMoveButtonClicked(1)\">\n            <span>\n                {{ esfSize === '1'?\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_right_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_right }}\n            </span>\n            <igx-icon family=\"default\" name=\"arrow_forward\"></igx-icon>\n        </button>\n    </igx-buttongroup>\n}\n","import { Component } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { NgClass } from '@angular/common';\n\n/**\n * A component used for presenting Excel style column pinning UI.\n */\n@Component({\n    selector: 'igx-excel-style-pinning',\n    templateUrl: './excel-style-pinning.component.html',\n    imports: [NgClass, IgxIconComponent]\n})\nexport class IgxExcelStylePinningComponent {\n    constructor(public esf: BaseFilteringComponent) { }\n}\n","@if (esf.column) {\n    <div\n        [ngClass]=\"esf.column.pinned ? 'igx-excel-filter__actions-unpin' : 'igx-excel-filter__actions-pin'\"\n        (click)=\"esf.onPin()\"\n        tabindex=\"0\"\n        role=\"menuitem\">\n        <span>{{ esf.column.pinned ? esf.grid.resourceStrings.igx_grid_excel_unpin : esf.grid.resourceStrings.igx_grid_excel_pin }}</span>\n        <igx-icon family=\"default\" [name]=\"esf.column.pinned ? 'unpin' : 'pin'\"></igx-icon>\n    </div>\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n    selector: '[igxProgressBarText]',\n    standalone: true\n})\nexport class IgxProgressBarTextTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({\n    selector: '[igxProgressBarGradient]',\n    standalone: true\n})\nexport class IgxProgressBarGradientDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    Renderer2,\n    ViewChild,\n    ContentChild,\n    AfterViewInit,\n    AfterContentInit,\n    Directive,\n    booleanAttribute,\n    inject,\n    ChangeDetectorRef,\n    NgZone,\n} from '@angular/core';\nimport {\n    IgxProgressBarTextTemplateDirective,\n    IgxProgressBarGradientDirective,\n} from './progressbar.common';\nimport { IBaseEventArgs, mkenum } from '../core/utils';\nconst ONE_PERCENT = 0.01;\nconst MIN_VALUE = 0;\n\nexport const IgxTextAlign = /*@__PURE__*/mkenum({\n    START: 'start',\n    CENTER: 'center',\n    END: 'end'\n});\nexport type IgxTextAlign = (typeof IgxTextAlign)[keyof typeof IgxTextAlign];\n\nexport const IgxProgressType = /*@__PURE__*/mkenum({\n    ERROR: 'error',\n    INFO: 'info',\n    WARNING: 'warning',\n    SUCCESS: 'success'\n});\nexport type IgxProgressType = (typeof IgxProgressType)[keyof typeof IgxProgressType];\n\nexport interface IChangeProgressEventArgs extends IBaseEventArgs {\n    previousValue: number;\n    currentValue: number;\n}\nexport const valueInRange = (value: number, max: number, min = 0): number => Math.max(Math.min(value, max), min);\n\n/**\n * @hidden\n */\n@Directive()\nexport abstract class BaseProgressDirective {\n    /**\n     * An event, which is triggered after progress is changed.\n     * ```typescript\n     * public progressChange(event) {\n     *     alert(\"Progress made!\");\n     * }\n     *  //...\n     * ```\n     * ```html\n     * <igx-circular-bar (progressChanged)=\"progressChange($event)\"></igx-circular-bar>\n     * <igx-linear-bar (progressChanged)=\"progressChange($event)\"></igx-linear-bar>\n     * ```\n     */\n    @Output()\n    public progressChanged = new EventEmitter<IChangeProgressEventArgs>();\n\n    /**\n     * Sets/Gets progressbar animation duration. By default, it is 2000ms.\n     * ```html\n     * <igx-linear-bar [animationDuration]=\"3000\"></igx-linear-bar>\n     * <igx-circular-bar [animationDuration]=\"3000\"></igx-linear-bar>\n     * ```\n     */\n    @Input()\n    public animationDuration = 2000;\n\n    protected _contentInit = false;\n    protected _indeterminate = false;\n    protected _text: string;\n    protected _max = 100;\n    protected _value = MIN_VALUE;\n    protected _animate = true;\n    protected _step: number;\n    protected _fraction = 0;\n    protected _integer = 0;\n    protected _cdr = inject(ChangeDetectorRef);\n    protected _zone = inject(NgZone);\n\n    /**\n     * Sets progressbar in indeterminate. By default, it is set to false.\n     * ```html\n     * <igx-linear-bar [indeterminate]=\"true\"></igx-linear-bar>\n     * <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set indeterminate(isIndeterminate: boolean) {\n        this._indeterminate = isIndeterminate;\n        this._resetCounterValues(this._indeterminate); // Use the helper for indeterminate condition\n    }\n\n    /**\n     * Gets the current state of the progress bar:\n     * - `true` if in the indeterminate state (no progress value displayed),\n     * - `false` if the progress bar shows the actual progress.\n     *\n     * ```typescript\n     * const isIndeterminate = progressBar.indeterminate;\n     * ```\n    */\n    public get indeterminate(): boolean {\n        return this._indeterminate;\n    }\n\n    /**\n     * Returns the value which update the progress indicator of the `progress bar`.\n     * ```typescript\n     * @ViewChild(\"MyProgressBar\")\n     * public progressBar: IgxLinearProgressBarComponent | IgxCircularBarComponent;\n     * public stepValue(event) {\n     *     let step = this.progressBar.step;\n     *     alert(step);\n     * }\n     * ```\n     */\n    @Input()\n    public get step(): number {\n        if (this._step) {\n            return this._step;\n        }\n        return this._max * ONE_PERCENT;\n    }\n\n    /**\n     * Sets the value by which progress indicator is updated. By default, it is 1.\n     * ```html\n     * <igx-linear-bar [step]=\"1\"></igx-linear-bar>\n     * <igx-circular-bar [step]=\"1\"></igx-circular-bar>\n     * ```\n     */\n    public set step(val: number) {\n        const step = Number(val);\n        if (step > this.max) {\n            return;\n        }\n\n        this._step = step;\n    }\n\n\n    /**\n     * Set a custom text. This will hide the counter value.\n     * ```html\n     * <igx-circular-bar text=\"my text\"></igx-circular-bar>\n     * ```\n     */\n    @Input()\n    public set text(value: string) {\n        this._text = value;\n        this._resetCounterValues(!!this._text); // Use the helper for text condition\n    }\n\n    /**\n     * Gets a custom text.\n     * ```typescript\n     * let text = this.circularBar.text;\n     * ```\n     */\n    public get text(): string {\n        return this._text;\n    }\n\n    /**\n     * Animating the progress. By default, it is set to true.\n     * ```html\n     * <igx-linear-bar [animate]=\"false\"></igx-linear-bar>\n     * <igx-circular-bar [animate]=\"false\"></igx-circular-bar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set animate(animate: boolean) {\n        this._animate = animate;\n    }\n\n    /**\n     * Returns whether the `progress bar` has animation true/false.\n     * ```typescript\n     * @ViewChild(\"MyProgressBar\")\n     * public progressBar: IgxLinearProgressBarComponent | IgxCircularBarComponent;\n     * public animationStatus(event) {\n     *     let animationStatus = this.progressBar.animate;\n     *     alert(animationStatus);\n     * }\n     * ```\n     */\n    public get animate(): boolean {\n        return this._animate;\n    }\n\n    /**\n     * Set maximum value that can be passed. By default it is set to 100.\n     * ```html\n     * <igx-linear-bar [max]=\"200\"></igx-linear-bar>\n     * <igx-circular-bar [max]=\"200\"></igx-circular-bar>\n     * ```\n     */\n    @HostBinding('attr.aria-valuemax')\n    @Input()\n    public set max(maxNum: number) {\n        // Ignore invalid or unchanged max\n        if (maxNum < MIN_VALUE || this._max === maxNum) {\n            return;\n        }\n\n        this._max = maxNum;\n\n        // Revalidate current value\n        this._value = valueInRange(this._value, this._max);\n\n        // Refresh CSS variables\n        this._updateProgressValues();\n    }\n\n    /**\n     * Returns the maximum progress value of the `progress bar`.\n     * ```typescript\n     * @ViewChild(\"MyProgressBar\")\n     * public progressBar: IgxLinearProgressBarComponent | IgxCircularBarComponent;\n     * public maxValue(event) {\n     *     let max = this.progressBar.max;\n     *     alert(max);\n     * }\n     * ```\n     */\n    public get max() {\n        return this._max;\n    }\n\n    @HostBinding('style.--_progress-integer')\n    private get progressInteger() {\n        return this._integer.toString();\n    }\n\n    @HostBinding('style.--_progress-fraction')\n    private get progressFraction() {\n        return this._fraction.toString();\n    }\n\n    @HostBinding('style.--_progress-whole')\n    private get progressWhole() {\n        return this.valueInPercent.toFixed(2);\n    }\n\n    @HostBinding('style.--_transition-duration')\n    private get transitionDuration() {\n        return `${this.animationDuration}ms`;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get hasFraction(): boolean {\n        const percentage = this.valueInPercent;\n        const integerPart = Math.floor(percentage);\n        const fractionalPart = percentage - integerPart;\n\n        return fractionalPart > 0;\n    }\n\n    /**\n     * Returns the `IgxLinearProgressBarComponent`/`IgxCircularProgressBarComponent` value in percentage.\n     * ```typescript\n     * @ViewChild(\"MyProgressBar\")\n     * public progressBar: IgxLinearProgressBarComponent / IgxCircularProgressBarComponent\n     * public valuePercent(event){\n     *     let percentValue = this.progressBar.valueInPercent;\n     *     alert(percentValue);\n     * }\n     * ```\n     */\n    public get valueInPercent(): number {\n        const result = this.max > 0 ? (this._value / this.max) * 100 : 0;\n        return Math.round(result * 100) / 100; // Round to two decimal places\n    }\n\n    /**\n     * Returns value that indicates the current `IgxLinearProgressBarComponent`/`IgxCircularProgressBarComponent` position.\n     * ```typescript\n     * @ViewChild(\"MyProgressBar\")\n     * public progressBar: IgxLinearProgressBarComponent / IgxCircularProgressBarComponent;\n     * public getValue(event) {\n     *     let value = this.progressBar.value;\n     *     alert(value);\n     * }\n     * ```\n     */\n    @HostBinding('attr.aria-valuenow')\n    @Input()\n    public get value(): number {\n        return this._value;\n    }\n\n    /**\n     * @hidden\n     */\n    protected _updateProgressValues(): void {\n        const percentage = this.valueInPercent;\n        const integerPart = Math.floor(percentage);\n        const fractionalPart = Math.round((percentage % 1) * 100);\n\n        this._integer = integerPart;\n        this._fraction = fractionalPart;\n    }\n\n    private _resetCounterValues(condition: boolean) {\n        if (condition) {\n            this._integer = 0;\n            this._fraction = 0;\n        } else {\n            this._zone.runOutsideAngular(() => {\n                setTimeout(() => {\n                    this._updateProgressValues();\n                    this._cdr.markForCheck();\n                });\n            });\n        }\n    }\n\n    /**\n     * Set value that indicates the current `IgxLinearProgressBarComponent / IgxCircularProgressBarComponent` position.\n     * ```html\n     * <igx-linear-bar [value]=\"50\"></igx-linear-bar>\n     * <igx-circular-bar [value]=\"50\"></igx-circular-bar>\n     * ```\n     */\n    public set value(val) {\n        const valInRange = valueInRange(val, this.max); // Ensure value is in range\n\n        // Avoid redundant updates\n        if (isNaN(valInRange) || this._value === valInRange) {\n            return;\n        }\n\n        const previousValue = this._value;\n\n        // Update internal value\n        this._value = valInRange;\n\n        this._zone.runOutsideAngular(() => {\n            setTimeout(() => {\n                this._updateProgressValues();\n                this._cdr.markForCheck();\n            });\n        });\n\n        // Emit the progressChanged event\n        this.progressChanged.emit({\n            previousValue,\n            currentValue: this._value,\n        });\n    }\n}\nlet NEXT_LINEAR_ID = 0;\nlet NEXT_CIRCULAR_ID = 0;\nlet NEXT_GRADIENT_ID = 0;\n@Component({\n    selector: 'igx-linear-bar',\n    templateUrl: 'templates/linear-bar.component.html',\n    imports: [NgClass]\n})\nexport class IgxLinearProgressBarComponent extends BaseProgressDirective implements AfterContentInit {\n    @HostBinding('attr.aria-valuemin')\n    public valueMin = 0;\n\n    @HostBinding('class.igx-linear-bar')\n    public cssClass = 'igx-linear-bar';\n\n    /**\n     * Set `IgxLinearProgressBarComponent` to have striped style. By default it is set to false.\n     * ```html\n     * <igx-linear-bar [striped]=\"true\" [max]=\"200\" [value]=\"50\"></igx-linear-bar>\n     * ```\n     */\n    @HostBinding('class.igx-linear-bar--striped')\n    @Input({ transform: booleanAttribute })\n    public striped = false;\n\n    /**\n     * @hidden\n     * ```\n     */\n    @HostBinding('class.igx-linear-bar--indeterminate')\n    public get isIndeterminate() {\n        return this.indeterminate;\n    }\n\n    /**\n     * Sets the value of the `role` attribute. If not provided it will be automatically set to `progressbar`.\n     * ```html\n     * <igx-linear-bar role=\"progressbar\"></igx-linear-bar>\n     * ```\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'progressbar';\n\n    /**\n     * Sets the value of `id` attribute. If not provided it will be automatically generated.\n     * ```html\n     * <igx-linear-bar [id]=\"'igx-linear-bar-55'\" [striped]=\"true\" [max]=\"200\" [value]=\"50\"></igx-linear-bar>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-linear-bar-${NEXT_LINEAR_ID++}`;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-linear-bar--animation-none')\n    public get disableAnimationClass(): boolean {\n        return !this._animate;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-linear-bar--hide-counter')\n    public get hasText(): boolean {\n        return !!this.text;\n    }\n\n    /**\n     * Set the position that defines where the text is aligned.\n     * Possible options - `IgxTextAlign.START` (default), `IgxTextAlign.CENTER`, `IgxTextAlign.END`.\n     * ```typescript\n     * public positionCenter: IgxTextAlign;\n     * public ngOnInit() {\n     *     this.positionCenter = IgxTextAlign.CENTER;\n     * }\n     *  //...\n     * ```\n     *  ```html\n     * <igx-linear-bar [textAlign]=\"positionCenter\"></igx-linear-bar>\n     * ```\n     */\n    @Input()\n    public textAlign: IgxTextAlign = IgxTextAlign.START;\n\n    /**\n     * Set the text to be visible. By default, it is set to true.\n     * ```html\n     *  <igx-linear-bar [textVisibility]=\"false\"></igx-linear-bar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public textVisibility = true;\n\n    /**\n     * Set the position that defines if the text should be aligned above the progress line. By default, is set to false.\n     * ```html\n     *  <igx-linear-bar [textTop]=\"true\"></igx-linear-bar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public textTop = false;\n\n    /**\n     * Set type of the `IgxLinearProgressBarComponent`. Possible options - `default`, `success`, `info`, `warning`, and `error`.\n     * ```html\n     * <igx-linear-bar [type]=\"'error'\"></igx-linear-bar>\n     * ```\n     */\n    @Input()\n    public type = 'default';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-linear-bar--danger')\n    public get error() {\n        return this.type === IgxProgressType.ERROR;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-linear-bar--info')\n    public get info() {\n        return this.type === IgxProgressType.INFO;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-linear-bar--warning')\n    public get warning() {\n        return this.type === IgxProgressType.WARNING;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-linear-bar--success')\n    public get success() {\n        return this.type === IgxProgressType.SUCCESS;\n    }\n\n    public ngAfterContentInit() {\n        this._contentInit = true;\n    }\n}\n\n@Component({\n    selector: 'igx-circular-bar',\n    templateUrl: 'templates/circular-bar.component.html',\n    imports: [NgTemplateOutlet, NgClass]\n})\nexport class IgxCircularProgressBarComponent extends BaseProgressDirective implements AfterContentInit {\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar')\n    public cssClass = 'igx-circular-bar';\n\n    /**\n     * Sets the value of `id` attribute. If not provided it will be automatically generated.\n     * ```html\n     * <igx-circular-bar [id]=\"'igx-circular-bar-55'\"></igx-circular-bar>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-circular-bar-${NEXT_CIRCULAR_ID++}`;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--indeterminate')\n    public get isIndeterminate() {\n        return this.indeterminate;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--animation-none')\n    public get disableAnimationClass(): boolean {\n        return !this._animate;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--hide-counter')\n    public get hasText(): boolean {\n        return !!this.text;\n    }\n\n    /**\n     * Sets the text visibility. By default, it is set to true.\n     * ```html\n     * <igx-circular-bar [textVisibility]=\"false\"></igx-circular-bar>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public textVisibility = true;\n\n    @ContentChild(IgxProgressBarTextTemplateDirective, { read: IgxProgressBarTextTemplateDirective })\n    public textTemplate: IgxProgressBarTextTemplateDirective;\n\n    @ContentChild(IgxProgressBarGradientDirective, { read: IgxProgressBarGradientDirective })\n    public gradientTemplate: IgxProgressBarGradientDirective;\n\n    @ViewChild('circle', { static: true })\n    private _svgCircle: ElementRef;\n\n    /**\n     * @hidden\n     */\n    public gradientId = `igx-circular-gradient-${NEXT_GRADIENT_ID++}`;\n\n    /**\n     * @hidden\n     */\n    public get context(): any {\n        return {\n            $implicit: { value: this.value, valueInPercent: this.valueInPercent, max: this.max }\n        };\n    }\n\n    /**\n     * @hidden\n     */\n    public get textContent(): string {\n        return this.text;\n    }\n\n    constructor(private renderer: Renderer2) {\n        super();\n    }\n\n    /**\n     * Set type of the `IgxCircularProgressBarComponent`. Possible options - `default`, `success`, `info`, `warning`, and `error`.\n     * ```html\n     * <igx-circular-bar [type]=\"'error'\"></igx-circular-bar>\n     * ```\n     */\n    @Input()\n    public type = 'default';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--danger')\n    public get error() {\n        return this.type === IgxProgressType.ERROR;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--info')\n    public get info() {\n        return this.type === IgxProgressType.INFO;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--warning')\n    public get warning() {\n        return this.type === IgxProgressType.WARNING;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-circular-bar--success')\n    public get success() {\n        return this.type === IgxProgressType.SUCCESS;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.stroke')\n    public get strokeStyle() {\n        return this.type === 'default' ? `url(#${this.gradientId})` : 'none';\n    }\n\n    public ngAfterContentInit() {\n        this._contentInit = true;\n    }\n\n}\n","\n    <div class=\"igx-linear-bar__base\">\n        <div class=\"igx-linear-bar__indicator\"></div>\n        <div class=\"igx-linear-bar__indicator-secondary\"></div>\n    </div>\n\n    <span\n        class=\"igx-linear-bar__value\"\n        [ngClass]=\"{\n        'igx-linear-bar__value--start': textAlign === 'start',\n        'igx-linear-bar__value--center': textAlign === 'center',\n        'igx-linear-bar__value--end': textAlign === 'end',\n        'igx-linear-bar__value--top': textTop,\n        'igx-linear-bar__value--hidden': !textVisibility,\n        'igx-linear-bar__value--fraction': hasFraction\n    }\">\n        {{text}}\n    </span>\n\n","<svg #svg\n     role=\"progressbar\"\n     aria-valuemin=\"0\"\n     [attr.aria-valuemax]=\"max\"\n     [attr.aria-valuenow]=\"value\">\n    <svg:circle class=\"igx-circular-bar__inner\" />\n    <svg:circle #circle class=\"igx-circular-bar__outer\"/>\n\n    <svg:defs>\n        <ng-container\n                *ngTemplateOutlet=\"gradientTemplate ? gradientTemplate.template : defaultGradientTemplate;\n        context: { $implicit: gradientId }\">\n        </ng-container>\n    </svg:defs>\n\n    <ng-template #defaultGradientTemplate>\n        <svg:linearGradient [id]=\"gradientId\" gradientTransform=\"rotate(90)\">\n            <stop offset=\"0%\"   class=\"igx-circular-bar__gradient-start\" />\n            <stop offset=\"100%\" class=\"igx-circular-bar__gradient-end\" />\n        </svg:linearGradient>\n    </ng-template>\n</svg>\n\n@if (textVisibility) {\n    <span class=\"igx-circular-bar__text\" [ngClass]=\"hasFraction ? 'igx-circular-bar__value--fraction' : ''\">\n        <ng-container *ngTemplateOutlet=\"textTemplate ? textTemplate.template : defaultTextTemplate;\n            context: context\">\n        </ng-container>\n    </span>\n}\n\n<ng-template #defaultTextTemplate>\n    {{textContent}}\n</ng-template>\n\n\n","export interface ITreeResourceStrings {\n    igx_expand?: string;\n    igx_collapse?: string;\n}\n\nexport const TreeResourceStringsEN: ITreeResourceStrings = {\n    igx_expand: 'Expand',\n    igx_collapse: 'Collapse',\n};\n","import { ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef } from '@angular/core';\nimport { IBaseCancelableBrowserEventArgs, IBaseEventArgs, mkenum } from '../core/utils';\nimport { ToggleAnimationSettings } from '../expansion-panel/toggle-animation-component';\n\n// Component interfaces\n\n/** Comparer function that can be used when searching through IgxTreeNode<any>[] */\nexport type IgxTreeSearchResolver = (data: any, node: IgxTreeNode<any>) => boolean;\n\nexport interface IgxTree {\n    /** @hidden @internal */\n    nodes: QueryList<IgxTreeNode<any>>;\n    /** @hidden @internal */\n    rootNodes: IgxTreeNode<any>[];\n    singleBranchExpand: boolean;\n    toggleNodeOnClick: boolean;\n    selection: IgxTreeSelectionType;\n    expandIndicator: TemplateRef<any>;\n    animationSettings: ToggleAnimationSettings;\n    /** @hidden @internal */\n    forceSelect: IgxTreeNode<any>[];\n    /** @hidden @internal */\n    disabledChange: EventEmitter<IgxTreeNode<any>>;\n    /** @hidden @internal */\n    activeNodeBindingChange: EventEmitter<IgxTreeNode<any>>;\n    nodeSelection: EventEmitter<ITreeNodeSelectionEvent>;\n    nodeExpanding: EventEmitter<ITreeNodeTogglingEventArgs>;\n    nodeExpanded: EventEmitter<ITreeNodeToggledEventArgs>;\n    nodeCollapsing: EventEmitter<ITreeNodeTogglingEventArgs>;\n    nodeCollapsed: EventEmitter<ITreeNodeToggledEventArgs>;\n    activeNodeChanged: EventEmitter<IgxTreeNode<any>>;\n    expandAll(nodes: IgxTreeNode<any>[]): void;\n    collapseAll(nodes: IgxTreeNode<any>[]): void;\n    deselectAll(node?: IgxTreeNode<any>[]): void;\n    findNodes(searchTerm: any, comparer?: IgxTreeSearchResolver): IgxTreeNode<any>[] | null;\n}\n\n// Item interfaces\nexport interface IgxTreeNode<T> {\n    parentNode?: IgxTreeNode<any> | null;\n    loading: boolean;\n    path: IgxTreeNode<any>[];\n    expanded: boolean | null;\n    /** @hidden @internal */\n    indeterminate: boolean;\n    selected: boolean | null;\n    disabled: boolean;\n    /** @hidden @internal */\n    isFocused: boolean;\n    active: boolean;\n    level: number;\n    data: T;\n    /** @hidden @internal */\n    nativeElement: HTMLElement;\n    /** @hidden @internal */\n    header: ElementRef;\n    /** @hidden @internal */\n    tabIndex: number;\n    /** @hidden @internal */\n    allChildren: QueryList<IgxTreeNode<any>>;\n    /** @hidden @internal */\n    _children: QueryList<IgxTreeNode<any>> | null;\n    selectedChange: EventEmitter<boolean>;\n    expandedChange: EventEmitter<boolean>;\n    expand(): void;\n    collapse(): void;\n    toggle(): void;\n    /** @hidden @internal */\n    addLinkChild(node: any): void;\n    /** @hidden @internal */\n    removeLinkChild(node: any): void;\n}\n\n// Events\nexport interface ITreeNodeSelectionEvent extends IBaseCancelableBrowserEventArgs {\n    oldSelection: IgxTreeNode<any>[];\n    newSelection: IgxTreeNode<any>[];\n    added: IgxTreeNode<any>[];\n    removed: IgxTreeNode<any>[];\n    event?: Event;\n}\n\nexport interface ITreeNodeEditingEvent extends IBaseCancelableBrowserEventArgs {\n    node: IgxTreeNode<any>;\n    value: string;\n}\n\nexport interface ITreeNodeEditedEvent extends IBaseEventArgs {\n    node: IgxTreeNode<any>;\n    value: any;\n}\n\nexport interface ITreeNodeTogglingEventArgs extends IBaseEventArgs, IBaseCancelableBrowserEventArgs {\n    node: IgxTreeNode<any>;\n}\n\nexport interface ITreeNodeToggledEventArgs extends IBaseEventArgs {\n    node: IgxTreeNode<any>;\n}\n\n// Enums\nexport const IgxTreeSelectionType = /*@__PURE__*/mkenum({\n    None: 'None',\n    BiState: 'BiState',\n    Cascading: 'Cascading'\n});\nexport type IgxTreeSelectionType = (typeof IgxTreeSelectionType)[keyof typeof IgxTreeSelectionType];\n\n// Token\nexport const IGX_TREE_COMPONENT = /*@__PURE__*/new InjectionToken<IgxTree>('IgxTreeToken');\nexport const IGX_TREE_NODE_COMPONENT = /*@__PURE__*/new InjectionToken<IgxTreeNode<any>>('IgxTreeNodeToken');\n","import { Injectable } from '@angular/core';\nimport { IgxTree, IgxTreeNode } from './common';\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxTreeService {\n    public expandedNodes: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n    public collapsingNodes: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n    private tree: IgxTree;\n\n    /**\n     * Adds the node to the `expandedNodes` set and fires the nodes change event\n     *\n     * @param node target node\n     * @param uiTrigger is the event triggered by a ui interraction (so we know if we should animate)\n     * @returns void\n     */\n    public expand(node: IgxTreeNode<any>, uiTrigger?: boolean): void {\n        this.collapsingNodes.delete(node);\n        if (!this.expandedNodes.has(node)) {\n            node.expandedChange.emit(true);\n        } else {\n            return;\n        }\n        this.expandedNodes.add(node);\n        if (this.tree.singleBranchExpand) {\n            this.tree.findNodes(node, this.siblingComparer)?.forEach(e => {\n                if (uiTrigger) {\n                    e.collapse();\n                } else {\n                    e.expanded = false;\n                }\n            });\n        }\n    }\n\n    /**\n     * Adds a node to the `collapsing` collection\n     *\n     * @param node target node\n     */\n    public collapsing(node: IgxTreeNode<any>): void {\n        this.collapsingNodes.add(node);\n    }\n\n    /**\n     * Removes the node from the 'expandedNodes' set and emits the node's change event\n     *\n     * @param node target node\n     * @returns void\n     */\n    public collapse(node: IgxTreeNode<any>): void {\n        if (this.expandedNodes.has(node)) {\n            node.expandedChange.emit(false);\n        }\n        this.collapsingNodes.delete(node);\n        this.expandedNodes.delete(node);\n    }\n\n    public isExpanded(node: IgxTreeNode<any>): boolean {\n        return this.expandedNodes.has(node);\n    }\n\n    public register(tree: IgxTree) {\n        this.tree = tree;\n    }\n\n    private siblingComparer:\n    (data: IgxTreeNode<any>, node: IgxTreeNode<any>) => boolean =\n    (data: IgxTreeNode<any>, node: IgxTreeNode<any>) => node !== data && node.level === data.level;\n}\n","import { Injectable } from '@angular/core';\nimport { IgxTree, IgxTreeNode, IgxTreeSelectionType, ITreeNodeSelectionEvent } from './common';\n\n/** A collection containing the nodes affected in the selection as well as their direct parents */\ninterface CascadeSelectionNodeCollection {\n    nodes: Set<IgxTreeNode<any>>;\n    parents: Set<IgxTreeNode<any>>;\n}\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxTreeSelectionService {\n    private tree: IgxTree;\n    private nodeSelection: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n    private indeterminateNodes: Set<IgxTreeNode<any>> = new Set<IgxTreeNode<any>>();\n\n    private nodesToBeSelected: Set<IgxTreeNode<any>>;\n    private nodesToBeIndeterminate: Set<IgxTreeNode<any>>;\n\n    public register(tree: IgxTree) {\n        this.tree = tree;\n    }\n\n    /** Select range from last selected node to the current specified node. */\n    public selectMultipleNodes(node: IgxTreeNode<any>, event?: Event): void {\n        if (!this.nodeSelection.size) {\n            this.selectNode(node);\n            return;\n        }\n        const lastSelectedNodeIndex = this.tree.nodes.toArray().indexOf(this.getSelectedNodes()[this.nodeSelection.size - 1]);\n        const currentNodeIndex = this.tree.nodes.toArray().indexOf(node);\n        const nodes = this.tree.nodes.toArray().slice(Math.min(currentNodeIndex, lastSelectedNodeIndex),\n            Math.max(currentNodeIndex, lastSelectedNodeIndex) + 1);\n\n        const added = nodes.filter(_node => !this.isNodeSelected(_node));\n        const newSelection = this.getSelectedNodes().concat(added);\n        this.emitNodeSelectionEvent(newSelection, added, [], event);\n    }\n\n    /** Select the specified node and emit event. */\n    public selectNode(node: IgxTreeNode<any>, event?: Event): void {\n        if (this.tree.selection === IgxTreeSelectionType.None) {\n            return;\n        }\n        this.emitNodeSelectionEvent([...this.getSelectedNodes(), node], [node], [], event);\n    }\n\n    /** Deselect the specified node and emit event. */\n    public deselectNode(node: IgxTreeNode<any>, event?: Event): void {\n        const newSelection = this.getSelectedNodes().filter(r => r !== node);\n        this.emitNodeSelectionEvent(newSelection, [], [node], event);\n    }\n\n    /** Clears node selection */\n    public clearNodesSelection(): void {\n        this.nodeSelection.clear();\n        this.indeterminateNodes.clear();\n    }\n\n    public isNodeSelected(node: IgxTreeNode<any>): boolean {\n        return this.nodeSelection.has(node);\n    }\n\n    public isNodeIndeterminate(node: IgxTreeNode<any>): boolean {\n        return this.indeterminateNodes.has(node);\n    }\n\n    /** Select specified nodes. No event is emitted. */\n    public selectNodesWithNoEvent(nodes: IgxTreeNode<any>[], clearPrevSelection = false, shouldEmit = true): void {\n        if (this.tree && this.tree.selection === IgxTreeSelectionType.Cascading) {\n            this.cascadeSelectNodesWithNoEvent(nodes, clearPrevSelection);\n            return;\n        }\n\n        const oldSelection = this.getSelectedNodes();\n\n        if (clearPrevSelection) {\n            this.nodeSelection.clear();\n        }\n        nodes.forEach(node => this.nodeSelection.add(node));\n\n        if (shouldEmit) {\n            this.emitSelectedChangeEvent(oldSelection);\n        }\n    }\n\n    /** Deselect specified nodes. No event is emitted. */\n    public deselectNodesWithNoEvent(nodes?: IgxTreeNode<any>[], shouldEmit = true): void {\n        const oldSelection = this.getSelectedNodes();\n\n        if (!nodes) {\n            this.nodeSelection.clear();\n        } else if (this.tree && this.tree.selection === IgxTreeSelectionType.Cascading) {\n            this.cascadeDeselectNodesWithNoEvent(nodes);\n        } else {\n            nodes.forEach(node => this.nodeSelection.delete(node));\n        }\n\n        if (shouldEmit) {\n            this.emitSelectedChangeEvent(oldSelection);\n        }\n    }\n\n    /** Called on `node.ngOnDestroy` to ensure state is correct after node is removed */\n    public ensureStateOnNodeDelete(node: IgxTreeNode<any>): void {\n        if (this.tree?.selection !== IgxTreeSelectionType.Cascading) {\n            return;\n        }\n        requestAnimationFrame(() => {\n            if (this.isNodeSelected(node)) {\n                // node is destroyed, do not emit event\n                this.deselectNodesWithNoEvent([node], false);\n            } else {\n                if (!node.parentNode) {\n                    return;\n                }\n                const assitantLeafNode = node.parentNode?.allChildren.find(e => !e._children?.length);\n                if (!assitantLeafNode) {\n                    return;\n                }\n                this.retriggerNodeState(assitantLeafNode);\n            }\n        });\n    }\n\n    /** Retriggers a node's selection state */\n    private retriggerNodeState(node: IgxTreeNode<any>): void {\n        if (node.selected) {\n            this.nodeSelection.delete(node);\n            this.selectNodesWithNoEvent([node], false, false);\n        } else {\n            this.nodeSelection.add(node);\n            this.deselectNodesWithNoEvent([node], false);\n        }\n    }\n\n    /** Returns array of the selected nodes. */\n    private getSelectedNodes(): IgxTreeNode<any>[] {\n        return this.nodeSelection.size ? Array.from(this.nodeSelection) : [];\n    }\n\n    /** Returns array of the nodes in indeterminate state. */\n    private getIndeterminateNodes(): IgxTreeNode<any>[] {\n        return this.indeterminateNodes.size ? Array.from(this.indeterminateNodes) : [];\n    }\n\n    private emitNodeSelectionEvent(\n        newSelection: IgxTreeNode<any>[], added: IgxTreeNode<any>[], removed: IgxTreeNode<any>[], event: Event\n    ): boolean {\n        if (this.tree.selection === IgxTreeSelectionType.Cascading) {\n            this.emitCascadeNodeSelectionEvent(newSelection, added, removed, event);\n            return;\n        }\n        const currSelection = this.getSelectedNodes();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args: ITreeNodeSelectionEvent = {\n            oldSelection: currSelection, newSelection,\n            added, removed, event, cancel: false, owner: this.tree\n        };\n        this.tree.nodeSelection.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.selectNodesWithNoEvent(args.newSelection, true);\n    }\n\n    private areEqualCollections(first: IgxTreeNode<any>[], second: IgxTreeNode<any>[]): boolean {\n        return first.length === second.length && new Set(first.concat(second)).size === first.length;\n    }\n\n    private cascadeSelectNodesWithNoEvent(nodes?: IgxTreeNode<any>[], clearPrevSelection = false): void {\n        const oldSelection = this.getSelectedNodes();\n\n        if (clearPrevSelection) {\n            this.indeterminateNodes.clear();\n            this.nodeSelection.clear();\n            this.calculateNodesNewSelectionState({ added: nodes, removed: [] });\n        } else {\n            const newSelection = [...oldSelection, ...nodes];\n            const args: Partial<ITreeNodeSelectionEvent> = { oldSelection, newSelection };\n\n            // retrieve only the rows without their parents/children which has to be added to the selection\n            this.populateAddRemoveArgs(args);\n\n            this.calculateNodesNewSelectionState(args);\n        }\n        this.nodeSelection = new Set(this.nodesToBeSelected);\n        this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n\n        this.emitSelectedChangeEvent(oldSelection);\n    }\n\n    private cascadeDeselectNodesWithNoEvent(nodes: IgxTreeNode<any>[]): void {\n        const args = { added: [], removed: nodes };\n        this.calculateNodesNewSelectionState(args);\n\n        this.nodeSelection = new Set<IgxTreeNode<any>>(this.nodesToBeSelected);\n        this.indeterminateNodes = new Set<IgxTreeNode<any>>(this.nodesToBeIndeterminate);\n    }\n\n    /**\n     * populates the nodesToBeSelected and nodesToBeIndeterminate sets\n     * with the nodes which will be eventually in selected/indeterminate state\n     */\n    private calculateNodesNewSelectionState(args: Partial<ITreeNodeSelectionEvent>): void {\n        this.nodesToBeSelected = new Set<IgxTreeNode<any>>(args.oldSelection ? args.oldSelection : this.getSelectedNodes());\n        this.nodesToBeIndeterminate = new Set<IgxTreeNode<any>>(this.getIndeterminateNodes());\n\n        this.cascadeSelectionState(args.removed, false);\n        this.cascadeSelectionState(args.added, true);\n    }\n\n    /** Ensures proper selection state for all predescessors and descendants during a selection event */\n    private cascadeSelectionState(nodes: IgxTreeNode<any>[], selected: boolean): void {\n        if (!nodes || nodes.length === 0) {\n            return;\n        }\n\n        if (nodes && nodes.length > 0) {\n            const nodeCollection: CascadeSelectionNodeCollection = this.getCascadingNodeCollection(nodes);\n\n            nodeCollection.nodes.forEach(node => {\n                if (selected) {\n                    this.nodesToBeSelected.add(node);\n                } else {\n                    this.nodesToBeSelected.delete(node);\n                }\n                this.nodesToBeIndeterminate.delete(node);\n            });\n\n            Array.from(nodeCollection.parents).forEach((parent) => {\n                this.handleParentSelectionState(parent);\n            });\n        }\n    }\n\n    private emitCascadeNodeSelectionEvent(newSelection, added, removed, event?): boolean {\n        const currSelection = this.getSelectedNodes();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args: ITreeNodeSelectionEvent = {\n            oldSelection: currSelection, newSelection,\n            added, removed, event, cancel: false, owner: this.tree\n        };\n\n        this.calculateNodesNewSelectionState(args);\n\n        args.newSelection = Array.from(this.nodesToBeSelected);\n\n        // retrieve nodes/parents/children which has been added/removed from the selection\n        this.populateAddRemoveArgs(args);\n\n        this.tree.nodeSelection.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        // if args.newSelection hasn't been modified\n        if (this.areEqualCollections(Array.from(this.nodesToBeSelected), args.newSelection)) {\n            this.nodeSelection = new Set<IgxTreeNode<any>>(this.nodesToBeSelected);\n            this.indeterminateNodes = new Set(this.nodesToBeIndeterminate);\n            this.emitSelectedChangeEvent(currSelection);\n        } else {\n            // select the nodes within the modified args.newSelection with no event\n            this.cascadeSelectNodesWithNoEvent(args.newSelection, true);\n        }\n    }\n\n    /**\n     * recursively handle the selection state of the direct and indirect parents\n     */\n    private handleParentSelectionState(node: IgxTreeNode<any>) {\n        if (!node) {\n            return;\n        }\n        this.handleNodeSelectionState(node);\n        if (node.parentNode) {\n            this.handleParentSelectionState(node.parentNode);\n        }\n    }\n\n    /**\n     * Handle the selection state of a given node based the selection states of its direct children\n     */\n    private handleNodeSelectionState(node: IgxTreeNode<any>) {\n        const nodesArray = (node && node._children) ? node._children.toArray() : [];\n        if (nodesArray.length) {\n            if (nodesArray.every(n => this.nodesToBeSelected.has(n))) {\n                this.nodesToBeSelected.add(node);\n                this.nodesToBeIndeterminate.delete(node);\n            } else if (nodesArray.some(n => this.nodesToBeSelected.has(n) || this.nodesToBeIndeterminate.has(n))) {\n                this.nodesToBeIndeterminate.add(node);\n                this.nodesToBeSelected.delete(node);\n            } else {\n                this.nodesToBeIndeterminate.delete(node);\n                this.nodesToBeSelected.delete(node);\n            }\n        } else {\n            // if the children of the node has been deleted and the node was selected do not change its state\n            if (this.isNodeSelected(node)) {\n                this.nodesToBeSelected.add(node);\n            } else {\n                this.nodesToBeSelected.delete(node);\n            }\n            this.nodesToBeIndeterminate.delete(node);\n        }\n    }\n\n    /**\n     * Get a collection of all nodes affected by the change event\n     *\n     * @param nodesToBeProcessed set of the nodes to be selected/deselected\n     * @returns a collection of all affected nodes and all their parents\n     */\n    private getCascadingNodeCollection(nodes: IgxTreeNode<any>[]): CascadeSelectionNodeCollection {\n        const collection: CascadeSelectionNodeCollection = {\n            parents: new Set<IgxTreeNode<any>>(),\n            nodes: new Set<IgxTreeNode<any>>(nodes)\n        };\n\n        Array.from(collection.nodes).forEach((node) => {\n            const nodeAndAllChildren = node.allChildren?.toArray() || [];\n            nodeAndAllChildren.forEach(n => {\n                collection.nodes.add(n);\n            });\n\n            if (node && node.parentNode) {\n                collection.parents.add(node.parentNode);\n            }\n        });\n        return collection;\n    }\n\n    /**\n     * retrieve the nodes which should be added/removed to/from the old selection\n     */\n    private populateAddRemoveArgs(args: Partial<ITreeNodeSelectionEvent>): void {\n        args.removed = args.oldSelection.filter(x => args.newSelection.indexOf(x) < 0);\n        args.added = args.newSelection.filter(x => args.oldSelection.indexOf(x) < 0);\n    }\n\n    /** Emits the `selectedChange` event for each node affected by the selection */\n    private emitSelectedChangeEvent(oldSelection: IgxTreeNode<any>[]): void {\n        this.getSelectedNodes().forEach(n => {\n            if (oldSelection.indexOf(n) < 0) {\n                n.selectedChange.emit(true);\n            }\n        });\n\n        oldSelection.forEach(n => {\n            if (!this.nodeSelection.has(n)) {\n                n.selectedChange.emit(false);\n            }\n        });\n    }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { IgxTree, IgxTreeNode, IgxTreeSelectionType } from './common';\nimport { NAVIGATION_KEYS } from '../core/utils';\nimport { IgxTreeService } from './tree.service';\nimport { IgxTreeSelectionService } from './tree-selection.service';\nimport { Subject } from 'rxjs';\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxTreeNavigationService implements OnDestroy {\n    private tree: IgxTree;\n\n    private _focusedNode: IgxTreeNode<any> = null;\n    private _lastFocusedNode: IgxTreeNode<any> = null;\n    private _activeNode: IgxTreeNode<any> = null;\n\n    private _visibleChildren: IgxTreeNode<any>[] = [];\n    private _invisibleChildren: Set<IgxTreeNode<any>> = new Set();\n    private _disabledChildren: Set<IgxTreeNode<any>> = new Set();\n\n    private _cacheChange = new Subject<void>();\n\n    constructor(private treeService: IgxTreeService, private selectionService: IgxTreeSelectionService) {\n        this._cacheChange.subscribe(() => {\n            this._visibleChildren =\n                this.tree?.nodes ?\n                    this.tree.nodes.filter(e => !(this._invisibleChildren.has(e) || this._disabledChildren.has(e))) :\n                    [];\n        });\n    }\n\n    public register(tree: IgxTree) {\n        this.tree = tree;\n    }\n\n    public get focusedNode() {\n        return this._focusedNode;\n    }\n\n    public set focusedNode(value: IgxTreeNode<any>) {\n        if (this._focusedNode === value) {\n            return;\n        }\n        this._lastFocusedNode = this._focusedNode;\n        if (this._lastFocusedNode) {\n            this._lastFocusedNode.tabIndex = -1;\n        }\n        this._focusedNode = value;\n        if (this._focusedNode !== null) {\n            this._focusedNode.tabIndex = 0;\n            this._focusedNode.header.nativeElement.focus();\n        }\n    }\n\n    public get activeNode() {\n        return this._activeNode;\n    }\n\n    public set activeNode(value: IgxTreeNode<any>) {\n        if (this._activeNode === value) {\n            return;\n        }\n        this._activeNode = value;\n        this.tree.activeNodeChanged.emit(this._activeNode);\n    }\n\n    public get visibleChildren(): IgxTreeNode<any>[] {\n        return this._visibleChildren;\n    }\n\n    public update_disabled_cache(node: IgxTreeNode<any>): void {\n        if (node.disabled) {\n            this._disabledChildren.add(node);\n        } else {\n            this._disabledChildren.delete(node);\n        }\n        this._cacheChange.next();\n    }\n\n    public init_invisible_cache() {\n        this.tree.nodes.filter(e => e.level === 0).forEach(node => {\n            this.update_visible_cache(node, node.expanded, false);\n        });\n        this._cacheChange.next();\n    }\n\n    public update_visible_cache(node: IgxTreeNode<any>, expanded: boolean, shouldEmit = true): void {\n        if (expanded) {\n            node._children.forEach(child => {\n                this._invisibleChildren.delete(child);\n                this.update_visible_cache(child, child.expanded, false);\n            });\n        } else {\n            node.allChildren.forEach(c => this._invisibleChildren.add(c));\n        }\n\n        if (shouldEmit) {\n            this._cacheChange.next();\n        }\n    }\n\n    /**\n     * Sets the node as focused (and active)\n     *\n     * @param node target node\n     * @param isActive if true, sets the node as active\n     */\n    public setFocusedAndActiveNode(node: IgxTreeNode<any>, isActive = true): void {\n        if (isActive) {\n            this.activeNode = node;\n        }\n        this.focusedNode = node;\n    }\n\n    /** Handler for keydown events. Used in tree.component.ts */\n    public handleKeydown(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (!this.focusedNode) {\n            return;\n        }\n        if (!(NAVIGATION_KEYS.has(key) || key === '*')) {\n            if (key === 'enter') {\n                this.activeNode = this.focusedNode;\n            }\n            return;\n        }\n        event.preventDefault();\n        if (event.repeat) {\n            setTimeout(() => this.handleNavigation(event), 1);\n        } else {\n            this.handleNavigation(event);\n        }\n    }\n\n    public ngOnDestroy() {\n        this._cacheChange.next();\n        this._cacheChange.complete();\n    }\n\n    private handleNavigation(event: KeyboardEvent) {\n        switch (event.key.toLowerCase()) {\n            case 'home':\n                this.setFocusedAndActiveNode(this.visibleChildren[0]);\n                break;\n            case 'end':\n                this.setFocusedAndActiveNode(this.visibleChildren[this.visibleChildren.length - 1]);\n                break;\n            case 'arrowleft':\n            case 'left':\n                this.handleArrowLeft();\n                break;\n            case 'arrowright':\n            case 'right':\n                this.handleArrowRight();\n                break;\n            case 'arrowup':\n            case 'up':\n                this.handleUpDownArrow(true, event);\n                break;\n            case 'arrowdown':\n            case 'down':\n                this.handleUpDownArrow(false, event);\n                break;\n            case '*':\n                this.handleAsterisk();\n                break;\n            case ' ':\n            case 'spacebar':\n            case 'space':\n                this.handleSpace(event.shiftKey);\n                break;\n            default:\n                return;\n        }\n    }\n\n    private handleArrowLeft(): void {\n        if (this.focusedNode.expanded && !this.treeService.collapsingNodes.has(this.focusedNode) && this.focusedNode._children?.length) {\n            this.activeNode = this.focusedNode;\n            this.focusedNode.collapse();\n        } else {\n            const parentNode = this.focusedNode.parentNode;\n            if (parentNode && !parentNode.disabled) {\n                this.setFocusedAndActiveNode(parentNode);\n            }\n        }\n    }\n\n    private handleArrowRight(): void {\n        if (this.focusedNode._children.length > 0) {\n            if (!this.focusedNode.expanded) {\n                this.activeNode = this.focusedNode;\n                this.focusedNode.expand();\n            } else {\n                if (this.treeService.collapsingNodes.has(this.focusedNode)) {\n                    this.focusedNode.expand();\n                    return;\n                }\n                const firstChild = this.focusedNode._children.find(node => !node.disabled);\n                if (firstChild) {\n                    this.setFocusedAndActiveNode(firstChild);\n                }\n            }\n        }\n    }\n\n    private handleUpDownArrow(isUp: boolean, event: KeyboardEvent): void {\n        const next = this.getVisibleNode(this.focusedNode, isUp ? -1 : 1);\n        if (next === this.focusedNode) {\n            return;\n        }\n\n        if (event.ctrlKey) {\n            this.setFocusedAndActiveNode(next, false);\n        } else {\n            this.setFocusedAndActiveNode(next);\n        }\n    }\n\n    private handleAsterisk(): void {\n        const nodes = this.focusedNode.parentNode ? this.focusedNode.parentNode._children : this.tree.rootNodes;\n        nodes?.forEach(node => {\n            if (!node.disabled && (!node.expanded || this.treeService.collapsingNodes.has(node))) {\n                node.expand();\n            }\n        });\n    }\n\n    private handleSpace(shiftKey = false): void {\n        if (this.tree.selection === IgxTreeSelectionType.None) {\n            return;\n        }\n\n        this.activeNode = this.focusedNode;\n        if (shiftKey) {\n            this.selectionService.selectMultipleNodes(this.focusedNode);\n            return;\n        }\n\n        if (this.focusedNode.selected) {\n            this.selectionService.deselectNode(this.focusedNode);\n        } else {\n            this.selectionService.selectNode(this.focusedNode);\n        }\n    }\n\n    /** Gets the next visible node in the given direction - 1 -> next, -1 -> previous */\n    private getVisibleNode(node: IgxTreeNode<any>, dir: 1 | -1 = 1): IgxTreeNode<any> {\n        const nodeIndex = this.visibleChildren.indexOf(node);\n        return this.visibleChildren[nodeIndex + dir] || node;\n    }\n}\n","import {\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    QueryList,\n    SkipSelf,\n    TemplateRef,\n    ViewChild,\n    booleanAttribute\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { ITreeResourceStrings, TreeResourceStringsEN } from '../../core/i18n/tree-resources';\nimport { ToggleAnimationPlayer, ToggleAnimationSettings } from '../../expansion-panel/toggle-animation-component';\nimport { IgxAngularAnimationService } from '../../services/animation/angular-animation-service';\nimport { AnimationService } from '../../services/animation/animation';\nimport {\n    IgxTree,\n    IgxTreeNode,\n    IgxTreeSelectionType,\n    IGX_TREE_COMPONENT,\n    IGX_TREE_NODE_COMPONENT,\n    ITreeNodeTogglingEventArgs\n} from '../common';\nimport { IgxTreeNavigationService } from '../tree-navigation.service';\nimport { IgxTreeSelectionService } from '../tree-selection.service';\nimport { IgxTreeService } from '../tree.service';\nimport { IgxCircularProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { getCurrentResourceStrings } from '../../core/i18n/resources';\n\n// TODO: Implement aria functionality\n/**\n * @hidden @internal\n * Used for links (`a` tags) in the body of an `igx-tree-node`. Handles aria and event dispatch.\n */\n@Directive({\n    selector: `[igxTreeNodeLink]`,\n    standalone: true\n})\nexport class IgxTreeNodeLinkDirective implements OnDestroy {\n\n    @HostBinding('attr.role')\n    public role = 'treeitem';\n\n    /**\n     * The node's parent. Should be used only when the link is defined\n     * in `<ng-template>` tag outside of its parent, as Angular DI will not properly provide a reference\n     *\n     * ```html\n     * <igx-tree>\n     *     <igx-tree-node #myNode *ngFor=\"let node of data\" [data]=\"node\">\n     *         <ng-template *ngTemplateOutlet=\"nodeTemplate; context: { $implicit: data, parentNode: myNode }\">\n     *         </ng-template>\n     *     </igx-tree-node>\n     *     ...\n     *     <!-- node template is defined under tree to access related services -->\n     *     <ng-template #nodeTemplate let-data let-node=\"parentNode\">\n     *         <a [igxTreeNodeLink]=\"node\">{{ data.label }}</a>\n     *     </ng-template>\n     * </igx-tree>\n     * ```\n     */\n    @Input('igxTreeNodeLink')\n    public set parentNode(val: any) {\n        if (val) {\n            this._parentNode = val;\n            (this._parentNode as any).addLinkChild(this);\n        }\n    }\n\n    public get parentNode(): any {\n        return this._parentNode;\n    }\n\n    /** A pointer to the parent node */\n    private get target(): IgxTreeNode<any> {\n        return this.node || this.parentNode;\n    }\n\n    private _parentNode: IgxTreeNode<any> = null;\n\n    constructor(\n        @Optional() @Inject(IGX_TREE_NODE_COMPONENT)\n        private node: IgxTreeNode<any>,\n        private navService: IgxTreeNavigationService,\n        public elementRef: ElementRef,\n    ) { }\n\n    /** @hidden @internal */\n    @HostBinding('attr.tabindex')\n    public get tabIndex(): number {\n        return this.navService.focusedNode === this.target ? (this.target?.disabled ? -1 : 0) : -1;\n    }\n\n    /**\n     * @hidden @internal\n     * Clear the node's focused state\n     */\n    @HostListener('blur')\n    public handleBlur() {\n        this.target.isFocused = false;\n    }\n\n    /**\n     * @hidden @internal\n     * Set the node as focused\n     */\n    @HostListener('focus')\n    public handleFocus() {\n        if (this.target && !this.target.disabled) {\n            if (this.navService.focusedNode !== this.target) {\n                this.navService.focusedNode = this.target;\n            }\n            this.target.isFocused = true;\n        }\n    }\n\n    public ngOnDestroy() {\n        this.target.removeLinkChild(this);\n    }\n}\n\n/**\n *\n * The tree node component represents a child node of the tree component or another tree node.\n * Usage:\n *\n * ```html\n *  <igx-tree>\n *  ...\n *    <igx-tree-node [data]=\"data\" [selected]=\"service.isNodeSelected(data.Key)\" [expanded]=\"service.isNodeExpanded(data.Key)\">\n *      {{ data.FirstName }} {{ data.LastName }}\n *    </igx-tree-node>\n *  ...\n *  </igx-tree>\n * ```\n */\n@Component({\n    selector: 'igx-tree-node',\n    templateUrl: 'tree-node.component.html',\n    providers: [\n        { provide: IGX_TREE_NODE_COMPONENT, useExisting: IgxTreeNodeComponent }\n    ],\n    imports: [NgTemplateOutlet, IgxIconComponent, IgxCheckboxComponent, NgClass, IgxCircularProgressBarComponent]\n})\nexport class IgxTreeNodeComponent<T> extends ToggleAnimationPlayer implements IgxTreeNode<T>, OnInit, OnDestroy {\n    /**\n     * The data entry that the node is visualizing.\n     *\n     * @remarks\n     * Required for searching through nodes.\n     *\n     * @example\n     * ```html\n     *  <igx-tree>\n     *  ...\n     *    <igx-tree-node [data]=\"data\">\n     *      {{ data.FirstName }} {{ data.LastName }}\n     *    </igx-tree-node>\n     *  ...\n     *  </igx-tree>\n     * ```\n     */\n    @Input()\n    public data: T;\n\n    /**\n     * To be used for load-on-demand scenarios in order to specify whether the node is loading data.\n     *\n     * @remarks\n     * Loading nodes do not render children.\n     */\n    @Input({ transform: booleanAttribute })\n    public loading = false;\n\n    // TO DO: return different tab index depending on anchor child\n    /** @hidden @internal */\n    public set tabIndex(val: number) {\n        this._tabIndex = val;\n    }\n\n    /** @hidden @internal */\n    public get tabIndex(): number {\n        if (this.disabled) {\n            return -1;\n        }\n        if (this._tabIndex === null) {\n            if (this.navService.focusedNode === null) {\n                return this.hasLinkChildren ? -1 : 0;\n            }\n            return -1;\n        }\n        return this.hasLinkChildren ? -1 : this._tabIndex;\n    }\n\n    /** @hidden @internal */\n    public override get animationSettings(): ToggleAnimationSettings {\n        return this.tree.animationSettings;\n    }\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * Uses EN resources by default.\n     */\n    @Input()\n    public set resourceStrings(value: ITreeResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): ITreeResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Gets/Sets the active state of the node\n     *\n     * @param value: boolean\n     */\n    @Input({ transform: booleanAttribute })\n    public set active(value: boolean) {\n        if (value) {\n            this.navService.activeNode = this;\n            this.tree.activeNodeBindingChange.emit(this);\n        }\n    }\n\n    public get active(): boolean {\n        return this.navService.activeNode === this;\n    }\n\n    /**\n     * Emitted when the node's `selected` property changes.\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node *ngFor=\"let node of data\" [data]=\"node\" [(selected)]=\"node.selected\">\n     *      </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * node.selectedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log(\"Node selection changed to \", e))\n     * ```\n     */\n    @Output()\n    public selectedChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted when the node's `expanded` property changes.\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node *ngFor=\"let node of data\" [data]=\"node\" [(expanded)]=\"node.expanded\">\n     *      </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * node.expandedChange.pipe(takeUntil(this.destroy$)).subscribe((e: boolean) => console.log(\"Node expansion state changed to \", e))\n     * ```\n     */\n    @Output()\n    public expandedChange = new EventEmitter<boolean>();\n\n    /** @hidden @internal */\n    public get focused() {\n        return this.isFocused &&\n            this.navService.focusedNode === this;\n    }\n\n    /**\n     * Retrieves the full path to the node incuding itself\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const path: IgxTreeNode<any>[] = node.path;\n     * ```\n     */\n    public get path(): IgxTreeNode<any>[] {\n        return this.parentNode?.path ? [...this.parentNode.path, this] : [this];\n    }\n\n    // TODO: bind to disabled state when node is dragged\n    /**\n     * Gets/Sets the disabled state of the node\n     *\n     * @param value: boolean\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-tree-node--disabled')\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    public set disabled(value: boolean) {\n        if (value !== this._disabled) {\n            this._disabled = value;\n            this.tree.disabledChange.emit(this);\n        }\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-tree-node')\n    public cssClass = 'igx-tree-node';\n\n    /** @hidden @internal */\n    @HostBinding('attr.role')\n    public get role() {\n        return this.hasLinkChildren ? 'none' : 'treeitem';\n    }\n\n    /** @hidden @internal */\n    @ContentChildren(IgxTreeNodeLinkDirective, { read: ElementRef })\n    public linkChildren: QueryList<ElementRef>;\n\n    /** @hidden @internal */\n    @ContentChildren(IGX_TREE_NODE_COMPONENT, { read: IGX_TREE_NODE_COMPONENT })\n    public _children: QueryList<IgxTreeNode<any>>;\n\n    /** @hidden @internal */\n    @ContentChildren(IGX_TREE_NODE_COMPONENT, { read: IGX_TREE_NODE_COMPONENT, descendants: true })\n    public allChildren: QueryList<IgxTreeNode<any>>;\n\n    /**\n     * Return the child nodes of the node (if any)\n     *\n     * @remarks\n     * Returns `null` if node does not have children\n     *\n     * @example\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const children: IgxTreeNode<any>[] = node.children;\n     * ```\n     */\n    public get children(): IgxTreeNode<any>[] {\n        return this._children?.length ? this._children.toArray() : null;\n    }\n\n    // TODO: will be used in Drag and Drop implementation\n    /** @hidden @internal */\n    @ViewChild('ghostTemplate', { read: ElementRef })\n    public header: ElementRef;\n\n    @ViewChild('defaultIndicator', { read: TemplateRef, static: true })\n    private _defaultExpandIndicatorTemplate: TemplateRef<any>;\n\n    @ViewChild('childrenContainer', { read: ElementRef })\n    private childrenContainer: ElementRef;\n\n    private get hasLinkChildren(): boolean {\n        return this.linkChildren?.length > 0 || this.registeredChildren?.length > 0;\n    }\n\n    /** @hidden @internal */\n    public isFocused: boolean;\n\n    /** @hidden @internal */\n    public registeredChildren: IgxTreeNodeLinkDirective[] = [];\n\n    /** @hidden @internal */\n    private _resourceStrings = getCurrentResourceStrings(TreeResourceStringsEN);\n\n    private _tabIndex = null;\n    private _disabled = false;\n\n    constructor(\n        @Inject(IGX_TREE_COMPONENT) public tree: IgxTree,\n        protected selectionService: IgxTreeSelectionService,\n        protected treeService: IgxTreeService,\n        protected navService: IgxTreeNavigationService,\n        protected cdr: ChangeDetectorRef,\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        private element: ElementRef<HTMLElement>,\n        @Optional() @SkipSelf() @Inject(IGX_TREE_NODE_COMPONENT) public parentNode: IgxTreeNode<any>\n    ) {\n        super(animationService);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get showSelectors() {\n        return this.tree.selection !== IgxTreeSelectionType.None;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get indeterminate(): boolean {\n        return this.selectionService.isNodeIndeterminate(this);\n    }\n\n    /** The depth of the node, relative to the root\n     *\n     * ```html\n     * <igx-tree>\n     *  ...\n     *  <igx-tree-node #node>\n     *      My level is {{ node.level }}\n     *  </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[12])[0];\n     * const level: number = node.level;\n     * ```\n     */\n    public get level(): number {\n        return this.parentNode ? this.parentNode.level + 1 : 0;\n    }\n\n    /** Get/set whether the node is selected. Supporst two-way binding.\n     *\n     * ```html\n     * <igx-tree>\n     *  ...\n     *  <igx-tree-node *ngFor=\"let node of data\" [(selected)]=\"node.selected\">\n     *      {{ node.label }}\n     *  </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const selected = node.selected;\n     * node.selected = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get selected(): boolean {\n        return this.selectionService.isNodeSelected(this);\n    }\n\n    public set selected(val: boolean) {\n        if (!(this.tree?.nodes && this.tree.nodes.find((e) => e === this)) && val) {\n            this.tree.forceSelect.push(this);\n            return;\n        }\n        if (val && !this.selectionService.isNodeSelected(this)) {\n            this.selectionService.selectNodesWithNoEvent([this]);\n        }\n        if (!val && this.selectionService.isNodeSelected(this)) {\n            this.selectionService.deselectNodesWithNoEvent([this]);\n        }\n    }\n\n    /** Get/set whether the node is expanded\n     *\n     * ```html\n     * <igx-tree>\n     *  ...\n     *  <igx-tree-node *ngFor=\"let node of data\" [expanded]=\"node.name === this.expandedNode\">\n     *      {{ node.label }}\n     *  </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const node: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * const expanded = node.expanded;\n     * node.expanded = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get expanded() {\n        return this.treeService.isExpanded(this);\n    }\n\n    public set expanded(val: boolean) {\n        if (val) {\n            this.treeService.expand(this, false);\n        } else {\n            this.treeService.collapse(this);\n        }\n    }\n\n    /** @hidden @internal */\n    public get expandIndicatorTemplate(): TemplateRef<any> {\n        return this.tree?.expandIndicator || this._defaultExpandIndicatorTemplate;\n    }\n\n    /**\n     * The native DOM element representing the node. Could be null in certain environments.\n     *\n     * ```typescript\n     * // get the nativeElement of the second node\n     * const node: IgxTreeNode = this.tree.nodes.first();\n     * const nodeElement: HTMLElement = node.nativeElement;\n     * ```\n     */\n    /** @hidden @internal */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        this.openAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(\n            () => {\n                this.tree.nodeExpanded.emit({ owner: this.tree, node: this });\n            }\n        );\n        this.closeAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.tree.nodeCollapsed.emit({ owner: this.tree, node: this });\n            this.treeService.collapse(this);\n            this.cdr.markForCheck();\n        });\n    }\n\n    /**\n     * @hidden @internal\n     * Sets the focus to the node's <a> child, if present\n     * Sets the node as the tree service's focusedNode\n     * Marks the node as the current active element\n     */\n    public handleFocus(): void {\n        if (this.disabled) {\n            return;\n        }\n        if (this.navService.focusedNode !== this) {\n            this.navService.focusedNode = this;\n        }\n        this.isFocused = true;\n        if (this.linkChildren?.length) {\n            this.linkChildren.first.nativeElement.focus();\n            return;\n        }\n        if (this.registeredChildren.length) {\n            this.registeredChildren[0].elementRef.nativeElement.focus();\n            return;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * Clear the node's focused status\n     */\n    public clearFocus(): void {\n        this.isFocused = false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelectorPointerDown(event) {\n        event.preventDefault();\n        event.stopPropagation()\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelectorClick(event) {\n        // event.stopPropagation();\n        event.preventDefault();\n        // this.navService.handleFocusedAndActiveNode(this);\n        if (event.shiftKey) {\n            this.selectionService.selectMultipleNodes(this, event);\n            return;\n        }\n        if (this.selected) {\n            this.selectionService.deselectNode(this, event);\n        } else {\n            this.selectionService.selectNode(this, event);\n        }\n    }\n\n    /**\n     * Toggles the node expansion state, triggering animation\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node #node>My Node</igx-tree-node>\n     * </igx-tree>\n     * <button type=\"button\" igxButton (click)=\"node.toggle()\">Toggle Node</button>\n     * ```\n     *\n     * ```typescript\n     * const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * myNode.toggle();\n     * ```\n     */\n    public toggle() {\n        if (this.expanded) {\n            this.collapse();\n        } else {\n            this.expand();\n        }\n    }\n\n    /** @hidden @internal */\n    public indicatorClick() {\n        if(!this.tree.toggleNodeOnClick) {\n            this.toggle();\n            this.navService.setFocusedAndActiveNode(this);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPointerDown(event) {\n        event.stopPropagation();\n\n        //Toggle the node only on left mouse click - https://w3c.github.io/pointerevents/#button-states\n        if(this.tree.toggleNodeOnClick && event.button === 0) {\n            this.toggle();\n        }\n\n        this.navService.setFocusedAndActiveNode(this);\n    }\n\n    public override ngOnDestroy() {\n        super.ngOnDestroy();\n        this.selectionService.ensureStateOnNodeDelete(this);\n    }\n\n    /**\n     * Expands the node, triggering animation\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node #node>My Node</igx-tree-node>\n     * </igx-tree>\n     * <button type=\"button\" igxButton (click)=\"node.expand()\">Expand Node</button>\n     * ```\n     *\n     * ```typescript\n     * const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * myNode.expand();\n     * ```\n     */\n    public expand() {\n        if (this.expanded && !this.treeService.collapsingNodes.has(this)) {\n            return;\n        }\n        const args: ITreeNodeTogglingEventArgs = {\n            owner: this.tree,\n            node: this,\n            cancel: false\n\n        };\n        this.tree.nodeExpanding.emit(args);\n        if (!args.cancel) {\n            this.treeService.expand(this, true);\n            this.cdr.detectChanges();\n            this.playOpenAnimation(\n                this.childrenContainer\n            );\n        }\n    }\n\n    /**\n     * Collapses the node, triggering animation\n     *\n     * ```html\n     * <igx-tree>\n     *      <igx-tree-node #node>My Node</igx-tree-node>\n     * </igx-tree>\n     * <button type=\"button\" igxButton (click)=\"node.collapse()\">Collapse Node</button>\n     * ```\n     *\n     * ```typescript\n     * const myNode: IgxTreeNode<any> = this.tree.findNodes(data[0])[0];\n     * myNode.collapse();\n     * ```\n     */\n    public collapse() {\n        if (!this.expanded || this.treeService.collapsingNodes.has(this)) {\n            return;\n        }\n        const args: ITreeNodeTogglingEventArgs = {\n            owner: this.tree,\n            node: this,\n            cancel: false\n\n        };\n        this.tree.nodeCollapsing.emit(args);\n        if (!args.cancel) {\n            this.treeService.collapsing(this);\n            this.playCloseAnimation(\n                this.childrenContainer\n            );\n        }\n    }\n\n    /** @hidden @internal */\n    public addLinkChild(link: IgxTreeNodeLinkDirective) {\n        this._tabIndex = -1;\n        this.registeredChildren.push(link);\n    }\n\n    /** @hidden @internal */\n    public removeLinkChild(link: IgxTreeNodeLinkDirective) {\n        const index = this.registeredChildren.indexOf(link);\n        if (index !== -1) {\n            this.registeredChildren.splice(index, 1);\n        }\n    }\n}\n","<ng-template #noDragTemplate>\n    <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n</ng-template>\n\n<!-- Will switch templates depending on dragDrop -->\n<ng-template *ngTemplateOutlet=\"noDragTemplate\">\n</ng-template>\n\n@if (expanded && !loading) {\n    <div #childrenContainer\n        class=\"igx-tree-node__group\"\n        role=\"group\"\n    >\n        <ng-content select=\"igx-tree-node\"></ng-content>\n    </div>\n}\n\n\n<ng-template #defaultIndicator>\n    <igx-icon\n        [attr.aria-label]=\"expanded ? resourceStrings.igx_collapse : resourceStrings.igx_expand\"\n        [name]=\"!expanded ? 'tree_expand' : 'tree_collapse'\"\n        family=\"default\"\n    >\n    </igx-icon>\n</ng-template>\n\n<!-- separated in a template in case this ever needs to be templatable -->\n<ng-template #selectMarkerTemplate>\n    <igx-checkbox [checked]=\"selected\" [disabled]=\"disabled\" [readonly]=\"true\" [indeterminate]=\"indeterminate\" [tabindex]=\"-1\">\n    </igx-checkbox>\n</ng-template>\n\n<ng-template #headerTemplate>\n    <div #ghostTemplate class=\"igx-tree-node__wrapper\"\n        [attr.role]=\"role\"\n        [tabIndex]=\"tabIndex\"\n        [ngClass]=\"{\n            'igx-tree-node__wrapper--selected': selected,\n            'igx-tree-node__wrapper--active' : this.active,\n            'igx-tree-node__wrapper--focused' : this.focused,\n            'igx-tree-node__wrapper--disabled' : this.disabled\n        }\"\n        (pointerdown)=\"onPointerDown($event)\"\n        (focus)=\"handleFocus()\"\n        (blur)=\"clearFocus()\"\n    >\n        <div aria-hidden=\"true\">\n            @for (item of [].constructor(level); track $index) {\n                <span\n                    aria-hidden=\"true\"\n                    class=\"igx-tree-node__spacer\"\n                ></span>\n            }\n        </div>\n\n        <!-- Expand/Collapse indicator -->\n        @if (!loading) {\n            <span\n                class=\"igx-tree-node__toggle-button\"\n                [ngClass]=\"{ 'igx-tree-node__toggle-button--hidden': !_children?.length }\"\n                (click)=\"indicatorClick()\"\n            >\n                <ng-container *ngTemplateOutlet=\"expandIndicatorTemplate, context: { $implicit: expanded }\">\n                </ng-container>\n            </span>\n        }\n        @if (loading) {\n            <span class=\"igx-tree-node__toggle-button\">\n                <igx-circular-bar\n                    [animate]=\"false\"\n                    [indeterminate]=\"true\"\n                    [textVisibility]=\"false\"\n                >\n                </igx-circular-bar>\n            </span>\n        }\n\n        <!-- Item selection -->\n        @if (showSelectors) {\n            <div\n                class=\"igx-tree-node__select\"\n                (pointerdown)=\"onSelectorPointerDown($event)\"\n                (click)=\"onSelectorClick($event)\">\n                <ng-container *ngTemplateOutlet=\"selectMarkerTemplate\">\n                </ng-container>\n            </div>\n        }\n\n        <div class=\"igx-tree-node__content\">\n            <!-- Ghost content -->\n            <ng-content></ng-content>\n        </div>\n    </div>\n\n    <!--  Buffer element for 'move after' when D&D is implemented-->\n    <div class=\"igx-tree-node__drop-indicator\">\n        @for (item of [].constructor(level); track $index) {\n            <span aria-hidden=\"true\" class=\"igx-tree-node__spacer\"></span>\n        }\n        <!-- style rules target this div, do not delete it -->\n        <div></div>\n    </div>\n</ng-template>\n\n<ng-template #dragTemplate>\n    <!-- Drag drop goes here\n        igxDrop\n        #dropRef=\"drop\"\n        [igxNodeDrag]=\"this\"\n        (dragStart)=\"logDrop(dropRef)\"\n        (leave)=\"emitLeave()\"\n        (enter)=\"emitEnter()\" -->\n    <div class=\"igx-tree-node__drag-wrapper\">\n        <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n    </div>\n</ng-template>\n","import {\n    Component,\n    QueryList,\n    Input,\n    Output,\n    EventEmitter,\n    ContentChild,\n    Directive,\n    TemplateRef,\n    OnInit,\n    AfterViewInit,\n    ContentChildren,\n    OnDestroy,\n    HostBinding,\n    ElementRef,\n    booleanAttribute,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\nimport { ToggleAnimationSettings } from '../expansion-panel/toggle-animation-component';\nimport {\n    IGX_TREE_COMPONENT, IgxTreeSelectionType, IgxTree, ITreeNodeToggledEventArgs,\n    ITreeNodeTogglingEventArgs, ITreeNodeSelectionEvent, IgxTreeNode, IgxTreeSearchResolver\n} from './common';\nimport { IgxTreeNavigationService } from './tree-navigation.service';\nimport { IgxTreeNodeComponent } from './tree-node/tree-node.component';\nimport { IgxTreeSelectionService } from './tree-selection.service';\nimport { IgxTreeService } from './tree.service';\nimport { growVerIn, growVerOut } from 'igniteui-angular/animations';\nimport { resizeObservable } from '../core/utils';\n\n/**\n * @hidden @internal\n * Used for templating the select marker of the tree\n */\n@Directive({\n    selector: '[igxTreeSelectMarker]',\n    standalone: true\n})\nexport class IgxTreeSelectMarkerDirective {\n}\n\n/**\n * @hidden @internal\n * Used for templating the expand indicator of the tree\n */\n@Directive({\n    selector: '[igxTreeExpandIndicator]',\n    standalone: true\n})\nexport class IgxTreeExpandIndicatorDirective {\n}\n\n/**\n * IgxTreeComponent allows a developer to show a set of nodes in a hierarchical fashion.\n *\n * @igxModule IgxTreeModule\n * @igxKeywords tree\n * @igxTheme igx-tree-theme\n * @igxGroup Grids & Lists\n *\n * @remark\n * The Angular Tree Component allows users to represent hierarchical data in a tree-view structure,\n * maintaining parent-child relationships, as well as to define static tree-view structure without a corresponding data model.\n * Its primary purpose is to allow end-users to visualize and navigate within hierarchical data structures.\n * The Ignite UI for Angular Tree Component also provides load on demand capabilities, item activation,\n * bi-state and cascading selection of items through built-in checkboxes, built-in keyboard navigation and more.\n *\n * @example\n * ```html\n * <igx-tree>\n *   <igx-tree-node>\n *      I am a parent node 1\n *      <igx-tree-node>\n *          I am a child node 1\n *      </igx-tree-node>\n *      ...\n *   </igx-tree-node>\n *\t ...\n * </igx-tree>\n * ```\n */\n@Component({\n    selector: 'igx-tree',\n    templateUrl: 'tree.component.html',\n    providers: [\n        IgxTreeService,\n        IgxTreeSelectionService,\n        IgxTreeNavigationService,\n        { provide: IGX_TREE_COMPONENT, useExisting: IgxTreeComponent },\n    ],\n    standalone: true\n})\nexport class IgxTreeComponent implements IgxTree, OnInit, AfterViewInit, OnDestroy {\n\n    @HostBinding('class.igx-tree')\n    public cssClass = 'igx-tree';\n\n    /**\n     * Gets/Sets tree selection mode\n     *\n     * @remarks\n     * By default the tree selection mode is 'None'\n     * @param selectionMode: IgxTreeSelectionType\n     */\n    @Input()\n    public get selection() {\n        return this._selection;\n    }\n\n    public set selection(selectionMode: IgxTreeSelectionType) {\n        this._selection = selectionMode;\n        this.selectionService.clearNodesSelection();\n    }\n\n    /** Get/Set how the tree should handle branch expansion.\n     * If set to `true`, only a single branch can be expanded at a time, collapsing all others\n     *\n     * ```html\n     * <igx-tree [singleBranchExpand]=\"true\">\n     * ...\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const tree: IgxTree = this.tree;\n     * this.tree.singleBranchExpand = false;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public singleBranchExpand = false;\n\n    /** Get/Set if nodes should be expanded/collapsed when clicking over them.\n     *\n     * ```html\n     * <igx-tree [toggleNodeOnClick]=\"true\">\n     * ...\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const tree: IgxTree = this.tree;\n     * this.tree.toggleNodeOnClick = false;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public toggleNodeOnClick = false;\n\n\n    /** Get/Set the animation settings that branches should use when expanding/collpasing.\n     *\n     * ```html\n     * <igx-tree [animationSettings]=\"customAnimationSettings\">\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * const animationSettings: ToggleAnimationSettings = {\n     *      openAnimation: growVerIn,\n     *      closeAnimation: growVerOut\n     * };\n     *\n     * this.tree.animationSettings = animationSettings;\n     * ```\n     */\n    @Input()\n    public animationSettings: ToggleAnimationSettings = {\n        openAnimation: growVerIn,\n        closeAnimation: growVerOut\n    };\n\n    /** Emitted when the node selection is changed through interaction\n     *\n     * ```html\n     * <igx-tree (nodeSelection)=\"handleNodeSelection($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeSelection(event: ITreeNodeSelectionEvent) {\n     *  const newSelection: IgxTreeNode<any>[] = event.newSelection;\n     *  const added: IgxTreeNode<any>[] = event.added;\n     *  console.log(\"New selection will be: \", newSelection);\n     *  console.log(\"Added nodes: \", event.added);\n     * }\n     *```\n     */\n    @Output()\n    public nodeSelection = new EventEmitter<ITreeNodeSelectionEvent>();\n\n    /** Emitted when a node is expanding, before it finishes\n     *\n     * ```html\n     * <igx-tree (nodeExpanding)=\"handleNodeExpanding($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeExpanding(event: ITreeNodeTogglingEventArgs) {\n     *  const expandedNode: IgxTreeNode<any> = event.node;\n     *  if (expandedNode.disabled) {\n     *      event.cancel = true;\n     *  }\n     * }\n     *```\n     */\n    @Output()\n    public nodeExpanding = new EventEmitter<ITreeNodeTogglingEventArgs>();\n\n    /** Emitted when a node is expanded, after it finishes\n     *\n     * ```html\n     * <igx-tree (nodeExpanded)=\"handleNodeExpanded($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeExpanded(event: ITreeNodeToggledEventArgs) {\n     *  const expandedNode: IgxTreeNode<any> = event.node;\n     *  console.log(\"Node is expanded: \", expandedNode.data);\n     * }\n     *```\n     */\n    @Output()\n    public nodeExpanded = new EventEmitter<ITreeNodeToggledEventArgs>();\n\n    /** Emitted when a node is collapsing, before it finishes\n     *\n     * ```html\n     * <igx-tree (nodeCollapsing)=\"handleNodeCollapsing($event)\">\n     * </igx-tree>\n     * ```\n     *\n     *```typescript\n     * public handleNodeCollapsing(event: ITreeNodeTogglingEventArgs) {\n     *  const collapsedNode: IgxTreeNode<any> = event.node;\n     *  if (collapsedNode.alwaysOpen) {\n     *      event.cancel = true;\n     *  }\n     * }\n     *```\n     */\n    @Output()\n    public nodeCollapsing = new EventEmitter<ITreeNodeTogglingEventArgs>();\n\n    /** Emitted when a node is collapsed, after it finishes\n     *\n     * @example\n     * ```html\n     * <igx-tree (nodeCollapsed)=\"handleNodeCollapsed($event)\">\n     * </igx-tree>\n     * ```\n     * ```typescript\n     * public handleNodeCollapsed(event: ITreeNodeToggledEventArgs) {\n     *  const collapsedNode: IgxTreeNode<any> = event.node;\n     *  console.log(\"Node is collapsed: \", collapsedNode.data);\n     * }\n     * ```\n     */\n    @Output()\n    public nodeCollapsed = new EventEmitter<ITreeNodeToggledEventArgs>();\n\n    /**\n     * Emitted when the active node is changed.\n     *\n     * @example\n     * ```\n     * <igx-tree (activeNodeChanged)=\"activeNodeChanged($event)\"></igx-tree>\n     * ```\n     */\n    @Output()\n    public activeNodeChanged = new EventEmitter<IgxTreeNode<any>>();\n\n    /**\n     * A custom template to be used for the expand indicator of nodes\n     * ```html\n     * <igx-tree>\n     *  <ng-template igxTreeExpandIndicator let-expanded>\n     *      <igx-icon>{{ expanded ? \"close_fullscreen\": \"open_in_full\"}}</igx-icon>\n     *  </ng-template>\n     * </igx-tree>\n     * ```\n     */\n    @ContentChild(IgxTreeExpandIndicatorDirective, { read: TemplateRef })\n    public expandIndicator: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxTreeNodeComponent, { descendants: true })\n    public nodes: QueryList<IgxTreeNodeComponent<any>>;\n\n    /** @hidden @internal */\n    public disabledChange = new EventEmitter<IgxTreeNode<any>>();\n\n    /**\n     * Returns all **root level** nodes\n     *\n     * ```typescript\n     * const tree: IgxTree = this.tree;\n     * const rootNodes: IgxTreeNodeComponent<any>[] = tree.rootNodes;\n     * ```\n     */\n    public get rootNodes(): IgxTreeNodeComponent<any>[] {\n        return this.nodes?.filter(node => node.level === 0);\n    }\n\n    /**\n     * Emitted when the active node is set through API\n     *\n     * @hidden @internal\n     */\n    public activeNodeBindingChange = new EventEmitter<IgxTreeNode<any>>();\n\n    /** @hidden @internal */\n    public forceSelect = [];\n\n    /** @hidden @internal */\n    public resizeNotify = new Subject<void>();\n\n    private _selection: IgxTreeSelectionType = IgxTreeSelectionType.None;\n    private destroy$ = new Subject<void>();\n    private unsubChildren$ = new Subject<void>();\n\n    constructor(\n        private navService: IgxTreeNavigationService,\n        private selectionService: IgxTreeSelectionService,\n        private treeService: IgxTreeService,\n        private element: ElementRef<HTMLElement>,\n    ) {\n        this.selectionService.register(this);\n        this.treeService.register(this);\n        this.navService.register(this);\n    }\n\n    /** @hidden @internal */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * Expands all of the passed nodes.\n     * If no nodes are passed, expands ALL nodes\n     *\n     * @param nodes nodes to be expanded\n     *\n     * ```typescript\n     * const targetNodes: IgxTreeNode<any> = this.tree.findNodes(true, (_data: any, node: IgxTreeNode<any>) => node.data.expandable);\n     * tree.expandAll(nodes);\n     * ```\n     */\n    public expandAll(nodes?: IgxTreeNode<any>[]) {\n        nodes = nodes || this.nodes.toArray();\n        nodes.forEach(e => e.expanded = true);\n    }\n\n    /**\n     * Collapses all of the passed nodes.\n     * If no nodes are passed, collapses ALL nodes\n     *\n     * @param nodes nodes to be collapsed\n     *\n     * ```typescript\n     * const targetNodes: IgxTreeNode<any> = this.tree.findNodes(true, (_data: any, node: IgxTreeNode<any>) => node.data.collapsible);\n     * tree.collapseAll(nodes);\n     * ```\n     */\n    public collapseAll(nodes?: IgxTreeNode<any>[]) {\n        nodes = nodes || this.nodes.toArray();\n        nodes.forEach(e => e.expanded = false);\n    }\n\n    /**\n     * Deselect all nodes if the nodes collection is empty. Otherwise, deselect the nodes in the nodes collection.\n     *\n     * @example\n     * ```typescript\n     *  const arr = [\n     *      this.tree.nodes.toArray()[0],\n     *      this.tree.nodes.toArray()[1]\n     *  ];\n     *  this.tree.deselectAll(arr);\n     * ```\n     * @param nodes: IgxTreeNodeComponent<any>[]\n     */\n    public deselectAll(nodes?: IgxTreeNodeComponent<any>[]) {\n        this.selectionService.deselectNodesWithNoEvent(nodes);\n    }\n\n    /**\n     * Returns all of the nodes that match the passed searchTerm.\n     * Accepts a custom comparer function for evaluating the search term against the nodes.\n     *\n     * @remarks\n     * Default search compares the passed `searchTerm` against the node's `data` Input.\n     * When using `findNodes` w/o a `comparer`, make sure all nodes have `data` passed.\n     *\n     * @param searchTerm The data of the searched node\n     * @param comparer A custom comparer function that evaluates the passed `searchTerm` against all nodes.\n     * @returns Array of nodes that match the search. `null` if no nodes are found.\n     *\n     * ```html\n     * <igx-tree>\n     *     <igx-tree-node *ngFor=\"let node of data\" [data]=\"node\">\n     *          {{ node.label }}\n     *     </igx-tree-node>\n     * </igx-tree>\n     * ```\n     *\n     * ```typescript\n     * public data: DataEntry[] = FETCHED_DATA;\n     * ...\n     * const matchedNodes: IgxTreeNode<DataEntry>[] = this.tree.findNodes<DataEntry>(searchTerm: data[5]);\n     * ```\n     *\n     * Using a custom comparer\n     * ```typescript\n     * public data: DataEntry[] = FETCHED_DATA;\n     * ...\n     * const comparer: IgxTreeSearchResolver = (data: any, node: IgxTreeNode<DataEntry>) {\n     *      return node.data.index % 2 === 0;\n     * }\n     * const evenIndexNodes: IgxTreeNode<DataEntry>[] = this.tree.findNodes<DataEntry>(null, comparer);\n     * ```\n     */\n    public findNodes(searchTerm: any, comparer?: IgxTreeSearchResolver): IgxTreeNodeComponent<any>[] | null {\n        const compareFunc = comparer || this._comparer;\n        const results = this.nodes.filter(node => compareFunc(searchTerm, node));\n        return results?.length === 0 ? null : results;\n    }\n\n    /** @hidden @internal */\n    public handleKeydown(event: KeyboardEvent) {\n        this.navService.handleKeydown(event);\n    }\n\n    /** @hidden @internal */\n    public ngOnInit() {\n        this.disabledChange.pipe(takeUntil(this.destroy$)).subscribe((e) => {\n            this.navService.update_disabled_cache(e);\n        });\n        this.activeNodeBindingChange.pipe(takeUntil(this.destroy$)).subscribe((node) => {\n            this.expandToNode(this.navService.activeNode);\n            this.scrollNodeIntoView(node?.header?.nativeElement);\n        });\n        this.subToCollapsing();\n        this.resizeNotify.pipe(\n            throttleTime(40, null, { trailing: true }),\n            takeUntil(this.destroy$)\n        )\n        .subscribe(() => {\n            requestAnimationFrame(() => {\n                this.scrollNodeIntoView(this.navService.activeNode?.header.nativeElement);\n            });\n        });\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit() {\n        this.nodes.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.subToChanges();\n        });\n        this.scrollNodeIntoView(this.navService.activeNode?.header?.nativeElement);\n        this.subToChanges();\n        resizeObservable(this.nativeElement).pipe(takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy() {\n        this.unsubChildren$.next();\n        this.unsubChildren$.complete();\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    private expandToNode(node: IgxTreeNode<any>) {\n        if (node && node.parentNode) {\n            node.path.forEach(n => {\n                if (n !== node && !n.expanded) {\n                    n.expanded = true;\n                }\n            });\n        }\n    }\n\n    private subToCollapsing() {\n        this.nodeCollapsing.pipe(takeUntil(this.destroy$)).subscribe(event => {\n            if (event.cancel) {\n                return;\n            }\n            this.navService.update_visible_cache(event.node, false);\n        });\n        this.nodeExpanding.pipe(takeUntil(this.destroy$)).subscribe(event => {\n            if (event.cancel) {\n                return;\n            }\n            this.navService.update_visible_cache(event.node, true);\n        });\n    }\n\n    private subToChanges() {\n        this.unsubChildren$.next();\n        const toBeSelected = [...this.forceSelect];\n        requestAnimationFrame(() => {\n            this.selectionService.selectNodesWithNoEvent(toBeSelected);\n        });\n        this.forceSelect = [];\n        this.nodes.forEach(node => {\n            node.expandedChange.pipe(takeUntil(this.unsubChildren$)).subscribe(nodeState => {\n                this.navService.update_visible_cache(node, nodeState);\n            });\n            node.closeAnimationDone.pipe(takeUntil(this.unsubChildren$)).subscribe(() => {\n                const targetElement = this.navService.focusedNode?.header.nativeElement;\n                this.scrollNodeIntoView(targetElement);\n            });\n            node.openAnimationDone.pipe(takeUntil(this.unsubChildren$)).subscribe(() => {\n                const targetElement = this.navService.focusedNode?.header.nativeElement;\n                this.scrollNodeIntoView(targetElement);\n            });\n        });\n        this.navService.init_invisible_cache();\n    }\n\n    private scrollNodeIntoView(el: HTMLElement) {\n        if (!el) {\n            return;\n        }\n        const nodeRect = el.getBoundingClientRect();\n        const treeRect = this.nativeElement.getBoundingClientRect();\n        const topOffset = treeRect.top > nodeRect.top ? nodeRect.top - treeRect.top : 0;\n        const bottomOffset = treeRect.bottom < nodeRect.bottom ? nodeRect.bottom - treeRect.bottom : 0;\n        const shouldScroll = !!topOffset || !!bottomOffset;\n        if (shouldScroll && this.nativeElement.scrollHeight > this.nativeElement.clientHeight) {\n            // this.nativeElement.scrollTop = nodeRect.y - treeRect.y - nodeRect.height;\n            this.nativeElement.scrollTop =\n                this.nativeElement.scrollTop + bottomOffset + topOffset + (topOffset ? -1 : +1) * nodeRect.height;\n        }\n    }\n\n    private _comparer = <T>(data: T, node: IgxTreeNodeComponent<T>) => node.data === data;\n\n}\n","<div class=\"igx-tree__root\" role=\"tree\" (keydown)=\"handleKeydown($event)\">\n    <ng-content select=\"igx-tree-node\"></ng-content>\n</div>\n","import { Directive, TemplateRef, EventEmitter, QueryList, Optional, ElementRef } from '@angular/core';\n\nexport interface IListChild {\n    index: number;\n}\n\n/** @hidden */\n@Directive({\n    selector: '[igxListBase]',\n    standalone: true\n})\nexport class IgxListBaseDirective {\n    public itemClicked: EventEmitter<any>;\n    public allowLeftPanning: boolean;\n    public allowRightPanning: boolean;\n    public panEndTriggeringThreshold: number;\n    public leftPan: EventEmitter<any>;\n    public rightPan: EventEmitter<any>;\n    public startPan: EventEmitter<any>;\n    public endPan: EventEmitter<any>;\n    public resetPan: EventEmitter<any>;\n    public panStateChange: EventEmitter<any>;\n    public children: QueryList<any>;\n    public listItemLeftPanningTemplate: IgxListItemLeftPanningTemplateDirective;\n    public listItemRightPanningTemplate: IgxListItemRightPanningTemplateDirective;\n\n    constructor(@Optional() protected el: ElementRef) {}\n}\n\nexport enum IgxListPanState { NONE, LEFT, RIGHT }\n\n@Directive({\n    selector: '[igxEmptyList]',\n    standalone: true\n})\nexport class IgxEmptyListTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({\n    selector: '[igxDataLoading]',\n    standalone: true\n})\nexport class IgxDataLoadingTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({\n    selector: '[igxListItemLeftPanning]',\n    standalone: true\n})\nexport class IgxListItemLeftPanningTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({\n    selector: '[igxListItemRightPanning]',\n    standalone: true\n})\nexport class IgxListItemRightPanningTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    Renderer2,\n    ViewChild,\n    booleanAttribute\n} from '@angular/core';\n\nimport {\n    IgxListPanState,\n    IListChild,\n    IgxListBaseDirective\n} from './list.common';\n\nimport { HammerGesturesManager } from '../core/touch';\nimport { rem } from '../core/utils';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/**\n * The Ignite UI List Item component is a container intended for row items in the Ignite UI for Angular List component.\n *\n * Example:\n * ```html\n * <igx-list>\n *   <igx-list-item isHeader=\"true\">Contacts</igx-list-item>\n *   <igx-list-item *ngFor=\"let contact of contacts\">\n *     <span class=\"name\">{{ contact.name }}</span>\n *     <span class=\"phone\">{{ contact.phone }}</span>\n *   </igx-list-item>\n * </igx-list>\n * ```\n */\n@Component({\n    providers: [HammerGesturesManager],\n    selector: 'igx-list-item',\n    templateUrl: 'list-item.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [NgTemplateOutlet]\n})\nexport class IgxListItemComponent implements IListChild {\n    /**\n     * Provides a reference to the template's base element shown when left panning a list item.\n     * ```typescript\n     * const leftPanTmpl = this.listItem.leftPanningTemplateElement;\n     * ```\n     */\n    @ViewChild('leftPanningTmpl')\n    public leftPanningTemplateElement;\n\n    /**\n     * Provides a reference to the template's base element shown when right panning a list item.\n     * ```typescript\n     * const rightPanTmpl = this.listItem.rightPanningTemplateElement;\n     * ```\n     */\n    @ViewChild('rightPanningTmpl')\n    public rightPanningTemplateElement;\n\n    /**\n     * Sets/gets whether the `list item` is a header.\n     * ```html\n     * <igx-list-item [isHeader] = \"true\">Header</igx-list-item>\n     * ```\n     * ```typescript\n     * let isHeader =  this.listItem.isHeader;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public isHeader: boolean;\n\n    /**\n     * Sets/gets whether the `list item` is hidden.\n     * By default the `hidden` value is `false`.\n     * ```html\n     * <igx-list-item [hidden] = \"true\">Hidden Item</igx-list-item>\n     * ```\n     * ```typescript\n     * let isHidden =  this.listItem.hidden;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public hidden = false;\n\n    /**\n     * Sets/gets the `aria-label` attribute of the `list item`.\n     * ```typescript\n     * this.listItem.ariaLabel = \"Item1\";\n     * ```\n     * ```typescript\n     * let itemAriaLabel = this.listItem.ariaLabel;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @HostBinding('attr.aria-label')\n    public ariaLabel: string;\n\n    /**\n     * Gets the `touch-action` style of the `list item`.\n     * ```typescript\n     * let touchAction = this.listItem.touchAction;\n     * ```\n     */\n    @HostBinding('style.touch-action')\n    public touchAction = 'pan-y';\n\n    /**\n     * @hidden\n     */\n    private _panState: IgxListPanState = IgxListPanState.NONE;\n\n    /**\n     * @hidden\n     */\n    private panOffset = 0;\n\n    /**\n     * @hidden\n     */\n    private _index: number = null;\n\n    /**\n     * @hidden\n     */\n    private lastPanDir = IgxListPanState.NONE;\n\n    private _role: string = '';\n    private _selected = false;;\n\n    /**\n     * Gets the `panState` of a `list item`.\n     * ```typescript\n     * let itemPanState =  this.listItem.panState;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public get panState(): IgxListPanState {\n        return this._panState;\n    }\n\n    /**\n     * Gets the `index` of a `list item`.\n     * ```typescript\n     * let itemIndex =  this.listItem.index;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @Input()\n    public get index(): number {\n        return this._index !== null ? this._index : this.list.children.toArray().indexOf(this);\n    }\n\n    /**\n     * Sets the `index` of the `list item`.\n     * ```typescript\n     * this.listItem.index = index;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public set index(value: number) {\n        this._index = value;\n    }\n\n    /**\n     * Returns an element reference to the list item.\n     * ```typescript\n     * let listItemElement =  this.listItem.element.\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public get element() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * Returns a reference container which contains the list item's content.\n     * ```typescript\n     * let listItemContainer =  this.listItem.contentElement.\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public get contentElement() {\n        const candidates = this.element.getElementsByClassName('igx-list__item-content');\n        return (candidates && candidates.length > 0) ? candidates[0] : null;\n    }\n\n    /**\n     * Returns the `context` object which represents the `template context` binding into the `list item container`\n     * by providing the `$implicit` declaration which is the `IgxListItemComponent` itself.\n     * ```typescript\n     * let listItemComponent = this.listItem.context;\n     * ```\n     */\n    public get context(): any {\n        return {\n            $implicit: this\n        };\n    }\n\n    /**\n     * Gets the width of a `list item`.\n     * ```typescript\n     * let itemWidth = this.listItem.width;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public get width() {\n        if (this.element) {\n            return this.element.offsetWidth;\n        }\n    }\n\n    /**\n     * Gets the maximum left position of the `list item`.\n     * ```typescript\n     * let maxLeft = this.listItem.maxLeft;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public get maxLeft() {\n        return -this.width;\n    }\n\n    /**\n     * Gets the maximum right position of the `list item`.\n     * ```typescript\n     * let maxRight = this.listItem.maxRight;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    public get maxRight() {\n        return this.width;\n    }\n\n    /** @hidden @internal */\n    public get offsetWidthInRem() {\n        return rem(this.element.offsetWidth);\n    }\n\n    /** @hidden @internal */\n    public get offsetHeightInRem() {\n        return rem(this.element.offsetHeight);\n    }\n\n    constructor(\n        public list: IgxListBaseDirective,\n        private elementRef: ElementRef,\n        private _renderer: Renderer2) {\n    }\n\n    /**\n     * Gets/Sets the `role` attribute of the `list item`.\n     * ```typescript\n     * let itemRole =  this.listItem.role;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public get role() {\n        return this._role ? this._role : this.isHeader ? 'separator' : 'listitem';\n    }\n\n    public set role(val: string) {\n        this._role = val;\n    }\n\n    /**\n     * Sets/gets whether the `list item` is selected.\n     * Selection is only applied to non-header items.\n     * When selected, the CSS class 'igx-list__item-base--selected' is added to the item.\n     * ```html\n     * <igx-list-item [selected]=\"true\">Selected Item</igx-list-item>\n     * ```\n     * ```typescript\n     * let isSelected = this.listItem.selected;\n     * this.listItem.selected = true;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @HostBinding('class.igx-list__item-base--selected')\n    @Input({ transform: booleanAttribute })\n    public get selected() {\n        return this._selected && !this.isHeader;\n    }\n\n    public set selected(value: boolean) {\n        this._selected = value;\n    }\n\n    /**\n     * Indicates whether `list item` should have header style.\n     * ```typescript\n     * let headerStyle =  this.listItem.headerStyle;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @HostBinding('class.igx-list__header')\n    public get headerStyle(): boolean {\n        return this.isHeader;\n    }\n\n    /**\n     * Applies the inner style of the `list item` if the item is not counted as header.\n     * ```typescript\n     * let innerStyle =  this.listItem.innerStyle;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @HostBinding('class.igx-list__item-base')\n    public get innerStyle(): boolean {\n        return !this.isHeader;\n    }\n\n    /**\n     * Returns string value which describes the display mode of the `list item`.\n     * ```typescript\n     * let isHidden = this.listItem.display;\n     * ```\n     *\n     * @memberof IgxListItemComponent\n     */\n    @HostBinding('style.display')\n    public get display(): string {\n        return this.hidden ? 'none' : '';\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('click', ['$event'])\n    public clicked(evt) {\n        this.list.itemClicked.emit({ item: this, event: evt, direction: this.lastPanDir });\n        this.lastPanDir = IgxListPanState.NONE;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('panstart')\n    public panStart() {\n        if (this.isTrue(this.isHeader)) {\n            return;\n        }\n        if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n            return;\n        }\n\n        this.list.startPan.emit({ item: this, direction: this.lastPanDir, keepitem: false });\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pancancel')\n    public panCancel() {\n        this.resetPanPosition();\n        this.list.endPan.emit({ item: this, direction: this.lastPanDir, keepItem: false });\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('panmove', ['$event'])\n    public panMove(ev) {\n        if (this.isTrue(this.isHeader)) {\n            return;\n        }\n        if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n            return;\n        }\n        const isPanningToLeft = ev.deltaX < 0;\n        if (isPanningToLeft && this.isTrue(this.list.allowLeftPanning)) {\n            this.showLeftPanTemplate();\n            this.setContentElementLeft(Math.max(this.maxLeft, ev.deltaX));\n        } else if (!isPanningToLeft && this.isTrue(this.list.allowRightPanning)) {\n            this.showRightPanTemplate();\n            this.setContentElementLeft(Math.min(this.maxRight, ev.deltaX));\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('panend')\n    public panEnd() {\n        if (this.isTrue(this.isHeader)) {\n            return;\n        }\n        if (!this.isTrue(this.list.allowLeftPanning) && !this.isTrue(this.list.allowRightPanning)) {\n            return;\n        }\n\n        // the translation offset of the current list item content\n        const relativeOffset = this.panOffset;\n        const widthTriggeringGrip = this.width * this.list.panEndTriggeringThreshold;\n\n        if (relativeOffset === 0) {\n            return; // no panning has occured\n        }\n\n        const dir = relativeOffset > 0 ? IgxListPanState.RIGHT : IgxListPanState.LEFT;\n        this.lastPanDir = dir;\n\n        const args = { item: this, direction: dir, keepItem: false };\n        this.list.endPan.emit(args);\n\n        const oldPanState = this._panState;\n        if (Math.abs(relativeOffset) < widthTriggeringGrip) {\n            this.resetPanPosition();\n            this.list.resetPan.emit(this);\n            return;\n        }\n\n        if (dir === IgxListPanState.LEFT) {\n            this.list.leftPan.emit(args);\n        } else {\n            this.list.rightPan.emit(args);\n        }\n\n        if (args.keepItem === true) {\n            this.setContentElementLeft(0);\n            this._panState = IgxListPanState.NONE;\n        } else {\n            if (dir === IgxListPanState.LEFT) {\n                this.setContentElementLeft(this.maxLeft);\n                this._panState = IgxListPanState.LEFT;\n            } else {\n                this.setContentElementLeft(this.maxRight);\n                this._panState = IgxListPanState.RIGHT;\n            }\n        }\n\n        if (oldPanState !== this._panState) {\n            const args2 = { oldState: oldPanState, newState: this._panState, item: this };\n            this.list.panStateChange.emit(args2);\n        }\n        this.hideLeftAndRightPanTemplates();\n    }\n\n    /**\n     * @hidden\n     */\n    private showLeftPanTemplate() {\n        this.setLeftAndRightTemplatesVisibility('visible', 'hidden');\n    }\n\n    /**\n     * @hidden\n     */\n    private showRightPanTemplate() {\n        this.setLeftAndRightTemplatesVisibility('hidden', 'visible');\n    }\n\n    /**\n     * @hidden\n     */\n    private hideLeftAndRightPanTemplates() {\n        setTimeout(() => {\n            this.setLeftAndRightTemplatesVisibility('hidden', 'hidden');\n        }, 500);\n    }\n\n    /**\n     * @hidden\n     */\n    private setLeftAndRightTemplatesVisibility(leftVisibility, rightVisibility) {\n        if (this.leftPanningTemplateElement && this.leftPanningTemplateElement.nativeElement) {\n            this.leftPanningTemplateElement.nativeElement.style.visibility = leftVisibility;\n        }\n        if (this.rightPanningTemplateElement && this.rightPanningTemplateElement.nativeElement) {\n            this.rightPanningTemplateElement.nativeElement.style.visibility = rightVisibility;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    private setContentElementLeft(value: number) {\n        this.panOffset = value;\n        this.contentElement.style.transform = 'translateX(' + value + 'px)';\n    }\n\n    /**\n     * @hidden\n     */\n    private isTrue(value: boolean): boolean {\n        if (typeof (value) === 'boolean') {\n            return value;\n        } else {\n            return value === 'true';\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    private resetPanPosition() {\n        this.setContentElementLeft(0);\n        this._panState = IgxListPanState.NONE;\n        this.hideLeftAndRightPanTemplates();\n    }\n}\n","\n@if (!isHeader && list.listItemLeftPanningTemplate) {\n    <div #leftPanningTmpl class=\"igx-list__item-right\"\n        [style.width.rem]=\"offsetWidthInRem\" [style.height.rem]=\"offsetHeightInRem\">\n        <ng-container *ngTemplateOutlet=\"list.listItemLeftPanningTemplate.template; context: context\">\n        </ng-container>\n    </div>\n}\n\n@if (!isHeader && list.listItemRightPanningTemplate) {\n    <div #rightPanningTmpl class=\"igx-list__item-left\"\n        [style.width.rem]=\"offsetWidthInRem\" [style.height.rem]=\"offsetHeightInRem\">\n        <ng-container *ngTemplateOutlet=\"list.listItemRightPanningTemplate.template; context: context\">\n        </ng-container>\n    </div>\n}\n\n<ng-template #itemsContent>\n    <ng-content></ng-content>\n</ng-template>\n\n<ng-template #itemThumbnails>\n    <div class=\"igx-list__item-thumbnail\">\n        <ng-content select=\"[igxListThumbnail], igx-list__item-thumbnail, igx-avatar\"></ng-content>\n    </div>\n</ng-template>\n\n<ng-template #itemLines>\n    <div class=\"igx-list__item-lines\">\n        <ng-content select=\"[igxListLine], .igx-list__item-lines, [igxListLineTitle], [igxListLineSubTitle], .igx-list__item-line-title, .igx-list__item-line-subtitle\"></ng-content>\n    </div>\n</ng-template>\n\n<ng-template #itemActions>\n    <div class=\"igx-list__item-actions\">\n        <ng-content select=\"[igxListAction], .igx-list__item-actions\"></ng-content>\n    </div>\n</ng-template>\n\n@if (isHeader) {\n    <ng-container *ngTemplateOutlet=\"itemsContent\"></ng-container>\n}\n\n@if (!isHeader) {\n    <div class=\"igx-list__item-content\">\n        <ng-container *ngTemplateOutlet=\"itemThumbnails\"></ng-container>\n        <ng-container *ngTemplateOutlet=\"itemLines\"></ng-container>\n        <ng-container *ngTemplateOutlet=\"itemActions\"></ng-container>\n        <ng-container *ngTemplateOutlet=\"itemsContent\"></ng-container>\n    </div>\n}\n","export interface IListResourceStrings {\n    igx_list_no_items?: string;\n    igx_list_loading?: string;\n}\n\nexport const ListResourceStringsEN: IListResourceStrings = {\n    igx_list_no_items: 'There are no items in the list.',\n    igx_list_loading: 'Loading data from the server...'\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    Input,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    Directive,\n    booleanAttribute\n} from '@angular/core';\n\n\n\nimport { IgxListItemComponent } from './list-item.component';\nimport {\n    IgxListBaseDirective,\n    IgxDataLoadingTemplateDirective,\n    IgxEmptyListTemplateDirective,\n    IgxListPanState,\n    IgxListItemLeftPanningTemplateDirective,\n    IgxListItemRightPanningTemplateDirective\n} from './list.common';\nimport { IBaseEventArgs } from '../core/utils';\nimport { IListResourceStrings, ListResourceStringsEN } from '../core/i18n/list-resources';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\n\nlet NEXT_ID = 0;\n\n/**\n * Interface for the panStateChange igxList event arguments\n */\nexport interface IPanStateChangeEventArgs extends IBaseEventArgs {\n    oldState: IgxListPanState;\n    newState: IgxListPanState;\n    item: IgxListItemComponent;\n}\n\n/**\n * Interface for the listItemClick igxList event arguments\n */\nexport interface IListItemClickEventArgs extends IBaseEventArgs {\n    item: IgxListItemComponent;\n    event: Event;\n    direction: IgxListPanState;\n}\n\n/**\n * Interface for the listItemPanning igxList event arguments\n */\nexport interface IListItemPanningEventArgs extends IBaseEventArgs {\n    item: IgxListItemComponent;\n    direction: IgxListPanState;\n    keepItem: boolean;\n}\n\n/**\n * igxListThumbnail is container for the List media\n * Use it to wrap anything you want to be used as a thumbnail.\n */\n@Directive({\n    selector: '[igxListThumbnail]',\n    standalone: true\n})\nexport class IgxListThumbnailDirective { }\n\n/**\n * igxListAction is container for the List action\n * Use it to wrap anything you want to be used as a list action: icon, checkbox...\n */\n@Directive({\n    selector: '[igxListAction]',\n    standalone: true\n})\nexport class IgxListActionDirective { }\n\n/**\n * igxListLine is container for the List text content\n * Use it to wrap anything you want to be used as a plane text.\n */\n@Directive({\n    selector: '[igxListLine]',\n    standalone: true\n})\nexport class IgxListLineDirective { }\n\n/**\n * igxListLineTitle is a directive that add class to the target element\n * Use it to make anything to look like list Title.\n */\n@Directive({\n    selector: '[igxListLineTitle]',\n    standalone: true\n})\nexport class IgxListLineTitleDirective {\n    @HostBinding('class.igx-list__item-line-title')\n    public cssClass = 'igx-list__item-line-title';\n}\n\n/**\n * igxListLineSubTitle is a directive that add class to the target element\n * Use it to make anything to look like list Subtitle.\n */\n@Directive({\n    selector: '[igxListLineSubTitle]',\n    standalone: true\n})\nexport class IgxListLineSubTitleDirective {\n    @HostBinding('class.igx-list__item-line-subtitle')\n    public cssClass = 'igx-list__item-line-subtitle';\n}\n\n/**\n * Displays a collection of data items in a templatable list format\n *\n * @igxModule IgxListModule\n *\n * @igxTheme igx-list-theme\n *\n * @igxKeywords list, data\n *\n * @igxGroup Grids & Lists\n *\n * @remarks\n * The Ignite UI List displays rows of items and supports one or more header items as well as search and filtering\n * of list items. Each list item is completely templatable and will support any valid HTML or Angular component.\n *\n * @example\n * ```html\n * <igx-list>\n *   <igx-list-item isHeader=\"true\">Contacts</igx-list-item>\n *   <igx-list-item *ngFor=\"let contact of contacts\">\n *     <span class=\"name\">{{ contact.name }}</span>\n *     <span class=\"phone\">{{ contact.phone }}</span>\n *   </igx-list-item>\n * </igx-list>\n * ```\n */\n@Component({\n    selector: 'igx-list',\n    templateUrl: 'list.component.html',\n    providers: [{ provide: IgxListBaseDirective, useExisting: IgxListComponent }],\n    imports: [NgTemplateOutlet]\n})\nexport class IgxListComponent extends IgxListBaseDirective {\n    /**\n     * Returns a collection of all items and headers in the list.\n     *\n     * @example\n     * ```typescript\n     * let listChildren: QueryList = this.list.children;\n     * ```\n     */\n    @ContentChildren(forwardRef(() => IgxListItemComponent), { descendants: true })\n    public override children: QueryList<IgxListItemComponent>;\n\n    /**\n     * Sets/gets the empty list template.\n     *\n     * @remarks\n     * This template is used by IgxList in case there are no list items\n     * defined and `isLoading` is set to `false`.\n     *\n     * @example\n     * ```html\n     * <igx-list>\n     *   <ng-template igxEmptyList>\n     *     <p class=\"empty\">No contacts! :(</p>\n     *   </ng-template>\n     * </igx-list>\n     * ```\n     * ```typescript\n     * let emptyTemplate = this.list.emptyListTemplate;\n     * ```\n     */\n    @ContentChild(IgxEmptyListTemplateDirective, { read: IgxEmptyListTemplateDirective })\n    public emptyListTemplate: IgxEmptyListTemplateDirective;\n\n    /**\n     * Sets/gets the list loading template.\n     *\n     * @remarks\n     * This template is used by IgxList in case there are no list items defined and `isLoading` is set to `true`.\n     *\n     * @example\n     * ```html\n     * <igx-list>\n     *   <ng-template igxDataLoading>\n     *     <p>Patience, we are currently loading your data...</p>\n     *   </ng-template>\n     * </igx-list>\n     * ```\n     * ```typescript\n     * let loadingTemplate = this.list.dataLoadingTemplate;\n     * ```\n     */\n    @ContentChild(IgxDataLoadingTemplateDirective, { read: IgxDataLoadingTemplateDirective })\n    public dataLoadingTemplate: IgxDataLoadingTemplateDirective;\n\n    /**\n     * Sets/gets the template for left panning a list item.\n     *\n     * @remarks\n     * Default value is `null`.\n     *\n     * @example\n     * ```html\n     * <igx-list [allowLeftPanning]=\"true\">\n     *   <ng-template igxListItemLeftPanning>\n     *     <igx-icon>delete</igx-icon>Delete\n     *   </ng-template>\n     * </igx-list>\n     * ```\n     * ```typescript\n     * let itemLeftPanTmpl = this.list.listItemLeftPanningTemplate;\n     * ```\n     */\n    @ContentChild(IgxListItemLeftPanningTemplateDirective, { read: IgxListItemLeftPanningTemplateDirective })\n    public override listItemLeftPanningTemplate: IgxListItemLeftPanningTemplateDirective;\n\n    /**\n     * Sets/gets the template for right panning a list item.\n     *\n     * @remarks\n     * Default value is `null`.\n     *\n     * @example\n     * ```html\n     * <igx-list [allowRightPanning] = \"true\">\n     *   <ng-template igxListItemRightPanning>\n     *     <igx-icon>call</igx-icon>Dial\n     *   </ng-template>\n     * </igx-list>\n     * ```\n     * ```typescript\n     * let itemRightPanTmpl = this.list.listItemRightPanningTemplate;\n     * ```\n     */\n    @ContentChild(IgxListItemRightPanningTemplateDirective, { read: IgxListItemRightPanningTemplateDirective })\n    public override listItemRightPanningTemplate: IgxListItemRightPanningTemplateDirective;\n\n    /**\n     * Provides a threshold after which the item's panning will be completed automatically.\n     *\n     * @remarks\n     * By default this property is set to 0.5 which is 50% of the list item's width.\n     *\n     * @example\n     * ```html\n     * <igx-list [panEndTriggeringThreshold]=\"0.8\"></igx-list>\n     * ```\n     */\n    @Input()\n    public override panEndTriggeringThreshold = 0.5;\n\n    /**\n     * Sets/gets the `id` of the list.\n     *\n     * @remarks\n     * If not set, the `id` of the first list component will be `\"igx-list-0\"`.\n     *\n     * @example\n     * ```html\n     * <igx-list id=\"my-first-list\"></igx-list>\n     * ```\n     * ```typescript\n     * let listId = this.list.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-list-${NEXT_ID++}`;\n\n    /**\n     * Sets/gets whether the left panning of an item is allowed.\n     *\n     * @remarks\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-list [allowLeftPanning]=\"true\"></igx-list>\n     * ```\n     * ```typescript\n     * let isLeftPanningAllowed = this.list.allowLeftPanning;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public override allowLeftPanning = false;\n\n    /**\n     * Sets/gets whether the right panning of an item is allowed.\n     *\n     * @remarks\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-list [allowRightPanning]=\"true\"></igx-list>\n     * ```\n     * ```typescript\n     * let isRightPanningAllowed = this.list.allowRightPanning;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public override allowRightPanning = false;\n\n    /**\n     * Sets/gets whether the list is currently loading data.\n     *\n     * @remarks\n     * Set it to display the dataLoadingTemplate while data is being retrieved.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     *  <igx-list [isLoading]=\"true\"></igx-list>\n     * ```\n     * ```typescript\n     * let isLoading = this.list.isLoading;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public isLoading = false;\n\n    /**\n     * Event emitted when a left pan gesture is executed on a list item.\n     *\n     * @remarks\n     * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n     *\n     * @example\n     * ```html\n     * <igx-list [allowLeftPanning]=\"true\" (leftPan)=\"leftPan($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override leftPan = new EventEmitter<IListItemPanningEventArgs>();\n\n    /**\n     * Event emitted when a right pan gesture is executed on a list item.\n     *\n     * @remarks\n     * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n     *\n     * @example\n     * ```html\n     * <igx-list [allowRightPanning]=\"true\" (rightPan)=\"rightPan($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override rightPan = new EventEmitter<IListItemPanningEventArgs>();\n\n    /**\n     * Event emitted when a pan gesture is started.\n     *\n     * @remarks\n     * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n     *\n     * @example\n     * ```html\n     * <igx-list (startPan)=\"startPan($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override startPan = new EventEmitter<IListItemPanningEventArgs>();\n\n    /**\n     * Event emitted when a pan gesture is completed or canceled.\n     *\n     * @remarks\n     * Provides a reference to an object of type `IListItemPanningEventArgs` as an event argument.\n     *\n     * @example\n     * ```html\n     * <igx-list (endPan)=\"endPan($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override endPan = new EventEmitter<IListItemPanningEventArgs>();\n\n    /**\n     * Event emitted when a pan item is returned to its original position.\n     *\n     * @remarks\n     * Provides a reference to an object of type `IgxListComponent` as an event argument.\n     *\n     * @example\n     * ```html\n     * <igx-list (resetPan)=\"resetPan($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override resetPan = new EventEmitter<IgxListComponent>();\n\n    /**\n     *\n     * Event emitted when a pan gesture is executed on a list item.\n     *\n     * @remarks\n     * Provides references to the `IgxListItemComponent` and `IgxListPanState` as event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-list (panStateChange)=\"panStateChange($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override panStateChange = new EventEmitter<IPanStateChangeEventArgs>();\n\n    /**\n     * Event emitted when a list item is clicked.\n     *\n     * @remarks\n     * Provides references to the `IgxListItemComponent` and `Event` as event arguments.\n     *\n     * @example\n     * ```html\n     * <igx-list (itemClicked)=\"onItemClicked($event)\"></igx-list>\n     * ```\n     */\n    @Output()\n    public override itemClicked = new EventEmitter<IListItemClickEventArgs>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('defaultEmptyList', { read: TemplateRef, static: true })\n    protected defaultEmptyListTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('defaultDataLoading', { read: TemplateRef, static: true })\n    protected defaultDataLoadingTemplate: TemplateRef<any>;\n\n    private _resourceStrings = getCurrentResourceStrings(ListResourceStringsEN);\n\n    /**\n     * Sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IListResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * Returns the resource strings.\n     */\n    public get resourceStrings(): IListResourceStrings {\n        return this._resourceStrings;\n    }\n\n    constructor(public element: ElementRef) {\n        super(element);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected get sortedChildren(): IgxListItemComponent[] {\n        if (this.children !== undefined) {\n            return this.children.toArray()\n                .sort((a: IgxListItemComponent, b: IgxListItemComponent) => a.index - b.index);\n        }\n        return null;\n    }\n\n    private _role = 'list';\n\n    /**\n     * Gets/Sets the `role` attribute value.\n     *\n     * @example\n     * ```typescript\n     * let listRole =  this.list.role;\n     * ```\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public get role() {\n        return this._role;\n    }\n\n    public set role(val: string) {\n        this._role = val;\n    }\n\n    /**\n     * Gets a boolean indicating if the list is empty.\n     *\n     * @example\n     * ```typescript\n     * let isEmpty =  this.list.isListEmpty;\n     * ```\n     */\n    @HostBinding('class.igx-list--empty')\n    public get isListEmpty(): boolean {\n        return !this.children || this.children.length === 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-list')\n    public get cssClass(): boolean {\n        return !this.isListEmpty;\n    }\n\n    /**\n     * Gets the list `items` excluding the header ones.\n     *\n     * @example\n     * ```typescript\n     * let listItems: IgxListItemComponent[] = this.list.items;\n     * ```\n     */\n    public get items(): IgxListItemComponent[] {\n        const items: IgxListItemComponent[] = [];\n        if (this.children !== undefined) {\n            for (const child of this.sortedChildren) {\n                if (!child.isHeader) {\n                    items.push(child);\n                }\n            }\n        }\n        return items;\n    }\n\n    /**\n     * Gets the header list `items`.\n     *\n     * @example\n     * ```typescript\n     * let listHeaders: IgxListItemComponent[] =  this.list.headers;\n     * ```\n     */\n    public get headers(): IgxListItemComponent[] {\n        const headers: IgxListItemComponent[] = [];\n        if (this.children !== undefined) {\n            for (const child of this.children.toArray()) {\n                if (child.isHeader) {\n                    headers.push(child);\n                }\n            }\n        }\n        return headers;\n    }\n\n    /**\n     * Gets the `context` object of the template binding.\n     *\n     * @remarks\n     * Gets the `context` object which represents the `template context` binding into the `list container`\n     * by providing the `$implicit` declaration which is the `IgxListComponent` itself.\n     *\n     * @example\n     * ```typescript\n     * let listComponent =  this.list.context;\n     * ```\n     */\n    public get context(): any {\n        return {\n            $implicit: this\n        };\n    }\n\n    /**\n     * Gets a `TemplateRef` to the currently used template.\n     *\n     * @example\n     * ```typescript\n     * let listTemplate = this.list.template;\n     * ```\n     */\n    public get template(): TemplateRef<any> {\n        if (this.isLoading) {\n            return this.dataLoadingTemplate ? this.dataLoadingTemplate.template : this.defaultDataLoadingTemplate;\n        } else {\n            return this.emptyListTemplate ? this.emptyListTemplate.template : this.defaultEmptyListTemplate;\n        }\n    }\n}\n\n/**\n * @hidden\n */\n\n","<ng-content></ng-content>\n\n<ng-template #defaultEmptyList>\n    <article class=\"igx-list__message\">\n        {{resourceStrings.igx_list_no_items}}\n    </article>\n</ng-template>\n\n<ng-template #defaultDataLoading>\n    <article class=\"igx-list__message\">\n        {{resourceStrings.igx_list_loading}}\n    </article>\n</ng-template>\n\n@if (!children || children.length === 0 || isLoading) {\n    <ng-container *ngTemplateOutlet=\"template; context: context\">\n    </ng-container>\n}\n","import {\n    AfterViewInit,\n    Component,\n    ViewChild,\n    ChangeDetectorRef,\n    TemplateRef,\n    Directive,\n    OnDestroy,\n    HostBinding,\n    Input\n} from '@angular/core';\nimport { IgxInputDirective } from '../../../directives/input/input.directive';\nimport { IgxForOfDirective } from '../../../directives/for-of/for_of.directive';\nimport { FilteringExpressionsTree } from '../../../data-operations/filtering-expressions-tree';\nimport { FilteringLogic } from '../../../data-operations/filtering-expression.interface';\nimport { GridColumnDataType } from '../../../data-operations/data-util';\nimport {\n    IgxBooleanFilteringOperand, IgxNumberFilteringOperand, IgxDateFilteringOperand,\n    IgxStringFilteringOperand, IgxDateTimeFilteringOperand, IgxTimeFilteringOperand\n} from '../../../data-operations/filtering-condition';\nimport { Subject } from 'rxjs';\nimport { IChangeCheckboxEventArgs, IgxCheckboxComponent } from '../../../checkbox/public_api';\nimport { takeUntil } from 'rxjs/operators';\nimport { cloneHierarchicalArray, PlatformUtil } from '../../../core/utils';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { ActiveElement, ExpressionUI, FilterListItem } from './common';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { IgxCircularProgressBarComponent } from '../../../progressbar/progressbar.component';\nimport { IgxTreeNodeComponent } from '../../../tree/tree-node/tree-node.component';\nimport { IgxTreeComponent } from '../../../tree/tree.component';\nimport { IgxDataLoadingTemplateDirective, IgxEmptyListTemplateDirective } from '../../../list/list.common';\nimport { IgxListItemComponent } from '../../../list/list-item.component';\nimport { IgxListComponent } from '../../../list/list.component';\nimport { IgxSuffixDirective } from '../../../directives/suffix/suffix.directive';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IgxPrefixDirective } from '../../../directives/prefix/prefix.directive';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxInputGroupComponent } from '../../../input-group/input-group.component';\nimport { ITreeNodeSelectionEvent } from '../../../tree/common';\nimport { Navigate } from '../../../drop-down/drop-down.common';\nimport { Size } from '../../common/enums';\n@Directive({\n    selector: '[igxExcelStyleLoading]',\n    standalone: true\n})\nexport class IgxExcelStyleLoadingValuesTemplateDirective {\n    public static ngTemplateContextGuard(_dir: IgxExcelStyleLoadingValuesTemplateDirective,\n        ctx: unknown): ctx is undefined {\n        return true\n    }\n    constructor(public template: TemplateRef<undefined>) { }\n}\n\nlet NEXT_ID = 0;\n/**\n * A component used for presenting Excel style search UI.\n */\n@Component({\n    selector: 'igx-excel-style-search',\n    templateUrl: './excel-style-search.component.html',\n    imports: [IgxInputGroupComponent, IgxIconComponent, IgxPrefixDirective, FormsModule, IgxInputDirective, IgxSuffixDirective, IgxListComponent, IgxForOfDirective, IgxListItemComponent, IgxCheckboxComponent, IgxDataLoadingTemplateDirective, NgTemplateOutlet, IgxEmptyListTemplateDirective, IgxTreeComponent, IgxTreeNodeComponent, IgxCircularProgressBarComponent, IgxButtonDirective]\n})\nexport class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {\n    private static readonly filterOptimizationThreshold = 2;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter__menu-main')\n    public defaultClass = true;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('input', { read: IgxInputDirective, static: true })\n    public searchInput: IgxInputDirective;\n\n    @ViewChild('cancelButton', {read: IgxButtonDirective, static: true })\n    protected cancelButton: IgxButtonDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('list', { read: IgxListComponent, static: false })\n    public list: IgxListComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('selectAllCheckbox', { read: IgxCheckboxComponent, static: false })\n    public selectAllCheckbox: IgxCheckboxComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('addToCurrentFilterCheckbox', { read: IgxCheckboxComponent, static: false })\n    public addToCurrentFilterCheckbox: IgxCheckboxComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('tree', { read: IgxTreeComponent, static: false })\n    public tree: IgxTreeComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxForOfDirective)\n    protected virtDir: IgxForOfDirective<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExcelStyleLoadingValuesTemplate', { read: TemplateRef })\n    protected defaultExcelStyleLoadingValuesTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    public get selectAllItem(): FilterListItem {\n        if (!this._selectAllItem) {\n            const selectAllItem = {\n                isSelected: false,\n                isFiltered: false,\n                indeterminate: false,\n                isSpecial: true,\n                isBlanks: false,\n                value: this.esf.grid.resourceStrings.igx_grid_excel_select_all,\n                label: this.esf.grid.resourceStrings.igx_grid_excel_select_all\n            };\n\n            this._selectAllItem = selectAllItem;\n        }\n\n        return this._selectAllItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get addToCurrentFilterItem(): FilterListItem {\n        if (!this._addToCurrentFilterItem) {\n            const addToCurrentFilterItem = {\n                isSelected: false,\n                isFiltered: false,\n                indeterminate: false,\n                isSpecial: true,\n                isBlanks: false,\n                value: this.esf.grid.resourceStrings.igx_grid_excel_add_to_filter,\n                label: this.esf.grid.resourceStrings.igx_grid_excel_add_to_filter\n            };\n\n            this._addToCurrentFilterItem = addToCurrentFilterItem;\n        }\n\n        return this._addToCurrentFilterItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isLoading() {\n        return this._isLoading;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set isLoading(value: boolean) {\n        this._isLoading = value;\n        if (!(this.cdr as any).destroyed) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public searchValue: any;\n\n    /**\n     * @hidden @internal\n     */\n    public displayedListData: FilterListItem[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public matchesCount: number;\n\n    /**\n     * @hidden @internal\n     */\n    public get valuesLoadingTemplate() {\n        if (this.esf.grid?.excelStyleLoadingValuesTemplateDirective) {\n            return this.esf.grid.excelStyleLoadingValuesTemplateDirective.template;\n        } else {\n            return this.defaultExcelStyleLoadingValuesTemplate;\n        }\n    }\n\n    protected activeDescendant = '';\n\n    private _id = `igx-excel-style-search-${NEXT_ID++}`;\n    private _isLoading;\n    private _addToCurrentFilterItem: FilterListItem;\n    private _selectAllItem: FilterListItem;\n    private _hierarchicalSelectedItems: FilterListItem[];\n    private _focusedItem: ActiveElement = null;\n    private destroy$ = new Subject<boolean>();\n\n    constructor(public cdr: ChangeDetectorRef, public esf: BaseFilteringComponent, protected platform: PlatformUtil) {\n        esf.loadingStart.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.displayedListData = [];\n            this.isLoading = true;\n        });\n        esf.loadingEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.refreshSize();\n            this.isLoading = false;\n        });\n        esf.initialized.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            requestAnimationFrame(() => {\n                this.refreshSize();\n                this.searchInput.nativeElement.focus();\n            });\n        });\n        esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.virtDir?.resetScrollPosition();\n\n            if (this.virtDir) {\n                this.virtDir.state.startIndex = 0;\n            }\n        });\n\n        esf.listDataLoaded.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this._selectAllItem = this.esf.listData[0];\n            if (this.isHierarchical() && this.esf.listData[0].isSpecial) {\n                this.esf.listData.splice(0, 1);\n            }\n\n            if (this.searchValue) {\n                this.clearInput();\n            } else {\n                this.filterListData();\n            }\n\n            this.cdr.detectChanges();\n            requestAnimationFrame(() => {\n                this.refreshSize();\n                this.searchInput.nativeElement.focus();\n            });\n        });\n    }\n\n    public ngAfterViewInit() {\n        requestAnimationFrame(this.refreshSize);\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public refreshSize = () => {\n        if (this.virtDir) {\n            this.virtDir.igxForContainerSize = this.containerSize;\n            this.virtDir.igxForItemSize = this.itemSize;\n            this.virtDir.recalcUpdateSizes();\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public clearInput() {\n        this.searchValue = null;\n        this.filterListData();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onCheckboxChange(eventArgs: IChangeCheckboxEventArgs) {\n        const selectedIndex = this.displayedListData.indexOf(eventArgs.owner.value);\n        const selectAllBtn = this.displayedListData[0];\n\n        if (selectedIndex === 0) {\n            this.displayedListData.forEach(element => {\n                if (element === this.addToCurrentFilterItem) {\n                    return;\n                }\n                element.isSelected = eventArgs.checked;\n            });\n\n            selectAllBtn.indeterminate = false;\n        } else {\n            eventArgs.owner.value.isSelected = eventArgs.checked;\n            const indexToStartSlicing = this.displayedListData.indexOf(this.addToCurrentFilterItem) > -1 ? 2 : 1;\n\n            const slicedArray =\n                this.displayedListData.slice(indexToStartSlicing, this.displayedListData.length);\n\n            if (!slicedArray.find(el => el.isSelected === false)) {\n                selectAllBtn.indeterminate = false;\n                selectAllBtn.isSelected = true;\n            } else if (!slicedArray.find(el => el.isSelected === true)) {\n                selectAllBtn.indeterminate = false;\n                selectAllBtn.isSelected = false;\n            } else {\n                selectAllBtn.indeterminate = true;\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelectAllCheckboxChange(eventArgs: IChangeCheckboxEventArgs) {\n        this._selectAllItem.isSelected = eventArgs.checked;\n        this._selectAllItem.indeterminate = false;\n        const treeNodes = this.tree.nodes;\n        treeNodes.forEach(node => (node.data as FilterListItem).isSelected = eventArgs.checked);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onNodeSelectionChange(eventArgs: ITreeNodeSelectionEvent) {\n        eventArgs.added.forEach(node => {\n            (node.data as FilterListItem).isSelected = true;\n        });\n        eventArgs.removed.forEach(node => {\n            (node.data as FilterListItem).isSelected = false;\n        });\n\n        this._hierarchicalSelectedItems = eventArgs.newSelection.map(item => item.data as FilterListItem);\n        const selectAllBtn = this.selectAllItem;\n        if (this._hierarchicalSelectedItems.length === 0) {\n            selectAllBtn.indeterminate = false;\n            selectAllBtn.isSelected = false;\n        } else if (this._hierarchicalSelectedItems.length === this.tree.nodes.length) {\n            selectAllBtn.indeterminate = false;\n            selectAllBtn.isSelected = true;\n        } else {\n            selectAllBtn.indeterminate = true;\n            selectAllBtn.isSelected = false;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get itemSize() {\n        let itemSize = '40px';\n        const esf = this.esf as any;\n        switch (esf.size) {\n            case Size.Medium: itemSize = '32px'; break;\n            case Size.Small: itemSize = '24px'; break;\n            default: break;\n        }\n        return itemSize;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get containerSize() {\n        if (this.esf.listData.length) {\n            return this.list?.element.nativeElement.offsetHeight;\n        }\n\n        // GE Nov 1st, 2021 #10355 Return a numeric value, so the chunk size is calculated properly.\n        // If we skip this branch, on applying the filter the _calculateChunkSize() method off the ForOfDirective receives\n        // an igxForContainerSize = undefined, thus assigns the chunkSize to the igxForOf.length which leads to performance issues.\n        return 0;\n    }\n\n    @HostBinding('attr.id')\n    @Input()\n    protected get id(): string {\n        return this._id;\n    }\n    protected set id(value: string) {\n        this._id = value;\n    }\n\n    protected getItemId(index: number): string {\n        return `${this.id}-item-${index}`;\n    }\n\n    protected setActiveDescendant() : void  {\n        this.activeDescendant = this.focusedItem?.id || '';\n    }\n\n    protected get focusedItem(): ActiveElement {\n        return this._focusedItem;\n    }\n\n    protected set focusedItem(val: ActiveElement) {\n        this._focusedItem = val;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get applyButtonDisabled(): boolean {\n        return (this._selectAllItem && !this._selectAllItem.isSelected && !this._selectAllItem.indeterminate) ||\n            (this.displayedListData && this.displayedListData.length === 0);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onInputKeyDown(event: KeyboardEvent): void {\n        switch (event.key) {\n            case this.platform.KEYMAP.ENTER:\n                event.preventDefault();\n                this.applyFilter();\n\n                return;\n            case this.platform.KEYMAP.ESCAPE:\n                if (this.searchValue) {\n                    event.stopPropagation();\n                    this.clearInput();\n                }\n\n                return;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public filterListData(): void {\n        if (this.esf.column?.dataType === GridColumnDataType.Number ||\n            this.esf.column?.dataType === GridColumnDataType.Currency ||\n            this.esf.column?.dataType === GridColumnDataType.Percent) {\n            this.rejectNonNumericalEntries();\n        }\n\n        if (!this.esf.listData || !this.esf.listData.length) {\n            this.displayedListData = [];\n\n            return;\n        }\n\n        let selectAllBtn;\n        if (this._selectAllItem) {\n            selectAllBtn = this._selectAllItem;\n        } else {\n            selectAllBtn = this.esf.listData[0];\n        }\n\n        if (!this.searchValue) {\n            let anyFiltered = this.esf.listData.some(i => i.isFiltered);\n            let anyUnfiltered = this.esf.listData.some(i => !i.isFiltered);\n            selectAllBtn.indeterminate = anyFiltered && anyUnfiltered;\n            if (this.isHierarchical() && this.tree) {\n                this._hierarchicalSelectedItems = this.tree.nodes.map(n => n.data as FilterListItem).filter(item => item.isFiltered);\n                this.tree.collapseAll();\n            }\n\n            this.esf.listData.forEach(i => i.isSelected = i.isFiltered);\n            if (this.displayedListData !== this.esf.listData) {\n                this.displayedListData = this.esf.listData;\n                if (this.isHierarchical()) {\n                    this.cdr.detectChanges();\n                    this.tree.nodes.forEach(n => {\n                        const item = n.data as FilterListItem;\n                        n.selected = item.isSelected || item.isFiltered;\n                        anyFiltered = anyFiltered || n.selected;\n                        anyUnfiltered = anyUnfiltered || !n.selected;\n                    });\n                    selectAllBtn.indeterminate = anyFiltered && anyUnfiltered;\n                }\n            }\n            selectAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all;\n            this.matchesCount = this.displayedListData.length - 1;\n            this.cdr.detectChanges();\n\n            return;\n        }\n\n        const searchVal = this.searchValue.toLowerCase();\n        if (this.isHierarchical()) {\n            this._hierarchicalSelectedItems = [];\n            this.esf.listData.forEach(i => i.isSelected = false);\n            const matchedData = cloneHierarchicalArray(this.esf.listData, 'children');\n            this.displayedListData = this.hierarchicalSelectMatches(matchedData, searchVal);\n            this.cdr.detectChanges();\n            this.tree.nodes.forEach(n => {\n                n.selected = true;\n                if ((n.data as FilterListItem).label.toString().toLowerCase().indexOf(searchVal) > -1) {\n                    this.expandAllParentNodes(n);\n                }\n            });\n        } else {\n            this.displayedListData = this.esf.listData.filter((it, i) => (i === 0 && it.isSpecial) ||\n                (it.label !== null && it.label !== undefined) &&\n                !it.isBlanks &&\n                it.label.toString().toLowerCase().indexOf(searchVal) > -1);\n\n            this.esf.listData.forEach(i => i.isSelected = false);\n            this.displayedListData.forEach(i => i.isSelected = true);\n            this.displayedListData.splice(1, 0, this.addToCurrentFilterItem);\n            if (this.displayedListData.length === 2) {\n                this.displayedListData = [];\n            }\n        }\n\n        if (this.displayedListData.length > 2) {\n            this.matchesCount = this.displayedListData.length - 2;\n        } else {\n            this.matchesCount = 0;\n        }\n\n        selectAllBtn.indeterminate = false;\n        selectAllBtn.isSelected = true;\n        selectAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all_search_results;\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public applyFilter() {\n        const filterTree = new FilteringExpressionsTree(FilteringLogic.Or, this.esf.column.field);\n\n        let selectedItems = [];\n        if (this.isHierarchical()) {\n            if (this.addToCurrentFilterCheckbox && this.addToCurrentFilterCheckbox.checked) {\n                this.addFilteredToSelectedItems(this.esf.listData);\n            }\n\n            selectedItems = this._hierarchicalSelectedItems;\n        } else {\n            const item = this.displayedListData[1];\n            const addToCurrentFilterOptionVisible = item === this.addToCurrentFilterItem;\n            selectedItems = addToCurrentFilterOptionVisible && item.isSelected ?\n                this.esf.listData.slice(1, this.esf.listData.length).filter(el => el.isSelected || el.isFiltered) :\n                this.esf.listData.slice(1, this.esf.listData.length).filter(el => el.isSelected);\n        }\n\n        let unselectedItem;\n        if (this.isHierarchical()) {\n            unselectedItem = this.esf.listData.find(el => el.isSelected === false);\n        } else {\n            unselectedItem = this.esf.listData.slice(1, this.esf.listData.length).find(el => el.isSelected === false);\n        }\n\n        if (unselectedItem) {\n            if (selectedItems.length <= IgxExcelStyleSearchComponent.filterOptimizationThreshold) {\n                selectedItems.forEach(element => {\n                    let condition = null;\n                    if (element.value !== null && element.value !== undefined) {\n                        if (this.esf.column.dataType === GridColumnDataType.Boolean) {\n                            condition = this.createCondition(element.value.toString());\n                        } else {\n                            const filterCondition = this.esf.column.dataType === GridColumnDataType.Time ? 'at' : 'equals';\n                            condition = this.createCondition(filterCondition);\n                        }\n                    } else {\n                        condition = this.createCondition('empty');\n                    }\n                    filterTree.filteringOperands.push({\n                        condition,\n                        conditionName: condition.name,\n                        fieldName: this.esf.column.field,\n                        ignoreCase: this.esf.column.filteringIgnoreCase,\n                        searchVal: element.value\n                    });\n                });\n            } else {\n                const blanksItemIndex = selectedItems.findIndex(e => e.value === null || e.value === undefined);\n                let blanksItem: any;\n                if (blanksItemIndex >= 0) {\n                    blanksItem = selectedItems[blanksItemIndex];\n                    selectedItems.splice(blanksItemIndex, 1);\n                }\n                filterTree.filteringOperands.push({\n                    condition: this.createCondition('in'),\n                    conditionName: 'in',\n                    fieldName: this.esf.column.field,\n                    ignoreCase: this.esf.column.filteringIgnoreCase,\n                    searchVal: new Set(\n                        this.esf.column.dataType === GridColumnDataType.Date ?\n                            selectedItems.map(d => d.value.toDateString()) :\n                        this.esf.column.dataType === GridColumnDataType.DateTime ?\n                            selectedItems.map(d => d.value.toISOString()) :\n                        this.esf.column.dataType === GridColumnDataType.Time ?\n                            selectedItems.map(e => e.value.toLocaleTimeString()) :\n                            selectedItems.map(e => e.value)\n                    )\n                });\n\n                if (blanksItem) {\n                    filterTree.filteringOperands.push({\n                        condition: this.createCondition('empty'),\n                        conditionName: 'empty',\n                        fieldName: this.esf.column.field,\n                        ignoreCase: this.esf.column.filteringIgnoreCase,\n                        searchVal: blanksItem.value\n                    });\n                }\n            }\n            const grid = this.esf.grid;\n            const col = this.esf.column;\n            grid.filteringService.filterInternal(col.field, filterTree);\n            this.esf.expressionsList = new Array<ExpressionUI>();\n            grid.filteringService.generateExpressionsList(col.filteringExpressionsTree,\n                grid.filteringLogic, this.esf.expressionsList);\n        } else {\n            this.esf.grid.filteringService.clearFilter(this.esf.column.field);\n        }\n\n        this.esf.closeDropdown();\n    }\n\n    protected handleKeyDown(event: KeyboardEvent) {\n        if (event) {\n            const key = event.key.toLowerCase();\n            const navKeys = ['space', 'spacebar', ' ',\n            'arrowup', 'up', 'arrowdown', 'down', 'home', 'end'];\n                if (navKeys.indexOf(key) === -1) { // If key has appropriate function in DD\n                    return;\n                }\n                event.preventDefault();\n                event.stopPropagation();\n            switch (key) {\n                case 'arrowup':\n                case 'up':\n                    this.onArrowUpKeyDown();\n                    break;\n                case 'arrowdown':\n                case 'down':\n                    this.onArrowDownKeyDown();\n                    break;\n                case 'home':\n                    this.onHomeKeyDown();\n                    break;\n                case 'end':\n                    this.onEndKeyDown();\n                    break;\n                case 'space':\n                case 'spacebar':\n                case ' ':\n                    this.onActionKeyDown();\n                    break;\n                default:\n                    return;\n            }\n        }\n    }\n\n    protected onFocus() {\n        const firstIndexInView = this.virtDir.state.startIndex;\n        if (this.virtDir.igxForOf.length > 0) {\n            this.focusedItem = {\n                id: this.getItemId(firstIndexInView),\n                index: firstIndexInView,\n                checked: this.virtDir.igxForOf[firstIndexInView].isSelected\n            };\n        }\n        this.setActiveDescendant();\n    }\n\n    protected onFocusOut() {\n        this.focusedItem = null;\n        this.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isHierarchical() {\n        return this.esf.isHierarchical;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isTreeEmpty() {\n        return this.esf.isHierarchical && this.displayedListData.length === 0;\n    }\n\n    private hierarchicalSelectMatches(data: FilterListItem[], searchVal: string) {\n        data.forEach(element => {\n            element.indeterminate = false;\n            element.isSelected = false;\n            const node = this.tree.nodes.filter(n => (n.data as FilterListItem).label === element.label)[0];\n            if (node) {\n                node.expanded = false;\n            }\n\n            if (element.label.toString().toLowerCase().indexOf(searchVal) > -1) {\n                element.isSelected = true;\n                this.hierarchicalSelectAllChildren(element);\n                this._hierarchicalSelectedItems.push(element);\n            } else if (element.children.length > 0) {\n                element.children = this.hierarchicalSelectMatches(element.children, searchVal);\n                if (element.children.length > 0) {\n                    element.isSelected = true;\n                    if (node) {\n                        node.expanded = true;\n                    }\n                }\n            }\n        });\n\n        return data.filter(element => element.isSelected === true);\n    }\n\n    private hierarchicalSelectAllChildren(element: FilterListItem) {\n        element.children.forEach(child => {\n            child.indeterminate = false;\n            child.isSelected = true;\n            this._hierarchicalSelectedItems.push(child);\n            if (child.children) {\n                this.hierarchicalSelectAllChildren(child);\n            }\n        })\n    }\n\n    private expandAllParentNodes(node: any) {\n        if (node.parentNode) {\n            node.parentNode.expanded = true;\n            this.expandAllParentNodes(node.parentNode);\n        }\n    }\n\n    private addFilteredToSelectedItems(records: FilterListItem[]) {\n        records.forEach(record => {\n            if (record.children) {\n                this.addFilteredToSelectedItems(record.children);\n            }\n\n            if (record.isFiltered && this._hierarchicalSelectedItems.indexOf(record) < 0) {\n                this._hierarchicalSelectedItems.push(record);\n            }\n        })\n    }\n\n    private createCondition(conditionName: string) {\n        switch (this.esf.column.dataType) {\n            case GridColumnDataType.Boolean:\n                return IgxBooleanFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n            case GridColumnDataType.Percent:\n                return IgxNumberFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Date:\n                return IgxDateFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Time:\n                return IgxTimeFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.DateTime:\n                return IgxDateTimeFilteringOperand.instance().condition(conditionName);\n            default:\n                return IgxStringFilteringOperand.instance().condition(conditionName);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    private rejectNonNumericalEntries(): void {\n        const regExp = /[^0-9\\.,eE\\-]/g;\n        if (this.searchValue && regExp.test(this.searchValue)) {\n            this.searchInput.value = this.searchValue.replace(regExp, '');\n            this.searchValue = this.searchInput.value;\n        }\n    }\n\n    private onArrowUpKeyDown() {\n        if (this.focusedItem && this.focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n            // on ArrowUp the focus stays on the same element if it is the first focused\n            return;\n        } else {\n            this.navigateItem(this.focusedItem ? this.focusedItem.index - 1 : 0);\n        }\n        this.setActiveDescendant();\n    }\n\n    private onArrowDownKeyDown() {\n        const lastIndex = this.virtDir.igxForOf.length - 1;\n        if (this.focusedItem && this.focusedItem.index === lastIndex) {\n            // on ArrowDown the focus stays on the same element if it is the last focused\n            return;\n        } else {\n            this.navigateItem(this.focusedItem ? this.focusedItem.index + 1 : 0);\n        }\n        this.setActiveDescendant();\n    }\n\n    private onHomeKeyDown() {\n        this.navigateItem(0);\n        this.setActiveDescendant();\n    }\n\n    private onEndKeyDown() {\n        this.navigateItem(this.virtDir.igxForOf.length - 1);\n        this.setActiveDescendant();\n    }\n\n    private onActionKeyDown() {\n        const dataItem = this.displayedListData[this.focusedItem.index];\n        const args: IChangeCheckboxEventArgs = {\n            checked: !dataItem.isSelected,\n            owner: {\n                value: dataItem\n            }\n        }\n        this.onCheckboxChange(args);\n    }\n\n    private navigateItem(index: number) {\n        if (index === -1 || index >= this.virtDir.igxForOf.length) {\n            return;\n        }\n        const direction = index > (this.focusedItem ? this.focusedItem.index : -1) ? Navigate.Down : Navigate.Up;\n        const scrollRequired = this.isIndexOutOfBounds(index, direction);\n        this.focusedItem = {\n           id: this.getItemId(index),\n           index: index,\n           checked: this.virtDir.igxForOf[index].isSelected\n        };\n        if (scrollRequired) {\n            this.virtDir.scrollTo(index);\n        }\n    }\n\n    private isIndexOutOfBounds(index: number, direction: Navigate) {\n        const virtState = this.virtDir.state;\n        const currentPosition = this.virtDir.getScroll().scrollTop;\n        const itemPosition = this.virtDir.getScrollForIndex(index, direction === Navigate.Down);\n        const indexOutOfChunk = index < virtState.startIndex || index > virtState.chunkSize + virtState.startIndex;\n        const scrollNeeded = direction === Navigate.Down ? currentPosition < itemPosition : currentPosition > itemPosition;\n        const subRequired = indexOutOfChunk || scrollNeeded;\n        return subRequired;\n    }\n}\n","<igx-input-group type=\"box\">\n    <igx-icon igxPrefix family=\"default\" name=\"search\"></igx-icon>\n    <input\n        #input\n        igxInput\n        tabindex=\"0\"\n        [(ngModel)]=\"searchValue\"\n        (ngModelChange)=\"filterListData()\"\n        (keydown)=\"onInputKeyDown($event)\"\n        [placeholder]=\"esf.column?.grid.resourceStrings.igx_grid_excel_search_placeholder\"\n        autocomplete=\"off\"/>\n        @if (searchValue || searchValue === 0) {\n            <igx-suffix>\n                <igx-icon\n                    family=\"default\"\n                    name=\"input_clear\"\n                    (click)=\"clearInput()\"\n                    tabindex=\"0\">\n                </igx-icon>\n            </igx-suffix>\n        }\n</igx-input-group>\n\n@if (!isHierarchical()) {\n    <igx-list #list role=\"listbox\" [isLoading]=\"isLoading\" (keydown)=\"handleKeyDown($event)\" tabindex=\"0\"\n        [attr.aria-activedescendant]=\"this.activeDescendant\" (focus)=\"onFocus()\" (focusout)=\"onFocusOut()\">\n        <div style=\"overflow: hidden; position: relative;\">\n            <igx-list-item [class.igx-list__item-base--active]=\"focusedItem?.id === this.getItemId(i)\" [attr.id]=\"getItemId(i)\" role=\"option\"\n                *igxFor=\"let item of displayedListData;index as i; scrollOrientation : 'vertical'; containerSize: containerSize; itemSize: itemSize\">\n                <igx-checkbox\n                    [value]=\"item\"\n                    [tabindex]=\"-1\"\n                    [checked]=\"item?.isSelected\"\n                    [disableRipple]=\"true\"\n                    [indeterminate]=\"item?.indeterminate\"\n                    [disableTransitions]=\"true\"\n                    (change)=\"onCheckboxChange($event)\">\n                    {{ item.label }}\n                </igx-checkbox>\n            </igx-list-item>\n        </div>\n        <ng-template igxDataLoading>\n            <div class=\"igx-excel-filter__loading\">\n                <ng-container *ngTemplateOutlet=\"valuesLoadingTemplate\">\n                </ng-container>\n            </div>\n        </ng-template>\n        <ng-template igxEmptyList>\n            <ng-container *ngTemplateOutlet=\"emptySearch\"></ng-container>\n        </ng-template>\n        <div class=\"igx-excel-filter__filter-results\" aria-live=\"polite\" aria-atomic=\"true\">\n            {{ esf.grid?.resourceStrings.igx_grid_excel_matches_count.replace('{0}', matchesCount) }}\n        </div>\n    </igx-list>\n}\n\n@if (isHierarchical()) {\n    <div class=\"igx-excel-filter__tree\">\n        @if (!isTreeEmpty()) {\n            <div class=\"igx-excel-filter__tree-alike\">\n                <div class=\"igx-excel-filter__tree-alike-item\">\n                    <igx-checkbox #selectAllCheckbox\n                        [value]=\"selectAllItem\"\n                        [checked]=\"selectAllItem?.isSelected\"\n                        [disableRipple]=\"true\"\n                        [indeterminate]=\"selectAllItem?.indeterminate\"\n                        [disableTransitions]=\"true\"\n                        (change)=\"onSelectAllCheckboxChange($event)\">\n                        {{ selectAllItem.label }}\n                    </igx-checkbox>\n                </div>\n                @if (searchValue) {\n                    <div class=\"igx-excel-filter__tree-alike-item\">\n                        <igx-checkbox #addToCurrentFilterCheckbox\n                            [value]=\"addToCurrentFilterItem\"\n                            [checked]=\"addToCurrentFilterItem.isSelected\"\n                            [disableRipple]=\"true\"\n                            [disableTransitions]=\"true\">\n                            {{ addToCurrentFilterItem.label }}\n                        </igx-checkbox>\n                    </div>\n                }\n            </div>\n        }\n        <igx-tree #tree selection=\"Cascading\"  (nodeSelection)=\"onNodeSelectionChange($event)\">\n            @for (item of displayedListData; track item.value) {\n                <igx-tree-node [data]=\"item\" [selected]=\"item.isSelected\">\n                    <div>{{item.label}}</div>\n                    @for (childLevel1 of item.children; track childLevel1.value) {\n                        <igx-tree-node [data]=\"childLevel1\" [selected]=\"childLevel1.isSelected\">\n                            <div>{{childLevel1.label}}</div>\n                            @for (childLevel2 of childLevel1.children; track childLevel2.value) {\n                                <igx-tree-node [data]=\"childLevel2\" [selected]=\"childLevel2.isSelected\">\n                                    <div>{{childLevel2.label}}</div>\n                                    @for (childLevel3 of childLevel2.children; track childLevel3.value) {\n                                        <igx-tree-node [data]=\"childLevel3\" [selected]=\"childLevel3.isSelected\">\n                                            <div>{{childLevel3.label}}</div>\n                                            @for (childLevel4 of childLevel3.children; track childLevel4.value) {\n                                                <igx-tree-node [data]=\"childLevel4\" [selected]=\"childLevel4.isSelected\">\n                                                    <div>{{childLevel4.label}}</div>\n                                                    @for (childLevel5 of childLevel4.children; track childLevel5.value) {\n                                                        <igx-tree-node [data]=\"childLevel5\" [selected]=\"childLevel5.isSelected\">\n                                                            <div>{{childLevel5.label}}</div>\n                                                            @for (childLevel6 of childLevel5.children; track childLevel6.value) {\n                                                                <igx-tree-node [data]=\"childLevel6\" [selected]=\"childLevel6.isSelected\">\n                                                                    <div>{{childLevel6.label}}</div>\n                                                                    @for (childLevel7 of childLevel6.children; track childLevel7.value) {\n                                                                        <igx-tree-node [data]=\"childLevel7\" [selected]=\"childLevel7.isSelected\">\n                                                                            <div>{{childLevel7.label}}</div>\n                                                                            @for (childLevel8 of childLevel7.children; track childLevel8.value) {\n                                                                                <igx-tree-node [data]=\"childLevel8\" [selected]=\"childLevel8.isSelected\">\n                                                                                    <div>{{childLevel8.label}}</div>\n                                                                                    @for (childLevel9 of childLevel8.children; track childLevel9.value) {\n                                                                                        <igx-tree-node [data]=\"childLevel9\" [selected]=\"childLevel9.isSelected\">\n                                                                                            <div>{{childLevel9.label}}</div>\n                                                                                        </igx-tree-node>\n                                                                                    }\n                                                                                </igx-tree-node>\n                                                                            }\n                                                                        </igx-tree-node>\n                                                                    }\n                                                                </igx-tree-node>\n                                                            }\n                                                        </igx-tree-node>\n                                                    }\n                                                </igx-tree-node>\n                                            }\n                                        </igx-tree-node>\n                                    }\n                                </igx-tree-node>\n                            }\n                        </igx-tree-node>\n                    }\n                </igx-tree-node>\n            }\n        </igx-tree>\n        <ng-template igxDataLoading>\n            <div class=\"igx-excel-filter__loading\">\n                <ng-container *ngTemplateOutlet=\"valuesLoadingTemplate\">\n                </ng-container>\n            </div>\n        </ng-template>\n        @if (isTreeEmpty()) {\n            <ng-container *ngTemplateOutlet=\"emptySearch\"></ng-container>\n        }\n    </div>\n}\n\n<ng-template #emptySearch>\n    <div class=\"igx-excel-filter__empty\">\n        {{esf.grid?.resourceStrings.igx_grid_excel_no_matches}}\n    </div>\n</ng-template>\n\n<ng-template #defaultExcelStyleLoadingValuesTemplate>\n    <igx-circular-bar [indeterminate]=\"true\">\n    </igx-circular-bar>\n</ng-template>\n\n<footer class=\"igx-excel-filter__menu-footer\">\n    <div class=\"igx-excel-filter__cancel\">\n        <button type=\"button\" #cancelButton\n            igxButton=\"flat\"\n            (click)=\"esf.cancel()\">\n                {{ esf.grid?.resourceStrings.igx_grid_excel_cancel }}\n        </button>\n    </div>\n    <div class=\"igx-excel-filter__apply\">\n        <button type=\"button\"\n            igxButton=\"contained\"\n            [disabled]=\"applyButtonDisabled\"\n            (click)=\"applyFilter()\">\n                {{ esf.grid?.resourceStrings.igx_grid_excel_apply }}\n        </button>\n    </div>\n</footer>\n","import { Component } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { NgClass } from '@angular/common';\n\n/**\n * A component used for presenting Excel style conditional filter UI.\n */\n@Component({\n    selector: 'igx-excel-style-selecting',\n    templateUrl: './excel-style-selecting.component.html',\n    imports: [NgClass, IgxIconComponent]\n})\nexport class IgxExcelStyleSelectingComponent {\n    constructor(public esf: BaseFilteringComponent) { }\n}\n","@if (esf.column) {\n    <div\n        [ngClass]=\"esf.column.selected ? 'igx-excel-filter__actions-selected' : 'igx-excel-filter__actions-select'\"\n        tabindex=\"0\"\n        (click)=\"esf.onSelect()\"\n        role=\"button\"\n        [attr.aria-pressed]=\"esf.column.selected\">\n        <span>{{esf.grid.resourceStrings.igx_grid_excel_select }}</span>\n        <igx-icon family=\"default\" name=\"selected\"></igx-icon>\n    </div>\n}\n","import {\n    Component,\n    ViewChild,\n    OnDestroy,\n    HostBinding,\n    ChangeDetectorRef\n} from '@angular/core';\nimport { IgxButtonGroupComponent } from '../../../buttonGroup/buttonGroup.component';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\n\n/**\n * A component used for presenting Excel style column sorting UI.\n */\n@Component({\n    selector: 'igx-excel-style-sorting',\n    templateUrl: './excel-style-sorting.component.html',\n    imports: [IgxButtonGroupComponent, IgxButtonDirective, IgxIconComponent]\n})\nexport class IgxExcelStyleSortingComponent implements OnDestroy {\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter__sort')\n    public defaultClass = true;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('sortButtonGroup', { read: IgxButtonGroupComponent })\n    public sortButtonGroup: IgxButtonGroupComponent;\n\n    private destroy$ = new Subject<boolean>();\n\n    constructor(public esf: BaseFilteringComponent, private cdr: ChangeDetectorRef) {\n        this.esf.sortingChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.updateSelectedButtons(this.esf.column.field);\n        });\n     }\n\n     public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSortButtonClicked(sortDirection) {\n        if (this.sortButtonGroup.buttons.filter(b => b.selected).length === 0) {\n            if (this.esf.grid.isColumnGrouped(this.esf.column.field)) {\n                this.sortButtonGroup.selectButton(sortDirection - 1);\n            } else {\n                this.esf.grid.clearSort(this.esf.column.field);\n            }\n        } else {\n            this.esf.grid.sort({ fieldName: this.esf.column.field, dir: sortDirection, ignoreCase: true });\n        }\n    }\n\n    protected get esfSize(): string {\n        const esf = this.esf as any;\n        return esf.size;\n    }\n\n    private updateSelectedButtons(fieldName: string) {\n        const sortIndex = this.esf.grid.sortingExpressions.findIndex(s => s.fieldName === fieldName);\n\n        this.cdr.detectChanges();\n        this.sortButtonGroup.buttons.forEach((b, i) => {\n            this.sortButtonGroup.deselectButton(i);\n        });\n\n        if (sortIndex !== -1 ) {\n            const sortDirection = this.esf.grid.sortingExpressions[sortIndex].dir;\n            this.sortButtonGroup.selectButton(sortDirection - 1);\n        }\n    }\n}\n","@if (esf.column) {\n    <header>\n        {{ esf.grid.resourceStrings.igx_grid_excel_filter_sorting_header }}\n    </header>\n    <igx-buttongroup #sortButtonGroup>\n        <button type=\"button\"\n            igxButton\n            [attr.data-togglable]=\"true\"\n            (buttonSelected)=\"onSortButtonClicked(1)\"\n            >\n            <igx-icon family=\"default\" name=\"sort_asc\"></igx-icon>\n            <span>\n                {{ esfSize === '1'?\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_asc_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_asc  }}\n            </span>\n        </button>\n        <button type=\"button\"\n            igxButton\n            [attr.data-togglable]=\"true\"\n            (buttonSelected)=\"onSortButtonClicked(2)\"\n            >\n            <igx-icon family=\"default\" name=\"sort_desc\"></igx-icon>\n            <span>\n                {{ esfSize === '1' ?\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_desc_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_desc\n                }}\n            </span>\n        </button>\n    </igx-buttongroup>\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Host,\n    HostBinding,\n    Inject,\n    Input,\n    OnDestroy,\n    Optional,\n    Output,\n    TemplateRef,\n    ViewChild,\n    ViewRef\n} from '@angular/core';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../../data-operations/filtering-expressions-tree';\nimport { PlatformUtil, formatDate, formatCurrency } from '../../../core/utils';\nimport { GridColumnDataType } from '../../../data-operations/data-util';\nimport { Subscription } from 'rxjs';\nimport { GridSelectionMode } from '../../common/enums';\nimport { IgxFilterItem } from '../../../data-operations/filtering-strategy';\nimport { formatNumber, formatPercent, getLocaleCurrencyCode, NgClass, DOCUMENT } from '@angular/common';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { ExpressionUI, FilterListItem, generateExpressionsList } from './common';\nimport { ColumnType, GridType, IGX_GRID_BASE } from '../../common/grid.interface';\nimport { IgxOverlayService } from '../../../services/overlay/overlay';\nimport { SortingDirection } from '../../../data-operations/sorting-strategy';\nimport { IgxExcelStyleSearchComponent } from './excel-style-search.component';\nimport { IgxExcelStyleConditionalFilterComponent } from './excel-style-conditional-filter.component';\nimport { IgxExcelStyleClearFiltersComponent } from './excel-style-clear-filters.component';\nimport { IgxExcelStyleSelectingComponent } from './excel-style-selecting.component';\nimport { IgxExcelStyleHidingComponent } from './excel-style-hiding.component';\nimport { IgxExcelStylePinningComponent } from './excel-style-pinning.component';\nimport { IgxExcelStyleMovingComponent } from './excel-style-moving.component';\nimport { IgxExcelStyleSortingComponent } from './excel-style-sorting.component';\nimport { IgxExcelStyleHeaderComponent } from './excel-style-header.component';\nimport { isTree } from '../../../data-operations/expressions-tree-util';\n\n@Directive({\n    selector: 'igx-excel-style-column-operations,[igxExcelStyleColumnOperations]',\n    standalone: true\n})\nexport class IgxExcelStyleColumnOperationsTemplateDirective { }\n\n@Directive({\n    selector: 'igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]',\n    standalone: true\n})\nexport class IgxExcelStyleFilterOperationsTemplateDirective { }\n\n/**\n * A component used for presenting Excel style filtering UI for a specific column.\n * It is used internally in the Grid, but could also be hosted in a container outside of it.\n *\n * Example:\n * ```html\n * <igx-grid-excel-style-filtering\n *     [column]=\"grid1.columns[0]\">\n * </igx-grid-excel-style-filtering>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: BaseFilteringComponent, useExisting: forwardRef(() => IgxGridExcelStyleFilteringComponent) }],\n    selector: 'igx-grid-excel-style-filtering',\n    templateUrl: './excel-style-filtering.component.html',\n    imports: [IgxExcelStyleHeaderComponent, IgxExcelStyleSortingComponent, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleHidingComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleClearFiltersComponent, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleSearchComponent, NgClass]\n})\nexport class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent implements AfterViewInit, OnDestroy {\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter')\n    public defaultClass = true;\n\n    @HostBinding('class.igx-excel-filter__sizing')\n    protected get shouldApplySizes(): boolean {\n        return !(this._minHeight || this._maxHeight);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter--inline')\n    public inline = true;\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public loadingStart = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public loadingEnd = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public initialized = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public sortingChanged = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public columnChange = new EventEmitter<ColumnType>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public listDataLoaded = new EventEmitter();\n\n    @ViewChild('mainDropdown', { read: ElementRef })\n    public mainDropdown: ElementRef<HTMLElement>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxExcelStyleColumnOperationsTemplateDirective, { read: IgxExcelStyleColumnOperationsTemplateDirective })\n    public excelColumnOperationsDirective: IgxExcelStyleColumnOperationsTemplateDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxExcelStyleFilterOperationsTemplateDirective, { read: IgxExcelStyleFilterOperationsTemplateDirective })\n    public excelFilterOperationsDirective: IgxExcelStyleFilterOperationsTemplateDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExcelColumnOperations', { read: TemplateRef, static: true })\n    protected defaultExcelColumnOperations: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExcelFilterOperations', { read: TemplateRef, static: true })\n    protected defaultExcelFilterOperations: TemplateRef<any>;\n\n    /**\n     * Sets the column.\n     */\n    @Input()\n    public set column(value: ColumnType) {\n        this._column = value;\n        this.listData = new Array<FilterListItem>();\n        this.columnChange.emit(this._column);\n\n        this.subscriptions?.unsubscribe();\n\n        if (this._column) {\n            this.grid.filteringService.registerSVGIcons();\n            this.init();\n            this.sortingChanged.emit();\n\n            this.subscriptions = this.grid.columnPin.subscribe(() => {\n                requestAnimationFrame(() => {\n                    if (!(this.cdr as ViewRef).destroyed) {\n                        this.cdr.detectChanges();\n                    }\n                });\n            });\n\n            this.subscriptions.add(this.grid.columnVisibilityChanged.subscribe(() => this.detectChanges()));\n            this.subscriptions.add(this.grid.sortingExpressionsChange.subscribe(() => this.sortingChanged.emit()));\n            this.subscriptions.add(this.grid.filteringExpressionsTreeChange.subscribe(() => this.init()));\n            this.subscriptions.add(this.grid.columnMovingEnd.subscribe(() => this.cdr.markForCheck()));\n        }\n    }\n\n    /**\n     * Returns the current column.\n     */\n    public get column(): ColumnType {\n        return this._column;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public expressionsList = new Array<ExpressionUI>();\n    /**\n     * @hidden @internal\n     */\n    public listData = new Array<FilterListItem>();\n    /**\n     * @hidden @internal\n     */\n    public uniqueValues: IgxFilterItem[] = [];\n    /**\n     * @hidden @internal\n     */\n    public overlayService: IgxOverlayService;\n    /**\n     * @hidden @internal\n     */\n    public overlayComponentId: string;\n    /**\n     * @hidden @internal\n     */\n    public isHierarchical = false;\n\n    private _minHeight;\n\n    /**\n     * Gets the minimum height.\n     *\n     * Setting value in template:\n     * ```ts\n     * [minHeight]=\"'<number><unit (px|rem|etc..)>'\"\n     * ```\n     *\n     * Example for setting a value:\n     * ```ts\n     * [minHeight]=\"'700px'\"\n     * ```\n     */\n    @Input()\n    public get minHeight(): string {\n        if (this._minHeight || this._minHeight === 0) {\n            return this._minHeight;\n        }\n    }\n\n    /**\n     * Sets the minimum height.\n     */\n    public set minHeight(value: string) {\n        this._minHeight = value;\n    }\n\n\n    private _maxHeight: string;\n    private containsNullOrEmpty = false;\n    private selectAllSelected = true;\n    private selectAllIndeterminate = false;\n    private filterValues = new Set<any>();\n    private _column: ColumnType;\n    private subscriptions: Subscription;\n    private _originalDisplay: string;\n\n    /**\n     * Gets the maximum height.\n     *\n     * Setting value in template:\n     * ```ts\n     * [maxHeight]=\"'<number><unit (px|rem|etc..)>'\"\n     * ```\n     *\n     * Example for setting a value:\n     * ```ts\n     * [maxHeight]=\"'700px'\"\n     * ```\n     */\n    @Input()\n    @HostBinding('style.max-height')\n    public get maxHeight(): string {\n        if (this._maxHeight) {\n            return this._maxHeight;\n        }\n    }\n\n    /**\n     * Sets the maximum height.\n     */\n    public set maxHeight(value: string) {\n        this._maxHeight = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get grid(): GridType {\n        return this.column?.grid ?? this.gridAPI;\n    }\n\n    constructor(\n        cdr: ChangeDetectorRef,\n        element: ElementRef<HTMLElement>,\n        platform: PlatformUtil,\n        @Inject(DOCUMENT)\n        private document: any,\n        @Host() @Optional() @Inject(IGX_GRID_BASE) protected gridAPI?: GridType,\n    ) {\n        super(cdr, element, platform);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.subscriptions?.unsubscribe();\n        delete this.overlayComponentId;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngAfterViewInit(): void {\n        this.computedStyles = this.document.defaultView.getComputedStyle(this.element.nativeElement);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public initialize(column: ColumnType, overlayService: IgxOverlayService) {\n        this.inline = false;\n        this.column = column;\n        this.overlayService = overlayService;\n        if (this._originalDisplay) {\n            this.element.nativeElement.style.display = this._originalDisplay;\n        }\n\n        this.initialized.emit();\n        this.subscriptions.add(this.grid.columnMoving.subscribe(() => this.closeDropdown()));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPin() {\n        this.closeDropdown();\n        this.column.pinned = !this.column.pinned;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelect() {\n        if (!this.column.selected) {\n            this.grid.selectionService.selectColumn(this.column.field, this.grid.columnSelection === GridSelectionMode.single);\n        } else {\n            this.grid.selectionService.deselectColumn(this.column.field);\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public columnSelectable() {\n        return this.grid?.columnSelection !== GridSelectionMode.none && this.column?.selectable;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onHideToggle() {\n        this.column.toggleVisibility();\n        this.closeDropdown();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancel() {\n        if (!this.overlayComponentId) {\n            this.init();\n        }\n        this.closeDropdown();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public closeDropdown() {\n        if (this.overlayComponentId) {\n            this.overlayService.hide(this.overlayComponentId);\n            this.overlayComponentId = null;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        if (this.platform.isFilteringKeyCombo(eventArgs)) {\n            eventArgs.preventDefault();\n            this.closeDropdown();\n        }\n        eventArgs.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public hide() {\n        this._originalDisplay = this.computedStyles.display;\n        this.element.nativeElement.style.display = 'none';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public detectChanges() {\n        this.cdr.detectChanges();\n    }\n\n    protected computedStyles;\n\n    protected get size(): string {\n        return this.computedStyles?.getPropertyValue('--component-size');\n    }\n\n    private init() {\n        this.expressionsList = new Array<ExpressionUI>();\n        generateExpressionsList(this.column.filteringExpressionsTree, this.grid.filteringLogic, this.expressionsList);\n        this.populateColumnData();\n    }\n\n    private areExpressionsSelectable() {\n        if (this.expressionsList.length === 1 &&\n            (this.expressionsList[0].expression.condition.name === 'equals' ||\n                this.expressionsList[0].expression.condition.name === 'at' ||\n                this.expressionsList[0].expression.condition.name === 'true' ||\n                this.expressionsList[0].expression.condition.name === 'false' ||\n                this.expressionsList[0].expression.condition.name === 'empty' ||\n                this.expressionsList[0].expression.condition.name === 'in')) {\n            return true;\n        }\n\n        const selectableExpressionsCount = this.expressionsList.filter(exp =>\n            (exp.beforeOperator === 1 || exp.afterOperator === 1) &&\n            (exp.expression.condition.name === 'equals' ||\n                exp.expression.condition.name === 'at' ||\n                exp.expression.condition.name === 'true' ||\n                exp.expression.condition.name === 'false' ||\n                exp.expression.condition.name === 'empty' ||\n                exp.expression.condition.name === 'in')).length;\n\n        return selectableExpressionsCount === this.expressionsList.length;\n    }\n\n    private populateColumnData() {\n        this.cdr.detectChanges();\n\n        if (this.grid.uniqueColumnValuesStrategy) {\n            this.renderColumnValuesRemotely();\n        } else {\n            this.renderColumnValuesFromData();\n        }\n    }\n\n    private renderColumnValuesRemotely() {\n        this.loadingStart.emit();\n        const expressionsTree: FilteringExpressionsTree = this.getColumnFilterExpressionsTree();\n\n        const prevColumn = this.column;\n        this.grid.uniqueColumnValuesStrategy(this.column, expressionsTree, (values: any[]) => {\n            if (!this.column || this.column !== prevColumn) {\n                return;\n            }\n\n            const items = values.map(v => ({\n                value: v\n            }));\n\n            this.uniqueValues = this.column.sortStrategy.sort(items, 'value', SortingDirection.Asc, this.column.sortingIgnoreCase,\n                (obj, key) => {\n                    let resolvedValue = obj[key];\n                    if (this.column.dataType === GridColumnDataType.Time) {\n                        resolvedValue = new Date().setHours(\n                            resolvedValue.getHours(),\n                            resolvedValue.getMinutes(),\n                            resolvedValue.getSeconds(),\n                            resolvedValue.getMilliseconds());\n                    }\n\n                    return resolvedValue;\n                });\n\n            this.renderValues();\n            this.loadingEnd.emit();\n        });\n    }\n\n    private renderColumnValuesFromData() {\n        this.loadingStart.emit();\n\n        const expressionsTree = this.getColumnFilterExpressionsTree();\n        const promise = this.grid.filterStrategy.getFilterItems(this.column, expressionsTree);\n        promise.then((items) => {\n            this.isHierarchical = items.length > 0 && items.some(i => i.children && i.children.length > 0);\n            this.uniqueValues = items;\n            this.renderValues();\n            this.loadingEnd.emit();\n            this.sortingChanged.emit();\n        });\n    }\n\n    private renderValues() {\n        this.filterValues = this.generateFilterValues();\n        this.generateListData();\n        this.expressionsList.forEach(expr => {\n            if (this.column.dataType === GridColumnDataType.String && this.column.filteringIgnoreCase\n                && expr.expression.searchVal && expr.expression.searchVal instanceof Set) {\n                this.modifyExpression(expr);\n            }\n        });\n    }\n\n    private generateFilterValues() {\n        const formatValue = (value: any): any => {\n            if (!value) return value;\n\n            switch (this.column.dataType) {\n                case GridColumnDataType.Date:\n                    return new Date(value).toDateString();\n                case GridColumnDataType.DateTime:\n                    return new Date(value).toISOString();\n                case GridColumnDataType.Time:\n                    return typeof value === 'string' ? value : new Date(value).toLocaleTimeString();\n                default:\n                    return value;\n            }\n        };\n\n        const processExpression = (arr: any[], e: any): any[] => {\n            if (e.expression.condition.name === 'in') {\n                return [...arr, ...Array.from((e.expression.searchVal as Set<any>).values()).map(v => formatValue(v))];\n            }\n            return [...arr, formatValue(e.expression.searchVal)];\n        };\n\n        const filterValues = new Set<any>(this.expressionsList.reduce(processExpression, []));\n\n        return filterValues;\n    }\n\n    private modifyExpression(expr: ExpressionUI) {\n        const lowerCaseFilterValues = new Set(Array.from(expr.expression.searchVal).map((value: string) => value.toLowerCase()));\n\n        this.grid.data.forEach(item => {\n            if (typeof item[this.column.field] === \"string\" && lowerCaseFilterValues.has(item[this.column.field]?.toLowerCase())) {\n                expr.expression.searchVal.add(item[this.column.field]);\n            }\n        });\n    }\n\n    private generateListData() {\n        this.listData = new Array<FilterListItem>();\n        const shouldUpdateSelection = this.areExpressionsSelectable();\n\n        if (this.column.dataType === GridColumnDataType.Boolean) {\n            this.addBooleanItems();\n        } else {\n            this.addItems(shouldUpdateSelection);\n        }\n\n        if (!this.isHierarchical && this.containsNullOrEmpty) {\n            const blanksItem = this.generateBlanksItem(shouldUpdateSelection);\n            this.listData.unshift(blanksItem);\n        }\n\n        if (this.listData.length > 0) {\n            this.addSelectAllItem();\n        }\n\n        if (!(this.cdr as any).destroyed) {\n            this.cdr.detectChanges();\n        }\n\n        this.listDataLoaded.emit();\n    }\n\n    private getColumnFilterExpressionsTree() {\n        const gridExpressionsTree: IFilteringExpressionsTree = this.grid.filteringExpressionsTree;\n        const expressionsTree = new FilteringExpressionsTree(gridExpressionsTree.operator, gridExpressionsTree.fieldName);\n\n        for (const operand of gridExpressionsTree.filteringOperands) {\n            if (isTree(operand)) {\n                const columnExprTree = operand as FilteringExpressionsTree;\n                if (columnExprTree.fieldName === this.column.field) {\n                    continue;\n                }\n            }\n            expressionsTree.filteringOperands.push(operand);\n        }\n\n        return expressionsTree;\n    }\n\n    private addBooleanItems() {\n        this.selectAllSelected = true;\n        this.selectAllIndeterminate = false;\n        this.uniqueValues.forEach(element => {\n            const value = element.value;\n            const filterListItem = new FilterListItem();\n            if (value !== undefined && value !== null && value !== '') {\n                if (this.column.filteringExpressionsTree) {\n                    if (value === true && this.expressionsList.find(exp => exp.expression.condition.name === 'true')) {\n                        filterListItem.isSelected = true;\n                        filterListItem.isFiltered = true;\n                        this.selectAllIndeterminate = true;\n                    } else if (value === false && this.expressionsList.find(exp => exp.expression.condition.name === 'false')) {\n                        filterListItem.isSelected = true;\n                        filterListItem.isFiltered = true;\n                        this.selectAllIndeterminate = true;\n                    } else {\n                        filterListItem.isSelected = false;\n                        filterListItem.isFiltered = false;\n                    }\n                } else {\n                    filterListItem.isSelected = true;\n                    filterListItem.isFiltered = true;\n                }\n                filterListItem.value = value;\n                filterListItem.label = value ?\n                    this.grid.resourceStrings.igx_grid_filter_true :\n                    this.grid.resourceStrings.igx_grid_filter_false;\n                filterListItem.indeterminate = false;\n                this.listData.push(filterListItem);\n            } else {\n                this.containsNullOrEmpty = true;\n            }\n        });\n    }\n\n    private addItems(shouldUpdateSelection: boolean) {\n        this.selectAllSelected = true;\n        this.selectAllIndeterminate = false;\n        this.containsNullOrEmpty = false;\n        this.listData = this.generateFilterListItems(this.uniqueValues, shouldUpdateSelection);\n        this.containsNullOrEmpty = this.uniqueValues.length > this.listData.length;\n    }\n\n    private generateFilterListItems(values: IgxFilterItem[], shouldUpdateSelection: boolean, parent?: FilterListItem) {\n        const filterListItems = [];\n        values?.forEach(element => {\n            const value = element.value;\n            const hasValue = value !== undefined && value !== null && value !== '';\n\n            if (hasValue) {\n                const filterListItem = new FilterListItem();\n                filterListItem.parent = parent;\n                filterListItem.value = value;\n                filterListItem.label = element.label !== undefined ?\n                    element.label :\n                    this.getFilterItemLabel(value);\n                filterListItem.indeterminate = false;\n                filterListItem.isSelected = true;\n                filterListItem.isFiltered = true;\n\n                if (this.column.filteringExpressionsTree) {\n                    filterListItem.isSelected = false;\n                    filterListItem.isFiltered = false;\n\n                    if (shouldUpdateSelection) {\n                        const exprValue = this.getExpressionValue(value);\n                        if (this.filterValues.has(exprValue)) {\n                            filterListItem.isSelected = true;\n                            filterListItem.isFiltered = true;\n                        }\n                        this.selectAllIndeterminate = true;\n                    } else {\n                        this.selectAllSelected = false;\n                    }\n                }\n\n                filterListItem.children = this.generateFilterListItems(element.children ?? element.value?.children, shouldUpdateSelection, filterListItem);\n                filterListItems.push(filterListItem);\n            }\n        });\n\n        return filterListItems;\n    }\n\n    private addSelectAllItem() {\n        const selectAll = new FilterListItem();\n        selectAll.isSelected = this.selectAllSelected;\n        selectAll.value = this.grid.resourceStrings.igx_grid_excel_select_all;\n        selectAll.label = this.grid.resourceStrings.igx_grid_excel_select_all;\n        selectAll.indeterminate = this.selectAllIndeterminate;\n        selectAll.isSpecial = true;\n        selectAll.isFiltered = this.selectAllSelected;\n        this.listData.unshift(selectAll);\n    }\n\n    private generateBlanksItem(shouldUpdateSelection) {\n        const blanks = new FilterListItem();\n        if (this.column.filteringExpressionsTree) {\n            if (shouldUpdateSelection) {\n                if (this.filterValues.has(null)) {\n                    blanks.isSelected = true;\n                    blanks.isFiltered = true;\n                } else {\n                    blanks.isSelected = false;\n                    blanks.isFiltered = false;\n                }\n            }\n        } else {\n            blanks.isSelected = true;\n            blanks.isFiltered = true;\n        }\n        blanks.value = null;\n        blanks.label = this.grid.resourceStrings.igx_grid_excel_blanks;\n        blanks.indeterminate = false;\n        blanks.isSpecial = true;\n        blanks.isBlanks = true;\n\n        return blanks;\n    }\n\n    private getFilterItemLabel(value: any, applyFormatter = true, data?: any) {\n        if (this.column.formatter) {\n            if (applyFormatter) {\n                return this.column.formatter(value, data);\n            }\n            return value;\n        }\n\n        const { display, format, digitsInfo, currencyCode, timezone } = this.column.pipeArgs;\n        const locale = this.grid.locale;\n\n        switch (this.column.dataType) {\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return formatDate(value, format, locale, timezone);\n            case GridColumnDataType.Currency:\n                return formatCurrency(value, currencyCode || getLocaleCurrencyCode(locale), display, digitsInfo, locale);\n            case GridColumnDataType.Number:\n                return formatNumber(value, locale, digitsInfo);\n            case GridColumnDataType.Percent:\n                return formatPercent(value, locale, digitsInfo);\n            default:\n                return value;\n        }\n    }\n\n    private getExpressionValue(value: any): string {\n        if (this.column.dataType === GridColumnDataType.Date) {\n            value = value ? new Date(value).toDateString() : value;\n        } else if (this.column.dataType === GridColumnDataType.DateTime) {\n            value = value ? new Date(value).toISOString() : value;\n        } else if (this.column.dataType === GridColumnDataType.Time) {\n            value = value ? new Date(value).toLocaleTimeString() : value;\n        }\n\n        return value;\n    }\n}\n","<article #mainDropdown\n    class=\"igx-excel-filter__menu\"\n    [ngClass]=\"{\n        'igx-excel-filter__sizing': shouldApplySizes,\n        'igx-excel-filter__menu--cosy': size === '2',\n        'igx-excel-filter__menu--compact': size === '1'\n    }\"\n    [id]=\"overlayComponentId\"\n    (keydown)=\"onKeyDown($event)\"\n    [style.min-height]=\"minHeight\"\n    [style.max-height]=\"maxHeight\"\n    role=\"menu\">\n\n    @if (this.excelColumnOperationsDirective) {\n        <ng-content select=\"igx-excel-style-column-operations,[igxExcelStyleColumnOperations]\">\n        </ng-content>\n    } @else {\n        <igx-excel-style-header\n            [showHiding]=\"size !== '3' && !column?.disableHiding\"\n            [showPinning]=\"size !== '3' && !column?.disablePinning\"\n            [showSelecting]=\"size !== '3' && columnSelectable()\"\n        >\n        </igx-excel-style-header>\n        @if (column?.sortable) {\n            <igx-excel-style-sorting>\n            </igx-excel-style-sorting>\n        }\n        @if (grid?.moving) {\n            <igx-excel-style-moving></igx-excel-style-moving>\n        }\n        @if (!column?.disablePinning && size === '3') {\n            <igx-excel-style-pinning></igx-excel-style-pinning>\n        }\n        @if (!column?.disableHiding && size === '3') {\n            <igx-excel-style-hiding></igx-excel-style-hiding>\n        }\n        @if (columnSelectable() && size === '3') {\n            <igx-excel-style-selecting></igx-excel-style-selecting>\n        }\n    }\n\n    @if (this.excelFilterOperationsDirective) {\n        <ng-content select=\"igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]\">\n        </ng-content>\n    } @else {\n        <igx-excel-style-clear-filters></igx-excel-style-clear-filters>\n        <igx-excel-style-conditional-filter></igx-excel-style-conditional-filter>\n        <igx-excel-style-search></igx-excel-style-search>\n    }\n</article>\n","// import { IgxExcelStyleClearFiltersComponent } from './excel-style-clear-filters.component';\n// import { IgxExcelStyleConditionalFilterComponent } from './excel-style-conditional-filter.component';\n// import { IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective, IgxGridExcelStyleFilteringComponent } from './excel-style-filtering.component';\n// import { IgxExcelStyleHeaderComponent } from './excel-style-header.component';\n// import { IgxExcelStyleHidingComponent } from './excel-style-hiding.component';\n// import { IgxExcelStyleMovingComponent } from './excel-style-moving.component';\n// import { IgxExcelStylePinningComponent } from './excel-style-pinning.component';\n// import { IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleSearchComponent } from './excel-style-search.component';\n// import { IgxExcelStyleSelectingComponent } from './excel-style-selecting.component';\n// import { IgxExcelStyleSortingComponent } from './excel-style-sorting.component';\n\nexport * from './excel-style-clear-filters.component';\nexport * from './excel-style-conditional-filter.component';\nexport * from './excel-style-header.component';\nexport * from './excel-style-hiding.component';\nexport * from './excel-style-moving.component';\nexport * from './excel-style-pinning.component';\nexport * from './excel-style-search.component';\nexport * from './excel-style-selecting.component';\nexport * from './excel-style-sorting.component';\nexport * from './excel-style-filtering.component';\nexport * from './excel-style-date-expression.component';\n\n/* NOTE: Grid excel-style filtering directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES = [\n//     IgxGridExcelStyleFilteringComponent,\n//     IgxExcelStyleHeaderComponent,\n//     IgxExcelStyleSortingComponent,\n//     IgxExcelStylePinningComponent,\n//     IgxExcelStyleHidingComponent,\n//     IgxExcelStyleSelectingComponent,\n//     IgxExcelStyleClearFiltersComponent,\n//     IgxExcelStyleConditionalFilterComponent,\n//     IgxExcelStyleMovingComponent,\n//     IgxExcelStyleSearchComponent,\n//     IgxExcelStyleColumnOperationsTemplateDirective,\n//     IgxExcelStyleFilterOperationsTemplateDirective,\n//     IgxExcelStyleLoadingValuesTemplateDirective\n// ] as const;\n","import { Component } from '@angular/core';\n\n@Component({\n    selector: 'igx-grid-footer',\n    template: '<ng-content></ng-content>',\n    standalone: true\n})\nexport class IgxGridFooterComponent {\n}\n","import { Directive, OnDestroy, Input, ElementRef, ViewContainerRef, NgZone, ChangeDetectorRef, Renderer2 } from '@angular/core';\nimport { IgxDragDirective } from '../../directives/drag-drop/drag-drop.directive';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxColumnMovingService } from './moving.service';\nimport { ColumnType } from '../common/grid.interface';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxColumnMovingDrag]',\n    standalone: true\n})\nexport class IgxColumnMovingDragDirective extends IgxDragDirective implements OnDestroy {\n\n    @Input('igxColumnMovingDrag')\n    public column: ColumnType;\n\n    public get draggable(): boolean {\n        return this.column && (this.column.grid.moving || (this.column.groupable && !this.column.columnGroup));\n    }\n\n    public get icon(): HTMLElement {\n        return this.cms.icon;\n    }\n\n    private subscription$: Subscription;\n    private _ghostClass = 'igx-grid__drag-ghost-image';\n    private ghostImgIconClass = 'igx-grid__drag-ghost-image-icon';\n    private ghostImgIconGroupClass = 'igx-grid__drag-ghost-image-icon-group';\n    private columnSelectedClass = 'igx-grid-th--selected';\n\n    constructor(\n        element: ElementRef<HTMLElement>,\n        viewContainer: ViewContainerRef,\n        zone: NgZone,\n        renderer: Renderer2,\n        cdr: ChangeDetectorRef,\n        private cms: IgxColumnMovingService,\n        _platformUtil: PlatformUtil,\n    ) {\n        super(cdr, element, viewContainer, zone, renderer, _platformUtil);\n        this.ghostClass = this._ghostClass;\n    }\n\n    public override ngOnDestroy() {\n        this._unsubscribe();\n        super.ngOnDestroy();\n    }\n\n    public onEscape(event: Event) {\n        this.cms.cancelDrop = true;\n        this.onPointerUp(event);\n    }\n\n    public override onPointerDown(event: Event) {\n        if (!this.draggable || (event.target as HTMLElement).getAttribute('draggable') === 'false') {\n            return;\n        }\n\n        super.onPointerDown(event);\n    }\n\n    public override onPointerMove(event: Event) {\n        if (this._clicked && !this._dragStarted) {\n            this._removeOnDestroy = false;\n            this.cms.column = this.column;\n            this.column.grid.cdr.detectChanges();\n\n            const movingStartArgs = {\n                source: this.column\n            };\n            this.column.grid.columnMovingStart.emit(movingStartArgs);\n            this.subscription$ = fromEvent(this.column.grid.document.defaultView, 'keydown').pipe(takeUntil(this._destroy)).subscribe((ev: KeyboardEvent) => {\n                if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {\n                    this.onEscape(ev);\n                }\n            });\n        }\n\n        super.onPointerMove(event);\n        if (this._dragStarted && this.ghostElement && !this.cms.column) {\n            this.cms.column = this.column;\n            this.column.grid.cdr.detectChanges();\n        }\n\n        if (this.cms.column) {\n            const args = {\n                source: this.column,\n                cancel: false\n            };\n            this.column.grid.columnMoving.emit(args);\n\n            if (args.cancel) {\n                this.onEscape(event);\n            }\n        }\n    }\n\n    public override onPointerUp(event: Event) {\n        // Run it explicitly inside the zone because sometimes onPointerUp executes after the code below.\n        this.zone.run(() => {\n            super.onPointerUp(event);\n            this.cms.column = null;\n            this.column.grid.cdr.detectChanges();\n        });\n\n        this._unsubscribe();\n    }\n\n    protected override createGhost(pageX: number, pageY: number) {\n        super.createGhost(pageX, pageY);\n\n        this.ghostElement.style.height = null;\n        this.ghostElement.style.minWidth = null;\n        this.ghostElement.style.flexBasis = null;\n        this.ghostElement.style.position = null;\n\n        this.ghostElement.classList.remove(this.columnSelectedClass);\n\n        const icon = this.column?.grid.document.createElement('i');\n        const text = this.column?.grid.document.createTextNode('block');\n        icon.appendChild(text);\n\n        icon.classList.add('material-icons');\n        this.cms.icon = icon;\n\n        if (!this.column.columnGroup) {\n            icon.classList.add(this.ghostImgIconClass);\n\n            this.ghostElement.insertBefore(icon, this.ghostElement.firstElementChild);\n\n            this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);\n            this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);\n        } else {\n            this.ghostElement.insertBefore(icon, this.ghostElement.childNodes[0]);\n\n            icon.classList.add(this.ghostImgIconGroupClass);\n            this.ghostElement.children[0].style.paddingLeft = '0px';\n\n            this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);\n            this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);\n        }\n    }\n\n    private _unsubscribe() {\n        if (this.subscription$) {\n            this.subscription$.unsubscribe();\n            this.subscription$ = null;\n        }\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    Pipe,\n    PipeTransform,\n    QueryList,\n    TemplateRef,\n    ViewChildren\n} from '@angular/core';\nimport { IChipsAreaReorderEventArgs, IgxChipComponent } from '../../chips/public_api';\nimport { PlatformUtil } from '../../core/utils';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\nimport { FlatGridType, GridType } from '../common/grid.interface';\nimport { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';\n\n/**\n * An internal component representing a base group-by drop area.\n *\n * @hidden @internal\n */\n@Directive()\nexport abstract class IgxGroupByAreaDirective {\n    /**\n     * The drop area template if provided by the parent grid.\n     * Otherwise, uses the default internal one.\n     */\n    @Input()\n    public dropAreaTemplate: TemplateRef<void>;\n\n    @HostBinding('class.igx-grid-grouparea')\n    public defaultClass = true;\n\n    /** The parent grid containing the component. */\n    @Input()\n    public grid: FlatGridType | GridType;\n\n    /**\n     * The group-by expressions provided by the parent grid.\n     */\n    @Input()\n    public get expressions(): IGroupingExpression[] {\n        return this._expressions;\n    }\n\n    public set expressions(value: IGroupingExpression[]) {\n        this._expressions = value;\n        this.chipExpressions = this._expressions;\n        this.expressionsChanged();\n        this.expressionsChange.emit(this._expressions);\n    }\n\n    /**\n     * The default message for the default drop area template.\n     * Obviously, if another template is provided, this is ignored.\n     */\n    @Input()\n    public get dropAreaMessage(): string {\n        return this._dropAreaMessage ?? this.grid.resourceStrings.igx_grid_groupByArea_message;\n    }\n\n    public set dropAreaMessage(value: string) {\n        this._dropAreaMessage = value;\n    }\n\n    @Output()\n    public expressionsChange = new EventEmitter<IGroupingExpression[]>();\n\n    @ViewChildren(IgxChipComponent)\n    public chips: QueryList<IgxChipComponent>;\n\n    public chipExpressions: IGroupingExpression[];\n\n    /** The native DOM element. Used in sizing calculations. */\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    private _expressions: IGroupingExpression[] = [];\n    private _dropAreaMessage: string;\n\n    constructor(private ref: ElementRef<HTMLElement>, protected platform: PlatformUtil) { }\n\n\n    public get dropAreaVisible(): boolean {\n        return (this.grid.columnInDrag && this.grid.columnInDrag.groupable) ||\n            !this.expressions.length;\n    }\n\n    public handleKeyDown(id: string, event: KeyboardEvent) {\n        if (this.platform.isActivationKey(event)) {\n            this.updateGroupSorting(id);\n        }\n    }\n\n    public handleClick(id: string) {\n        if (!this.grid.getColumnByName(id).groupable) {\n            return;\n        }\n        this.updateGroupSorting(id);\n    }\n\n    public onDragDrop(event) {\n        const drag: IgxColumnMovingDragDirective = event.detail.owner;\n        if (drag instanceof IgxColumnMovingDragDirective) {\n            const column = drag.column;\n            if (!this.grid.columns.find(c => c === column)) {\n                return;\n            }\n\n            const isGrouped = this.expressions.findIndex((item) => item.fieldName === column.field) !== -1;\n            if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {\n                const groupingExpression = {\n                    fieldName: column.field,\n                    dir: this.grid.sortingExpressions.find(expr => expr.fieldName === column.field)?.dir || SortingDirection.Asc,\n                    ignoreCase: column.sortingIgnoreCase,\n                    strategy: column.sortStrategy,\n                    groupingComparer: column.groupingComparer\n                };\n\n                this.groupBy(groupingExpression);\n            }\n        }\n    }\n\n    protected getReorderedExpressions(chipsArray: IgxChipComponent[]) {\n        const newExpressions = [];\n\n        chipsArray.forEach(chip => {\n            const expr = this.expressions.find(item => item.fieldName === chip.id);\n\n            // disallow changing order if there are columns with groupable: false\n            if (!this.grid.getColumnByName(expr.fieldName)?.groupable) {\n                return;\n            }\n\n            newExpressions.push(expr);\n        });\n\n        return newExpressions;\n    }\n\n    protected updateGroupSorting(id: string) {\n        const expr = this.expressions.find(e => e.fieldName === id);\n        expr.dir = 3 - expr.dir;\n        const expressionsChangeEvent = this.grid.groupingExpressionsChange || this.expressionsChange;\n        expressionsChangeEvent.emit(this.expressions);\n        this.grid.pipeTrigger++;\n        this.grid.notifyChanges();\n    }\n\n    protected expressionsChanged() {\n    }\n\n    public abstract handleReorder(event: IChipsAreaReorderEventArgs);\n\n    public abstract handleMoveEnd();\n\n    public abstract groupBy(expression: IGroupingExpression);\n\n    public abstract clearGrouping(name: string);\n\n}\n\n/**\n * A pipe to circumvent the use of getters/methods just to get some additional\n * information from the grouping expression and pass it to the chip representing\n * that expression.\n *\n * @hidden @internal\n */\n@Pipe({\n    name: 'igxGroupByMeta',\n    standalone: true\n})\nexport class IgxGroupByMetaPipe implements PipeTransform {\n\n    public transform(key: string, grid: GridType, _pipeTrigger?: number) {\n        const column = grid.getColumnByName(key);\n        return { groupable: !!column?.groupable, title: column?.header || key };\n    }\n}\n","import { Directive, ElementRef, Renderer2, NgZone, HostBinding, TemplateRef } from '@angular/core';\nimport { IgxDropDirective } from '../directives/drag-drop/drag-drop.directive';\nimport { IgxColumnMovingDragDirective } from './moving/moving.drag.directive';\nimport { IgxGroupByAreaDirective } from './grouping/group-by-area.directive';\nimport {\n    ColumnType,\n    IgxGridMasterDetailContext,\n    IgxGroupByRowTemplateContext,\n    IgxGridHeaderTemplateContext,\n    IgxGridRowTemplateContext,\n    IgxGridTemplateContext\n} from './common/grid.interface';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxGroupByRow]',\n    standalone: true\n})\nexport class IgxGroupByRowTemplateDirective {\n    public static ngTemplateContextGuard(_dir: IgxGroupByRowTemplateDirective,\n        ctx: unknown): ctx is IgxGroupByRowTemplateContext {\n        return true\n    }\n\n    constructor(public template: TemplateRef<IgxGroupByRowTemplateContext>) { }\n\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxGridDetail]',\n    standalone: true\n})\nexport class IgxGridDetailTemplateDirective {\n    public static ngTemplateContextGuard(_dir: IgxGridDetailTemplateDirective,\n        ctx: unknown): ctx is IgxGridMasterDetailContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowExpandedIndicator]',\n    standalone: true\n})\nexport class IgxRowExpandedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowExpandedIndicatorDirective,\n            context: unknown): context is IgxGridRowTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowCollapsedIndicator]',\n    standalone: true\n})\nexport class IgxRowCollapsedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowCollapsedIndicatorDirective,\n        context: unknown): context is IgxGridRowTemplateContext {\n        return true\n    }\n}\n\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxHeaderExpandedIndicator]',\n    standalone: true\n})\nexport class IgxHeaderExpandedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxHeaderExpandedIndicatorDirective,\n        context: unknown): context is IgxGridTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxHeaderCollapsedIndicator]',\n    standalone: true\n})\nexport class IgxHeaderCollapsedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxHeaderCollapsedIndicatorDirective,\n        context: unknown): context is IgxGridTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxExcelStyleHeaderIcon]',\n    standalone: true\n})\nexport class IgxExcelStyleHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxExcelStyleHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxSortHeaderIcon]',\n    standalone: true\n})\nexport class IgxSortHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxSortHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxSortAscendingHeaderIcon]',\n    standalone: true\n})\nexport class IgxSortAscendingHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxSortAscendingHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxSortDescendingHeaderIcon]',\n    standalone: true\n})\nexport class IgxSortDescendingHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxSortDescendingHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxGroupAreaDrop]',\n    standalone: true\n})\nexport class IgxGroupAreaDropDirective extends IgxDropDirective {\n\n    @HostBinding('class.igx-drop-area--hover')\n    public hovered = false;\n\n    constructor(\n        private groupArea: IgxGroupByAreaDirective,\n        private elementRef: ElementRef<HTMLElement>,\n        renderer: Renderer2,\n        zone: NgZone) {\n        super(elementRef, renderer, zone);\n    }\n\n    public override onDragEnter(event) {\n        const drag: IgxColumnMovingDragDirective = event.detail.owner;\n        const column: ColumnType = drag.column;\n        if (!this.columnBelongsToGrid(column)) {\n            return;\n        }\n\n        const isGrouped = this.groupArea.expressions\n            ? this.groupArea.expressions.findIndex((item) => item.fieldName === column.field) !== -1\n            : false;\n        if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {\n            drag.icon.innerText = 'group_work';\n            this.hovered = true;\n        } else {\n            drag.icon.innerText = 'block';\n            this.hovered = false;\n        }\n    }\n\n    public override onDragLeave(event) {\n        const drag: IgxColumnMovingDragDirective = event.detail.owner;\n        const column: ColumnType = drag.column;\n        if (!this.columnBelongsToGrid(column)) {\n            return;\n        }\n        event.detail.owner.icon.innerText = 'block';\n        this.hovered = false;\n    }\n\n    private closestParentByAttr(elem, attr) {\n        return elem.hasAttribute(attr) ?\n            elem :\n            this.closestParentByAttr(elem.parentElement, attr);\n    }\n\n    private columnBelongsToGrid(column: ColumnType) {\n        const elem = this.elementRef.nativeElement;\n        const closestGridID = this.closestParentByAttr(elem, 'igxGroupAreaDrop').getAttribute('gridId');\n        if (!column) {\n            return false;\n        } else {\n            const grid = column.grid;\n            if (!grid || grid.id !== closestGridID) {\n                return false;\n            }\n            return true;\n        }\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { ColumnType } from '../common/grid.interface';\n\n\n@Pipe({\n    name: 'sortingIndex',\n    standalone: true\n})\nexport class SortingIndexPipe implements PipeTransform {\n    public transform(columnField: string, sortingExpressions: ISortingExpression[]): number {\n        let sortIndex = sortingExpressions.findIndex(expression => expression.fieldName === columnField);\n        return sortIndex !== -1 ? ++sortIndex : null;\n    }\n}\n\n@Pipe({\n    name: 'igxHeaderGroupWidth',\n    standalone: true\n})\nexport class IgxHeaderGroupWidthPipe implements PipeTransform {\n\n    public transform(width: any, minWidth: any, hasLayout: boolean) {\n        const isFitContent = width === 'fit-content';\n        return hasLayout ? '' : isFitContent ? width : `${Math.max(parseFloat(width), minWidth)}px`;\n    }\n}\n\n\n@Pipe({\n    name: 'igxHeaderGroupStyle',\n    standalone: true\n})\nexport class IgxHeaderGroupStylePipe implements PipeTransform {\n\n    public transform(styles: { [prop: string]: any }, column: ColumnType, _: number): { [prop: string]: any } {\n        const css = {};\n\n        if (!styles) {\n            return css;\n        }\n\n        for (const prop of Object.keys(styles)) {\n            const res = styles[prop];\n            css[prop] = typeof res === 'function' ? res(column) : res;\n        }\n\n        return css;\n    }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { ColumnType } from '../common/grid.interface';\n\n/**\n * @hidden\n * @internal\n */\n@Injectable()\nexport class IgxColumnResizingService {\n\n    /**\n     * @hidden\n     */\n    public startResizePos: number;\n    /**\n     * Indicates that a column is currently being resized.\n     */\n    public isColumnResizing: boolean;\n    /**\n     * @hidden\n     */\n    public resizeCursor = 'col-resize';\n    /**\n     * @hidden\n     */\n     public showResizer = false;\n    /**\n     * The column being resized.\n     */\n    public column: ColumnType;\n\n    constructor(private zone: NgZone) { }\n\n    /**\n     * @hidden\n     */\n    public getColumnHeaderRenderedWidth() {\n        return parseFloat(window.getComputedStyle(this.column.headerCell.nativeElement).width);\n    }\n\n    /**\n     * @hidden\n     */\n    public get resizerHeight(): number {\n        let height = this.column.grid.getVisibleContentHeight();\n\n        // Column height multiplier in case there are Column Layouts. The resizer height need to take into account rowStart.\n        let columnHeightMultiplier = 1;\n        if (this.column.columnLayoutChild) {\n            columnHeightMultiplier = this.column.grid.multiRowLayoutRowSize - this.column.rowStart + 1;\n        }\n\n        if (this.column.level !== 0) {\n            height -= this.column.topLevelParent.headerGroup.height - this.column.headerGroup.height * columnHeightMultiplier;\n        }\n\n        return height;\n    }\n\n    /**\n     * Returns the minimal possible width to which the column can be resized.\n     */\n    public get restrictResizeMin(): number {\n        const actualWidth = this.getColumnHeaderRenderedWidth();\n        const minWidth = this.column.minWidthPx < actualWidth ? this.column.minWidthPx : actualWidth;\n\n        return actualWidth - minWidth;\n    }\n\n    /**\n     * Returns the maximal possible width to which the column can be resized.\n     */\n    public get restrictResizeMax(): number {\n        const actualWidth = this.getColumnHeaderRenderedWidth();\n        const maxWidth = this.column.maxWidthPx;\n        if (this.column.maxWidth) {\n            return maxWidth - actualWidth;\n        } else {\n            return Number.MAX_SAFE_INTEGER;\n        }\n    }\n\n    /**\n     * Autosizes the column to the longest currently visible cell value, including the header cell.\n     * If the column has a predifined maxWidth and the autosized column width will become bigger than it,\n     * then the column is sized to its maxWidth.\n     */\n    public autosizeColumnOnDblClick() {\n        const currentColWidth = this.getColumnHeaderRenderedWidth();\n        this.column.width = this.column.getAutoSize();\n\n        this.zone.run(() => { });\n\n        this.column.grid.columnResized.emit({\n            column: this.column,\n            prevWidth: currentColWidth.toString(),\n            newWidth: this.column.width\n        });\n    }\n\n    /**\n     * Resizes the column regaridng to the column minWidth and maxWidth.\n     */\n    public resizeColumn(event: MouseEvent, ratio: number = 1) {\n        this.showResizer = false;\n        const diff = (event.clientX - this.startResizePos) / ratio;\n\n        const colWidth = this.column.width;\n        const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n        let currentColWidth = parseFloat(colWidth);\n        const actualWidth = this.getColumnHeaderRenderedWidth();\n        currentColWidth = Number.isNaN(currentColWidth) ? parseFloat(actualWidth as any) : currentColWidth;\n\n        if (this.column.grid.hasColumnLayouts) {\n            this.resizeColumnLayoutFor(this.column, diff);\n        } else if (isPercentageWidth) {\n            this._handlePercentageResize(diff, this.column);\n        } else {\n            this._handlePixelResize(diff, this.column);\n        }\n\n\n        this.zone.run(() => { });\n\n        if (currentColWidth !== parseFloat(this.column.width)) {\n            this.column.grid.columnResized.emit({\n                column: this.column,\n                prevWidth: isPercentageWidth ? currentColWidth + '%' : currentColWidth + 'px',\n                newWidth: this.column.width\n            });\n        }\n\n        this.isColumnResizing = false;\n    }\n\n    protected _handlePixelResize(diff: number, column: ColumnType) {\n        const currentColWidth = parseFloat(column.width);\n        const colMinWidth = column.minWidthPx;\n        const colMaxWidth = column.maxWidthPx;\n        if (currentColWidth + diff < colMinWidth) {\n            column.width = colMinWidth + 'px';\n        } else if (colMaxWidth && (currentColWidth + diff > colMaxWidth)) {\n            column.width = colMaxWidth + 'px';\n        } else {\n            column.width = (currentColWidth + diff) + 'px';\n        }\n    }\n\n    protected _handlePercentageResize(diff: number, column: ColumnType) {\n        const currentPercentWidth = parseFloat(column.width);\n        const gridAvailableSize = column.grid.calcWidth;\n\n        const diffPercentage = (diff / gridAvailableSize) * 100;\n        const colMinWidth = column.minWidthPercent;\n        const colMaxWidth = column.maxWidthPercent;\n\n        if (currentPercentWidth + diffPercentage < colMinWidth) {\n            column.width = colMinWidth + '%';\n        } else if (colMaxWidth && (currentPercentWidth + diffPercentage > colMaxWidth)) {\n            column.width = colMaxWidth + '%';\n        } else {\n            column.width = (currentPercentWidth + diffPercentage) + '%';\n        }\n    }\n\n    protected getColMinWidth(column: ColumnType) {\n        let currentColWidth = parseFloat(column.width);\n        const actualWidth = column.headerCell.nativeElement.getBoundingClientRect().width;\n        currentColWidth = Number.isNaN(currentColWidth) || (currentColWidth < actualWidth) ? actualWidth : currentColWidth;\n\n        const actualMinWidth = parseFloat(column.minWidth);\n        return actualMinWidth < currentColWidth ? actualMinWidth : currentColWidth;\n    }\n\n    protected resizeColumnLayoutFor(column: ColumnType, diff: number) {\n        const relativeColumns = column.getResizableColUnderEnd();\n        const combinedSpan = relativeColumns.reduce((acc, col) => acc + col.spanUsed, 0);\n\n        // Resize first those who might reach min/max width\n        let columnsToResize = [...relativeColumns];\n        let updatedDiff = diff;\n        let updatedCombinedSpan = combinedSpan;\n        let setMinMaxCols = false;\n        do {\n            // Cycle them until there are not ones that reach min/max size, because the diff accumulates after each cycle.\n            // This is because we can have at first 2 cols reaching min width and then after\n            // recalculating the diff there might be 1 more that reaches min width.\n            setMinMaxCols = false;\n            let newCombinedSpan = updatedCombinedSpan;\n            const newColsToResize = [];\n            columnsToResize.forEach((col) => {\n                const currentResizeWidth = parseFloat(col.target.calcWidth);\n                const resizeScaled = (diff / updatedCombinedSpan) * col.target.gridColumnSpan;\n                const colWidth = col.target.width;\n                const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n\n                const minWidth = col.target.minWidthPx;\n                const maxWidth = col.target.maxWidthPx;\n                if (currentResizeWidth + resizeScaled < minWidth) {\n                    col.target.width = isPercentageWidth ? col.target.minWidthPercent + '%' : minWidth + 'px';\n                    updatedDiff += (currentResizeWidth - minWidth);\n                    newCombinedSpan -= col.spanUsed;\n                    setMinMaxCols = true;\n                } else if (maxWidth && (currentResizeWidth + resizeScaled > maxWidth)) {\n                    col.target.width = isPercentageWidth ? col.target.maxWidthPercent + '%' : col.target.maxWidthPx + 'px';\n                    updatedDiff -= (maxWidth - currentResizeWidth);\n                    newCombinedSpan -= col.spanUsed;\n                    setMinMaxCols = true;\n                } else {\n                    // Save new ones that can be resized\n                    newColsToResize.push(col);\n                }\n            });\n\n            updatedCombinedSpan = newCombinedSpan;\n            columnsToResize = newColsToResize;\n        } while (setMinMaxCols);\n\n        // Those left that don't reach min/max size resize them normally.\n        columnsToResize.forEach((col) => {\n            const resizeScaled = (updatedDiff / updatedCombinedSpan) * col.target.gridColumnSpan;\n            const colWidth = col.target.width;\n            const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n            if (isPercentageWidth) {\n                this._handlePercentageResize(resizeScaled, col.target);\n            } else {\n                this._handlePixelResize(resizeScaled, col.target);\n            }\n        });\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { Subject } from 'rxjs';\nimport { ColumnType, GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { GridSelectionMode } from '../common/enums';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\nimport { SortingIndexPipe } from './pipes';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { ExpressionsTreeUtil } from '../../data-operations/expressions-tree-util';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-header',\n    templateUrl: 'grid-header.component.html',\n    imports: [IgxIconComponent, NgTemplateOutlet, NgClass, SortingIndexPipe]\n})\nexport class IgxGridHeaderComponent implements DoCheck, OnDestroy {\n\n    @Input()\n    public column: ColumnType;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultESFHeaderIconTemplate', { read: TemplateRef, static: true })\n    protected defaultESFHeaderIconTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultSortHeaderIconTemplate', { read: TemplateRef, static: true })\n    protected defaultSortHeaderIconTemplate;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('sortIconContainer', { read: ElementRef })\n    protected sortIconContainer: ElementRef;\n\n    /**\n     * Returns the `aria-selected` of the header.\n     */\n    @HostBinding('attr.aria-selected')\n    public get ariaSelected(): boolean {\n        return this.column.selected;\n    }\n\n    @HostBinding('class.igx-grid-th')\n    public get columnGroupStyle() {\n        return !this.column.columnGroup;\n    }\n\n    @HostBinding('class.asc')\n    public get sortAscendingStyle() {\n        return this.sortDirection === SortingDirection.Asc;\n    }\n\n    @HostBinding('class.desc')\n    public get sortDescendingStyle() {\n        return this.sortDirection === SortingDirection.Desc;\n    }\n\n    @HostBinding('class.igx-grid-th--number')\n    public get numberStyle() {\n        return this.column.dataType === GridColumnDataType.Number;\n    }\n\n    @HostBinding('class.igx-grid-th--sortable')\n    public get sortableStyle() {\n        return this.column.sortable;\n    }\n\n    @HostBinding('class.igx-grid-th--selectable')\n    public get selectableStyle() {\n        return this.selectable;\n    }\n\n    @HostBinding('class.igx-grid-th--filtrable')\n    public get filterableStyle() {\n        return this.column.filterable && this.grid.filteringService.isFilterRowVisible;\n    }\n\n    @HostBinding('class.igx-grid-th--sorted')\n    public get sortedStyle() {\n        return this.sorted;\n    }\n\n    @HostBinding('class.igx-grid-th--selected')\n    public get selectedStyle() {\n        return this.selected;\n    }\n\n    /**\n     * @hidden\n     */\n    public get esfIconTemplate() {\n        return this.grid.excelStyleHeaderIconTemplate || this.defaultESFHeaderIconTemplate;\n    }\n\n    /**\n     * @hidden\n     */\n    public get sortIconTemplate() {\n        if (this.sortDirection === SortingDirection.None && this.grid.sortHeaderIconTemplate) {\n            return this.grid.sortHeaderIconTemplate;\n        } else if (this.sortDirection === SortingDirection.Asc && this.grid.sortAscendingHeaderIconTemplate) {\n            return this.grid.sortAscendingHeaderIconTemplate;\n        } else if (this.sortDirection === SortingDirection.Desc && this.grid.sortDescendingHeaderIconTemplate) {\n            return this.grid.sortDescendingHeaderIconTemplate;\n        } else {\n            return this.defaultSortHeaderIconTemplate;\n        }\n    }\n    /**\n     * @hidden\n     */\n    public get disabled() {\n        const groupArea = this.grid.groupArea || this.grid.treeGroupArea;\n        if (groupArea?.expressions && groupArea.expressions.length && groupArea.expressions.map(g => g.fieldName).includes(this.column.field)) {\n            return true;\n        }\n        return false;\n    }\n\n    public get sorted() {\n        return this.sortDirection !== SortingDirection.None;\n    }\n\n    public get filterIconClassName() {\n        return this.column.filteringExpressionsTree || this.isAdvancedFilterApplied() ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';\n    }\n\n    public get selectable() {\n        return this.grid.columnSelection !== GridSelectionMode.none &&\n            this.column.applySelectableClass &&\n            !this.column.selected &&\n            !this.grid.filteringService.isFilterRowVisible;\n    }\n\n    public get selected() {\n        return this.column.selected\n            && (!this.grid.filteringService.isFilterRowVisible || this.grid.filteringService.filteredColumn !== this.column);\n    }\n\n    public get title() {\n        return this.column.title || this.column.header || this.column.field;\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    public sortDirection = SortingDirection.None;\n    protected _destroy$ = new Subject<boolean>();\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public grid: GridType,\n        public colResizingService: IgxColumnResizingService,\n        public cdr: ChangeDetectorRef,\n        private ref: ElementRef<HTMLElement>\n    ) { }\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        if (!this.colResizingService.isColumnResizing) {\n\n            if (this.grid.filteringService.isFilterRowVisible) {\n                if (this.column.filterCellTemplate) {\n                    this.grid.filteringRow.close();\n                    return;\n                }\n\n                if (this.column.filterable && !this.column.columnGroup &&\n                    !this.grid.filteringService.isFilterComplex(this.column.field)) {\n                    this.grid.filteringService.filteredColumn = this.column;\n                }\n            } else if (this.grid.columnSelection !== GridSelectionMode.none && this.column.selectable) {\n                const clearSelection = this.grid.columnSelection === GridSelectionMode.single || !event.ctrlKey;\n                const rangeSelection = this.grid.columnSelection === GridSelectionMode.multiple && event.shiftKey;\n\n                if (!this.column.selected || (this.grid.selectionService.getSelectedColumns().length > 1 && clearSelection)) {\n                    this.grid.selectionService.selectColumn(this.column.field, clearSelection, rangeSelection, event);\n                } else {\n                    this.grid.selectionService.deselectColumn(this.column.field, event);\n                }\n            }\n        }\n        this.grid.theadRow.nativeElement.focus();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pointerenter')\n    public onPinterEnter() {\n        this.column.applySelectableClass = true;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pointerleave')\n    public onPointerLeave() {\n        this.column.applySelectableClass = false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        this.getSortDirection();\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this._destroy$.next(true);\n        this._destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPointerDownIndicator(event) {\n        // Stop propagation of pointer events to now allow column dragging using the header indicators.\n        event.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onFilteringIconClick(event) {\n        event.stopPropagation();\n        this.grid.filteringService.toggleFilterDropdown(this.nativeElement, this.column);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSortingIconClick(event) {\n        event.stopPropagation();\n        this.triggerSort();\n    }\n\n    protected getSortDirection() {\n        const expr = this.grid.sortingExpressions.find((x) => x.fieldName === this.column.field);\n        this.sortDirection = expr ? expr.dir : SortingDirection.None;\n    }\n\n    protected isAdvancedFilterApplied() {\n        if(!this.grid.advancedFilteringExpressionsTree) {\n            return false;\n        }\n        return !!ExpressionsTreeUtil.find(this.grid.advancedFilteringExpressionsTree, this.column.field);\n    }\n\n    private triggerSort() {\n        const groupingExpr = this.grid.groupingExpressions ?\n            this.grid.groupingExpressions.find((expr) => expr.fieldName === this.column.field) :\n            this.grid.groupArea?.expressions ? this.grid.groupArea?.expressions.find((expr) => expr.fieldName === this.column.field) : null;\n        const sortDir = groupingExpr ?\n            this.sortDirection + 1 > SortingDirection.Desc ? SortingDirection.Asc : SortingDirection.Desc\n            : this.sortDirection + 1 > SortingDirection.Desc ? SortingDirection.None : this.sortDirection + 1;\n        this.sortDirection = sortDir;\n        this.grid.sort({\n            fieldName: this.column.field, dir: this.sortDirection, ignoreCase: this.column.sortingIgnoreCase,\n            strategy: this.column.sortStrategy\n        });\n    }\n}\n","<ng-template #defaultColumn>\n    <span [title]=\"title\">{{ column.header || column.field }}</span>\n</ng-template>\n\n<ng-template #defaultESFHeaderIconTemplate>\n    <igx-icon family=\"default\" name=\"more_vert\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultSortHeaderIconTemplate>\n    <igx-icon\n        family=\"default\"\n        [name]=\"sortDirection < 2 ? 'sort_asc' : 'sort_desc'\">\n    </igx-icon>\n</ng-template>\n\n<span class=\"igx-grid-th__title\">\n    <ng-container\n        *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n    </ng-container>\n</span>\n@if (!column.columnGroup) {\n    <div class=\"igx-grid-th__icons\">\n        @if (column.sortable && !disabled) {\n            <div #sortIconContainer class=\"sort-icon\"\n                [attr.data-sortIndex]=\"(grid.sortingOptions.mode === 'single' && grid.sortingExpressions.length <=1) ? null : column.field | sortingIndex:grid.sortingExpressions\"\n                (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"onSortingIconClick($event)\">\n                <ng-container *ngTemplateOutlet=\"sortIconTemplate; context: { $implicit:  this }\"></ng-container>\n            </div>\n        }\n        @if (grid.allowFiltering && column.filterable && grid.filterMode === 'excelStyleFilter') {\n            <div [ngClass]=\"filterIconClassName\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"onFilteringIconClick($event)\" >\n                <ng-container *ngTemplateOutlet=\"esfIconTemplate; context: { $implicit:  this }\"></ng-container>\n            </div>\n        }\n    </div>\n}\n","import { AutoPositionStrategy } from '../../../services/overlay/position/auto-position-strategy';\nimport { ConnectedFit } from '../../../services/overlay/utilities';\n\n/** @hidden */\nexport class ExcelStylePositionStrategy extends AutoPositionStrategy {\n    protected override shouldFitInViewPort() {\n        return true;\n    }\n\n    protected override fitInViewport(element: HTMLElement, connectedFit: ConnectedFit) {\n        const heightOverflow = connectedFit.contentElementRect.height - connectedFit.viewPortRect.height;\n        if (heightOverflow > 0) {\n            element.style.width = 'auto';\n            element.style.height = `${connectedFit.viewPortRect.height}px`;\n        } else {\n            element.style.height = `${Math.max(\n                connectedFit.viewPortRect.height - connectedFit.targetRect.bottom - 1,\n                connectedFit.contentElementRect.height)}px`;\n        }\n\n        super.fitInViewport(element, connectedFit);\n    }\n}\n","import {\n    Injectable,\n    OnDestroy,\n} from '@angular/core';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { IFilteringExpression, FilteringLogic } from '../../data-operations/filtering-expression.interface';\nimport { Subject } from 'rxjs';\nimport { takeUntil, first } from 'rxjs/operators';\nimport { IForOfState } from '../../directives/for-of/for_of.directive';\nimport { IFilteringOperation } from '../../data-operations/filtering-condition';\nimport { IColumnResizeEventArgs, IFilteringEventArgs } from '../common/events';\nimport { OverlayCancelableEventArgs, OverlaySettings, VerticalAlignment } from '../../services/overlay/utilities';\nimport { IgxOverlayService } from '../../services/overlay/overlay';\nimport { useAnimation } from '@angular/animations';\nimport { AbsoluteScrollStrategy } from '../../services/overlay/scroll/absolute-scroll-strategy';\nimport { IgxIconService } from '../../icon/icon.service';\nimport { editor, pinLeft, unpinLeft } from '@igniteui/material-icons-extended';\nimport { ExpressionUI, generateExpressionsList } from './excel-style/common';\nimport { ColumnType, GridType } from '../common/grid.interface';\nimport { formatDate } from '../../core/utils';\nimport { ExcelStylePositionStrategy } from './excel-style/excel-style-position-strategy';\nimport { fadeIn } from 'igniteui-angular/animations';\nimport { ExpressionsTreeUtil, isTree } from '../../data-operations/expressions-tree-util';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class IgxFilteringService implements OnDestroy {\n    public isFilterRowVisible = false;\n    public filteredColumn: ColumnType = null;\n    public selectedExpression: IFilteringExpression = null;\n    public columnToMoreIconHidden = new Map<string, boolean>();\n    public activeFilterCell = 0;\n    public grid: GridType;\n\n    private columnsWithComplexFilter = new Set<string>();\n    private areEventsSubscribed = false;\n    protected destroy$ = new Subject<boolean>();\n    private isFiltering = false;\n    private columnToExpressionsMap = new Map<string, ExpressionUI[]>();\n    private columnStartIndex = -1;\n    protected _filterMenuOverlaySettings: OverlaySettings = {\n        closeOnEscape: true,\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new ExcelStylePositionStrategy({\n            verticalStartPoint: VerticalAlignment.Bottom,\n            openAnimation: useAnimation(fadeIn, { params: { duration: '250ms' } }),\n            closeAnimation: null\n        }),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n    protected lastActiveNode;\n\n    constructor(\n        private iconService: IgxIconService,\n        protected _overlayService: IgxOverlayService,\n    ) { }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    public toggleFilterDropdown(element: HTMLElement, column: ColumnType) {\n\n        const filterIcon = column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';\n        const filterIconTarget = element.querySelector(`.${filterIcon}`) as HTMLElement || element;\n\n        const id = this.grid.createFilterDropdown(column, {\n            ...this._filterMenuOverlaySettings,\n            ...{ target: filterIconTarget }\n        });\n\n        this._overlayService.opening\n            .pipe(\n                first(overlay => overlay.id === id),\n                takeUntil(this.destroy$)\n            )\n            .subscribe((event: OverlayCancelableEventArgs) => {\n                if (event.componentRef) {\n                    event.componentRef.instance.initialize(column, this._overlayService);\n                    event.componentRef.instance.overlayComponentId = id;\n                }\n                this.lastActiveNode = this.grid.navigation.activeNode;\n            });\n\n        this._overlayService.closed\n            .pipe(\n                first(overlay => overlay.id === id),\n                takeUntil(this.destroy$)\n            )\n            .subscribe(() => {\n                this._overlayService.detach(id);\n                this.grid.navigation.activeNode = this.lastActiveNode;\n                this.grid.theadRow.nativeElement.focus();\n            });\n\n        this._overlayService.show(id);\n    }\n\n    /**\n     * Subscribe to grid's events.\n     */\n    public subscribeToEvents() {\n        if (!this.areEventsSubscribed) {\n            this.areEventsSubscribed = true;\n\n            this.grid.columnResized.pipe(takeUntil(this.destroy$)).subscribe((eventArgs: IColumnResizeEventArgs) => {\n                this.updateFilteringCell(eventArgs.column);\n            });\n\n            this.grid.parentVirtDir.chunkLoad.pipe(takeUntil(this.destroy$)).subscribe((eventArgs: IForOfState) => {\n                if (eventArgs.startIndex !== this.columnStartIndex) {\n                    this.columnStartIndex = eventArgs.startIndex;\n                    this.grid.filterCellList.forEach((filterCell) => {\n                        filterCell.updateFilterCellArea();\n                    });\n                }\n            });\n\n            this.grid.columnMovingEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n                this.grid.filterCellList.forEach((filterCell) => {\n                    filterCell.updateFilterCellArea();\n                });\n            });\n        }\n    }\n\n    /**\n     * Close filtering row if a column is hidden.\n     */\n    public hideFilteringRowOnColumnVisibilityChange(col: ColumnType) {\n        const filteringRow = this.grid?.filteringRow;\n\n        if (filteringRow && filteringRow.column && filteringRow.column === col) {\n            filteringRow.close();\n        }\n    }\n\n    /**\n     * Internal method to create expressionsTree and filter grid used in both filter modes.\n     */\n    public filterInternal(field: string, expressions: FilteringExpressionsTree | Array<ExpressionUI> = null): void {\n        this.isFiltering = true;\n\n        let expressionsTree;\n        if (expressions && 'operator' in expressions) {\n            expressionsTree = expressions;\n        } else {\n            expressionsTree = this.createSimpleFilteringTree(field, expressions);\n        }\n\n        if (expressionsTree.filteringOperands.length === 0) {\n            this.clearFilter(field);\n        } else {\n            this.filter(field, null, expressionsTree);\n        }\n\n        this.isFiltering = false;\n    }\n\n    /**\n     * Execute filtering on the grid.\n     */\n    public filter(field: string, value: any, conditionOrExpressionTree?: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase?: boolean) {\n\n        const grid = this.grid;\n\n        const col = grid.getColumnByName(field);\n        const filteringIgnoreCase = ignoreCase || (col ? col.filteringIgnoreCase : false);\n\n        const filteringTree = grid.filteringExpressionsTree;\n        const columnFilteringExpressionsTree = ExpressionsTreeUtil.find(filteringTree, field) as IFilteringExpressionsTree;\n        conditionOrExpressionTree = conditionOrExpressionTree ?? columnFilteringExpressionsTree;\n        const fieldFilterIndex = ExpressionsTreeUtil.findIndex(filteringTree, field);\n\n        const newFilteringTree: FilteringExpressionsTree =\n            this.prepare_filtering_expression(filteringTree, field, value, conditionOrExpressionTree,\n                filteringIgnoreCase, fieldFilterIndex, true);\n\n        const eventArgs: IFilteringEventArgs = {\n            owner: grid,\n            filteringExpressions: ExpressionsTreeUtil.find(newFilteringTree, field) as FilteringExpressionsTree, cancel: false\n        };\n        this.grid.filtering.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        if (conditionOrExpressionTree) {\n            this.filter_internal(field, value, conditionOrExpressionTree, filteringIgnoreCase);\n        } else {\n            const expressionsTreeForColumn = ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, field);\n            if (!expressionsTreeForColumn) {\n                throw new Error('Invalid condition or Expression Tree!');\n            } else if (isTree(expressionsTreeForColumn)) {\n                this.filter_internal(field, value, expressionsTreeForColumn, filteringIgnoreCase);\n            } else {\n                this.filter_internal(field, value, expressionsTreeForColumn.condition, filteringIgnoreCase);\n            }\n        }\n        const doneEventArgs = ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, field) as FilteringExpressionsTree;\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.grid.filteringDone.emit(doneEventArgs));\n    }\n\n    public filter_global(term, condition, ignoreCase) {\n        if (!condition) {\n            return;\n        }\n\n        const filteringTree = this.grid.filteringExpressionsTree;\n        this.grid.crudService.endEdit(false);\n        this.grid.page = 0;\n\n        filteringTree.filteringOperands = [];\n        for (const column of this.grid.columns) {\n            this.prepare_filtering_expression(filteringTree, column.field, term,\n                condition, ignoreCase || column.filteringIgnoreCase);\n        }\n\n        this.grid.filteringExpressionsTree = filteringTree;\n    }\n\n    /**\n     * Clears the filter of a given column if name is provided. Otherwise clears the filters of all columns.\n     */\n    public clearFilter(field: string): void {\n        if (field) {\n            const column = this.grid.getColumnByName(field);\n            if (!column) {\n                return;\n            }\n        }\n\n        const emptyFilter = new FilteringExpressionsTree(null, field);\n        const onFilteringEventArgs: IFilteringEventArgs = {\n            owner: this.grid,\n            filteringExpressions: emptyFilter,\n            cancel: false\n        };\n\n        this.grid.filtering.emit(onFilteringEventArgs);\n\n        if (onFilteringEventArgs.cancel) {\n            return;\n        }\n\n        this.isFiltering = true;\n        this.clear_filter(field);\n\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.grid.filteringDone.emit(emptyFilter));\n\n        if (field) {\n            const expressions = this.getExpressions(field);\n            expressions.length = 0;\n        } else {\n            this.grid.columns.forEach(c => {\n                const expressions = this.getExpressions(c.field);\n                expressions.length = 0;\n            });\n        }\n\n        this.isFiltering = false;\n    }\n\n    public clear_filter(fieldName: string) {\n        const grid = this.grid;\n        grid.crudService.endEdit(false);\n        const filteringState = grid.filteringExpressionsTree;\n        const index = ExpressionsTreeUtil.findIndex(filteringState, fieldName);\n\n        if (index > -1) {\n            filteringState.filteringOperands.splice(index, 1);\n        } else if (!fieldName) {\n            filteringState.filteringOperands = [];\n        }\n\n        grid.filteringExpressionsTree = filteringState;\n    }\n\n    /**\n     * Filters all the `IgxColumnComponent` in the `IgxGridComponent` with the same condition.\n     * @deprecated in version 19.0.0.\n     */\n    public filterGlobal(value: any, condition, ignoreCase?) {\n        if (!condition) {\n            return;\n        }\n\n        const filteringTree = this.grid.filteringExpressionsTree;\n        const newFilteringTree = new FilteringExpressionsTree(filteringTree.operator, filteringTree.fieldName);\n\n        for (const column of this.grid.columns) {\n            this.prepare_filtering_expression(newFilteringTree, column.field, value, condition,\n                ignoreCase || column.filteringIgnoreCase);\n        }\n\n        const eventArgs: IFilteringEventArgs = { owner: this.grid, filteringExpressions: newFilteringTree, cancel: false };\n        this.grid.filtering.emit(eventArgs);\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        this.grid.crudService.endEdit(false);\n        this.grid.page = 0;\n        this.grid.filteringExpressionsTree = newFilteringTree;\n\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.grid.filteringDone.emit(this.grid.filteringExpressionsTree));\n    }\n\n    /**\n     * Register filtering SVG icons in the icon service.\n     */\n    public registerSVGIcons(): void {\n        const editorIcons = editor as any[];\n        editorIcons.forEach(icon => {\n            this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons');\n        });\n        this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons');\n        this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons');\n    }\n\n    /**\n     * Returns the ExpressionUI array for a given column.\n     */\n    public getExpressions(columnId: string): ExpressionUI[] {\n        if (!this.columnToExpressionsMap.has(columnId)) {\n            const column = this.grid.columns.find((col) => col.field === columnId);\n            const expressionUIs = new Array<ExpressionUI>();\n            if (column) {\n                this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, expressionUIs);\n                this.columnToExpressionsMap.set(columnId, expressionUIs);\n            }\n            return expressionUIs;\n        }\n\n        return this.columnToExpressionsMap.get(columnId);\n    }\n\n    /**\n     * Recreates all ExpressionUIs for all columns. Executed after filtering to refresh the cache.\n     */\n    public refreshExpressions() {\n        if (!this.isFiltering) {\n            this.columnsWithComplexFilter.clear();\n\n            this.columnToExpressionsMap.forEach((value: ExpressionUI[], key: string) => {\n                const column = this.grid.columns.find((col) => col.field === key);\n                if (column) {\n                    value.length = 0;\n\n                    this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, value);\n\n                    const isComplex = this.isFilteringTreeComplex(column.filteringExpressionsTree);\n                    if (isComplex) {\n                        this.columnsWithComplexFilter.add(key);\n                    }\n\n                    this.updateFilteringCell(column);\n                } else {\n                    this.columnToExpressionsMap.delete(key);\n                }\n            });\n        }\n    }\n\n    /**\n     * Remove an ExpressionUI for a given column.\n     */\n    public removeExpression(columnId: string, indexToRemove: number) {\n        const expressionsList = this.getExpressions(columnId);\n\n        if (indexToRemove === 0 && expressionsList.length > 1) {\n            expressionsList[1].beforeOperator = null;\n        } else if (indexToRemove === expressionsList.length - 1) {\n            expressionsList[indexToRemove - 1].afterOperator = null;\n        } else {\n            expressionsList[indexToRemove - 1].afterOperator = expressionsList[indexToRemove + 1].beforeOperator;\n            expressionsList[0].beforeOperator = null;\n            expressionsList[expressionsList.length - 1].afterOperator = null;\n        }\n\n        expressionsList.splice(indexToRemove, 1);\n    }\n\n    /**\n     * Generate filtering tree for a given column from existing ExpressionUIs.\n     */\n    public createSimpleFilteringTree(columnId: string, expressionUIList = null): FilteringExpressionsTree {\n        const expressionsList = expressionUIList ? expressionUIList : this.getExpressions(columnId);\n        const expressionsTree = new FilteringExpressionsTree(FilteringLogic.Or, columnId);\n        let currAndBranch: FilteringExpressionsTree;\n\n        for (const currExpressionUI of expressionsList) {\n            if (!currExpressionUI.expression.condition.isUnary && currExpressionUI.expression.searchVal === null) {\n                if (currExpressionUI.afterOperator === FilteringLogic.And && !currAndBranch) {\n                    currAndBranch = new FilteringExpressionsTree(FilteringLogic.And, columnId);\n                    expressionsTree.filteringOperands.push(currAndBranch);\n                }\n                continue;\n            }\n\n            if ((currExpressionUI.beforeOperator === undefined || currExpressionUI.beforeOperator === null ||\n                currExpressionUI.beforeOperator === FilteringLogic.Or) &&\n                currExpressionUI.afterOperator === FilteringLogic.And) {\n\n                currAndBranch = new FilteringExpressionsTree(FilteringLogic.And, columnId);\n                expressionsTree.filteringOperands.push(currAndBranch);\n                currAndBranch.filteringOperands.push(currExpressionUI.expression);\n\n            } else if (currExpressionUI.beforeOperator === FilteringLogic.And) {\n                currAndBranch.filteringOperands.push(currExpressionUI.expression);\n            } else {\n                expressionsTree.filteringOperands.push(currExpressionUI.expression);\n                currAndBranch = null;\n            }\n        }\n\n        return expressionsTree;\n    }\n\n    /**\n     * Returns whether a complex filter is applied to a given column.\n     */\n    public isFilterComplex(columnId: string) {\n        if (this.columnsWithComplexFilter.has(columnId)) {\n            return true;\n        }\n\n        const column = this.grid.columns.find((col) => col.field === columnId);\n        const isComplex = column && this.isFilteringTreeComplex(column.filteringExpressionsTree);\n        if (isComplex) {\n            this.columnsWithComplexFilter.add(columnId);\n        }\n\n        return isComplex;\n    }\n\n    /**\n     * Returns the string representation of the FilteringLogic operator.\n     */\n    public getOperatorAsString(operator: FilteringLogic): any {\n        if (operator === 0) {\n            return this.grid.resourceStrings.igx_grid_filter_operator_and;\n        } else {\n            return this.grid.resourceStrings.igx_grid_filter_operator_or;\n        }\n    }\n\n    /**\n     * Generate the label of a chip from a given filtering expression.\n     */\n    public getChipLabel(expression: IFilteringExpression): any {\n        if (expression.condition.isUnary) {\n            return this.grid.resourceStrings[`igx_grid_filter_${expression.condition.name}`] || expression.condition.name;\n        } else if (expression.searchVal instanceof Date) {\n            const column = this.grid.getColumnByName(expression.fieldName);\n            const formatter = column.formatter;\n            if (formatter) {\n                return formatter(expression.searchVal, undefined);\n            }\n            const pipeArgs = column.pipeArgs;\n            return formatDate(expression.searchVal, pipeArgs.format, this.grid.locale);\n        } else {\n            return expression.searchVal;\n        }\n    }\n\n    /**\n     * Updates the content of a filterCell.\n     */\n    public updateFilteringCell(column: ColumnType) {\n        const filterCell = column.filterCell;\n        if (filterCell) {\n            filterCell.updateFilterCellArea();\n        }\n    }\n\n    public generateExpressionsList(expressions: IFilteringExpressionsTree | IFilteringExpression,\n        operator: FilteringLogic,\n        expressionsUIs: ExpressionUI[]): void {\n        generateExpressionsList(expressions, operator, expressionsUIs);\n    }\n\n    public isFilteringExpressionsTreeEmpty(expressionTree: IFilteringExpressionsTree): boolean {\n        if (FilteringExpressionsTree.empty(expressionTree)) {\n            return true;\n        }\n\n        for (const expr of expressionTree.filteringOperands) {\n            if (isTree(expr)) {\n                if (expr.filteringOperands && expr.filteringOperands.length) {\n                    return false;\n                }\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    protected filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase: boolean) {\n        const filteringTree = this.grid.filteringExpressionsTree;\n        this.grid.crudService.endEdit(false);\n        this.grid.page = 0;\n\n        const fieldFilterIndex = ExpressionsTreeUtil.findIndex(filteringTree, fieldName);\n        this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);\n        this.grid.filteringExpressionsTree = filteringTree;\n    }\n\n    /** Modifies the filteringState object to contain the newly added filtering conditions/expressions.\n     * If createNewTree is true, filteringState will not be modified (because it directly affects the grid.filteringExpressionsTree),\n     * but a new object is created and returned.\n     */\n    protected prepare_filtering_expression(\n        filteringState: IFilteringExpressionsTree,\n        fieldName: string,\n        searchVal,\n        conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase: boolean,\n        insertAtIndex = -1,\n        createNewTree = false): FilteringExpressionsTree {\n\n        let expressionsTree = conditionOrExpressionsTree && 'operator' in conditionOrExpressionsTree ?\n            conditionOrExpressionsTree : null;\n        const condition = conditionOrExpressionsTree && 'operator' in conditionOrExpressionsTree ?\n            null : conditionOrExpressionsTree as IFilteringOperation;\n\n        let newExpressionsTree = filteringState as FilteringExpressionsTree;\n\n        if (createNewTree) {\n            newExpressionsTree = new FilteringExpressionsTree(filteringState.operator, filteringState.fieldName);\n            newExpressionsTree.filteringOperands = [...filteringState.filteringOperands];\n        }\n\n        if (condition) {\n            const newExpression: IFilteringExpression = { fieldName: fieldName, searchVal, condition, conditionName: condition.name, ignoreCase };\n            expressionsTree = new FilteringExpressionsTree(filteringState.operator, fieldName);\n            expressionsTree.filteringOperands.push(newExpression);\n        }\n\n        if (expressionsTree) {\n            if (insertAtIndex > -1) {\n                newExpressionsTree.filteringOperands[insertAtIndex] = expressionsTree;\n            } else {\n                newExpressionsTree.filteringOperands.push(expressionsTree);\n            }\n        }\n\n        return newExpressionsTree;\n    }\n\n\n    private isFilteringTreeComplex(expressions: IFilteringExpressionsTree | IFilteringExpression): boolean {\n        if (!expressions) {\n            return false;\n        }\n\n        if (isTree(expressions)) {\n            if (expressions.operator === FilteringLogic.Or) {\n                const andOperatorsCount = this.getChildAndOperatorsCount(expressions);\n\n                // having more than one 'And' operator in the sub-tree means that the filter could not be represented without parentheses.\n                return andOperatorsCount > 1;\n            }\n\n            let isComplex = false;\n            for (const operand of expressions.filteringOperands) {\n                isComplex = isComplex || this.isFilteringTreeComplex(operand);\n            }\n\n            return isComplex;\n        }\n\n        return false;\n    }\n\n    private getChildAndOperatorsCount(expressions: IFilteringExpressionsTree): number {\n        let count = 0;\n        let operand;\n        for (let i = 0; i < expressions.filteringOperands.length; i++) {\n            operand = expressions[i];\n            if (operand && isTree(operand)) {\n                if (operand.operator === FilteringLogic.And) {\n                    count++;\n                }\n\n                count = count + this.getChildAndOperatorsCount(operand as IFilteringExpressionsTree);\n            }\n        }\n\n        return count;\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    HostBinding,\n    Input,\n    OnInit,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { IFilteringExpression } from '../../../data-operations/filtering-expression.interface';\nimport { IgxFilteringService } from '../grid-filtering.service';\nimport { ExpressionUI } from '../excel-style/common';\nimport { IgxChipsAreaComponent } from '../../../chips/chips-area.component';\nimport { IBaseChipEventArgs, IgxChipComponent } from '../../../chips/chip.component';\nimport { ColumnType } from '../../common/grid.interface';\nimport { IgxBadgeComponent } from '../../../badge/badge.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IgxPrefixDirective } from '../../../directives/prefix/prefix.directive';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { Size } from '../../common/enums';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-filtering-cell',\n    templateUrl: './grid-filtering-cell.component.html',\n    imports: [\n        IgxChipsAreaComponent,\n        IgxChipComponent,\n        IgxIconComponent,\n        IgxPrefixDirective,\n        NgClass,\n        IgxBadgeComponent,\n        NgTemplateOutlet\n    ]\n})\nexport class IgxGridFilteringCellComponent implements AfterViewInit, OnInit, DoCheck {\n    @Input()\n    public column: ColumnType;\n\n    @ViewChild('emptyFilter', { read: TemplateRef, static: true })\n    protected emptyFilter: TemplateRef<any>;\n\n    @ViewChild('defaultFilter', { read: TemplateRef, static: true })\n    protected defaultFilter: TemplateRef<any>;\n\n    @ViewChild('complexFilter', { read: TemplateRef, static: true })\n    protected complexFilter: TemplateRef<any>;\n\n    @ViewChild('chipsArea', { read: IgxChipsAreaComponent })\n    protected chipsArea: IgxChipsAreaComponent;\n\n    @ViewChild('moreIcon', { read: ElementRef })\n    protected moreIcon: ElementRef;\n\n    @ViewChild('ghostChip', { read: IgxChipComponent })\n    protected ghostChip: IgxChipComponent;\n\n    @ViewChild('complexChip', { read: IgxChipComponent })\n    protected complexChip: IgxChipComponent;\n\n\n    @HostBinding('class')\n    public get styleClasses(): string {\n        return this.column && this.column.selected ?\n            'igx-grid__filtering-cell--selected' :\n            'igx-grid__filtering-cell';\n    }\n\n    public expressionsList: ExpressionUI[];\n    public moreFiltersCount = 0;\n\n    private baseClass = 'igx-grid__filtering-cell-indicator';\n\n    constructor(\n        public cdr: ChangeDetectorRef,\n        public filteringService: IgxFilteringService,\n    ) {\n        this.filteringService.subscribeToEvents();\n    }\n\n    public ngOnInit(): void {\n        this.filteringService.columnToMoreIconHidden.set(this.column.field, true);\n    }\n\n    public ngAfterViewInit(): void {\n        this.updateFilterCellArea();\n    }\n\n    public ngDoCheck() {\n        this.updateFilterCellArea();\n    }\n\n    /**\n     * Returns whether a chip with a given index is visible or not.\n     */\n    public isChipVisible(index: number) {\n        const expression = this.expressionsList[index];\n        return !!(expression && expression.isVisible);\n    }\n\n    /**\n     * Updates the filtering cell area.\n     */\n    public updateFilterCellArea() {\n        this.expressionsList = this.filteringService.getExpressions(this.column.field);\n        this.updateVisibleFilters();\n    }\n\n    public get template(): TemplateRef<any> {\n        if (!this.column.filterable) {\n            return null;\n        }\n        if (this.column.filterCellTemplate) {\n            return this.column.filterCellTemplate;\n        }\n        const expressionTree = this.column.filteringExpressionsTree;\n        if (!expressionTree || expressionTree.filteringOperands.length === 0) {\n            return this.emptyFilter;\n        }\n        if (this.filteringService.isFilterComplex(this.column.field)) {\n            return this.complexFilter;\n        }\n        return this.defaultFilter;\n    }\n\n    /**\n     * Gets the context passed to the filter template.\n     *\n     * @memberof IgxGridFilteringCellComponent\n     */\n    public get context() {\n        return { $implicit: this.column, column: this.column};\n    }\n\n    /**\n     * Chip clicked event handler.\n     */\n    public onChipClicked(expression?: IFilteringExpression) {\n        if (expression) {\n            this.expressionsList.forEach((item) => {\n                item.isSelected = (item.expression === expression);\n            });\n        } else if (this.expressionsList.length > 0) {\n            this.expressionsList.forEach((item) => {\n                item.isSelected = false;\n            });\n            this.expressionsList[0].isSelected = true;\n        }\n        this.filteringService.grid.navigation.performHorizontalScrollToCell(this.column.visibleIndex);\n        this.filteringService.filteredColumn = this.column;\n        this.filteringService.isFilterRowVisible = true;\n        this.filteringService.selectedExpression = expression;\n    }\n\n    /**\n     * Chip removed event handler.\n     */\n    public onChipRemoved(eventArgs: IBaseChipEventArgs, item: ExpressionUI): void {\n        const indexToRemove = this.expressionsList.indexOf(item);\n        this.removeExpression(indexToRemove);\n        this.filteringService.grid.theadRow.nativeElement.focus();\n    }\n\n    /**\n     * Clears the filtering.\n     */\n    public clearFiltering(): void {\n        this.filteringService.clearFilter(this.column.field);\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Returns the filtering indicator class.\n     */\n    public filteringIndicatorClass() {\n        return {\n            [this.baseClass]: !this.isMoreIconHidden(),\n            [`${this.baseClass}--hidden`]: this.isMoreIconHidden()\n        };\n    }\n\n    protected get filteringElementsSize(): Size {\n        return this.column.grid.gridSize === Size.Large ? Size.Medium : this.column.grid.gridSize;\n    }\n\n    private removeExpression(indexToRemove: number) {\n        if (indexToRemove === 0 && this.expressionsList.length === 1) {\n            this.clearFiltering();\n            return;\n        }\n\n        this.filteringService.removeExpression(this.column.field, indexToRemove);\n\n        this.updateVisibleFilters();\n        this.filteringService.filterInternal(this.column.field);\n    }\n\n    private isMoreIconHidden(): boolean {\n        return this.filteringService.columnToMoreIconHidden.get(this.column.field);\n    }\n\n    private updateVisibleFilters() {\n        this.expressionsList.forEach((ex) => ex.isVisible = true);\n\n        if (this.moreIcon) {\n            this.filteringService.columnToMoreIconHidden.set(this.column.field, true);\n        }\n        this.cdr.detectChanges();\n\n        if (this.chipsArea && this.expressionsList.length > 1) {\n            const areaWidth = this.chipsArea.element.nativeElement.offsetWidth;\n            let viewWidth = 0;\n            const chipsAreaElements = this.chipsArea.element.nativeElement.children;\n            let visibleChipsCount = 0;\n            const moreIconWidth = this.moreIcon.nativeElement.offsetWidth -\n                parseInt(this.column?.grid.document.defaultView.getComputedStyle(this.moreIcon.nativeElement)['margin-left'], 10);\n\n            for (let index = 0; index < chipsAreaElements.length - 1; index++) {\n                if (viewWidth + chipsAreaElements[index].offsetWidth < areaWidth) {\n                    viewWidth += chipsAreaElements[index].offsetWidth;\n                    if (index % 2 === 0) {\n                        visibleChipsCount++;\n                    } else {\n                        viewWidth += parseInt(this.column?.grid.document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-left'], 10);\n                        viewWidth += parseInt(this.column?.grid.document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-right'], 10);\n                    }\n                } else {\n                    if (index % 2 !== 0 && viewWidth + moreIconWidth > areaWidth) {\n                        visibleChipsCount--;\n                    } else if (visibleChipsCount > 0 && viewWidth - chipsAreaElements[index - 1].offsetWidth + moreIconWidth > areaWidth) {\n                        visibleChipsCount--;\n                    }\n                    this.moreFiltersCount = this.expressionsList.length - visibleChipsCount;\n                    this.filteringService.columnToMoreIconHidden.set(this.column.field, false);\n                    break;\n                }\n            }\n\n            for (let i = visibleChipsCount; i < this.expressionsList.length; i++) {\n                this.expressionsList[i].isVisible = false;\n            }\n            this.cdr.detectChanges();\n        }\n    }\n}\n","<ng-template #emptyFilter>\n    <igx-chips-area [attr.draggable]=\"false\" class=\"igx-filtering-chips\">\n        <igx-chip #ghostChip [attr.draggable]=\"false\" (click)=\"onChipClicked()\" [tabIndex]=\"-1\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon\n                [attr.draggable]=\"false\"\n                igxPrefix\n                family=\"default\"\n                name=\"filter_list\"\n            ></igx-icon>\n            <span [attr.draggable]=\"false\">{{filteringService.grid.resourceStrings.igx_grid_filter}}</span>\n        </igx-chip>\n    </igx-chips-area>\n</ng-template>\n\n<ng-template #defaultFilter>\n    <igx-chips-area #chipsArea class=\"igx-filtering-chips\">\n        <!-- expressionsList items re-created on refreshExpressions(), track stable expression -->\n        @for (item of expressionsList; track item.expression; let last = $last; let index = $index) {\n            @if (isChipVisible(index)) {\n                <igx-chip\n                    [removable]=\"true\"\n                    [tabIndex]=\"-1\"\n                    [style.--ig-size]=\"filteringElementsSize\"\n                    (click)=\"onChipClicked(item.expression)\"\n                    (remove)=\"onChipRemoved($event, item)\">\n                    <igx-icon igxPrefix\n                        family=\"default\"\n                        [name]=\"item.expression.condition.iconName\">\n                    </igx-icon>\n                    <span #label>\n                        {{filteringService.getChipLabel(item.expression)}}\n                    </span>\n                </igx-chip>\n            }\n            @if (!last && isChipVisible(index + 1)) {\n                <span class=\"igx-filtering-chips__connector\">{{filteringService.getOperatorAsString(item.afterOperator)}}</span>\n            }\n        }\n        <div #moreIcon [ngClass]=\"filteringIndicatorClass()\" (click)=\"onChipClicked()\">\n            <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n            <igx-badge [value]=\"moreFiltersCount\"></igx-badge>\n        </div>\n    </igx-chips-area>\n</ng-template>\n\n<ng-template #complexFilter>\n    <igx-chip #complexChip [removable]=\"true\" (remove)=\"clearFiltering()\" [tabIndex]=\"-1\" [style.--ig-size]=\"filteringElementsSize\">\n        <igx-icon igxPrefix family=\"default\" name=\"filter_list\"></igx-icon>\n        <span>{{filteringService.grid.resourceStrings.igx_grid_complex_filter}}</span>\n    </igx-chip>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template; context: context\"></ng-container>\n","import {\n    AfterViewInit,\n    Directive,\n    ElementRef,\n    Input,\n    NgZone,\n    HostListener,\n    OnDestroy\n} from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ColumnType } from '../common/grid.interface';\nimport { IgxColumnResizingService } from './resizing.service';\n\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxResizeHandle]',\n    standalone: true\n})\nexport class IgxResizeHandleDirective implements AfterViewInit, OnDestroy {\n\n    /**\n     * @hidden\n     */\n    @Input('igxResizeHandle')\n    public column: ColumnType;\n\n    /**\n     * @hidden\n     */\n    protected _dblClick = false;\n\n    /**\n     * @hidden\n     */\n    private destroy$ = new Subject<boolean>();\n\n    private readonly DEBOUNCE_TIME = 200;\n\n    constructor(protected zone: NgZone,\n        protected element: ElementRef,\n        public colResizingService: IgxColumnResizingService) { }\n\n    /**\n     * @hidden\n     */\n    @HostListener('dblclick')\n    public onDoubleClick() {\n        this._dblClick = true;\n        this.initResizeService();\n        this.colResizingService.autosizeColumnOnDblClick();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        if (!this.column.columnGroup && this.column.resizable) {\n            this.zone.runOutsideAngular(() => {\n                fromEvent(this.element.nativeElement, 'mousedown').pipe(\n                    debounceTime(this.DEBOUNCE_TIME),\n                    takeUntil(this.destroy$)\n                ).subscribe((event: MouseEvent) => {\n\n                    if (this._dblClick) {\n                        this._dblClick = false;\n                        return;\n                    }\n\n                    if (event.button === 0) {\n                        this._onResizeAreaMouseDown(event);\n                        this.column.grid.resizeLine.resizer.onMousedown(event);\n                    }\n                });\n            });\n\n            fromEvent(this.element.nativeElement, 'mouseup').pipe(\n                debounceTime(this.DEBOUNCE_TIME),\n                takeUntil(this.destroy$)\n            ).subscribe(() => {\n                this.colResizingService.isColumnResizing = false;\n                this.colResizingService.showResizer = false;\n                this.column.grid.cdr.detectChanges();\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    private _onResizeAreaMouseDown(event) {\n        this.initResizeService(event);\n\n        this.colResizingService.showResizer = true;\n        this.column.grid.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    protected initResizeService(event = null) {\n        this.colResizingService.column = this.column;\n\n        if (event) {\n            this.colResizingService.isColumnResizing = true;\n            this.colResizingService.startResizePos = event.clientX;\n        }\n    }\n}\n","import { Directive, Input, OnDestroy, ElementRef, Renderer2, NgZone } from '@angular/core';\nimport { DropPosition, IgxColumnMovingService } from './moving.service';\nimport { Subject, interval, animationFrameScheduler } from 'rxjs';\nimport { IgxColumnMovingDragDirective } from './moving.drag.directive';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxDropDirective } from '../../directives/drag-drop/drag-drop.directive';\nimport { IgxForOfDirective, IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { ColumnType } from '../common/grid.interface';\n// import { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';\n\n\n@Directive({\n    selector: '[igxColumnMovingDrop]',\n    standalone: true\n})\nexport class IgxColumnMovingDropDirective extends IgxDropDirective implements OnDestroy {\n\n    @Input('igxColumnMovingDrop')\n    public override set data(val: ColumnType | IgxForOfDirective<ColumnType, ColumnType[]>) {\n        if (val instanceof IgxGridForOfDirective) {\n            this._displayContainer = val;\n        } else {\n            this._column = val as ColumnType;\n        }\n\n    }\n\n    public get column() {\n        return this._column;\n    }\n\n    public get isDropTarget(): boolean {\n        return this.column && this.column.grid.moving &&\n            ((!this.column.pinned && this.cms.column?.disablePinning) || !this.cms.column?.disablePinning);\n    }\n\n    public get horizontalScroll() {\n        if (this._displayContainer) {\n            return this._displayContainer;\n        }\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    private _dropPos: DropPosition;\n    private _dropIndicator = null;\n    private _lastDropIndicator = null;\n    private _column: ColumnType;\n    private _displayContainer: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n    private _dragLeave = new Subject<boolean>();\n    private _dropIndicatorClass = 'igx-grid-th__drop-indicator--active';\n\n    constructor(\n        private ref: ElementRef<HTMLElement>,\n        private renderer: Renderer2,\n        private _: NgZone,\n        private cms: IgxColumnMovingService\n    ) {\n        super(ref, renderer, _);\n    }\n\n    public override ngOnDestroy() {\n        this._dragLeave.next(true);\n        this._dragLeave.complete();\n        super.ngOnDestroy();\n    }\n\n    public override onDragOver(event) {\n        const drag = event.detail.owner;\n        if (!(drag instanceof IgxColumnMovingDragDirective)) {\n            return;\n        }\n\n        if (this.isDropTarget &&\n            this.cms.column !== this.column &&\n            this.cms.column.level === this.column.level &&\n            this.cms.column.parent === this.column.parent) {\n\n            if (this._lastDropIndicator) {\n                this.renderer.removeClass(this._dropIndicator, this._dropIndicatorClass);\n            }\n\n            const clientRect = this.nativeElement.getBoundingClientRect();\n            const pos = clientRect.left + clientRect.width / 2;\n\n            const parent = this.nativeElement.parentElement;\n            if (event.detail.pageX < pos) {\n                this._dropPos = DropPosition.BeforeDropTarget;\n                this._lastDropIndicator = this._dropIndicator = parent.firstElementChild;\n            } else {\n                this._dropPos = DropPosition.AfterDropTarget;\n                this._lastDropIndicator = this._dropIndicator = parent.lastElementChild;\n            }\n\n            if (this.cms.icon.innerText !== 'block') {\n                this.renderer.addClass(this._dropIndicator, this._dropIndicatorClass);\n            }\n        }\n    }\n\n    public override onDragEnter(event) {\n        const drag = event.detail.owner;\n        if (!(drag instanceof IgxColumnMovingDragDirective)) {\n            return;\n        }\n\n        if (this.column && this.cms.column.grid.id !== this.column.grid.id) {\n            this.cms.icon.innerText = 'block';\n            return;\n        }\n\n        if (this.isDropTarget &&\n            this.cms.column !== this.column &&\n            this.cms.column.level === this.column.level &&\n            this.cms.column.parent === this.column.parent) {\n\n            if (!this.column.pinned || (this.column.pinned && this.cms.column.pinned)) {\n                this.cms.icon.innerText = 'swap_horiz';\n            }\n\n            this.cms.icon.innerText = 'save_alt';\n        } else {\n            this.cms.icon.innerText = 'block';\n        }\n\n        if (this.horizontalScroll) {\n            this.cms.icon.innerText = event.target.id === 'right' ? 'arrow_forward' : 'arrow_back';\n\n            interval(0, animationFrameScheduler).pipe(takeUntil(this._dragLeave)).subscribe(() => {\n                if (event.target.id === 'right') {\n                    this.horizontalScroll.scrollPosition += 10;\n                } else {\n                    this.horizontalScroll.scrollPosition -= 10;\n                }\n            });\n        }\n    }\n\n    public override onDragLeave(event) {\n        const drag = event.detail.owner;\n        if (!(drag instanceof IgxColumnMovingDragDirective)) {\n            return;\n        }\n\n        this.cms.icon.innerText = 'block';\n\n        if (this._dropIndicator) {\n            this.renderer.removeClass(this._dropIndicator, this._dropIndicatorClass);\n        }\n\n        if (this.horizontalScroll) {\n            this._dragLeave.next(true);\n        }\n    }\n\n    public override onDragDrop(event) {\n        event.preventDefault();\n        const drag = event.detail.owner;\n        if (this.cms.cancelDrop || !(drag instanceof IgxColumnMovingDragDirective)) {\n            this.cms.cancelDrop = false;\n            return;\n        }\n\n        if (this.column && (this.cms.column.grid.id !== this.column.grid.id)) {\n            return;\n        }\n\n        if (this.horizontalScroll) {\n            this._dragLeave.next(true);\n        }\n\n        if (this.isDropTarget) {\n            this.column.grid.moveColumn(this.cms.column, this.column, this._dropPos);\n\n            this.cms.column = null;\n            this.column.grid.cdr.detectChanges();\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    forwardRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    QueryList,\n    ViewChild,\n    ViewChildren\n} from '@angular/core';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { IgxGridHeaderComponent } from './grid-header.component';\nimport { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';\nimport { ColumnType, GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { GridSelectionMode } from '../common/enums';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe } from './pipes';\nimport { IgxResizeHandleDirective } from '../resizing/resize-handle.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\n\nconst Z_INDEX = 9999;\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-header-group',\n    templateUrl: './grid-header-group.component.html',\n    imports: [NgClass, NgStyle, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxIconComponent, NgTemplateOutlet, IgxGridHeaderComponent, IgxGridFilteringCellComponent, IgxResizeHandleDirective, IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe]\n})\nexport class IgxGridHeaderGroupComponent implements DoCheck {\n\n    @HostBinding('style.grid-row-end')\n    public get rowEnd(): number {\n        return this.column.rowEnd;\n    }\n\n    @HostBinding('style.grid-column-end')\n    public get colEnd(): number {\n        return this.column.colEnd;\n    }\n\n    @HostBinding('style.grid-row-start')\n    public get rowStart(): number {\n        return this.column.rowStart;\n    }\n\n    @HostBinding('style.grid-column-start')\n    public get colStart(): number {\n        return this.column.colStart;\n    }\n\n    @HostBinding('attr.id')\n    public get headerID() {\n        return `${this.grid.id}_-1_${this.column.level}_${this.column.visibleIndex}`;\n    }\n\n    /**\n     * Gets the column of the header group.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    @Input()\n    public column: ColumnType;\n\n    @HostBinding('class.igx-grid-th--active')\n    public get active() {\n        const node = this.grid.navigation.activeNode;\n        return node && !this.column.columnGroup ?\n            node.row === -1 && node.column === this.column.visibleIndex && node.level === this.column.level : false;\n    }\n\n    public get activeGroup() {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === -1 && node.column === this.column.visibleIndex && node.level === this.column.level : false;\n    }\n\n    /**\n     * @hidden\n     */\n    @ViewChild(IgxGridHeaderComponent)\n    public header: IgxGridHeaderComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChild(IgxGridFilteringCellComponent)\n    public filter: IgxGridFilteringCellComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChildren(forwardRef(() => IgxGridHeaderGroupComponent), { read: IgxGridHeaderGroupComponent })\n    public children: QueryList<IgxGridHeaderGroupComponent>;\n\n    /**\n     * Gets the width of the header group.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get width() {\n        return this.grid.getHeaderGroupWidth(this.column);\n    }\n\n    @HostBinding('class.igx-grid-thead__item')\n    public defaultCss = true;\n\n    constructor(private cdr: ChangeDetectorRef,\n        @Inject(IGX_GRID_BASE) public grid: GridType,\n        private ref: ElementRef<HTMLElement>,\n        public colResizingService: IgxColumnResizingService,\n        public filteringService: IgxFilteringService,\n        protected platform: PlatformUtil) { }\n\n    @HostBinding('class.igx-grid-th--pinned')\n    public get pinnedCss() {\n        return this.isPinned;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned-last')\n    public get pinnedLastCss() {\n        return this.isLastPinned;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned-first')\n    public get pinnedFirstCSS() {\n        return this.isFirstPinned;\n    }\n\n    @HostBinding('class.igx-grid__drag-col-header')\n    public get headerDragCss() {\n        return this.isHeaderDragged;\n    }\n\n    @HostBinding('class.igx-grid-th--filtering')\n    public get filteringCss() {\n        return this.isFiltered;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.z-index')\n    public get zIndex() {\n        if (!this.column.pinned) {\n            return null;\n        }\n        return Z_INDEX - this.grid.pinnedColumns.indexOf(this.column);\n    }\n\n    /**\n     * Gets whether the header group belongs to a column that is filtered.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isFiltered(): boolean {\n        return this.filteringService.filteredColumn === this.column;\n    }\n\n    /**\n     * Gets whether the header group is stored in the last column in the pinned area.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isLastPinned(): boolean {\n        return !this.grid.hasColumnLayouts ? this.column.isLastPinned : false;\n    }\n\n    /**\n     * Gets whether the header group is stored in the first column of the right pinned area.\n     */\n    public get isFirstPinned(): boolean {\n        return !this.grid.hasColumnLayouts ? this.column.isFirstPinned : false;\n    }\n\n    @HostBinding('style.display')\n    public get groupDisplayStyle(): string {\n        return this.grid.hasColumnLayouts && this.column.children ? 'flex' : '';\n    }\n\n    /**\n     * Gets whether the header group is stored in a pinned column.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isPinned(): boolean {\n        return this.column.pinned;\n    }\n\n    /**\n     * Gets whether the header group belongs to a column that is moved.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isHeaderDragged(): boolean {\n        return this.grid.columnInDrag === this.column;\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasLastPinnedChildColumn(): boolean {\n        return this.column.allChildren.some(child => child.isLastPinned);\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasFirstPinnedChildColumn(): boolean {\n        return this.column.allChildren.some(child => child.isFirstPinned);\n    }\n\n    /**\n     * @hidden\n     */\n    public get selectable() {\n        const selectableChildren = this.column.allChildren.filter(c => !c.hidden && c.selectable && !c.columnGroup);\n        return this.grid.columnSelection !== GridSelectionMode.none &&\n            this.column.applySelectableClass\n            && !this.selected && selectableChildren.length > 0\n            && !this.grid.filteringService.isFilterRowVisible;\n    }\n\n    /**\n     * @hidden\n     */\n    public get selected() {\n        return this.column.selected;\n    }\n\n    /**\n     * @hidden\n     */\n    public get height() {\n        return this.nativeElement.getBoundingClientRect().height;\n    }\n\n    /**\n     * @hidden\n     */\n    public get title() {\n        return this.column.title || this.column.header;\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event: MouseEvent): void {\n        if (!this.grid.allowFiltering ||\n            (event.composedPath().findIndex(el =>\n                (el as Element).tagName?.toLowerCase() === 'igx-grid-filtering-cell') < 1)) {\n                // Hack for preventing text selection in IE and Edge while dragging the resize element\n                event.preventDefault();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public groupClicked(event: MouseEvent): void {\n        const columnsToSelect = this.column.allChildren.filter(c => !c.hidden && c.selectable && !c.columnGroup).map(c => c.field);\n        if (this.grid.columnSelection !== GridSelectionMode.none\n            && columnsToSelect.length > 0 && !this.grid.filteringService.isFilterRowVisible) {\n            const clearSelection = this.grid.columnSelection === GridSelectionMode.single || !event.ctrlKey;\n            const rangeSelection = this.grid.columnSelection === GridSelectionMode.multiple && event.shiftKey;\n            if (!this.selected) {\n                this.grid.selectionService.selectColumns(columnsToSelect, clearSelection, rangeSelection, event);\n            } else {\n                const selectedFields = this.grid.selectionService.getSelectedColumns();\n                if ((selectedFields.length === columnsToSelect.length) && selectedFields.every(el => columnsToSelect.includes(el))\n                    || !clearSelection) {\n                    this.grid.selectionService.deselectColumns(columnsToSelect, event);\n                } else {\n                    this.grid.selectionService.selectColumns(columnsToSelect, clearSelection, rangeSelection, event);\n                }\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPointerDownIndicator(event) {\n        // Stop propagation of pointer events to now allow column dragging using the header indicators.\n        event.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleExpandState(event: MouseEvent): void {\n        event.stopPropagation();\n        this.column.expanded = !this.column.expanded;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public pointerdown(event: PointerEvent): void {\n        event.stopPropagation();\n        this.activate();\n        this.grid.theadRow.nativeElement.focus();\n    }\n\n    /*\n     * This method is necessary due to some specifics related with implementation of column moving\n     * @hidden\n     */\n    public activate() {\n        this.grid.navigation.setActiveNode(this.activeNode);\n        this.grid.theadRow.nativeElement.focus();\n    }\n\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n    /**\n     * @hidden\n     */\n    public onPinterEnter() {\n        this.column.applySelectableClass = true;\n    }\n\n    /**\n     * @hidden\n     */\n    public onPointerLeave() {\n        this.column.applySelectableClass = false;\n    }\n\n    protected get activeNode() {\n        return {\n            row: -1, column: this.column.visibleIndex, level: this.column.level,\n            mchCache: { level: this.column.level, visibleIndex: this.column.visibleIndex },\n            layout: this.column.columnLayoutChild ? {\n                rowStart: this.column.rowStart,\n                colStart: this.column.colStart,\n                rowEnd: this.column.rowEnd,\n                colEnd: this.column.colEnd,\n                columnVisibleIndex: this.column.visibleIndex\n            } : null\n        };\n    }\n}\n","@if (grid.hasColumnLayouts && column.columnGroup) {\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <div class=\"igx-grid-thead__group igx-grid__mrl-block\"\n     [ngClass]=\"{\n         'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n         'igx-grid-th--pinned-first': hasFirstPinnedChildColumn\n        }\"\n     [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true),\n     'grid-template-columns':column.getGridTemplate(false)}\">\n        @for (child of column.children; track child) {\n            @if (!child.hidden) {\n                <igx-grid-header-group class=\"igx-grid-thead__subgroup\"\n                    [ngClass]=\"child.headerGroupClasses\"\n                    [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n                    [column]=\"child\">\n                </igx-grid-header-group>\n            }\n        }\n    </div>\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n\n\n<ng-template #defaultColumn>\n    <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n    <igx-icon\n        family=\"default\"\n        [name]=\"column.expanded ? 'tree_collapse' : 'tree_expand'\">\n    </igx-icon>\n</ng-template>\n\n@if (!grid.hasColumnLayouts && column.columnGroup) {\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <div class=\"igx-grid-thead__title\"\n        role=\"columnheader\"\n        [attr.aria-label]=\"column.header || column.field\"\n        [attr.aria-expanded]=\"column.expanded\"\n        [attr.aria-selected]=\"column.selected\"\n        [ngClass]=\"{\n            'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n            'igx-grid-th--pinned-first': hasFirstPinnedChildColumn,\n            'igx-grid-th--collapsible': column.collapsible,\n            'igx-grid-th--selectable': selectable,\n            'igx-grid-th--selected': selected,\n            'igx-grid-th--active': activeGroup}\"\n        [igxColumnMovingDrag]=\"column\"\n        [ghostHost]=\"grid.outlet.nativeElement\"\n        [attr.droppable]=\"true\"\n        [igxColumnMovingDrop]=\"column\"\n        (pointerdown)=\"pointerdown($event)\"\n        (click)=\"groupClicked($event)\"\n        (pointerenter)=\"onPinterEnter()\"\n        (pointerleave)=\"onPointerLeave()\"\n        >\n        @if (column.collapsible) {\n            <div class=\"igx-grid-th__expander\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"toggleExpandState($event)\">\n                <ng-container\n                    *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n                </ng-container>\n            </div>\n        }\n        <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n        </ng-container>\n    </div>\n    @if (grid.type !== 'pivot') {\n        <div class=\"igx-grid-thead__group\">\n            @for (child of column.children; track child) {\n                @if (!child.hidden) {\n                    <igx-grid-header-group class=\"igx-grid-thead__subgroup\"\n                        [ngClass]=\"child.headerGroupClasses\"\n                        [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n                        [column]=\"child\"\n                        [style.min-width]=\"child.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\"\n                        [style.flex-basis]=\"child.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:grid.hasColumnLayouts\">\n                    </igx-grid-header-group>\n                }\n            }\n        </div>\n    }\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n\n@if (!column.columnGroup) {\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <igx-grid-header\n        role=\"columnheader\"\n        class=\"igx-grid-th--fw\"\n        [id]=\"grid.id + '_' + column.field\"\n        [ngClass]=\"column.headerClasses\"\n        [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n        [igxColumnMovingDrag]=\"column\"\n        [ghostHost]=\"grid.outlet.nativeElement\"\n        [attr.droppable]=\"true\"\n        (pointerdown)=\"activate()\"\n        [igxColumnMovingDrop]=\"column\"\n        [column]=\"column\"\n    >\n    </igx-grid-header>\n    @if (grid.allowFiltering && grid.filterMode === 'quickFilter') {\n        <igx-grid-filtering-cell [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n    }\n    @if (!column.columnGroup && column.resizable) {\n        <span class=\"igx-grid-th__resize-handle\"\n            [igxResizeHandle]=\"column\"\n            [attr.draggable]=\"false\"\n            [style.cursor]=\"colResizingService.resizeCursor\">\n        </span>\n    }\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    QueryList,\n    ElementRef,\n    HostBinding,\n    ChangeDetectionStrategy,\n    ViewRef,\n    HostListener,\n    OnDestroy\n} from '@angular/core';\nimport { GridColumnDataType, DataUtil } from '../../../data-operations/data-util';\nimport { IgxDropDownComponent } from '../../../drop-down/drop-down.component';\nimport { IFilteringOperation } from '../../../data-operations/filtering-condition';\nimport { FilteringLogic, IFilteringExpression } from '../../../data-operations/filtering-expression.interface';\nimport { HorizontalAlignment, VerticalAlignment, OverlaySettings } from '../../../services/overlay/utilities';\nimport { ConnectedPositioningStrategy } from '../../../services/overlay/position/connected-positioning-strategy';\nimport { IgxDropDownItemComponent } from '../../../drop-down/drop-down-item.component';\nimport { ISelectionEventArgs } from '../../../drop-down/drop-down.common';\nimport { IgxFilteringService } from '../grid-filtering.service';\nimport { AbsoluteScrollStrategy } from '../../../services/overlay/scroll';\nimport { IgxDatePickerComponent } from '../../../date-picker/date-picker.component';\nimport { IgxTimePickerComponent } from '../../../time-picker/time-picker.component';\nimport { isEqual, PlatformUtil } from '../../../core/utils';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { ExpressionUI } from '../excel-style/common';\nimport { ColumnType } from '../../common/grid.interface';\nimport { IgxRippleDirective } from '../../../directives/ripple/ripple.directive';\nimport { IgxChipComponent, IBaseChipEventArgs } from '../../../chips/chip.component';\nimport { IgxChipsAreaComponent } from '../../../chips/chips-area.component';\nimport { IgxButtonDirective } from '../../../directives/button/button.directive';\nimport { IgxDateTimeEditorDirective } from '../../../directives/date-time-editor/date-time-editor.directive';\nimport { IgxPickerToggleComponent, IgxPickerClearComponent } from '../../../date-common/picker-icons.common';\nimport { IgxSuffixDirective } from '../../../directives/suffix/suffix.directive';\nimport { IgxInputDirective } from '../../../directives/input/input.directive';\nimport { IgxDropDownItemNavigationDirective } from '../../../drop-down/drop-down-navigation.directive';\nimport { IgxPrefixDirective } from '../../../directives/prefix/prefix.directive';\nimport { IgxInputGroupComponent } from '../../../input-group/input-group.component';\nimport { IgxIconComponent } from '../../../icon/icon.component';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { IgxIconButtonDirective } from '../../../directives/button/icon-button.directive';\nimport { Size } from '../../common/enums';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-filtering-row',\n    templateUrl: './grid-filtering-row.component.html',\n    imports: [IgxDropDownComponent, IgxDropDownItemComponent, IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxInputGroupComponent, IgxPrefixDirective, IgxDropDownItemNavigationDirective, IgxInputDirective, IgxSuffixDirective, IgxDatePickerComponent, IgxPickerToggleComponent, IgxPickerClearComponent, IgxTimePickerComponent, IgxDateTimeEditorDirective, NgTemplateOutlet, IgxButtonDirective, NgClass, IgxRippleDirective, IgxIconButtonDirective]\n})\nexport class IgxGridFilteringRowComponent implements AfterViewInit, OnDestroy {\n    @Input()\n    public get column(): ColumnType {\n        return this._column;\n    }\n\n    public set column(val) {\n        if (this._column) {\n            this.expressionsList.forEach(exp => exp.isSelected = false);\n        }\n        if (val) {\n            this._column = val;\n\n            this.expressionsList = this.filteringService.getExpressions(this._column.field);\n            this.resetExpression();\n\n            this.chipAreaScrollOffset = 0;\n            this.transform(this.chipAreaScrollOffset);\n        }\n    }\n\n    @Input()\n    public get value(): any {\n        return this._value;\n    }\n\n    public set value(val) {\n        if (!val && val !== 0 && (this.expression.searchVal || this.expression.searchVal === 0)) {\n            this.expression.searchVal = null;\n            this._value = null;\n            const index = this.expressionsList.findIndex(item => item.expression === this.expression);\n            if (index === 0 && this.expressionsList.length === 1 && !this.expression.condition.isUnary) {\n                this.filteringService.clearFilter(this.column.field);\n            }\n        } else {\n            if (val === '') {\n                return;\n            }\n            const oldValue = this.expression.searchVal;\n            if (isEqual(oldValue, val)) {\n                return;\n            }\n\n            this._value = val;\n            this.expression.searchVal = DataUtil.parseValue(this.column.dataType, val);\n            if (this.expressionsList.find(item => item.expression === this.expression) === undefined) {\n                this.addExpression(true);\n            }\n            this.filter();\n        }\n    }\n\n    protected get filteringElementsSize(): Size {\n        // needed because we want the size of the chips to be either Medium or Small\n        return this.column.grid.gridSize === Size.Large ? Size.Medium : this.column.grid.gridSize;\n    }\n\n    @HostBinding('class.igx-grid__filtering-row')\n    public defaultCSSClass = true;\n\n    @ViewChild('defaultFilterUI', { read: TemplateRef, static: true })\n    protected defaultFilterUI: TemplateRef<any>;\n\n    @ViewChild('defaultDateUI', { read: TemplateRef, static: true })\n    protected defaultDateUI: TemplateRef<any>;\n\n    @ViewChild('defaultTimeUI', { read: TemplateRef, static: true })\n    protected defaultTimeUI: TemplateRef<any>;\n\n    @ViewChild('defaultDateTimeUI', { read: TemplateRef, static: true })\n    protected defaultDateTimeUI: TemplateRef<any>;\n\n    @ViewChild('input', { read: ElementRef })\n    protected input: ElementRef<HTMLInputElement>;\n\n    @ViewChild('inputGroupConditions', { read: IgxDropDownComponent, static: true })\n    protected dropDownConditions: IgxDropDownComponent;\n\n    @ViewChild('chipsArea', { read: IgxChipsAreaComponent, static: true })\n    protected chipsArea: IgxChipsAreaComponent;\n\n    @ViewChildren('operators', { read: IgxDropDownComponent })\n    protected dropDownOperators: QueryList<IgxDropDownComponent>;\n\n    @ViewChild('inputGroup', { read: ElementRef })\n    protected inputGroup: ElementRef<HTMLElement>;\n\n    @ViewChild('picker')\n    protected picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n    @ViewChild('inputGroupPrefix', { read: ElementRef })\n    protected inputGroupPrefix: ElementRef<HTMLElement>;\n\n    @ViewChild('container', { static: true })\n    protected container: ElementRef<HTMLElement>;\n\n    @ViewChild('operand')\n    protected operand: ElementRef<HTMLElement>;\n\n    @ViewChild('closeButton', { static: true })\n    protected closeButton: ElementRef<HTMLElement>;\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    public showArrows: boolean;\n    public expression: IFilteringExpression;\n    public expressionsList: Array<ExpressionUI>;\n\n    private _positionSettings = {\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalStartPoint: VerticalAlignment.Bottom\n    };\n\n    private _conditionsOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        positionStrategy: new ConnectedPositioningStrategy(this._positionSettings)\n    };\n\n    private _operatorsOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        positionStrategy: new ConnectedPositioningStrategy(this._positionSettings)\n    };\n\n    private chipsAreaWidth: number;\n    private chipAreaScrollOffset = 0;\n    private _column = null;\n    private isKeyPressed = false;\n    private isComposing = false;\n    private _cancelChipClick = false;\n    private _value = null;\n\n    /** switch to icon buttons when width is below 432px */\n    private readonly NARROW_WIDTH_THRESHOLD = 432;\n\n    private $destroyer = new Subject<void>();\n\n    constructor(\n        public filteringService: IgxFilteringService,\n        public ref: ElementRef<HTMLElement>,\n        public cdr: ChangeDetectorRef,\n        protected platform: PlatformUtil,\n    ) { }\n\n    @HostListener('keydown', ['$event'])\n    public onKeydownHandler(evt: KeyboardEvent) {\n        if (this.platform.isFilteringKeyCombo(evt)) {\n                evt.preventDefault();\n                evt.stopPropagation();\n                this.close();\n        }\n    }\n\n    public ngAfterViewInit() {\n        this._conditionsOverlaySettings.outlet = this.column.grid.outlet;\n        this._operatorsOverlaySettings.outlet = this.column.grid.outlet;\n\n        const selectedItem = this.expressionsList.find(expr => expr.isSelected === true);\n        if (selectedItem) {\n            this.expression = selectedItem.expression;\n            this._value = this.expression.searchVal;\n        }\n\n        this.filteringService.grid.localeChange\n        .pipe(takeUntil(this.$destroyer))\n        .subscribe(() => {\n            this.cdr.markForCheck();\n        });\n\n        requestAnimationFrame(() => this.focusEditElement());\n    }\n\n    public get disabled(): boolean {\n        return !(this.column.filteringExpressionsTree && this.column.filteringExpressionsTree.filteringOperands.length > 0);\n    }\n\n    public get template(): TemplateRef<any> {\n        if (this.column.dataType === GridColumnDataType.Date) {\n            return this.defaultDateUI;\n        }\n        if (this.column.dataType === GridColumnDataType.Time) {\n            return this.defaultTimeUI;\n        }\n        if (this.column.dataType === GridColumnDataType.DateTime) {\n            return this.defaultDateTimeUI;\n        }\n        return this.defaultFilterUI;\n    }\n\n    public get type() {\n        switch (this.column.dataType) {\n            case GridColumnDataType.String:\n            case GridColumnDataType.Boolean:\n                return 'text';\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n                return 'number';\n        }\n    }\n\n    public get conditions(): any {\n        return this.column.filters.conditionList();\n    }\n\n    public get isUnaryCondition(): boolean {\n        if (this.expression.condition) {\n            return this.expression.condition.isUnary;\n        } else {\n            return true;\n        }\n    }\n\n    public get placeholder(): string {\n        if (this.expression.condition && this.expression.condition.isUnary) {\n            return this.filteringService.getChipLabel(this.expression);\n        } else if (this.column.dataType === GridColumnDataType.Date) {\n            return this.filteringService.grid.resourceStrings.igx_grid_filter_row_date_placeholder;\n        } else if (this.column.dataType === GridColumnDataType.Boolean) {\n            return this.filteringService.grid.resourceStrings.igx_grid_filter_row_boolean_placeholder;\n        } else {\n            return this.filteringService.grid.resourceStrings.igx_grid_filter_row_placeholder;\n        }\n    }\n\n    /**\n     * Event handler for keydown on the input group's prefix.\n     */\n    public onPrefixKeyDown(event: KeyboardEvent) {\n        if (this.platform.isActivationKey(event) && this.dropDownConditions.collapsed) {\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n            event.stopImmediatePropagation();\n        } else if (event.key === this.platform.KEYMAP.TAB && !this.dropDownConditions.collapsed) {\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n        }\n    }\n\n    /**\n     * Event handler for keydown on the input.\n     */\n    public onInputKeyDown(event: KeyboardEvent) {\n        this.isKeyPressed = true;\n        event.stopPropagation();\n        if (this.column.dataType === GridColumnDataType.Boolean) {\n            if (this.platform.isActivationKey(event)) {\n                this.inputGroupPrefix.nativeElement.focus();\n                this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n                return;\n            }\n        }\n        if (event.key === this.platform.KEYMAP.ENTER) {\n            if (this.isComposing) {\n                return;\n            }\n            this.commitInput();\n        } else if (event.altKey && (event.key === this.platform.KEYMAP.ARROW_DOWN)) {\n            this.inputGroupPrefix.nativeElement.focus();\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n        } else if (this.platform.isFilteringKeyCombo(event)) {\n            event.preventDefault();\n            this.close();\n        }\n    }\n\n    /**\n     * Event handler for keyup on the input.\n     */\n    public onInputKeyUp() {\n        this.isKeyPressed = false;\n    }\n\n    /**\n     * Event handler for input on the input.\n     */\n    public onInput(eventArgs) {\n        if (!eventArgs) {\n            return;\n        }\n\n        // The 'iskeyPressed' flag is needed for a case in IE, because the input event is fired on focus and for some reason,\n        // when you have a japanese character as a placeholder, on init the value here is empty string .\n        const target = eventArgs.target;\n        if (this.column.dataType === GridColumnDataType.DateTime) {\n            this.value = eventArgs;\n            return;\n        }\n        if (this.platform.isEdge && target.type !== 'number'\n            || this.isKeyPressed || target.value || target.checkValidity()) {\n            this.value = target.value;\n        }\n    }\n\n    /**\n     * Event handler for compositionstart on the input.\n     */\n    public onCompositionStart() {\n        this.isComposing = true;\n    }\n\n    /**\n     * Event handler for compositionend on the input.\n     */\n    public onCompositionEnd() {\n        this.isComposing = false;\n    }\n\n    /**\n     * Event handler for input click event.\n     */\n    public onInputClick() {\n        if (this.column.dataType === GridColumnDataType.Boolean && this.dropDownConditions.collapsed) {\n            this.inputGroupPrefix.nativeElement.focus();\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n        }\n    }\n\n    /**\n     * Returns the filtering operation condition for a given value.\n     */\n    public getCondition(value: string): IFilteringOperation {\n        return this.column.filters.condition(value);\n    }\n\n    /**\n     * Returns the translated condition name for a given value.\n     */\n    public translateCondition(value: string): string {\n        return this.filteringService.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n    }\n\n    /**\n     * Returns the icon name of the current condition.\n     */\n    public getIconName(): string {\n        if (this.column.dataType === GridColumnDataType.Boolean && this.expression.condition === null) {\n            return this.getCondition(this.conditions[0]).iconName;\n        } else {\n            return this.expression.condition.iconName;\n        }\n    }\n\n    /**\n     * Returns whether a given condition is selected in dropdown.\n     */\n    public isConditionSelected(conditionName: string): boolean {\n        if (this.expression.condition) {\n            return this.expression.condition.name === conditionName;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Clears the current filtering.\n     */\n    public clearFiltering() {\n        this.filteringService.clearFilter(this.column.field);\n        this.resetExpression();\n        if (this.input) {\n            this.input.nativeElement.focus();\n        }\n        this.cdr.detectChanges();\n\n        this.chipAreaScrollOffset = 0;\n        this.transform(this.chipAreaScrollOffset);\n    }\n\n    /**\n     * Commits the value of the input.\n     */\n    public commitInput() {\n        const selectedItem = this.expressionsList.filter(ex => ex.isSelected === true);\n        selectedItem.forEach(e => e.isSelected = false);\n\n        let indexToDeselect = -1;\n        for (let index = 0; index < this.expressionsList.length; index++) {\n            const expression = this.expressionsList[index].expression;\n            if (expression.searchVal === null && !expression.condition.isUnary) {\n                indexToDeselect = index;\n            }\n        }\n        if (indexToDeselect !== -1) {\n            this.removeExpression(indexToDeselect, this.expression);\n        }\n        this.resetExpression();\n        this._value = this.expression.searchVal;\n        this.scrollChipsWhenAddingExpression();\n    }\n\n    /**\n     * Clears the value of the input.\n     */\n    public clearInput(event?: MouseEvent) {\n        event?.stopPropagation();\n        this.value = null;\n    }\n\n    /**\n     * Event handler for keydown on clear button.\n     */\n    public onClearKeyDown(eventArgs: KeyboardEvent) {\n        if (this.platform.isActivationKey(eventArgs)) {\n            eventArgs.preventDefault();\n            this.clearInput();\n            this.focusEditElement();\n        }\n    }\n\n    /**\n     * Event handler for click on clear button.\n     */\n    public onClearClick() {\n        this.clearInput();\n        this.focusEditElement();\n    }\n\n    /**\n     * Event handler for keydown on commit button.\n     */\n    public onCommitKeyDown(eventArgs: KeyboardEvent) {\n        if (this.platform.isActivationKey(eventArgs)) {\n            eventArgs.preventDefault();\n            this.commitInput();\n            this.focusEditElement();\n        }\n    }\n\n    /**\n     * Event handler for click on commit button.\n     */\n    public onCommitClick(event?: MouseEvent) {\n        event?.stopPropagation();\n        this.commitInput();\n        this.focusEditElement();\n    }\n\n    /**\n     * Event handler for focusout on the input group.\n     */\n    public onInputGroupFocusout() {\n        if (!this.value && this.value !== 0 &&\n            this.expression.condition && !this.expression.condition.isUnary) {\n            return;\n        }\n        requestAnimationFrame(() => {\n            const focusedElement = this.column?.grid.document.activeElement;\n\n            if (focusedElement.classList.contains('igx-chip__remove')) {\n                return;\n            }\n\n            if (!(focusedElement && this.editorFocused(focusedElement))\n                && this.dropDownConditions.collapsed) {\n                this.commitInput();\n            }\n        });\n    }\n\n    /**\n     * Closes the filtering edit row.\n     */\n    public close() {\n        if (this.expressionsList.length === 1 &&\n            this.expressionsList[0].expression.searchVal === null &&\n            this.expressionsList[0].expression.condition.isUnary === false) {\n            this.filteringService.getExpressions(this.column.field).pop();\n\n            this.filter();\n        } else {\n            const condToRemove = this.expressionsList.filter(ex => ex.expression.searchVal === null && !ex.expression.condition.isUnary);\n            if (condToRemove && condToRemove.length > 0) {\n                condToRemove.forEach(c => this.filteringService.removeExpression(this.column.field, this.expressionsList.indexOf(c)));\n                this.filter();\n            }\n        }\n\n        this.filteringService.isFilterRowVisible = false;\n        this.filteringService.updateFilteringCell(this.column);\n        this.filteringService.filteredColumn = null;\n        this.filteringService.selectedExpression = null;\n        this.filteringService.grid.theadRow.nativeElement.focus();\n\n        this.chipAreaScrollOffset = 0;\n        this.transform(this.chipAreaScrollOffset);\n    }\n\n    /**\n     *  Event handler for date picker's selection.\n     */\n    public onDateSelected(value: Date) {\n        this.value = value;\n    }\n\n    /** @hidden @internal */\n    public inputGroupPrefixClick(event: MouseEvent) {\n        event.stopPropagation();\n        (event.currentTarget as HTMLElement).focus();\n        this.toggleConditionsDropDown(event.currentTarget);\n    }\n\n    /**\n     * Opens the conditions dropdown.\n     */\n    public toggleConditionsDropDown(target: any) {\n        this._conditionsOverlaySettings.target = target;\n        this._conditionsOverlaySettings.excludeFromOutsideClick = [target as HTMLElement];\n        this.dropDownConditions.toggle(this._conditionsOverlaySettings);\n    }\n\n    /**\n     * Opens the logic operators dropdown.\n     */\n    public toggleOperatorsDropDown(eventArgs, index) {\n        this._operatorsOverlaySettings.target = eventArgs.target.parentElement;\n        this._operatorsOverlaySettings.excludeFromOutsideClick = [eventArgs.target.parentElement as HTMLElement];\n        this.dropDownOperators.toArray()[index].toggle(this._operatorsOverlaySettings);\n    }\n\n    /**\n     * Event handler for change event in conditions dropdown.\n     */\n    public onConditionsChanged(eventArgs) {\n        const value = (eventArgs.newSelection as IgxDropDownItemComponent).value;\n        this.expression.condition = this.getCondition(value);\n        if (this.expression.condition.isUnary) {\n            // update grid's filtering on the next cycle to ensure the drop-down is closed\n            // if the drop-down is not closed this event handler will be invoked multiple times\n            requestAnimationFrame(() => this.unaryConditionChangedCallback());\n        } else {\n            requestAnimationFrame(() => this.conditionChangedCallback());\n        }\n\n        // Add requestAnimationFrame because of an issue in IE, where you are still able to write in the input,\n        // if it has been focused and then set to readonly.\n        requestAnimationFrame(() => this.focusEditElement());\n    }\n\n\n    public onChipPointerdown(args, chip: IgxChipComponent) {\n        const activeElement = this.column?.grid.document.activeElement;\n        this._cancelChipClick = chip.selected\n            && activeElement && this.editorFocused(activeElement);\n    }\n\n    public onChipClick(args, item: ExpressionUI) {\n        if (this._cancelChipClick) {\n            this._cancelChipClick = false;\n            return;\n        }\n\n        this.expressionsList.forEach(ex => ex.isSelected = false);\n\n        this.toggleChip(item);\n    }\n\n    public toggleChip(item: ExpressionUI) {\n        item.isSelected = !item.isSelected;\n        if (item.isSelected) {\n            this.expression = item.expression;\n            this._value = this.expression.searchVal;\n            this.focusEditElement();\n        }\n    }\n\n    /**\n     * Event handler for chip keydown event.\n     */\n    public onChipKeyDown(eventArgs: KeyboardEvent, item: ExpressionUI) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            eventArgs.preventDefault();\n\n            this.toggleChip(item);\n        }\n    }\n\n    /**\n     * Scrolls the first chip into view if the tab key is pressed on the left arrow.\n     */\n    public onLeftArrowKeyDown(event: KeyboardEvent) {\n        if (event.key === this.platform.KEYMAP.TAB) {\n            this.chipAreaScrollOffset = 0;\n            this.transform(this.chipAreaScrollOffset);\n        }\n    }\n\n    /**\n     * Event handler for chip removed event.\n     */\n    public onChipRemoved(eventArgs: IBaseChipEventArgs, item: ExpressionUI) {\n        const indexToRemove = this.expressionsList.indexOf(item);\n        this.removeExpression(indexToRemove, item.expression);\n\n        this.scrollChipsOnRemove();\n    }\n\n    /**\n     * Event handler for logic operator changed event.\n     */\n    public onLogicOperatorChanged(eventArgs: ISelectionEventArgs, expression: ExpressionUI) {\n        if (eventArgs.oldSelection) {\n            expression.afterOperator = (eventArgs.newSelection as IgxDropDownItemComponent).value;\n            this.expressionsList[this.expressionsList.indexOf(expression) + 1].beforeOperator = expression.afterOperator;\n\n            // update grid's filtering on the next cycle to ensure the drop-down is closed\n            // if the drop-down is not closed this event handler will be invoked multiple times\n            requestAnimationFrame(() => this.filter());\n        }\n    }\n\n    /**\n     * Scrolls the chips into the chip area when left or right arrows are pressed.\n     */\n    public scrollChipsOnArrowPress(arrowPosition: string) {\n        let count = 0;\n        const chipAraeChildren = this.chipsArea.element.nativeElement.children;\n        const containerRect = this.container.nativeElement.getBoundingClientRect();\n\n        if (arrowPosition === 'right') {\n            for (const chip of chipAraeChildren) {\n                if (Math.ceil(chip.getBoundingClientRect().right) < Math.ceil(containerRect.right)) {\n                    count++;\n                }\n            }\n\n            if (count < chipAraeChildren.length) {\n                this.chipAreaScrollOffset -= Math.ceil(chipAraeChildren[count].getBoundingClientRect().right) -\n                    Math.ceil(containerRect.right) + 1;\n                this.transform(this.chipAreaScrollOffset);\n            }\n        }\n\n        if (arrowPosition === 'left') {\n            for (const chip of chipAraeChildren) {\n                if (Math.ceil(chip.getBoundingClientRect().left) < Math.ceil(containerRect.left)) {\n                    count++;\n                }\n            }\n\n            if (count > 0) {\n                this.chipAreaScrollOffset += Math.ceil(containerRect.left) -\n                    Math.ceil(chipAraeChildren[count - 1].getBoundingClientRect().left) + 1;\n                this.transform(this.chipAreaScrollOffset);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Resets the chips area\n     * @memberof IgxGridFilteringRowComponent\n     */\n    public resetChipsArea() {\n        this.chipAreaScrollOffset = 0;\n        this.transform(this.chipAreaScrollOffset);\n        this.showHideArrowButtons();\n    }\n\n    /** @hidden @internal */\n    public focusEditElement() {\n        if (this.input) {\n            this.input.nativeElement.focus();\n        } else if (this.picker) {\n            this.picker.getEditElement().focus();\n        }\n    }\n\n    public ngOnDestroy() {\n        this.$destroyer.next();\n    }\n\n    private showHideArrowButtons() {\n        requestAnimationFrame(() => {\n            if (this.filteringService.isFilterRowVisible) {\n                const containerWidth = this.container.nativeElement.getBoundingClientRect().width;\n                this.chipsAreaWidth = this.chipsArea.element.nativeElement.getBoundingClientRect().width;\n\n                this.showArrows = this.chipsAreaWidth >= containerWidth && this.isColumnFiltered;\n\n                // TODO: revise the cdr.detectChanges() usage here\n                if (!(this.cdr as ViewRef).destroyed) {\n                    this.cdr.detectChanges();\n                }\n            }\n        });\n    }\n\n    private addExpression(isSelected: boolean) {\n        const exprUI = new ExpressionUI();\n        exprUI.expression = this.expression;\n        exprUI.beforeOperator = this.expressionsList.length > 0 ? FilteringLogic.And : null;\n        exprUI.isSelected = isSelected;\n\n        this.expressionsList.push(exprUI);\n\n        const length = this.expressionsList.length;\n        if (this.expressionsList[length - 2]) {\n            this.expressionsList[length - 2].afterOperator = this.expressionsList[length - 1].beforeOperator;\n        }\n\n        this.showHideArrowButtons();\n    }\n\n    private removeExpression(indexToRemove: number, expression: IFilteringExpression) {\n        if (indexToRemove === 0 && this.expressionsList.length === 1) {\n            this.clearFiltering();\n            return;\n        }\n\n        this.filteringService.removeExpression(this.column.field, indexToRemove);\n\n        this.filter();\n\n        if (this.expression === expression) {\n            this.resetExpression();\n        }\n\n        this.showHideArrowButtons();\n    }\n\n    private resetExpression(condition?: string) {\n        this.expression = {\n            fieldName: this.column.field,\n            condition: null,\n            conditionName: null,\n            searchVal: null,\n            ignoreCase: this.column.filteringIgnoreCase\n        };\n\n        if (this.column.dataType !== GridColumnDataType.Boolean) {\n            this.expression.condition = this.getCondition(condition ?? this.conditions[0]);\n        }\n\n        if (this.column.dataType === GridColumnDataType.Date && this.input) {\n            this.input.nativeElement.value = null;\n        }\n\n        this.showHideArrowButtons();\n    }\n\n    private scrollChipsWhenAddingExpression() {\n        const chipAraeChildren = this.chipsArea.element.nativeElement.children;\n        if (!chipAraeChildren || chipAraeChildren.length === 0) {\n            return;\n        }\n\n        const chipsContainerWidth = this.container.nativeElement.offsetWidth;\n        const chipsAreaWidth = this.chipsArea.element.nativeElement.offsetWidth;\n\n        if (chipsAreaWidth > chipsContainerWidth) {\n            this.chipAreaScrollOffset = chipsContainerWidth - chipsAreaWidth;\n            this.transform(this.chipAreaScrollOffset);\n        }\n    }\n\n    private transform(offset: number) {\n        requestAnimationFrame(() => {\n            this.chipsArea.element.nativeElement.style.transform = `translate(${offset}px)`;\n        });\n    }\n\n    private scrollChipsOnRemove() {\n        let count = 0;\n        const chipAraeChildren = this.chipsArea.element.nativeElement.children;\n        const containerRect = this.container.nativeElement.getBoundingClientRect();\n\n        for (const chip of chipAraeChildren) {\n            if (Math.ceil(chip.getBoundingClientRect().right) < Math.ceil(containerRect.left)) {\n                count++;\n            }\n        }\n\n        if (count <= 2) {\n            this.chipAreaScrollOffset = 0;\n        } else {\n            const dif = chipAraeChildren[count].id === 'chip' ? count - 2 : count - 1;\n            this.chipAreaScrollOffset += Math.ceil(containerRect.left) - Math.ceil(chipAraeChildren[dif].getBoundingClientRect().left) + 1;\n        }\n\n        this.transform(this.chipAreaScrollOffset);\n    }\n\n    private conditionChangedCallback() {\n        if (!!this.expression.searchVal || this.expression.searchVal === 0) {\n            this.filter();\n        } else if (this.value) {\n            this.value = null;\n        }\n    }\n\n    private unaryConditionChangedCallback() {\n        if (this.value) {\n            this.value = null;\n        }\n        if (this.expressionsList.find(item => item.expression === this.expression) === undefined) {\n            this.addExpression(true);\n        }\n        this.filter();\n    }\n\n    private filter() {\n        this.filteringService.filterInternal(this.column.field);\n    }\n\n    private editorFocused(activeElement: Element): boolean {\n        // if the first check is false and the second is undefined this will return undefined\n        // make sure it always returns boolean\n        return !!(this.inputGroup && this.inputGroup.nativeElement.contains(activeElement)\n            || this.picker && this.picker.isFocused);\n    }\n\n    private get isColumnFiltered() {\n        return this.column.filteringExpressionsTree && this.column.filteringExpressionsTree.filteringOperands.length > 0;\n    }\n\n    public get isNarrowWidth(): boolean {\n        return this.nativeElement.offsetWidth < this.NARROW_WIDTH_THRESHOLD;\n    }\n}\n","<!-- Have to apply styles inline because of the overlay outlet ... -->\n<igx-drop-down #inputGroupConditions [style.--ig-size]=\"filteringElementsSize\" [height]=\"'200px'\" (selectionChanging)=\"onConditionsChanged($event)\">\n    @for (condition of conditions; track condition) {\n        <igx-drop-down-item\n            [value]=\"condition\"\n            [selected]=\"isConditionSelected(condition)\">\n            <div class=\"igx-grid__filtering-dropdown-items\">\n                <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n                <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n            </div>\n        </igx-drop-down-item>\n    }\n</igx-drop-down>\n\n<ng-template #defaultFilterUI>\n    <igx-input-group #inputGroup type=\"box\" (focusout)=\"onInputGroupFocusout()\" [style.--ig-size]=\"filteringElementsSize\">\n        <igx-prefix #inputGroupPrefix\n                    (click)=\"inputGroupPrefixClick($event)\"\n                    (keydown)=\"onPrefixKeyDown($event)\"\n                    tabindex=\"0\"\n                    [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        </igx-prefix>\n        <input\n            #input\n            igxInput\n            tabindex=\"0\"\n            [placeholder]=\"placeholder\"\n            autocomplete=\"off\"\n            [value]=\"value\"\n            (input)=\"onInput($event)\"\n            [type]=\"type\"\n            [readonly]=\"isUnaryCondition\"\n            (click)=\"onInputClick()\"\n            (compositionstart)=\"onCompositionStart()\"\n            (compositionend)=\"onCompositionEnd()\"\n            (keydown)=\"onInputKeyDown($event)\"\n            (keyup)=\"onInputKeyUp()\"/>\n        @if (value || value === 0) {\n            <igx-suffix>\n                <igx-icon\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"onClearClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n    </igx-input-group>\n</ng-template>\n\n<ng-template #defaultDateUI>\n    <igx-date-picker #picker\n        [(value)]=\"value\"\n        [readOnly]=\"true\"\n        [outlet]=\"filteringService.grid.outlet\"\n        [locale]=\"filteringService.grid.locale\"\n        (click)=\"expression.condition.isUnary ? null : picker.open()\"\n        type=\"box\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [formatter]=\"column.formatter\"\n        [placeholder]=\"placeholder\"\n        [weekStart]=\"column.pipeArgs.weekStart\"\n        (keydown)=\"onInputKeyDown($event)\"\n        (focusout)=\"onInputGroupFocusout()\"\n        (closed)=\"focusEditElement()\">\n        <igx-prefix #inputGroupPrefix\n            tabindex=\"0\"\n            (click)=\"inputGroupPrefixClick($event)\"\n            (keydown)=\"onPrefixKeyDown($event)\"\n            [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"expression.condition.iconName\"></igx-icon>\n        </igx-prefix>\n        @if (value) {\n            <igx-suffix>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick($event)\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"clearInput($event)\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-date-picker>\n</ng-template>\n\n<ng-template #defaultTimeUI>\n    <igx-time-picker #picker\n        [(value)]=\"value\"\n        [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [locale]=\"filteringService.grid.locale\"\n        [formatter]=\"column.formatter\"\n        [outlet]=\"filteringService.grid.outlet\"\n        type=\"box\"\n        [readOnly]=\"true\"\n        [style.--ig-size]=\"filteringElementsSize\"\n        [placeholder]=\"placeholder\"\n        (closed)=\"focusEditElement()\"\n        (focusout)=\"onInputGroupFocusout()\"\n        (keydown)=\"onInputKeyDown($event)\"\n        (click)=\"expression.condition.isUnary ? null : picker.open()\">\n        <igx-prefix #inputGroupPrefix\n            tabindex=\"0\"\n            (click)=\"inputGroupPrefixClick($event)\"\n            (keydown)=\"onPrefixKeyDown($event)\"\n            [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"expression.condition.iconName\"></igx-icon>\n        </igx-prefix>\n        @if (value) {\n            <igx-suffix>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick($event)\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"clearInput($event)\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-time-picker>\n</ng-template>\n\n<ng-template #defaultDateTimeUI>\n    <igx-input-group #inputGroup type=\"box\" (focusout)=\"onInputGroupFocusout()\" [style.--ig-size]=\"filteringElementsSize\">\n        <igx-prefix #inputGroupPrefix\n                    (click)=\"inputGroupPrefixClick($event)\"\n                    (keydown)=\"onPrefixKeyDown($event)\"\n                    tabindex=\"0\"\n                    [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        </igx-prefix>\n        <input\n            #input\n            igxInput\n            tabindex=\"0\"\n            [placeholder]=\"placeholder\"\n            [locale]=\"filteringService.grid.locale\"\n            [displayFormat]=\"column.pipeArgs.format\"\n            [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n            defaultFormatType=\"dateTime\"\n            [value]=\"value\"\n            (valueChange)=\"onInput($event)\"\n            [readonly]=\"isUnaryCondition\"\n            (click)=\"onInputClick()\"\n            (keydown)=\"onInputKeyDown($event)\"\n            (keyup)=\"onInputKeyUp()\"/>\n        @if (value || value === 0) {\n            <igx-suffix>\n                <igx-icon\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"onClearClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n    </igx-input-group>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n\n@if (showArrows) {\n    <button igxIconButton=\"flat\" type=\"button\" class=\"igx-grid__filtering-row-scroll-start\" (keydown)=\"onLeftArrowKeyDown($event)\" (click)=\"scrollChipsOnArrowPress('left')\">\n        <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n    </button>\n}\n\n<div #container class=\"igx-grid__filtering-row-main\">\n    <div>\n        <igx-chips-area #chipsArea>\n            <!-- expressionsList items re-created on refreshExpressions(), track stable expression -->\n            @for (item of expressionsList; track item.expression; let i = $index; let last = $last) {\n                <ng-container tabindex=\"0\">\n                    <igx-chip #chip id=\"chip\"\n                        (pointerdown)=\"onChipPointerdown($event, chip)\"\n                        (click)=\"onChipClick($event, item)\"\n                        (keydown)=\"onChipKeyDown($event, item)\"\n                        (remove)=\"onChipRemoved($event, item)\"\n                        [selectable]=\"false\"\n                        [selected]=\"item.isSelected\"\n                        [style.--ig-size]=\"filteringElementsSize\"\n                        [removable]=\"true\">\n                        <igx-icon\n                            igxPrefix\n                            family=\"default\"\n                            [name]=\"item.expression.condition.iconName\">\n                        </igx-icon>\n                        <span>{{filteringService.getChipLabel(item.expression)}}</span>\n                    </igx-chip>\n                    @if (!last) {\n                        <span id=\"operand\">\n                            <button\n                                igxButton\n                                type=\"button\"\n                                (click)=\"toggleOperatorsDropDown($event, i)\"\n                                [igxDropDownItemNavigation]=\"operators\"\n                                [style.--ig-size]=\"filteringElementsSize\">\n                                <igx-icon family=\"default\" name=\"expand_more\"></igx-icon>\n                                <span>{{filteringService.getOperatorAsString(item.afterOperator)}}</span>\n                            </button>\n                            <igx-drop-down #operators (selectionChanging)=\"onLogicOperatorChanged($event, item)\">\n                                <igx-drop-down-item [value]=\"0\" [selected]=\"item.afterOperator === 0\">{{filteringService.grid.resourceStrings.igx_grid_filter_operator_and}}</igx-drop-down-item>\n                                <igx-drop-down-item [value]=\"1\" [selected]=\"item.afterOperator === 1\">{{filteringService.grid.resourceStrings.igx_grid_filter_operator_or}}</igx-drop-down-item>\n                            </igx-drop-down>\n                        </span>\n                    }\n                </ng-container>\n            }\n        </igx-chips-area>\n    </div>\n</div>\n\n@if (showArrows) {\n    <button igxIconButton=\"flat\" type=\"button\" class=\"igx-grid__filtering-row-scroll-end\" (click)=\"scrollChipsOnArrowPress('right')\">\n        <igx-icon family=\"default\" name=\"next\"></igx-icon>\n    </button>\n}\n\n<div #buttonsContainer [ngClass]=\"isNarrowWidth ? 'igx-grid__filtering-row-editing-buttons--small' : 'igx-grid__filtering-row-editing-buttons'\">\n    @if (!isNarrowWidth) {\n        <button igxButton=\"flat\" type=\"button\" igxRipple (click)=\"clearFiltering()\" [disabled]=\"disabled\" [tabindex]=\"disabled\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"refresh\"></igx-icon>\n            <span>{{ filteringService.grid.resourceStrings.igx_grid_filter_row_reset }}</span>\n        </button>\n        <button #closeButton igxButton=\"flat\" type=\"button\" igxRipple (click)=\"close()\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"close\"></igx-icon>\n            <span>{{ filteringService.grid.resourceStrings.igx_grid_filter_row_close }}</span>\n        </button>\n    }\n    @if (isNarrowWidth) {\n        <button igxIconButton=\"flat\" type=\"button\" igxRipple (click)=\"clearFiltering()\" [disabled]=\"disabled\" [tabindex]=\"disabled\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"refresh\"></igx-icon>\n        </button>\n        <button #closeButton igxIconButton=\"flat\" type=\"button\" igxRipple (click)=\"close()\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"close\"></igx-icon>\n        </button>\n    }\n</div>\n","import { IGroupByRecord } from '../data-operations/groupby-record.interface';\nimport { IgxAddRow, IgxEditRow } from './common/crud.service';\nimport { GridSummaryCalculationMode, GridSummaryPosition } from './common/enums';\nimport { IgxGridCell } from './grid-public-cell';\nimport { IgxSummaryResult } from './summaries/grid-summary';\nimport { ITreeGridRecord } from './tree-grid/tree-grid.interfaces';\nimport { mergeWith } from 'lodash-es';\nimport { CellType, GridServiceType, GridType, IGridValidationState, RowType, ValidationStatus } from './common/grid.interface';\n\nabstract class BaseRow implements RowType {\n    public index: number;\n    /**\n     * The grid that contains the row.\n     */\n    public grid: GridType;\n    protected _data?: any;\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public get viewIndex(): number {\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * Gets the row key.\n     * A row in the grid is identified either by:\n     * - primaryKey data value,\n     * - the whole rowData, if the primaryKey is omitted.\n     *\n     * ```typescript\n     * let rowKey = row.key;\n     * ```\n     */\n    public get key(): any {\n        const data = this._data ?? this.grid.dataView[this.index];\n        const primaryKey = this.grid.primaryKey;\n        return primaryKey ? data[primaryKey] : data;\n    }\n\n    /**\n     * Gets if this represents add row UI\n     *\n     * ```typescript\n     * let isAddRow = row.addRowUI;\n     * ```\n     */\n    public get addRowUI(): boolean {\n        return !!this.grid.crudService.row &&\n            this.grid.crudService.row.getClassName() === IgxAddRow.name &&\n            this.grid.crudService.row.id === this.key;\n    }\n\n    /** Gets the validation status and errors, if any.\n    * ```typescript\n    * let validation = row.validation;\n    * let errors = validation.errors;\n    * ```\n    */\n    public get validation(): IGridValidationState {\n        const formGroup = this.grid.validation.getFormGroup(this.key);\n        return { status: formGroup?.status as ValidationStatus || 'VALID', errors: formGroup?.errors } as const;\n    }\n\n    /**\n     * The data record that populates the row.\n     *\n     * ```typescript\n     * let rowData = row.data;\n     * ```\n     */\n    public get data(): any {\n        if (this.inEditMode) {\n            return mergeWith(this.grid.dataCloneStrategy.clone(this._data ?? this.grid.dataView[this.index]),\n                this.grid.transactions.getAggregatedValue(this.key, false),\n                (objValue, srcValue) => {\n                    if (Array.isArray(srcValue)) {\n                        return objValue = srcValue;\n                    }\n                });\n        }\n        return this._data ?? this.grid.dataView[this.index];\n    }\n\n    /**\n     * Returns if the row is currently in edit mode.\n     */\n    public get inEditMode(): boolean {\n        if (this.grid.rowEditable) {\n            const editRowState = this.grid.crudService.row;\n            return (editRowState && editRowState.id === this.key) || false;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * const isPinned = row.pinned;\n     * ```\n     */\n    public get pinned(): boolean {\n        return this.grid.isRecordPinned(this.data);\n    }\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * row.pinned = !row.pinned;\n     * ```\n     */\n    public set pinned(val: boolean) {\n        if (val) {\n            this.pin();\n        } else {\n            this.unpin();\n        }\n    }\n\n    /**\n     * Gets the row expanded/collapsed state.\n     *\n     * ```typescript\n     * const isExpanded = row.expanded;\n     * ```\n     */\n    public get expanded(): boolean {\n        return this.grid.gridAPI.get_row_expansion_state(this.data);\n    }\n\n    /**\n     * Expands/collapses the row.\n     *\n     * ```typescript\n     * row.expanded = true;\n     * ```\n     */\n    public set expanded(val: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this.key, val);\n    }\n\n    /**\n     * Gets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = true;\n     * ```\n     */\n    public get selected(): boolean {\n        return this.grid.selectionService.isRowSelected(this.key);\n    }\n\n    /**\n     * Sets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = !row.selected;\n     * ```\n     */\n    public set selected(val: boolean) {\n        if (val) {\n            this.grid.selectionService.selectRowsWithNoEvent([this.key]);\n        } else {\n            this.grid.selectionService.deselectRowsWithNoEvent([this.key]);\n        }\n        this.grid.cdr.markForCheck();\n    }\n\n    /**\n     * Returns if the row is in delete state.\n     */\n    public get deleted(): boolean {\n        return this.grid.gridAPI.row_deleted_transaction(this.key);\n    }\n\n    /**\n     * Returns if the row has child rows. Always return false for IgxGridRow.\n     */\n    public get hasChildren(): boolean {\n        return false;\n    }\n\n    public get disabled(): boolean {\n        return this.grid.isGhostRecord(this.data);\n    }\n\n    /**\n     * Gets the rendered cells in the row component.\n     */\n    public get cells(): CellType[] {\n        const res: CellType[] = [];\n        this.grid.columns.forEach(col => {\n            const cell: CellType = new IgxGridCell(this.grid, this.index, col);\n            res.push(cell);\n        });\n        return res;\n    }\n\n    /**\n     * Pins the specified row.\n     * This method emits `onRowPinning` event.\n     *\n     * ```typescript\n     * // pin the selected row from the grid\n     * this.grid.selectedRows[0].pin();\n     * ```\n     */\n    public pin(): boolean {\n        return this.grid.pinRow(this.key, this.index);\n    }\n\n    /**\n     * Unpins the specified row.\n     * This method emits `onRowPinning` event.\n     *\n     * ```typescript\n     * // unpin the selected row from the grid\n     * this.grid.selectedRows[0].unpin();\n     * ```\n     */\n    public unpin(): boolean {\n        return this.grid.unpinRow(this.key);\n    }\n\n    /**\n     * Updates the specified row object and the data source record with the passed value.\n     *\n     * ```typescript\n     * // update the second selected row's value\n     * let newValue = \"Apple\";\n     * this.grid.selectedRows[1].update(newValue);\n     * ```\n     */\n    public update(value: any): void {\n        const crudService = this.grid.crudService;\n        if (crudService.cellInEditMode && crudService.cell.id.rowID === this.key) {\n            this.grid.transactions.endPending(false);\n        }\n        const row = new IgxEditRow(this.key, this.index, this.data, this.grid);\n        this.grid.gridAPI.update_row(row, value);\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Removes the specified row from the grid's data source.\n     * This method emits `onRowDeleted` event.\n     *\n     * ```typescript\n     * // delete the third selected row from the grid\n     * this.grid.selectedRows[2].delete();\n     * ```\n     */\n    public delete(): void {\n        this.grid.deleteRowById(this.key);\n    }\n}\n\nexport class IgxGridRow extends BaseRow implements RowType {\n    /**\n     * @hidden\n     */\n    constructor(\n        public override grid: GridType,\n        public override index: number, data?: any\n    ) {\n        super();\n        this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public override get viewIndex(): number {\n        if (this.grid.paginator) {\n            const precedingDetailRows = [];\n            const precedingGroupRows = [];\n            const firstRow = this.grid.dataView[0];\n            const hasDetailRows = this.grid.expansionStates.size;\n            const hasGroupedRows = this.grid.groupingExpressions.length;\n            let precedingSummaryRows = 0;\n            const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n\n            // from groupingFlatResult, resolve two other collections:\n            // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n            // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n            if (hasDetailRows || hasGroupedRows) {\n                this.grid.groupingFlatResult.forEach((r, ind) => {\n                    const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n                    if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n                        precedingGroupRows.push(r);\n                    }\n                    if (this.grid.expansionStates.get(rowID) && ind < firstRowInd && !this.grid.isGroupByRecord(r)) {\n                        precedingDetailRows.push(r);\n                    }\n                });\n            }\n\n            if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                // if firstRow is a child of the last item in precedingGroupRows,\n                // then summaryRow for this given groupedRecord is rendered after firstRow,\n                // i.e. need to decrease firstRowInd to account for the above.\n                precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n                if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n                    precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n                    precedingSummaryRows += -1;\n                }\n            }\n\n            return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n        } else {\n            return this.index;\n        }\n    }\n\n    /**\n     * Returns the parent row, if grid is grouped.\n     */\n    public get parent(): RowType {\n        let parent: IgxGroupByRow;\n        if (!this.grid.groupingExpressions.length) {\n            return undefined;\n        }\n\n        let i = this.index - 1;\n        while (i >= 0 && !parent) {\n            const rec = this.grid.dataView[i];\n            if (this.grid.isGroupByRecord(rec)) {\n                parent = new IgxGroupByRow(this.grid, i, rec);\n            }\n            i--;\n        }\n        return parent;\n    }\n}\n\nexport class IgxTreeGridRow extends BaseRow implements RowType {\n    /**\n     * @hidden\n     */\n    constructor(\n        public override grid: GridType,\n        public override index: number, data?: any, private _treeRow?: ITreeGridRecord\n    ) {\n        super();\n        this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public override get viewIndex(): number {\n        if (this.grid.hasSummarizedColumns && this.grid.page > 0) {\n            if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                const firstRowIndex = this.grid.processedExpandedFlatData.indexOf(this.grid.dataView[0].data);\n                // firstRowIndex is based on data result after all pipes triggered, excluding summary pipe\n                const precedingSummaryRows = this.grid.summaryPosition === GridSummaryPosition.bottom ?\n                    this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) :\n                    this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) + 1;\n                // there is a summary row for each root record, so we calculate how many root records are rendered before the current row\n                return firstRowIndex + precedingSummaryRows + this.index;\n            }\n        }\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     *  The data passed to the row component.\n     *\n     * ```typescript\n     * let selectedRowData = this.grid.selectedRows[0].data;\n     * ```\n     */\n    public override get data(): any {\n        if (this.inEditMode) {\n            return mergeWith(this.grid.dataCloneStrategy.clone(this._data ?? this.grid.dataView[this.index]),\n                this.grid.transactions.getAggregatedValue(this.key, false),\n                (objValue, srcValue) => {\n                    if (Array.isArray(srcValue)) {\n                        return objValue = srcValue;\n                    }\n                });\n        }\n        const rec = this.grid.dataView[this.index];\n        return this._data ? this._data : this.grid.isTreeRow(rec) ? rec.data : rec;\n    }\n\n    /**\n     * Returns the child rows.\n     */\n    public get children(): RowType[] {\n        const children: IgxTreeGridRow[] = [];\n        if (this.treeRow.expanded) {\n            this.treeRow.children.forEach((rec, i) => {\n                const row = new IgxTreeGridRow(this.grid, this.index + 1 + i, rec.data);\n                children.push(row);\n            });\n        }\n        return children;\n    }\n\n    /**\n     * Returns the parent row.\n     */\n    public get parent(): RowType {\n        const row = this.grid.getRowByKey(this.treeRow.parent?.key);\n        return row;\n    }\n\n    /**\n     * Returns true if child rows exist. Always return false for IgxGridRow.\n     */\n    public override get hasChildren(): boolean {\n        if (this.treeRow.children) {\n            return this.treeRow.children.length > 0;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * The `ITreeGridRecord` with metadata about the row in the context of the tree grid.\n     *\n     * ```typescript\n     * const rowParent = this.treeGrid.getRowByKey(1).treeRow.parent;\n     * ```\n     */\n    public get treeRow(): ITreeGridRecord {\n        return this._treeRow ?? this.grid.records.get(this.key);\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     *\n     * ```typescript\n     * let isPinned = row.pinned;\n     * ```\n     */\n    public override get pinned(): boolean {\n        return this.grid.isRecordPinned(this);\n    }\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * row.pinned = !row.pinned;\n     * ```\n     */\n    public override set pinned(val: boolean) {\n        if (val) {\n            this.pin();\n        } else {\n            this.unpin();\n        }\n    }\n\n    /**\n     * Gets whether the row is expanded.\n     *\n     * ```typescript\n     * let esExpanded = row.expanded;\n     * ```\n     */\n    public override get expanded(): boolean {\n        return this.grid.gridAPI.get_row_expansion_state(this.treeRow);\n    }\n\n    /**\n     * Expands/collapses the row.\n     *\n     * ```typescript\n     * row.expanded = true;\n     * ```\n     */\n    public override set expanded(val: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this.key, val);\n    }\n\n    public override get disabled(): boolean {\n        // TODO cell\n        return this.grid.isGhostRecord(this.data) ? this.treeRow.isFilteredOutParent === undefined : false;\n    }\n\n    private getRootParent(row: ITreeGridRecord): ITreeGridRecord {\n        while (row.parent) {\n            row = row.parent;\n        }\n        return row;\n    }\n}\n\nexport class IgxHierarchicalGridRow extends BaseRow implements RowType {\n    /**\n     * @hidden\n     */\n    constructor(\n        public override grid: GridType,\n        public override index: number, data?: any\n    ) {\n        super();\n        this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n    }\n\n    /**\n     * Returns true if row islands exist.\n     */\n    public override get hasChildren(): boolean {\n        return !!this.grid.childLayoutKeys.length;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public override get viewIndex() {\n        const firstRowInd = this.grid.filteredSortedData.indexOf(this.grid.dataView[0]);\n        const expandedRows = this.grid.filteredSortedData.filter((rec, ind) => {\n            const rowID = this.grid.primaryKey ? rec[this.grid.primaryKey] : rec;\n            return this.grid.expansionStates.get(rowID) && ind < firstRowInd;\n        });\n        return firstRowInd + expandedRows.length + this.index;\n    }\n\n    /**\n     * Gets the rendered cells in the row component.\n     */\n    public override get cells(): CellType[] {\n        const res: CellType[] = [];\n        this.grid.columns.forEach(col => {\n            const cell: CellType = new IgxGridCell(this.grid, this.index, col);\n            res.push(cell);\n        });\n        return res;\n    }\n}\n\nexport class IgxGroupByRow implements RowType {\n    /**\n     * Returns the row index.\n     */\n    public index: number;\n\n    /**\n     * The grid that contains the row.\n     */\n    public grid: GridType;\n\n    /**\n     * Returns always true, because this is in instance of an IgxGroupByRow.\n     */\n    public isGroupByRow: boolean;\n\n    /**\n     * The IGroupByRecord object, representing the group record, if the row is a GroupByRow.\n     */\n    public get groupRow(): IGroupByRecord {\n        return this._groupRow ? this._groupRow : this.grid.dataView[this.index];\n    }\n\n    /**\n     * Returns the child rows.\n     */\n    public get children(): RowType[] {\n        const children: IgxGridRow[] = [];\n        this.groupRow.records.forEach((rec, i) => {\n            const row = new IgxGridRow(this.grid, this.index + 1 + i, rec);\n            children.push(row);\n        });\n        return children;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public get viewIndex(): number {\n        if (this.grid.page) {\n            const precedingDetailRows = [];\n            const precedingGroupRows = [];\n            const firstRow = this.grid.dataView[0];\n            const hasDetailRows = this.grid.expansionStates.size;\n            const hasGroupedRows = this.grid.groupingExpressions.length;\n            let precedingSummaryRows = 0;\n            const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n\n            // from groupingFlatResult, resolve two other collections:\n            // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n            // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n            if (hasDetailRows || hasGroupedRows) {\n                this.grid.groupingFlatResult.forEach((r, ind) => {\n                    const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n                    if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n                        precedingGroupRows.push(r);\n                    }\n                    if (this.grid.expansionStates.get(rowID) && ind < firstRowInd && !this.grid.isGroupByRecord(r)) {\n                        precedingDetailRows.push(r);\n                    }\n                });\n            }\n\n            if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                // if firstRow is a child of the last item in precedingGroupRows,\n                // then summaryRow for this given groupedRecord is rendered after firstRow,\n                // i.e. need to decrease firstRowInd to account for the above.\n                precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n                if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n                    precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n                    precedingSummaryRows += -1;\n                }\n            }\n\n            return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n        } else {\n            return this.index;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(grid: GridType, index: number, private _groupRow?: IGroupByRecord) {\n        this.grid = grid;\n        this.index = index;\n        this.isGroupByRow = true;\n    }\n\n    /**\n     * Gets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = true;\n     * ```\n     */\n    public get selected(): boolean {\n        return this.children.every(row => row.selected);\n    }\n\n    /**\n     * Sets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = !row.selected;\n     * ```\n     */\n    public set selected(val: boolean) {\n        if (val) {\n            this.children.forEach(row => {\n                this.grid.selectionService.selectRowsWithNoEvent([row.key]);\n            });\n        } else {\n            this.children.forEach(row => {\n                this.grid.selectionService.deselectRowsWithNoEvent([row.key]);\n            });\n        }\n        this.grid.cdr.markForCheck();\n    }\n\n    /**\n     * Gets/sets whether the group row is expanded.\n     * ```typescript\n     * const groupRowExpanded = groupRow.expanded;\n     * ```\n     */\n    public get expanded(): boolean {\n        return this.grid.isExpandedGroup(this.groupRow);\n    }\n\n    public set expanded(value: boolean) {\n        this.gridAPI.set_grouprow_expansion_state(this.groupRow, value);\n    }\n\n    public isActive(): boolean {\n        return this.grid.navigation.activeNode ? this.grid.navigation.activeNode.row === this.index : false;\n    }\n\n    /**\n     * Toggles the group row expanded/collapsed state.\n     * ```typescript\n     * groupRow.toggle()\n     * ```\n     */\n    public toggle(): void {\n        this.grid.toggleGroup(this.groupRow);\n    }\n\n    private get gridAPI(): GridServiceType {\n        return this.grid.gridAPI as GridServiceType;\n    }\n}\n\nexport class IgxSummaryRow implements RowType {\n    /**\n     * Returns the row index.\n     */\n    public index: number;\n\n    /**\n     * The grid that contains the row.\n     */\n    public grid: GridType;\n\n    /**\n     * Returns always true, because this is in instance of an IgxGroupByRow.\n     */\n    public isSummaryRow: boolean;\n\n    /**\n     * The IGroupByRecord object, representing the group record, if the row is a GroupByRow.\n     */\n    public get summaries(): Map<string, IgxSummaryResult[]> {\n        return this._summaries ? this._summaries : this.grid.dataView[this.index].summaries;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public get viewIndex(): number {\n        if (this.grid.hasSummarizedColumns && this.grid.page > 0) {\n            if (this.grid.type === 'flat') {\n                if (this.grid.page) {\n                    const precedingDetailRows = [];\n                    const precedingGroupRows = [];\n                    const firstRow = this.grid.dataView[0];\n                    const hasDetailRows = this.grid.expansionStates.size;\n                    const hasGroupedRows = this.grid.groupingExpressions.length;\n                    let precedingSummaryRows = 0;\n                    const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n\n                    // from groupingFlatResult, resolve two other collections:\n                    // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n                    // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n                    if (hasDetailRows || hasGroupedRows) {\n                        this.grid.groupingFlatResult.forEach((r, ind) => {\n                            const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n                            if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n                                precedingGroupRows.push(r);\n                            }\n                            if (this.grid.expansionStates.get(rowID) && ind < firstRowInd &&\n                                !this.grid.isGroupByRecord(r)) {\n                                precedingDetailRows.push(r);\n                            }\n                        });\n                    }\n\n                    if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                        // if firstRow is a child of the last item in precedingGroupRows,\n                        // then summaryRow for this given groupedRecord is rendered after firstRow,\n                        // i.e. need to decrease firstRowInd to account for the above.\n                        precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n                        if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n                            precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n                            precedingSummaryRows += -1;\n                        }\n                    }\n\n                    return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n                } else {\n                    return this.index;\n                }\n            } else if (this.grid.type === 'tree') {\n                if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                    const firstRowIndex = this.grid.processedExpandedFlatData.indexOf(this.grid.dataView[0].data);\n                    const precedingSummaryRows = this.grid.summaryPosition === GridSummaryPosition.bottom ?\n                        this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) :\n                        this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) + 1;\n                    return firstRowIndex + precedingSummaryRows + this.index;\n                }\n            }\n        }\n\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(\n        grid: GridType,\n        index: number, private _summaries?: Map<string, IgxSummaryResult[]>,\n    ) {\n        this.grid = grid;\n        this.index = index;\n        this.isSummaryRow = true;\n    }\n\n    private getRootParent(row: ITreeGridRecord): ITreeGridRecord {\n        while (row.parent) {\n            row = row.parent;\n        }\n        return row;\n    }\n}\n","import { Pipe, PipeTransform, Inject } from '@angular/core';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { cloneArray, resolveNestedPath } from '../../core/utils';\nimport { GridType, IGX_GRID_BASE, RowType } from './grid.interface';\nimport { IgxAddRow } from './crud.service';\nimport { IgxSummaryOperand, IgxSummaryResult } from '../summaries/grid-summary';\nimport { IgxGridRow } from '../grid-public-row';\n\ninterface GridStyleCSSProperty {\n    [prop: string]: any;\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxCellStyleClasses',\n    standalone: true\n})\nexport class IgxGridCellStyleClassesPipe implements PipeTransform {\n\n    public transform(cssClasses: GridStyleCSSProperty, _: any, data: any, field: string, index: number, __: number): string {\n        if (!cssClasses) {\n            return '';\n        }\n\n        const result = [];\n\n        for (const cssClass of Object.keys(cssClasses)) {\n            const callbackOrValue = cssClasses[cssClass];\n            const apply = typeof callbackOrValue === 'function' ?\n                callbackOrValue(data, field, resolveNestedPath(data, field), index) : callbackOrValue;\n            if (apply) {\n                result.push(cssClass);\n            }\n        }\n\n        return result.join(' ');\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxCellStyles',\n    standalone: true\n})\nexport class IgxGridCellStylesPipe implements PipeTransform {\n\n    public transform(styles: GridStyleCSSProperty, _: any, data: any, field: string, index: number, __: number):\n        GridStyleCSSProperty {\n        const css = {};\n        if (!styles) {\n            return css;\n        }\n\n        for (const prop of Object.keys(styles)) {\n            const res = styles[prop];\n            css[prop] = typeof res === 'function' ? res(data, field, resolveNestedPath(data, field), index) : res;\n        }\n\n        return css;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n @Pipe({\n    name: 'igxCellImageAlt',\n    standalone: true\n})\nexport class IgxGridCellImageAltPipe implements PipeTransform {\n\n    public transform(value: string): string {\n        if (value) {\n            const val = value.split('/');\n            const imagename = val[val.length - 1].split('.');\n            return imagename.length ? imagename[0] : '';\n        }\n        return value;\n    }\n}\n\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxGridRowClasses',\n    standalone: true\n})\nexport class IgxGridRowClassesPipe implements PipeTransform {\n    public row: RowType;\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) {\n        this.row = new IgxGridRow(this.grid as any, -1, {});\n    }\n\n    public transform(\n        cssClasses: GridStyleCSSProperty,\n        row: RowType,\n        editMode: boolean,\n        selected: boolean,\n        dirty: boolean,\n        deleted: boolean,\n        dragging: boolean,\n        index: number,\n        mrl: boolean,\n        filteredOut: boolean,\n        _rowData: any,\n        _: number\n    ) {\n        const result = new Set(['igx-grid__tr', index % 2 ? 'igx-grid__tr--even': 'igx-grid__tr--odd']);\n        const mapping = [\n            [selected, 'igx-grid__tr--selected'],\n            [editMode, 'igx-grid__tr--edit'],\n            [dirty, 'igx-grid__tr--edited'],\n            [deleted, 'igx-grid__tr--deleted'],\n            [dragging, 'igx-grid__tr--drag'],\n            [mrl, 'igx-grid__tr--mrl'],\n            // Tree grid only\n            [filteredOut, 'igx-grid__tr--filtered']\n        ];\n\n        for (const [state, _class] of mapping) {\n            if (state) {\n                result.add(_class as string);\n            }\n        }\n\n        for (const cssClass of Object.keys(cssClasses ?? {})) {\n            const callbackOrValue = cssClasses[cssClass];\n            this.row.index = index;\n            (this.row as any)._data = row.data;\n            const apply = typeof callbackOrValue === 'function' ? callbackOrValue(this.row) : callbackOrValue;\n            if (apply) {\n                result.add(cssClass);\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxGridRowStyles',\n    standalone: true\n})\nexport class IgxGridRowStylesPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(styles: GridStyleCSSProperty, rowData: any, index: number, __: number): GridStyleCSSProperty {\n        const css = {};\n        if (!styles) {\n            return css;\n        }\n        for (const prop of Object.keys(styles)) {\n            const cb = styles[prop];\n            const data = this.grid.isTreeRow && this.grid.isTreeRow(rowData) ? rowData.data : rowData;\n            const row = new IgxGridRow((this.grid as any), index, data);\n            css[prop] = typeof cb === 'function' ? cb(row) : cb;\n        }\n        return css;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxNotGrouped',\n    standalone: true\n})\nexport class IgxGridNotGroupedPipe implements PipeTransform {\n\n    public transform(value: any[]): any[] {\n        return value.filter(item => !item.columnGroup);\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxTopLevel',\n    standalone: true\n})\nexport class IgxGridTopLevelColumns implements PipeTransform {\n\n    public transform(value: any[]): any[] {\n        return value.filter(item => item.level === 0);\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'filterCondition',\n    pure: true,\n    standalone: true\n})\nexport class IgxGridFilterConditionPipe implements PipeTransform {\n\n    public transform(value: string): string {\n        return value.split(/(?=[A-Z])/).join(' ');\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'gridTransaction',\n    standalone: true\n})\nexport class IgxGridTransactionPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], _id: string, _pipeTrigger: number) {\n\n        if (this.grid.transactions.enabled) {\n            const result = DataUtil.mergeTransactions(\n                cloneArray(collection),\n                this.grid.transactions.getAggregatedChanges(true),\n                this.grid.primaryKey,\n                this.grid.dataCloneStrategy);\n            return result;\n        }\n        return collection;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'paginatorOptions',\n    standalone: true\n})\nexport class IgxGridPaginatorOptionsPipe implements PipeTransform {\n    public transform(values: Array<number>) {\n        return Array.from(new Set([...values])).sort((a, b) => a - b);\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'visibleColumns',\n    standalone: true\n})\nexport class IgxHasVisibleColumnsPipe implements PipeTransform {\n    public transform(values: any[], hasVisibleColumns) {\n        if (!(values && values.length)) {\n            return values;\n        }\n        return hasVisibleColumns ? values : [];\n    }\n\n}\n\n/** @hidden @internal */\nfunction buildDataView(): MethodDecorator {\n    return function (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) {\n        const original = descriptor.value;\n        descriptor.value = function (...args: unknown[]) {\n            const result = original.apply(this, args);\n            this.grid.buildDataView();\n            return result;\n        }\n        return descriptor;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridRowPinning',\n    standalone: true\n})\nexport class IgxGridRowPinningPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    @buildDataView()\n    public transform(collection: any[], id: string, isPinned = false, _pipeTrigger: number) {\n\n        if (this.grid.hasPinnedRecords && isPinned) {\n            const result = collection.filter(rec => !this.grid.isSummaryRow(rec) && this.grid.isRecordPinned(rec));\n            result.sort((rec1, rec2) => this.grid.getInitialPinnedIndex(rec1) - this.grid.getInitialPinnedIndex(rec2));\n            return result;\n        }\n\n        this.grid.unpinnedRecords = collection;\n        if (!this.grid.hasPinnedRecords) {\n            this.grid.pinnedRecords = [];\n            return isPinned ? [] : collection;\n        }\n\n        return collection.map((rec) => !this.grid.isSummaryRow(rec) &&\n            this.grid.isRecordPinned(rec) ? { recordRef: rec, ghostRecord: true } : rec);\n    }\n}\n\n@Pipe({\n    name: 'dataMapper',\n    standalone: true\n})\nexport class IgxGridDataMapperPipe implements PipeTransform {\n\n    public transform(data: any[], field: string, _: number, val: any, isNestedPath: boolean) {\n        return isNestedPath ? resolveNestedPath(data, field) : val;\n    }\n}\n\n@Pipe({\n    name: 'igxStringReplace',\n    standalone: true\n})\nexport class IgxStringReplacePipe implements PipeTransform {\n\n    public transform(value: string, search: string | RegExp, replacement: string): string {\n        return value.replace(search, replacement);\n    }\n}\n\n@Pipe({\n    name: 'transactionState',\n    standalone: true\n})\nexport class IgxGridTransactionStatePipe implements PipeTransform {\n\n    public transform(row_id: any, field: string, rowEditable: boolean, transactions: any, _: any, __: any, ___: any) {\n        if (rowEditable) {\n            const rowCurrentState = transactions.getAggregatedValue(row_id, false);\n            if (rowCurrentState) {\n                const value = resolveNestedPath(rowCurrentState, field);\n                return value !== undefined && value !== null;\n            }\n        } else {\n            const transaction = transactions.getState(row_id);\n            const value = resolveNestedPath(transaction?.value ?? {}, field);\n            return transaction && transaction.value && (value || value === 0 || value === false);\n        }\n    }\n}\n\n@Pipe({\n    name: 'columnFormatter',\n    standalone: true\n})\nexport class IgxColumnFormatterPipe implements PipeTransform {\n\n    public transform(value: any, formatter: (v: any, data: any, columnData? :any) => any, rowData: any, columnData? : any) {\n        return formatter(value, rowData, columnData);\n    }\n}\n\n@Pipe({\n    name: 'summaryFormatter',\n    standalone: true\n})\nexport class IgxSummaryFormatterPipe implements PipeTransform {\n\n    public transform(summaryResult: IgxSummaryResult, summaryOperand: IgxSummaryOperand,\n        summaryFormatter: (s: IgxSummaryResult, o: IgxSummaryOperand) => any) {\n        return summaryFormatter(summaryResult, summaryOperand);\n    }\n}\n\n@Pipe({\n    name: 'gridAddRow',\n    standalone: true\n})\nexport class IgxGridAddRowPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any, isPinned = false, _pipeTrigger: number) {\n        if (!this.grid.rowEditable || !this.grid.crudService.row || this.grid.crudService.row.getClassName() !== IgxAddRow.name ||\n            !this.grid.crudService.addRowParent || isPinned !== this.grid.crudService.addRowParent.isPinned) {\n            return collection;\n        }\n        const copy = collection.slice(0);\n        const rec = (this.grid.crudService.row as IgxAddRow).recordRef;\n        copy.splice(this.grid.crudService.row.index, 0, rec);\n        return copy;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    Input,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    booleanAttribute\n} from '@angular/core';\nimport { flatten, trackByIdentity } from '../../core/utils';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { ColumnType, GridType, IgxHeadSelectorTemplateContext } from '../common/grid.interface';\nimport { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';\nimport { IgxGridFilteringRowComponent } from '../filtering/base/grid-filtering-row.component';\nimport { IgxGridHeaderGroupComponent } from './grid-header-group.component';\nimport { IgxGridHeaderComponent } from './grid-header.component';\nimport { IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe } from './pipes';\nimport { IgxGridTopLevelColumns } from '../common/pipes';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\n\n/**\n *\n * For all intents & purposes treat this component as what a <thead> usually is in the default <table> element.\n *\n * This container holds the grid header elements and their behavior/interactions.\n *\n * @hidden @internal\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-header-row',\n    templateUrl: './grid-header-row.component.html',\n    imports: [IgxColumnMovingDropDirective, NgTemplateOutlet, NgClass, IgxGridHeaderGroupComponent, NgStyle, IgxGridForOfDirective, IgxGridFilteringRowComponent, IgxCheckboxComponent, IgxGridTopLevelColumns, IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe]\n})\nexport class IgxGridHeaderRowComponent implements DoCheck {\n\n    /** The grid component containing this element. */\n    @Input()\n    public grid: GridType;\n\n    /** Pinned columns of the grid. */\n    @Input()\n    public pinnedColumnCollection: ColumnType[] = [];\n\n    /** Unpinned columns of the grid. */\n    @Input()\n    public unpinnedColumnCollection: ColumnType[] = [];\n\n    @Input()\n    public activeDescendant: string;\n\n    @Input({ transform: booleanAttribute })\n    public hasMRL: boolean;\n\n    @Input()\n    public width: number;\n\n    /**\n     * Header groups inside the header row.\n     *\n     * @remarks\n     * Note: These are only the top level header groups in case there are multi-column headers\n     * or a specific column layout. If you want to get the flattened collection use the `groups`\n     * property below.\n     *\n     * @hidden @internal\n     * */\n    @ViewChildren(IgxGridHeaderGroupComponent)\n    public _groups: QueryList<IgxGridHeaderGroupComponent>;\n\n    /**\n     * The flattened header groups collection.\n     *\n     * @hidden @internal\n     */\n    public get groups(): IgxGridHeaderGroupComponent[] {\n        return flatten(this._groups?.toArray() ?? []);\n    }\n\n    /** Header components in the header row. */\n    public get headers(): IgxGridHeaderComponent[] {\n        return this.groups.map(group => group.header);\n    }\n\n    /** Filtering cell components in the header row. */\n    public get filters(): IgxGridFilteringCellComponent[] {\n        return this.groups.map(group => group.filter);\n    }\n\n    /** The virtualized part of the header row containing the unpinned header groups. */\n    @ViewChild('headerVirtualContainer', { read: IgxGridForOfDirective, static: true })\n    public headerContainer: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n\n    public get headerForOf() {\n        return this.headerContainer;\n    }\n\n    @ViewChild('headerDragContainer')\n    public headerDragContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('headerSelectorContainer')\n    public headerSelectorContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('headerGroupContainer')\n    public headerGroupContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('headSelectorBaseTemplate')\n    public headSelectorBaseTemplate: TemplateRef<IgxHeadSelectorTemplateContext>;\n\n    @ViewChild(IgxGridFilteringRowComponent)\n    public filterRow: IgxGridFilteringRowComponent;\n\n    /**\n     * Expand/collapse all child grids area in a hierarchical grid.\n     * `undefined` in the base and tree grids.\n     *\n     * @internal @hidden\n     */\n    @ViewChild('headerHierarchyExpander')\n    public headerHierarchyExpander: ElementRef<HTMLElement>;\n\n    public get navigation() {\n        return this.grid.navigation;\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    /**\n     * Returns whether the current grid instance is a hierarchical grid.\n     * as only hierarchical grids have the `isHierarchicalRecord` method.\n     *\n     * @hidden @internal\n     */\n    public get isHierarchicalGrid() {\n        return !!this.grid.isHierarchicalRecord;\n    }\n\n    public get indentationCSSClasses() {\n        return `igx-grid__header-indentation igx-grid__row-indentation--level-${this.grid.groupingExpressions.length}`;\n    }\n\n    public get rowSelectorsContext(): IgxHeadSelectorTemplateContext {\n        const ctx = {\n            $implicit: {\n                selectedCount: this.grid.selectionService.filteredSelectedRowIds.length as number,\n                totalCount: this.grid.totalRowsCountAfterFilter as number\n            }\n        } as IgxHeadSelectorTemplateContext;\n\n        if (this.isHierarchicalGrid) {\n            ctx.$implicit.selectAll = () => this.grid.selectAllRows();\n            ctx.$implicit.deselectAll = () => this.grid.deselectAllRows();\n        }\n\n        return ctx;\n    }\n\n    constructor(\n        protected ref: ElementRef<HTMLElement>,\n        protected cdr: ChangeDetectorRef\n    ) { }\n\n    /**\n     * This hook exists as a workaround for the unfortunate fact\n     * that when we have pinned columns in the grid, the unpinned columns headers\n     * are affected by a delayed change detection cycle after a horizontal scroll :(\n     * Thus, we tell the parent grid change detector to check us at each cycle.\n     *\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public scroll(event: Event) {\n        this.grid.preventHeaderScroll(event);\n    }\n\n    public headerRowSelection(event: MouseEvent) {\n        if (!this.grid.isMultiRowSelectionEnabled) {\n            return;\n        }\n\n        if (this.grid.selectionService.areAllRowSelected()) {\n            this.grid.selectionService.clearRowSelection(event);\n        } else {\n            this.grid.selectionService.selectAllRows(event);\n        }\n    }\n\n    /** state persistence switching all pinned columns resets collection */\n    protected trackPinnedColumn = trackByIdentity;\n}\n","<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" (scroll)=\"scroll($event)\" [style.width.px]=\"width\"\n    [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n    <!-- Column headers area -->\n    <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n\n        <!-- Left column moving area -->\n        @if (grid.moving && grid.columnInDrag && pinnedColumnCollection.length <= 0) {\n            <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n                [igxColumnMovingDrop]=\"headerContainer\"></span>\n        }\n        @if (grid.moving && grid.columnInDrag && pinnedColumnCollection.length > 0) {\n            <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedWidth\"\n                [igxColumnMovingDrop]=\"headerContainer\"></span>\n        }\n\n        <!-- Row dragging area -->\n        @if (grid.rowDraggable) {\n            <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n                <div style=\"visibility: hidden;\">\n                    <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n                </div>\n            </div>\n        }\n\n        <!-- Row selectors area -->\n        @if (grid.showRowSelectors) {\n            <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n                [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n                (click)=\"headerRowSelection($event)\"\n                (pointerdown)=\"$event.preventDefault()\">\n                <ng-container #headSelector\n                    *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n                </ng-container>\n            </div>\n        }\n\n        <!-- Hierarchical grids expand all area -->\n        @if (isHierarchicalGrid) {\n            <div #headerHierarchyExpander\n                (click)=\"grid.toggleAll()\"\n                (pointerdown)=\"$event.preventDefault()\"\n                [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n                [ngClass]=\"{\n                    'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n                    'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n                    'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n                }\">\n                <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n            </div>\n        }\n\n\n        <!-- Grouping icon toggle area -->\n        @if (grid?.groupingExpressions?.length) {\n            <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n                (click)=\"grid.toggleAllGroupRows()\"\n                (pointerdown)=\"$event.preventDefault()\">\n                <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n            </div>\n        }\n\n        <!-- Pinned columns collection from the start -->\n        @if (pinnedColumnCollection.length && grid.isPinningToStart) {\n            @for (column of pinnedColumnCollection | igxTopLevel; track trackPinnedColumn(column)) {\n                <igx-grid-header-group\n                    [ngClass]=\"column.headerGroupClasses\"\n                    [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n                    [column]=\"column\"\n                    [style.min-width]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                    [style.flex-basis]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n                </igx-grid-header-group>\n            }\n        }\n\n        <!-- Unpinned columns collection -->\n        <ng-template igxGridFor #headerVirtualContainer let-column\n            [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n            [igxForScrollContainer]=\"grid.parentVirtDir\"\n            [igxForContainerSize]=\"grid.unpinnedWidth\"\n            [igxForTrackBy]=\"grid.trackColumnChanges\"\n            [igxForSizePropName]=\"'calcPixelWidth'\"\n            [igxForScrollOrientation]=\"'horizontal'\"\n        >\n            <igx-grid-header-group\n                [ngClass]=\"column.headerGroupClasses\"\n                [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n                [column]=\"column\"\n                [style.min-width]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                [style.flex-basis]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\">\n            </igx-grid-header-group>\n        </ng-template>\n\n        <!-- Pinned columns collection at the end -->\n        @if (pinnedColumnCollection.length && !grid.isPinningToStart) {\n            @for (column of pinnedColumnCollection | igxTopLevel; track trackPinnedColumn(column)) {\n                <igx-grid-header-group\n                    [ngClass]=\"column.headerGroupClasses\"\n                    [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n                    [column]=\"column\"\n                    [style.min-width]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                    [style.flex-basis]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                    [style.left]=\"column.rightPinnedOffset\">\n                </igx-grid-header-group>\n            }\n        }\n    </div>\n\n    <!-- Filter row area -->\n    @if (grid.filteringService.isFilterRowVisible) {\n        <igx-grid-filtering-row #filteringRow\n            [column]=\"grid.filteringService.filteredColumn\"\n            [style.width.px]=\"width\">\n        </igx-grid-filtering-row>\n    }\n\n    <!-- Right column moving area -->\n    @if (grid.moving && grid.columnInDrag) {\n        <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n    }\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox\n            [tabindex]=\"-1\"\n            [readonly]=\"true\"\n            [checked]=\"context.selectedCount > 0 && grid.selectionService.areAllRowSelected()\"\n            [disableRipple]=\"true\"\n            [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n            [indeterminate]=\"context.selectedCount > 0 && grid.selectionService.hasSomeRowSelected()\"\n            [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n            #headerCheckbox>\n        </igx-checkbox>\n    </div>\n</ng-template>\n","// import { IgxGridHeaderGroupComponent } from './grid-header-group.component';\n// import { IgxGridHeaderRowComponent } from './grid-header-row.component';\n// import { IgxGridHeaderComponent } from './grid-header.component';\n\nexport { IgxGridHeaderComponent } from './grid-header.component';\nexport { IgxGridHeaderGroupComponent } from './grid-header-group.component';\nexport { IgxGridHeaderRowComponent } from './grid-header-row.component';\n\n/* NOTE: Grid headers directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_HEADERS_DIRECTIVES = [\n//     IgxGridHeaderComponent,\n//     IgxGridHeaderGroupComponent,\n//     IgxGridHeaderRowComponent\n// ] as const;\n","import { Directive, Input, OnDestroy, TemplateRef } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { IgxDragDirective } from '../directives/drag-drop/drag-drop.directive';\nimport { IRowDragStartEventArgs, IRowDragEndEventArgs } from './common/events';\nimport { IgxGridEmptyTemplateContext, IgxGridRowDragGhostContext, RowType } from './common/grid.interface';\n\n\nconst ghostBackgroundClass = 'igx-grid__tr--ghost';\nconst gridCellClass = 'igx-grid__td';\nconst rowSelectedClass = 'igx-grid__tr--selected';\nconst cellSelectedClass = 'igx-grid__td--selected';\nconst cellActiveClass = 'igx-grid__td--active';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowDrag]',\n    standalone: true\n})\nexport class IgxRowDragDirective extends IgxDragDirective implements OnDestroy {\n\n    @Input('igxRowDrag')\n    public override set data(value: any) {\n        this._data = value;\n    }\n\n    public override get data(): any {\n        return this._data.grid.createRow(this._data.index, this._data.data);\n    }\n\n    private subscription$: Subscription;\n    private _rowDragStarted = false;\n\n    private get row(): RowType {\n        return this._data;\n    }\n\n    public override onPointerDown(event) {\n        event.preventDefault();\n        this._rowDragStarted = false;\n        this._removeOnDestroy = false;\n        super.onPointerDown(event);\n    }\n\n    public override onPointerMove(event) {\n        super.onPointerMove(event);\n        if (this._dragStarted && !this._rowDragStarted) {\n            this._rowDragStarted = true;\n            const args: IRowDragStartEventArgs = {\n                dragDirective: this,\n                dragData: this.data,\n                dragElement: this.row.nativeElement,\n                cancel: false,\n                owner: this.row.grid\n            };\n\n            this.row.grid.rowDragStart.emit(args);\n            if (args.cancel) {\n                this.ghostElement.parentNode.removeChild(this.ghostElement);\n                this.ghostElement = null;\n                this._dragStarted = false;\n                this._clicked = false;\n                return;\n            }\n            this.row.grid.dragRowID = this.row.key;\n            this.row.grid.rowDragging = true;\n            this.row.grid.cdr.detectChanges();\n\n            this.subscription$ = fromEvent(this.row.grid.document.defaultView, 'keydown').subscribe((ev: KeyboardEvent) => {\n                if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {\n                    this._lastDropArea = false;\n                    this.onPointerUp(event);\n                }\n            });\n        }\n    }\n\n    public override onPointerUp(event) {\n\n        if (!this._clicked) {\n            return;\n        }\n\n        const args: IRowDragEndEventArgs = {\n            dragDirective: this,\n            dragData: this.data,\n            dragElement: this.row.nativeElement,\n            animation: false,\n            owner: this.row.grid\n        };\n        this.zone.run(() => {\n            this.row.grid.rowDragEnd.emit(args);\n        });\n\n        const dropArea = this._lastDropArea;\n        super.onPointerUp(event);\n        if (!dropArea && this.ghostElement) {\n            this.ghostElement.addEventListener('transitionend', this.transitionEndEvent, false);\n        } else {\n            this.endDragging();\n        }\n    }\n\n    protected override createGhost(pageX, pageY) {\n        this.row.grid.gridAPI.crudService.endEdit(false);\n        this.row.grid.cdr.detectChanges();\n        this.ghostContext = {\n            $implicit: this.row.data,\n            data: this.row.data,\n            grid: this.row.grid\n        };\n        super.createGhost(pageX, pageY, this.row.nativeElement);\n\n        // check if there is an expander icon and create the ghost at the corresponding position\n        if (this.isHierarchicalGrid) {\n            const row = this.row as any;\n            if (row.expander) {\n                const expanderWidth = row.expander.nativeElement.getBoundingClientRect().width;\n                this._ghostHostX += expanderWidth;\n            }\n        }\n\n        const ghost = this.ghostElement;\n\n        const gridRect = this.row.grid.nativeElement.getBoundingClientRect();\n        const rowRect = this.row.nativeElement.getBoundingClientRect();\n        ghost.style.overflow = 'hidden';\n        ghost.style.width = gridRect.width + 'px';\n        ghost.style.height = rowRect.height + 'px';\n\n        ghost.classList.add(ghostBackgroundClass);\n        ghost.classList.remove(rowSelectedClass);\n\n        const ghostCells = ghost.getElementsByClassName(gridCellClass);\n        for (const cell of ghostCells) {\n            cell.classList.remove(cellSelectedClass);\n            cell.classList.remove(cellActiveClass);\n        }\n    }\n\n    private _unsubscribe() {\n        if (this.subscription$ && !this.subscription$.closed) {\n            this.subscription$.unsubscribe();\n        }\n    }\n\n    private endDragging() {\n        this.onTransitionEnd(null);\n        this.row.grid.dragRowID = null;\n        this.row.grid.rowDragging = false;\n        this.row.grid.cdr.detectChanges();\n        this._unsubscribe();\n    }\n\n    private transitionEndEvent = () => {\n        if (this.ghostElement) {\n            this.ghostElement.removeEventListener('transitionend', this.transitionEndEvent, false);\n        }\n        this.endDragging();\n    };\n\n    private get isHierarchicalGrid() {\n        return this.row.grid.type === 'hierarchical';\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxDragIndicatorIcon]',\n    standalone: true\n})\n\nexport class IgxDragIndicatorIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxDragIndicatorIconDirective,\n        context: unknown): context is IgxGridEmptyTemplateContext {\n        return true;\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowDragGhost]',\n    standalone: true\n})\nexport class IgxRowDragGhostDirective {\n    constructor(public templateRef: TemplateRef<IgxGridRowDragGhostContext>) { }\n    public static ngTemplateContextGuard(_directive: IgxRowDragGhostDirective,\n        context: unknown): context is IgxGridRowDragGhostContext {\n        return true;\n    }\n}\n\n\n","import { Directive, TemplateRef } from '@angular/core';\nimport { IgxHeadSelectorTemplateContext, IgxGroupByRowSelectorTemplateContext, IgxRowSelectorTemplateContext } from '../common/grid.interface';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxRowSelector]',\n    standalone: true\n})\nexport class IgxRowSelectorDirective {\n    constructor(public templateRef: TemplateRef<IgxRowSelectorTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxRowSelectorDirective,\n        context: unknown): context is IgxRowSelectorTemplateContext { \n        return true\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxGroupByRowSelector]',\n    standalone: true\n})\nexport class IgxGroupByRowSelectorDirective {\n    constructor(public templateRef: TemplateRef<IgxGroupByRowSelectorTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxGroupByRowSelectorDirective,\n        context: unknown): context is IgxGroupByRowSelectorTemplateContext { \n        return true\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxHeadSelector]',\n    standalone: true\n})\nexport class IgxHeadSelectorDirective {\n    constructor(public templateRef: TemplateRef<IgxHeadSelectorTemplateContext>) { }\n\n    public static ngTemplateContextGuard(_directive: IgxHeadSelectorDirective,\n        context: unknown): context is IgxHeadSelectorTemplateContext { \n        return true\n    }\n}\n","// import { IgxGroupByRowSelectorDirective, IgxHeadSelectorDirective, IgxRowSelectorDirective } from './row-selectors';\n\nexport * from './row-selectors';\n\n/* NOTE: Grid selection directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_SELECTION_DIRECTIVES = [\n//     IgxRowSelectorDirective,\n//     IgxGroupByRowSelectorDirective,\n//     IgxHeadSelectorDirective\n// ] as const;\n","import { Directive } from '@angular/core';\nimport { ConnectedPositioningStrategy } from '../services/public_api';\nimport { VerticalAlignment, PositionSettings, Point } from '../services/overlay/utilities';\nimport { IgxForOfSyncService } from '../directives/for-of/for_of.sync.service';\nimport { scaleInVerBottom, scaleInVerTop } from 'igniteui-angular/animations';\n\n\n@Directive({\n    selector: '[igxGridBody]',\n    providers: [IgxForOfSyncService],\n    standalone: true\n})\nexport class IgxGridBodyDirective {}\n\n\n/**\n * @hidden\n */\nexport interface RowEditPositionSettings extends PositionSettings {\n    container?: HTMLElement;\n}\n\n/**\n * @hidden\n */\nexport class RowEditPositionStrategy extends ConnectedPositioningStrategy {\n    public isTop = false;\n    public isTopInitialPosition = null;\n    public override settings: RowEditPositionSettings;\n    public override position(contentElement: HTMLElement, size: { width: number; height: number }, document?: Document, initialCall?: boolean,\n            target?: Point | HTMLElement): void {\n        const container = this.settings.container; // grid.tbody\n        const targetElement: HTMLElement = target as HTMLElement; // current grid.row\n\n        // Position of the overlay depends on the available space in the grid.\n        // If the bottom space is not enough then the the row overlay will show at the top of the row.\n        // Once shown, either top or bottom, then this position stays until the overlay is closed (isTopInitialPosition property),\n        // which means that when scrolling then overlay may hide, while the row is still visible (UX requirement).\n        this.isTop = this.isTopInitialPosition !== null ?\n            this.isTopInitialPosition :\n            container.getBoundingClientRect().bottom <\n                targetElement.getBoundingClientRect().bottom + contentElement.getBoundingClientRect().height;\n\n        // Set width of the row editing overlay to equal row width, otherwise it fits 100% of the grid.\n        contentElement.style.width = targetElement.clientWidth + 'px';\n        this.settings.verticalStartPoint = this.settings.verticalDirection = this.isTop ? VerticalAlignment.Top : VerticalAlignment.Bottom;\n        this.settings.openAnimation = this.isTop ? scaleInVerBottom : scaleInVerTop;\n\n        super.position(contentElement, { width: targetElement.clientWidth, height: targetElement.clientHeight },\n                    document, initialCall, targetElement);\n    }\n}\n","import { GridType } from '../common/grid.interface';\n\n/** @hidden @internal */\nexport abstract class IgxToolbarToken {\n\n    public abstract grid: GridType;\n    public abstract showProgress: boolean;\n}\n","import { Directive, ElementRef, HostListener, Inject } from '@angular/core';\nimport { GridType, IgxGridEmptyTemplateContext, IgxGridRowEditActionsTemplateContext, IgxGridRowEditTemplateContext, IgxGridRowEditTextTemplateContext, IGX_GRID_BASE } from './common/grid.interface';\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowEdit]',\n    standalone: true\n})\nexport class IgxRowEditTemplateDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowEditTemplateDirective,\n        context: unknown): context is IgxGridRowEditTemplateContext { \n        return true;\n    }\n }\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowEditText]',\n    standalone: true\n})\nexport class IgxRowEditTextDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowEditTextDirective,\n        context: unknown): context is IgxGridRowEditTextTemplateContext { \n        return true;\n    }\n }\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowAddText]',\n    standalone: true\n})\nexport class IgxRowAddTextDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowAddTextDirective,\n        context: unknown): context is IgxGridEmptyTemplateContext { \n        return true;\n    }\n }\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowEditActions]',\n    standalone: true\n})\nexport class IgxRowEditActionsDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowEditActionsDirective,\n        context: unknown): context is IgxGridRowEditActionsTemplateContext { \n        return true;\n    }\n }\n\n\n// TODO: Refactor circular ref, deps and logic\n/** @hidden @internal */\n@Directive({\n    selector: `[igxRowEditTabStop]`,\n    standalone: true\n})\nexport class IgxRowEditTabStopDirective {\n    private currentCellIndex: number;\n\n    constructor(@Inject(IGX_GRID_BASE) public grid: GridType, public element: ElementRef<HTMLElement>) {}\n\n    @HostListener('keydown.Tab', [`$event`])\n    @HostListener('keydown.Shift.Tab', [`$event`])\n    public handleTab(event: KeyboardEvent): void {\n        event.stopPropagation();\n        if ((this.grid.rowEditTabs.last === this && !event.shiftKey) ||\n            (this.grid.rowEditTabs.first === this && event.shiftKey)\n        ) {\n            this.move(event);\n        }\n    }\n\n    @HostListener('keydown.Escape', [`$event`])\n    public handleEscape(event: KeyboardEvent): void {\n        this.grid.crudService.endEdit(false, event);\n        this.grid.tbody.nativeElement.focus();\n    }\n\n    @HostListener('keydown.Enter', ['$event'])\n    public handleEnter(event: KeyboardEvent): void {\n        event.stopPropagation();\n    }\n\n    /**\n     * Moves focus to first/last editable cell in the editable row and put the cell in edit mode.\n     * If cell is out of view first scrolls to the cell\n     *\n     * @param event keyboard event containing information about whether SHIFT key was pressed\n     */\n    private move(event: KeyboardEvent) {\n        event.preventDefault();\n        this.currentCellIndex = event.shiftKey ? this.grid.lastEditableColumnIndex : this.grid.firstEditableColumnIndex;\n        this.grid.navigation.activeNode.row = this.grid.crudService.rowInEditMode.index;\n        this.grid.navigation.activeNode.column = this.currentCellIndex;\n        this.grid.navigateTo(this.grid.crudService.rowInEditMode.index, this.currentCellIndex, (obj) => {\n            obj.target.activate(event);\n            this.grid.cdr.detectChanges();\n        });\n    }\n}\n","import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef, TemplateRef, booleanAttribute } from '@angular/core';\nimport {\n    IgxSummaryOperand,\n    IgxSummaryResult\n} from './grid-summary';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport { formatCurrency, formatDate, formatNumber, formatPercent, getLocaleCurrencyCode, getLocaleCurrencySymbol, NgTemplateOutlet } from '@angular/common';\nimport { ISelectionNode } from '../common/types';\nimport { ColumnType } from '../common/grid.interface';\nimport { trackByIdentity } from '../../core/utils';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-summary-cell',\n    templateUrl: './summary-cell.component.html',\n    imports: [NgTemplateOutlet]\n})\nexport class IgxSummaryCellComponent {\n\n    @Input()\n    public summaryResults: IgxSummaryResult[];\n\n    @Input()\n    public column: ColumnType;\n\n    @Input()\n    public firstCellIndentation = 0;\n\n    @Input({ transform: booleanAttribute })\n    public hasSummary = false;\n\n    @Input()\n    public summaryFormatter: (summaryResult: IgxSummaryResult, summaryOperand: IgxSummaryOperand) => any;\n\n    @Input()\n    public summaryTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @Input()\n    @HostBinding('class.igx-grid-summary--active')\n    public active: boolean;\n\n    @Input()\n    @HostBinding('attr.data-rowIndex')\n    public rowIndex: number;\n\n    constructor(private element: ElementRef) {\n    }\n\n    @HostBinding('attr.data-visibleIndex')\n    public get visibleColumnIndex(): number {\n        return this.column.visibleIndex;\n    }\n\n    @HostBinding('attr.id')\n    public get attrCellID() {\n        return `${this.grid.id}_${this.rowIndex}_${this.visibleColumnIndex}`;\n    }\n\n    @HostListener('pointerdown')\n    public activate() {\n        const currNode = this.grid.navigation.activeNode;\n        if (currNode && this.rowIndex === currNode.row && this.visibleColumnIndex === currNode.column) {\n            return;\n        }\n\n        this.grid.navigation.setActiveNode({ row: this.rowIndex, column: this.visibleColumnIndex }, 'summaryCell');\n        this.grid.cdr.detectChanges();\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.rowIndex,\n            column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,\n            isSummaryRow: true\n        };\n    }\n\n    public get width() {\n        return this.column.getCellWidth();\n    }\n\n    public get nativeElement(): any {\n        return this.element.nativeElement;\n    }\n\n    public get columnDatatype(): GridColumnDataType {\n        return this.column.dataType;\n    }\n\n    public get itemHeight() {\n        return this.column.grid.defaultSummaryHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    public get grid() {\n        return (this.column.grid as any);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currencyCode(): string {\n        return this.column.pipeArgs.currencyCode ?\n            this.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currencySymbol(): string {\n        return this.column.pipeArgs.display ?\n            this.column.pipeArgs.display : getLocaleCurrencySymbol(this.grid.locale);\n    }\n\n    /** cached single summary res after filter resets collection */\n    protected trackSummaryResult = trackByIdentity;\n\n    public translateSummary(summary: IgxSummaryResult): string {\n        return this.grid.resourceStrings[`igx_grid_summary_${summary.key}`] || summary.label;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public formatSummaryResult(summary: IgxSummaryResult): string {\n        if (summary.summaryResult === undefined || summary.summaryResult === null || summary.summaryResult === '') {\n            return '';\n        }\n\n        if (this.summaryFormatter) {\n            return this.summaryFormatter(summary, this.column.summaries);\n        }\n\n        const args = this.column.pipeArgs;\n        const locale = this.grid.locale;\n\n        if (summary.key === 'count') {\n            return formatNumber(summary.summaryResult, locale)\n        }\n\n        if (summary.defaultFormatting) {\n            switch (this.column.dataType) {\n                case GridColumnDataType.Number:\n                    return formatNumber(summary.summaryResult, locale, args.digitsInfo);\n                case GridColumnDataType.Date:\n                case GridColumnDataType.DateTime:\n                case GridColumnDataType.Time:\n                    return formatDate(summary.summaryResult, args.format, locale, args.timezone);\n                case GridColumnDataType.Currency:\n                    return formatCurrency(summary.summaryResult, locale, this.currencySymbol, this.currencyCode, args.digitsInfo);\n                case GridColumnDataType.Percent:\n                    return formatPercent(summary.summaryResult, locale, args.digitsInfo);\n            }\n        }\n        return summary.summaryResult;\n    }\n}\n","@if (hasSummary) {\n    <ng-container *ngTemplateOutlet=\"summaryTemplate ? summaryTemplate : defaultSummary; context: { $implicit: summaryResults }\">\n    </ng-container>\n}\n<ng-template #defaultSummary>\n    @for (summary of summaryResults; track trackSummaryResult(summary)) {\n        <div class=\"igx-grid-summary__item\" [style.height.px]=\"itemHeight\">\n            <span class=\"igx-grid-summary__label\" [title]=\"summary.label\">{{ translateSummary(summary) }}</span>\n            <span class=\"igx-grid-summary__result\" [title]=\"formatSummaryResult(summary)\">\n                {{ formatSummaryResult(summary) }}\n            </span>\n        </div>\n    }\n</ng-template>\n","import {\n    Component,\n    Input,\n    ViewChildren,\n    QueryList,\n    HostBinding,\n    ViewChild,\n    ElementRef,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    DoCheck,\n    Inject\n} from '@angular/core';\nimport { IgxSummaryResult } from './grid-summary';\nimport { IgxSummaryCellComponent } from './summary-cell.component';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxForOfSyncService } from '../../directives/for-of/for_of.sync.service';\nimport { ColumnType, GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxGridNotGroupedPipe } from '../common/pipes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { trackByIdentity } from '../../core/utils';\n\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-summary-row',\n    templateUrl: './summary-row.component.html',\n    providers: [IgxForOfSyncService],\n    imports: [NgTemplateOutlet, IgxGridForOfDirective, IgxSummaryCellComponent, IgxGridNotGroupedPipe]\n})\nexport class IgxSummaryRowComponent implements DoCheck  {\n\n    @Input()\n    public summaries: Map<string, IgxSummaryResult[]>;\n\n    @Input()\n    public gridID;\n\n    @Input()\n    public index: number;\n\n    @Input()\n    public firstCellIndentation = -1;\n\n    @HostBinding('attr.data-rowIndex')\n    public get dataRowIndex() {\n        return this.index;\n    }\n\n    public get minHeight() {\n        return this.grid.summaryRowHeight - 1;\n    }\n\n    @ViewChildren(IgxSummaryCellComponent, { read: IgxSummaryCellComponent })\n    public _summaryCells: QueryList<IgxSummaryCellComponent>;\n\n    public get summaryCells(): QueryList<IgxSummaryCellComponent> {\n        const res = new QueryList<IgxSummaryCellComponent>();\n        if (!this._summaryCells) {\n            return res;\n        }\n        const cList = this._summaryCells.filter(c => c.nativeElement.isConnected);\n        res.reset(cList);\n        return res;\n    }\n    public set summaryCells(cells) { }\n\n    /**\n     * @hidden\n     */\n    @ViewChild('igxDirRef', { read: IgxGridForOfDirective })\n    public virtDirRow: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n\n    constructor(@Inject(IGX_GRID_BASE) public grid: GridType,\n                public element: ElementRef<HTMLElement>,\n                public cdr: ChangeDetectorRef) {}\n\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    public getColumnSummaries(columnName: string) {\n        if (!this.summaries.get(columnName)) {\n            return [];\n        }\n        return this.summaries.get(columnName);\n\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isCellActive(visibleColumnIndex) {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === this.index && node.column === visibleColumnIndex : false;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnedColumns(): ColumnType[] {\n        return this.grid.pinnedColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get unpinnedColumns(): ColumnType[] {\n        return this.grid.unpinnedColumns;\n    }\n\n    public getContext(row) {\n        return {\n            $implicit: row\n        };\n    }\n\n    /** state persistence switching all pinned columns resets collection */\n    protected trackPinnedColumn = trackByIdentity;\n}\n","@if (summaries.size) {\n    @if (grid.summariesMargin) {\n        <div\n            class=\"igx-grid__summaries-patch\"\n            [style.min-width.px]=\"grid.summariesMargin\"\n            [style.flex-basis.px]=\"grid.summariesMargin\"\n            (pointerdown)=\"$event.preventDefault()\"\n        ></div>\n    }\n    @if (pinnedColumns.length > 0 && grid.isPinningToStart) {\n        <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n    }\n    <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForTrackBy]=\"grid.trackColumnChanges\" [igxForSizePropName]='\"calcPixelWidth\"' #igxDirRef>\n        <igx-grid-summary-cell\n            class=\"igx-grid-summary igx-grid-summary--fw\"\n            role=\"cell\"\n            [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n            [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n            [column]=\"col\"\n            [rowIndex]=\"index\"\n            [firstCellIndentation]=\"firstCellIndentation\"\n            [summaryResults]=\"getColumnSummaries(col.field)\"\n            [summaryTemplate]=\"col.summaryTemplate\"\n            [hasSummary]=\"col.hasSummary\"\n            [summaryFormatter]=\"col.summaryFormatter\"\n            [active]=\"isCellActive(col.visibleIndex)\"\n            [style.max-height.px]=\"minHeight\"\n            [style.min-height.px]=\"minHeight\"\n            [style.min-width]=\"col.resolvedWidth\"\n            [style.max-width]=\"col.resolvedWidth\"\n            [style.flex-basis]=\"col.resolvedWidth\">\n        </igx-grid-summary-cell>\n    </ng-template>\n    @if (pinnedColumns.length > 0 && !grid.isPinningToStart) {\n        <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n    }\n}\n\n<ng-template #summaryCellTemplate let-col>\n    @for (col of pinnedColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n        <igx-grid-summary-cell\n            role=\"cell\"\n            class=\"igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned\"\n            [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n            [class.igx-grid-summary--pinned-first]=\"col.isFirstPinned\"\n            [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n            [column]=\"col\"\n            [firstCellIndentation]=\"firstCellIndentation\"\n            [rowIndex]=\"index\"\n            [summaryResults]=\"getColumnSummaries(col.field)\"\n            [summaryTemplate]=\"col.summaryTemplate\"\n            [hasSummary]=\"col.hasSummary\"\n            [active]=\"isCellActive(col.visibleIndex)\"\n            [style.max-height.px]=\"minHeight\"\n            [style.min-height.px]=\"minHeight\"\n            [style.min-width]=\"col.resolvedWidth\"\n            [style.max-width]=\"col.resolvedWidth\"\n            [style.flex-basis]=\"col.resolvedWidth\"\n            [style.left]=\"col.rightPinnedOffset\">\n        </igx-grid-summary-cell>\n    }\n</ng-template>\n","import {\n    Directive,\n    ElementRef,\n    Inject,\n    Input,\n    NgZone,\n    Output,\n    OnInit,\n    OnDestroy,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Subject, fromEvent, animationFrameScheduler, interval } from 'rxjs';\nimport { map, switchMap, takeUntil, throttle } from 'rxjs/operators';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxResizer]',\n    standalone: true\n})\nexport class IgxColumnResizerDirective implements OnInit, OnDestroy {\n\n    @Input()\n    public restrictHResizeMin: number = Number.MIN_SAFE_INTEGER;\n\n    @Input()\n    public restrictHResizeMax: number = Number.MAX_SAFE_INTEGER;\n\n    @Input()\n    public restrictResizerTop: number;\n\n    @Output()\n    public resizeEnd = new Subject<MouseEvent>();\n\n    @Output()\n    public resizeStart = new Subject<MouseEvent>();\n\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public resize = new Subject<any>();\n\n    private _left: number;\n    private _ratio: number = 1;\n    private _destroy = new Subject<boolean>();\n\n    public get ratio(): number {\n        return this._ratio;\n    }\n\n    constructor(\n        public element: ElementRef<HTMLElement>,\n        @Inject(DOCUMENT) public document,\n        public zone: NgZone\n    ) {\n\n        this.resizeStart.pipe(\n            takeUntil<MouseEvent>(this._destroy),\n            map((event) => event.clientX),\n            switchMap((offset) => this.resize\n                .pipe(\n                    takeUntil(this._destroy),\n                    takeUntil<MouseEvent>(this.resizeEnd),\n                    map((event) => (event.clientX - offset) / (this._ratio)),\n                ))\n        )\n            .subscribe((pos) => {\n                const left = this._left + pos;\n                const min = this._left - this.restrictHResizeMin;\n                const max = this._left + this.restrictHResizeMax;\n\n                this.left = left < min ? min : left;\n\n                if (left > max) {\n                    this.left = max;\n                }\n            });\n\n    }\n\n    public ngOnInit() {\n        this.zone.runOutsideAngular(() => {\n            fromEvent(this.document.defaultView, 'mousemove')\n                .pipe(\n                    takeUntil<MouseEvent>(this._destroy),\n                    throttle(() => interval(0, animationFrameScheduler)),\n                )\n                .subscribe((res) => this.onMousemove(res));\n\n            fromEvent(this.document.defaultView, 'mouseup')\n                .pipe(takeUntil<MouseEvent>(this._destroy))\n                .subscribe((res) => this.onMouseup(res));\n        });\n    }\n\n    public ngOnDestroy() {\n        this._destroy.next(true);\n        this._destroy.complete();\n    }\n\n    public set left(val: number) {\n        requestAnimationFrame(() => this.element.nativeElement.style.left = val + 'px');\n    }\n\n    public set top(val: number) {\n        if (this.restrictResizerTop != undefined) {\n            requestAnimationFrame(() => this.element.nativeElement.style.top = this.restrictResizerTop + 'px');\n        } else {\n            requestAnimationFrame(() => this.element.nativeElement.style.top = val + 'px');\n        }\n    }\n\n    public onMouseup(event: MouseEvent) {\n        this.resizeEnd.next(event);\n        this.resizeEnd.complete();\n    }\n\n    public onMousedown(event: MouseEvent) {\n        event.preventDefault();\n        const parent = this.element.nativeElement.parentElement.parentElement;\n        const parentRectWidth = parent.getBoundingClientRect().width;\n        const parentComputedWidth = parseFloat(window.getComputedStyle(parent).width);\n        if (Math.abs(parentRectWidth - parentComputedWidth) > 1) {\n            this._ratio = parentRectWidth / parentComputedWidth;\n        }\n        this.left = this._left = (event.clientX - parent.getBoundingClientRect().left) / this._ratio;\n        this.top = (event.target as HTMLElement).getBoundingClientRect().top - parent.getBoundingClientRect().top;\n\n        this.resizeStart.next(event);\n    }\n\n    public onMousemove(event: MouseEvent) {\n        event.preventDefault();\n        this.resize.next(event);\n    }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';\nimport { IgxColumnResizingService } from './resizing.service';\nimport { IgxColumnResizerDirective } from './resizer.directive';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-column-resizer',\n    templateUrl: './resizer.component.html',\n    imports: [IgxColumnResizerDirective]\n})\nexport class IgxGridColumnResizerComponent {\n    @Input()\n    public restrictResizerTop: number;\n\n    @ViewChild(IgxColumnResizerDirective, { static: true })\n    public resizer: IgxColumnResizerDirective;\n\n    constructor(public colResizingService: IgxColumnResizingService) { }\n}\n","<div class=\"igx-grid-th__resize-line\"\n    [style.left.px]=\"-99999\" igxResizer\n    [style.height.px]=\"colResizingService.resizerHeight\"\n    [restrictHResizeMax]=\"colResizingService.restrictResizeMax\"\n    [restrictHResizeMin]=\"colResizingService.restrictResizeMin\"\n    [restrictResizerTop]=\"restrictResizerTop\"\n    (resizeEnd)=\"colResizingService.resizeColumn($event, resizer.ratio)\">\n</div>\n","import { Directive, ElementRef, HostBinding, Input, OnDestroy, booleanAttribute } from '@angular/core';\nimport { IToggleView } from '../../core/navigation';\nimport { IPositionStrategy, OverlaySettings } from '../../services/public_api';\nimport { IgxOverlayOutletDirective, IgxToggleDirective } from '../toggle/toggle.directive';\n\n@Directive()\nexport abstract class IgxNotificationsDirective extends IgxToggleDirective\n    implements IToggleView, OnDestroy {\n    /**\n     * Sets/gets the `aria-live` attribute.\n     * If not set, `aria-live` will have value `\"polite\"`.\n     */\n    @HostBinding('attr.aria-live')\n    @Input()\n    public ariaLive = 'polite';\n\n    /**\n     * Sets/gets whether the element will be hidden after the `displayTime` is over.\n     * Default value is `true`.\n     */\n    @Input({ transform: booleanAttribute })\n    public autoHide = true;\n\n    /**\n     * Sets/gets the duration of time span (in milliseconds) which the element will be visible\n     * after it is being shown.\n     * Default value is `4000`.\n     */\n    @Input()\n    public displayTime = 4000;\n\n    /**\n     * Gets/Sets the container used for the element.\n     *\n     * @remarks\n     *  `outlet` is an instance of `IgxOverlayOutletDirective` or an `ElementRef`.\n     */\n    @Input()\n    public outlet: IgxOverlayOutletDirective | ElementRef<HTMLElement>;\n\n    /**\n     * Enables/Disables the visibility of the element.\n     * If not set, the `isVisible` attribute will have value `false`.\n     */\n    @Input({ transform: booleanAttribute })\n    public get isVisible() {\n        return !this.collapsed;\n    }\n\n    public set isVisible(value) {\n        if (value !== this.isVisible) {\n            if (value) {\n                requestAnimationFrame(() => {\n                    this.open();\n                });\n            } else {\n                this.close();\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public textMessage = '';\n\n    /**\n     * @hidden\n     */\n    public timeoutId: number;\n\n    /**\n     * @hidden\n     */\n    protected strategy: IPositionStrategy;\n\n    /**\n     * @hidden\n     */\n    public override open() {\n        clearInterval(this.timeoutId);\n\n        const overlaySettings: OverlaySettings = {\n            positionStrategy: this.strategy,\n            closeOnEscape: false,\n            closeOnOutsideClick: false,\n            modal: false,\n            outlet: this.outlet\n        };\n\n        super.open(overlaySettings);\n\n        if (this.autoHide) {\n            this.timeoutId = window.setTimeout(() => {\n                this.close();\n            }, this.displayTime);\n        }\n    }\n\n    /**\n     * Hides the element.\n     */\n    public override close() {\n        clearTimeout(this.timeoutId);\n        super.close();\n    }\n}\n","import { useAnimation } from '@angular/animations';\nimport {\n    Component,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnInit,\n    Output\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { ContainerPositionStrategy, GlobalPositionStrategy, HorizontalAlignment,\n    PositionSettings, VerticalAlignment } from '../services/public_api';\nimport { IgxNotificationsDirective } from '../directives/notification/notifications.directive';\nimport { ToggleViewEventArgs } from '../directives/toggle/toggle.directive';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\n\nlet NEXT_ID = 0;\n/**\n * **Ignite UI for Angular Snackbar** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/snackbar.html)\n *\n * The Ignite UI Snack Bar provides feedback about an operation with a single-line message, which can\n * include a link to an action such as Undo.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton (click)=\"snackbar.show()\">Send message</button>\n * <div>\n *   <igx-snackbar #snackbar>\n *      Message sent\n *   </igx-snackbar>\n * </div>\n * ```\n */\n@Component({\n    selector: 'igx-snackbar',\n    templateUrl: 'snackbar.component.html',\n    imports: [IgxButtonDirective]\n})\nexport class IgxSnackbarComponent extends IgxNotificationsDirective\n    implements OnInit {\n    /**\n     * Sets/gets the `id` of the snackbar.\n     * If not set, the `id` of the first snackbar component  will be `\"igx-snackbar-0\"`;\n     * ```html\n     * <igx-snackbar id = \"Snackbar1\"></igx-snackbar>\n     * ```\n     * ```typescript\n     * let snackbarId = this.snackbar.id;\n     * ```\n     *\n     * @memberof IgxSnackbarComponent\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public override id = `igx-snackbar-${NEXT_ID++}`;\n\n    /**\n     * The default css class applied to the component.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-snackbar')\n    public cssClass = 'igx-snackbar';\n\n    /**\n     * Sets/gets the `actionText` attribute.\n     * ```html\n     * <igx-snackbar [actionText] = \"'Action Text'\"></igx-snackbar>\n     * ```\n     */\n    @Input() public actionText?: string;\n\n    /**\n     * An event that will be emitted when the action button is clicked.\n     * Provides reference to the `IgxSnackbarComponent` as an argument.\n     * ```html\n     * <igx-snackbar (clicked)=\"clickedHandler($event)\"></igx-snackbar>\n     * ```\n     */\n    @Output()\n    public clicked = new EventEmitter<IgxSnackbarComponent>();\n\n    /**\n     * An event that will be emitted when the snackbar animation starts.\n     * Provides reference to the `ToggleViewEventArgs` interface as an argument.\n     * ```html\n     * <igx-snackbar (animationStarted) = \"animationStarted($event)\"></igx-snackbar>\n     * ```\n     */\n    @Output() public animationStarted = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * An event that will be emitted when the snackbar animation ends.\n     * Provides reference to the `ToggleViewEventArgs` interface as an argument.\n     * ```html\n     * <igx-snackbar (animationDone) = \"animationDone($event)\"></igx-snackbar>\n     * ```\n     */\n    @Output() public animationDone = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Get the position and animation settings used by the snackbar.\n     * ```typescript\n     * @ViewChild('snackbar', { static: true }) public snackbar: IgxSnackbarComponent;\n     * let currentPosition: PositionSettings = this.snackbar.positionSettings\n     * ```\n     */\n    @Input()\n    public get positionSettings(): PositionSettings {\n        return this._positionSettings;\n    }\n\n    /**\n     * Set the position and animation settings used by the snackbar.\n     * ```html\n     * <igx-snackbar [positionSettings]=\"newPositionSettings\"></igx-snackbar>\n     * ```\n     * ```typescript\n     * import { slideInTop, slideOutBottom } from 'igniteui-angular';\n     * ...\n     * @ViewChild('snackbar', { static: true }) public snackbar: IgxSnackbarComponent;\n     *  public newPositionSettings: PositionSettings = {\n     *      openAnimation: useAnimation(slideInTop, { params: { duration: '1000ms', fromPosition: 'translateY(100%)'}}),\n     *      closeAnimation: useAnimation(slideOutBottom, { params: { duration: '1000ms', fromPosition: 'translateY(0)'}}),\n     *      horizontalDirection: HorizontalAlignment.Left,\n     *      verticalDirection: VerticalAlignment.Middle,\n     *      horizontalStartPoint: HorizontalAlignment.Left,\n     *      verticalStartPoint: VerticalAlignment.Middle,\n     *      minSize: { height: 100, width: 100 }\n     *  };\n     * this.snackbar.positionSettings = this.newPositionSettings;\n     * ```\n     */\n    public set positionSettings(settings: PositionSettings) {\n        this._positionSettings = settings;\n    }\n\n    private _positionSettings: PositionSettings = {\n        horizontalDirection: HorizontalAlignment.Center,\n        verticalDirection: VerticalAlignment.Bottom,\n        openAnimation: useAnimation(fadeIn, { params: { duration: '.35s', easing: 'cubic-bezier(0.0, 0.0, 0.2, 1)',\n            fromPosition: 'translateY(100%)', toPosition: 'translateY(0)'} }),\n        closeAnimation: useAnimation(fadeOut, {  params: { duration: '.2s', easing: 'cubic-bezier(0.4, 0.0, 1, 1)',\n            fromPosition: 'translateY(0)', toPosition: 'translateY(100%)'} }),\n    };\n\n    /**\n     * Shows the snackbar and hides it after the `displayTime` is over if `autoHide` is set to `true`.\n     * ```typescript\n     * this.snackbar.open();\n     * ```\n     */\n    public override open(message?: string) {\n        if (message !== undefined) {\n            this.textMessage = message;\n        }\n\n        this.strategy = this.outlet ? new ContainerPositionStrategy(this.positionSettings)\n            : new GlobalPositionStrategy(this.positionSettings);\n        super.open();\n    }\n\n    /**\n     * Opens or closes the snackbar, depending on its current state.\n     *\n     * ```typescript\n     * this.snackbar.toggle();\n     * ```\n     */\n     public override toggle() {\n        if (this.collapsed || this.isClosing) {\n            this.open();\n        } else {\n            this.close();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public triggerAction(): void {\n        this.clicked.emit(this);\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        this.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            const openedEventArgs: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n            this.animationStarted.emit(openedEventArgs);\n        });\n\n        this.closed.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            const closedEventArgs: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n            this.animationDone.emit(closedEventArgs);\n        });\n    }\n}\n","<div class=\"igx-snackbar__message\">\n    {{ textMessage }}\n    <ng-content></ng-content>\n</div>\n<div #customButton class=\"igx-snackbar__button\">\n    <ng-content select=\"[igxButton]\"></ng-content>\n</div>\n@if (!customButton.children.length && actionText) {\n    <button igxButton (click)=\"triggerAction()\">\n        {{ actionText }}\n    </button>\n}\n","import { EventEmitter } from '@angular/core';\n\n/** @hidden @internal */\nexport abstract class IgxPaginatorToken {\n    public abstract page: number;\n    public abstract perPage: number;\n    public abstract totalRecords: number;\n\n    public abstract pageChange: EventEmitter<number>;\n\n    public abstract paginate(val: number): void\n}\n","import {\n    Component,\n    ElementRef,\n    Input,\n} from '@angular/core';\nimport { IChipsAreaReorderEventArgs } from '../../chips/public_api';\nimport { PlatformUtil } from '../../core/utils';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { FlatGridType } from '../common/grid.interface';\nimport { IgxGroupByAreaDirective, IgxGroupByMetaPipe } from './group-by-area.directive';\nimport { IgxDropDirective } from '../../directives/drag-drop/drag-drop.directive';\nimport { IgxGroupAreaDropDirective } from '../grid.directives';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxChipComponent } from '../../chips/chip.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxChipsAreaComponent } from '../../chips/chips-area.component';\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\n@Component({\n    selector: 'igx-grid-group-by-area',\n    templateUrl: 'group-by-area.component.html',\n    providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxGridGroupByAreaComponent }],\n    imports: [IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe]\n})\nexport class IgxGridGroupByAreaComponent extends IgxGroupByAreaDirective {\n    @Input()\n    public sortingExpressions: ISortingExpression[] = [];\n\n    /** The parent grid containing the component. */\n    @Input()\n    public override grid: FlatGridType;\n\n    constructor(ref: ElementRef<HTMLElement>, platform: PlatformUtil) {\n        super(ref, platform);\n     }\n\n    public handleReorder(event: IChipsAreaReorderEventArgs) {\n        const { chipsArray, originalEvent } = event;\n        const newExpressions = this.getReorderedExpressions(chipsArray);\n\n        this.grid.groupingExpansionState = [];\n        this.expressions = newExpressions;\n\n        // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n        if (originalEvent instanceof KeyboardEvent) {\n            this.grid.groupingExpressions = newExpressions;\n        }\n    }\n\n    public handleMoveEnd() {\n        this.grid.groupingExpressions = this.expressions;\n    }\n\n    public groupBy(expression: IGroupingExpression) {\n        this.grid.groupBy(expression);\n    }\n\n    public clearGrouping(name: string) {\n        this.grid.clearGrouping(name);\n    }\n}\n\n","<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n    @for (expression of chipExpressions; track expression.fieldName; let last = $last) {\n        <igx-chip\n            [id]=\"expression.fieldName\"\n            [title]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title\"\n            [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n            (remove)=\"clearGrouping($event.owner.id)\"\n            (chipClick)=\"handleClick(expression.fieldName)\"\n        >\n            <span>{{ (expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title }}</span>\n            <igx-icon\n                family=\"default\"\n                [name]=\"expression.dir === 1 ? 'sort_asc' : 'sort_desc'\"\n                igxSuffix>\n            </igx-icon>\n        </igx-chip>\n\n        <span class=\"igx-grid-grouparea__connector\">\n            <igx-icon\n                family=\"default\"\n                name=\"arrow_forward\"\n                [hidden]=\"(last && !dropAreaVisible)\">\n            </igx-icon>\n        </span>\n    }\n    <div igxGroupAreaDrop\n        class=\"igx-drop-area\"\n        [attr.gridId]=\"grid.id\"\n        [hidden]=\"!dropAreaVisible\"\n        (igxDrop)=\"onDragDrop($event)\"\n    >\n        <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n    </div>\n</igx-chips-area>\n\n<ng-template #default>\n    <igx-icon\n        family=\"default\"\n        name=\"group_work\"\n        class=\"igx-drop-area__icon\">\n    </igx-icon>\n    <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n","import { InjectionToken } from '@angular/core';\n\n/* tsPlainInterface */\n/* marshalByValue */\n/**\n * Represents a range selection between certain rows and columns of the grid.\n * Range selection can be made either through drag selection or through keyboard selection.\n */\nexport interface GridSelectionRange {\n    /** The index of the starting row of the selection range. */\n    rowStart: number;\n     /** The index of the ending row of the selection range. */\n    rowEnd: number;\n    /* blazorAlternateType: double */\n    /**\n     * The identifier or index of the starting column of the selection range.\n     * It can be either a string representing the column's field name or a numeric index.\n     */\n    columnStart: string | number;\n    /* blazorAlternateType: double */\n    /**\n     * The identifier or index of the ending column of the selection range.\n     * It can be either a string representing the column's field name or a numeric index.\n     */\n    columnEnd: string | number;\n}\n\n/**\n * Represents a single selected cell or node in a grid.\n */\nexport interface ISelectionNode {\n    /**\n     * The index of the selected row.\n     */\n    row: number;\n    /**\n     * The index of the selected column.\n     */\n    column: number;\n    /**\n     * (Optional)\n     * Additional layout information for multi-row selection nodes.\n     */\n    layout?: IMultiRowLayoutNode;\n    /**\n     * (Optional)\n     * Indicates if the selected node is a summary row.\n     * This property is true if the selected row is a summary row; otherwise, it is false.\n     */\n    isSummaryRow?: boolean;\n}\n\nexport interface IMultiRowLayoutNode {\n    rowStart: number;\n    colStart: number;\n    rowEnd: number;\n    colEnd: number;\n    columnVisibleIndex: number;\n}\n\n/**\n * Represents the state of the keyboard when selecting.\n */\nexport interface ISelectionKeyboardState {\n    /** The selected node in the grid, if any. Can be null if no node is selected. */\n    node: null | ISelectionNode;\n    /** Indicates whether the Shift key is currently pressed during the selection. */\n    shift: boolean;\n    /** The range of the selected cells in the grid. Can be null when resetting the selection. */\n    range: GridSelectionRange;\n    /** Indicates whether the selection is currently active (being performed). `False` when resetting the selection.  */\n    active: boolean;\n}\n\n/**\n * Represents the state of the grid selection using pointer interactions (mouse).\n * Extends ISelectionKeyboardState to include pointer-specific properties.\n */\nexport interface ISelectionPointerState extends ISelectionKeyboardState {\n    /** Indicates whether the Ctrl key is currently pressed during the selection. */\n    ctrl: boolean;\n    /** Indicates whether the primary pointer button is pressed during the selection (clicked). */\n    primaryButton: boolean;\n}\n\n/**\n * Represents the state of the columns in the grid.\n */\nexport interface IColumnSelectionState {\n     /** Represents the field name of the selected column, if any. Can be null if no column is selected. */\n    field: null | string;\n    /** An array of strings representing the ranges of selected columns in the grid. */\n    range: string[];\n}\n\n/**\n * Represents the overall state of grid selection, combining both keyboard and pointer interaction states.\n * It can be either an ISelectionKeyboardState or an ISelectionPointerState.\n */\nexport type SelectionState = ISelectionKeyboardState | ISelectionPointerState;\n\n/**\n * Injection token for accessing the grid transaction object.\n * This allows injecting the grid transaction object into components or services.\n */\nexport const IgxGridTransaction = /*@__PURE__*/new InjectionToken<string>('IgxGridTransaction');\n","import { Injectable } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { resolveNestedPath } from '../../core/utils';\nimport { ColumnType, GridType, IFieldValidationState, IGridFormGroupCreatedEventArgs, IRecordValidationState, ValidationStatus } from '../common/grid.interface';\n\n@Injectable()\nexport class IgxGridValidationService {\n    /**\n     * @hidden\n     * @internal\n     */\n    public grid: GridType;\n    private _validityStates = new Map<any, FormGroup>();\n    private _valid = true;\n\n\n    /** Gets whether state is valid.\n    */\n    public get valid() : boolean {\n        return this._valid;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public create(rowId, data) {\n        let formGroup = this.getFormGroup(rowId);\n        if (!formGroup) {\n            formGroup = new FormGroup({});\n            for (const col of this.grid.columns) {\n                this.addFormControl(formGroup, data, col);\n            }\n            const args: IGridFormGroupCreatedEventArgs = {\n                formGroup,\n                owner: this.grid\n            };\n            this.grid.formGroupCreated.emit(args);\n            this.add(rowId, formGroup);\n        } else {\n            // reset to pristine.\n            for (const col of this.grid.columns) {\n                const formControl = formGroup.get(col.field);\n                if (formControl) {\n                    formControl.markAsPristine();\n                } else {\n                    this.addFormControl(formGroup, data, col);\n                }\n            }\n        }\n\n        return formGroup;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    private addFormControl(formGroup: FormGroup, data: any, column: ColumnType) {\n        const value = resolveNestedPath(data || {}, column.field);\n        const field = this.getFieldKey(column.field);\n        const control = new FormControl(value, { updateOn: this.grid.validationTrigger });\n        control.addValidators(column.validators);\n        formGroup.addControl(field, control);\n        control.setValue(value);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private getFieldKey(path: string) {\n        const parts = path?.split('.') ?? [];\n        return parts.join('_');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getFormGroup(id: any) {\n        return this._validityStates.get(id);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getFormControl(rowId: any, columnKey: string) {\n        const formControl = this.getFormGroup(rowId);\n        const field = this.getFieldKey(columnKey);\n        return formControl?.get(field);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public add(rowId: any, form: FormGroup) {\n        this._validityStates.set(rowId, form);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private getValidity(): IRecordValidationState[] {\n        const states: IRecordValidationState[] = [];\n        this._validityStates.forEach((formGroup, key) => {\n            const state: IFieldValidationState[] = [];\n            for (const col of this.grid.columns) {\n                const colKey = this.getFieldKey(col.field);\n                const control = formGroup.get(colKey);\n                if (control) {\n                    state.push({ field: colKey, status: control.status as ValidationStatus, errors: control.errors })\n                }\n            }\n            states.push({ key: key, status: formGroup.status as ValidationStatus, fields: state, errors: formGroup.errors });\n        });\n        return states;\n    }\n\n    /**\n     * Returns all invalid record states.\n     */\n    public getInvalid(): IRecordValidationState[] {\n        const validity = this.getValidity();\n        return validity.filter(x => x.status === 'INVALID');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public update(rowId: any, rowData: any) {\n        if (!rowData) return;\n        const keys = Object.keys(rowData);\n        const rowGroup = this.getFormGroup(rowId);\n        for (const key of keys) {\n            const colKey = this.getFieldKey(key);\n            const control = rowGroup?.get(colKey);\n            if (control && control.value !== rowData[key]) {\n                control.setValue(rowData[key], { emitEvent: false });\n            }\n        }\n\n        this.updateStatus();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * Update validity based on new data.\n     */\n    public updateAll(newData: any) {\n        if (!newData || this._validityStates.size === 0) return;\n        for (const rec of newData) {\n            const rowId = rec[this.grid.primaryKey] || rec;\n            if (this.getFormGroup(rowId)) {\n                const recAggregatedData = this.grid.transactions.getAggregatedValue(rowId, true) || rec;\n                this.update(rowId, recAggregatedData);\n            }\n        }\n    }\n\n    /** Marks the associated record or field as touched.\n     * @param key The id of the record that will be marked as touched.\n     * @param field Optional. The field from the record that will be marked as touched. If not provided all fields will be touched.\n    */\n    public markAsTouched(key: any, field?: string) {\n        const rowGroup = this.getFormGroup(key);\n        if (!rowGroup) return;\n        rowGroup.markAsTouched();\n        const fields = field ? [field] : this.grid.columns.map(x => x.field);\n        for (const currField of fields) {\n            const colKey = this.getFieldKey(currField);\n            rowGroup?.get(colKey)?.markAsTouched();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private updateStatus() {\n        const currentValid = this.valid;\n        this._valid = this.getInvalid().length === 0;\n        if (this.valid !== currentValid) {\n            this.grid.validationStatusChange.emit({ status: this.valid ? 'VALID' : 'INVALID', owner: this.grid });\n        }\n    }\n\n    /** Clears validation state by key or all states if none is provided.\n     * @param key Optional. The key of the record for which to clear state.\n    */\n    public clear(key?: any) {\n        if (key !== undefined) {\n            this._validityStates.delete(key);\n        } else {\n            this._validityStates.clear();\n        }\n        this.updateStatus();\n    }\n\n}\n","import { Injectable } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { IgxForOfDirective } from '../directives/for-of/for_of.directive';\nimport { GridType } from './common/grid.interface';\nimport {\n    NAVIGATION_KEYS,\n    ROW_COLLAPSE_KEYS,\n    ROW_EXPAND_KEYS,\n    SUPPORTED_KEYS,\n    HORIZONTAL_NAV_KEYS,\n    HEADER_KEYS,\n    ROW_ADD_KEYS,\n    PlatformUtil\n} from '../core/utils';\nimport { GridKeydownTargetType, GridSelectionMode, FilterMode } from './common/enums';\nimport { IActiveNodeChangeEventArgs } from './common/events';\nimport { IgxGridGroupByRowComponent } from './grid/groupby-row.component';\nimport { IMultiRowLayoutNode } from './common/types';\nimport { SortingDirection } from '../data-operations/sorting-strategy';\nexport interface ColumnGroupsCache {\n    level: number;\n    visibleIndex: number;\n}\nexport interface IActiveNode {\n    gridID?: string;\n    row: number;\n    column?: number;\n    level?: number;\n    mchCache?: ColumnGroupsCache;\n    layout?: IMultiRowLayoutNode;\n}\n\n/** @hidden */\n@Injectable()\nexport class IgxGridNavigationService {\n    public grid: GridType;\n    public _activeNode: IActiveNode = {} as IActiveNode;\n    public lastActiveNode: IActiveNode = {} as IActiveNode;\n    protected pendingNavigation = false;\n\n    public get activeNode() {\n        return this._activeNode;\n    }\n\n    public set activeNode(value: IActiveNode) {\n        this._activeNode = value;\n    }\n\n    constructor(protected platform: PlatformUtil) { }\n\n    public handleNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (NAVIGATION_KEYS.has(key)) {\n            event.stopPropagation();\n        }\n        if (this.grid.crudService.cell && NAVIGATION_KEYS.has(key)) {\n            return;\n        }\n        if (event.repeat && SUPPORTED_KEYS.has(key) || (key === 'tab' && this.grid.crudService.cell)) {\n            event.preventDefault();\n        }\n        if (event.repeat) {\n            setTimeout(() => this.dispatchEvent(event), 1);\n        } else {\n            this.dispatchEvent(event);\n        }\n    }\n\n    public dispatchEvent(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        const cellOrRowInEdit = this.grid.crudService.cell || this.grid.crudService.row;\n        if (!this.activeNode || !(SUPPORTED_KEYS.has(key) || (key === 'tab' && cellOrRowInEdit))) {\n            return;\n        }\n        const shift = event.shiftKey;\n        const ctrl = event.ctrlKey;\n        if (NAVIGATION_KEYS.has(key) && this.pendingNavigation) {\n            event.preventDefault();\n            return;\n        }\n\n        const type = this.isDataRow(this.activeNode.row) ? 'dataCell' :\n            this.isDataRow(this.activeNode.row, true) ? 'summaryCell' : 'groupRow';\n        if (this.emitKeyDown(type, this.activeNode.row, event)) {\n            return;\n        }\n        if (event.altKey) {\n            this.handleAlt(key, event);\n            return;\n        }\n        if ([' ', 'spacebar', 'space'].indexOf(key) === -1) {\n            this.grid.selectionService.keyboardStateOnKeydown(this.activeNode, shift, shift && key === 'tab');\n        }\n        const position = this.getNextPosition(this.activeNode.row, this.activeNode.column, key, shift, ctrl, event);\n        if (NAVIGATION_KEYS.has(key)) {\n            event.preventDefault();\n            this.navigateInBody(position.rowIndex, position.colIndex, (obj) => {\n                obj.target.activate(event);\n                this.grid.cdr.detectChanges();\n            });\n        }\n        this.grid.cdr.detectChanges();\n    }\n\n    public summaryNav(event: KeyboardEvent) {\n        if (this.grid.hasSummarizedColumns) {\n            this.horizontalNav(event, event.key.toLowerCase(), this.grid.dataView.length, 'summaryCell');\n        }\n    }\n\n    public headerNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (!HEADER_KEYS.has(key) || this.activeNode?.row !== -1) {\n            return;\n        }\n        event.preventDefault();\n\n        const ctrl = event.ctrlKey;\n        const shift = event.shiftKey;\n        const alt = event.altKey;\n\n        this.performHeaderKeyCombination(this.currentActiveColumn, key, shift, ctrl, alt, event);\n        if (shift || alt || (ctrl && (key.includes('down') || key.includes('down')))) {\n            return;\n        }\n        if (this.grid.hasColumnGroups) {\n            this.handleMCHeaderNav(key, ctrl);\n        } else {\n            this.horizontalNav(event, key, -1, 'headerCell');\n        }\n    }\n\n    public focusTbody(event) {\n        const gridRows = this.grid.verticalScrollContainer.totalItemCount ?? this.grid.dataView.length;\n        if (gridRows < 1) {\n            this.activeNode = null;\n            return;\n        }\n        if (!this.activeNode || !Object.keys(this.activeNode).length || this.activeNode.row < 0 || this.activeNode.row > gridRows - 1) {\n            const hasLastActiveNode = Object.keys(this.lastActiveNode).length;\n            const shouldClearSelection = hasLastActiveNode && (this.lastActiveNode.row < 0 || this.lastActiveNode.row > gridRows - 1);\n            this.setActiveNode(this.lastActiveNode.row >= 0 && this.lastActiveNode.row < gridRows ?\n                this.firstVisibleNode(this.lastActiveNode.row) : this.firstVisibleNode());\n            if (shouldClearSelection || (this.grid.cellSelection !== GridSelectionMode.multiple)) {\n                this.grid.clearCellSelection();\n                this.grid.navigateTo(this.activeNode.row, this.activeNode.column, (obj) => {\n                    obj.target?.activate(event);\n                    this.grid.cdr.detectChanges();\n                });\n            } else {\n                if (hasLastActiveNode && !this.grid.selectionService.selected(this.lastActiveNode)) {\n                    return;\n                }\n                const range = {\n                    rowStart: this.activeNode.row, rowEnd: this.activeNode.row,\n                    columnStart: this.activeNode.column, columnEnd: this.activeNode.column\n                };\n                this.grid.selectRange(range);\n                this.grid.notifyChanges();\n            }\n        }\n    }\n\n    public focusFirstCell(header = true) {\n        if ((header || this.grid.dataView.length) && this.activeNode &&\n            (this.activeNode.row === -1 || this.activeNode.row === this.grid.dataView.length ||\n                (!header && !this.grid.hasSummarizedColumns))) {\n            return;\n        }\n        const shouldScrollIntoView = this.lastActiveNode && (header && this.lastActiveNode.row !== -1) ||\n            (!header && this.lastActiveNode.row !== this.grid.dataView.length);\n        this.setActiveNode(this.firstVisibleNode(header ? -1 : this.grid.dataView.length));\n        if (shouldScrollIntoView) {\n            this.performHorizontalScrollToCell(this.activeNode.column);\n        }\n    }\n\n    public isColumnFullyVisible(columnIndex: number) {\n        if (columnIndex < 0 || this.isColumnPinned(columnIndex, this.forOfDir())) {\n            return true;\n        }\n        const index = this.getColumnUnpinnedIndex(columnIndex);\n        const width = this.forOfDir().getColumnScrollLeft(index + 1) - this.forOfDir().getColumnScrollLeft(index);\n        if (this.displayContainerWidth < width && this.displayContainerScrollLeft === this.forOfDir().getColumnScrollLeft(index)) {\n            return true;\n        }\n        return this.displayContainerWidth >= this.forOfDir().getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft &&\n            this.displayContainerScrollLeft <= this.forOfDir().getColumnScrollLeft(index);\n    }\n\n    public shouldPerformHorizontalScroll(visibleColIndex: number, rowIndex = -1) {\n        if (visibleColIndex < 0 || visibleColIndex > this.grid.visibleColumns.length - 1) {\n            return false;\n        }\n        if (rowIndex < 0 || rowIndex > this.grid.dataView.length - 1) {\n            return !this.isColumnFullyVisible(visibleColIndex);\n        }\n        const row = this.grid.dataView[rowIndex];\n        return row.expression || row.detailsData ? false : !this.isColumnFullyVisible(visibleColIndex);\n    }\n\n    public shouldPerformVerticalScroll(targetRowIndex: number, _visibleColIndex: number): boolean {\n        if (this.grid.isRecordPinnedByViewIndex(targetRowIndex)) {\n            return false;\n        }\n        const scrollRowIndex = this.grid.hasPinnedRecords && this.grid.isRowPinningToTop ?\n            targetRowIndex - this.grid.pinnedDataView.length : targetRowIndex;\n        const targetRow = this.getRowElementByIndex(targetRowIndex);\n        const rowHeight = this.grid.verticalScrollContainer.getSizeAt(scrollRowIndex);\n        const containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;\n        const endTopOffset = targetRow ? targetRow.offsetTop + rowHeight + this.containerTopOffset : containerHeight + rowHeight;\n        // this is workaround: endTopOffset - containerHeight > 5 and should be replaced with: containerHeight < endTopOffset\n        // when the page is zoomed the grid does not scroll the row completely in the view\n        return !targetRow || targetRow.offsetTop < Math.abs(this.containerTopOffset)\n            || containerHeight && endTopOffset - containerHeight > 5;\n    }\n\n    public performVerticalScrollToCell(rowIndex: number, visibleColIndex = -1, cb?: () => void) {\n        if (!this.shouldPerformVerticalScroll(rowIndex, visibleColIndex)) {\n            if (cb) {\n                cb();\n            }\n            return;\n        }\n        this.pendingNavigation = true;\n        // Only for top pinning we need to subtract pinned count because virtualization indexing doesn't count pinned rows.\n        const scrollRowIndex = this.grid.hasPinnedRecords && this.grid.isRowPinningToTop ?\n            rowIndex - this.grid.pinnedDataView.length : rowIndex;\n        this.grid.verticalScrollContainer.scrollTo(scrollRowIndex);\n        this.grid.verticalScrollContainer.chunkLoad\n            .pipe(first()).subscribe(() => {\n                this.pendingNavigation = false;\n                if (cb) {\n                    cb();\n                }\n            });\n    }\n\n    public performHorizontalScrollToCell(visibleColumnIndex: number, cb?: () => void) {\n        if (this.grid.rowList < 1 && this.grid.summariesRowList.length < 1 && this.grid.hasColumnGroups) {\n            let column = this.grid.getColumnByVisibleIndex(visibleColumnIndex);\n            while (column.parent) {\n                column = column.parent;\n            }\n            visibleColumnIndex = this.forOfDir().igxForOf.indexOf(column);\n        }\n        if (!this.shouldPerformHorizontalScroll(visibleColumnIndex)) {\n            return;\n        }\n        this.pendingNavigation = true;\n        this.grid.parentVirtDir.chunkLoad\n            .pipe(first())\n            .subscribe(() => {\n                this.pendingNavigation = false;\n                if (cb) {\n                    cb();\n                }\n            });\n        this.forOfDir().scrollTo(this.getColumnUnpinnedIndex(visibleColumnIndex));\n    }\n\n    public isDataRow(rowIndex: number, includeSummary = false) {\n        let curRow: any;\n\n        if (rowIndex < 0 || rowIndex > this.grid.dataView.length - 1) {\n            curRow = this.grid.dataView[rowIndex - this.grid.virtualizationState.startIndex];\n            if (!curRow) {\n                // if data is remote, record might not be in the view yet.\n                return this.grid.verticalScrollContainer.isRemote && rowIndex >= 0 && rowIndex <= (this.grid as any).totalItemCount - 1;\n            }\n        } else {\n            curRow = this.grid.dataView[rowIndex];\n        }\n        return curRow && !this.grid.isGroupByRecord(curRow) && !this.grid.isDetailRecord(curRow)\n            && !curRow.childGridsData && (includeSummary || !curRow.summaries);\n    }\n\n    public isGroupRow(rowIndex: number): boolean {\n        if (rowIndex < 0 || rowIndex > this.grid.dataView.length - 1) {\n            return false;\n        }\n        const curRow = this.grid.dataView[rowIndex];\n        return curRow && this.grid.isGroupByRecord(curRow);\n    }\n\n    public setActiveNode(activeNode: IActiveNode) {\n        if (!this.isActiveNodeChanged(activeNode)) {\n            return;\n        }\n\n        if (!this.activeNode) {\n            this.activeNode = activeNode;\n        }\n\n        Object.assign(this.activeNode, activeNode);\n\n        const currRow = this.grid.dataView[activeNode.row];\n        const type: GridKeydownTargetType = activeNode.row < 0 ? 'headerCell' :\n            this.isDataRow(activeNode.row) ? 'dataCell' :\n                currRow && this.grid.isGroupByRecord(currRow) ? 'groupRow' :\n                    currRow && this.grid.isDetailRecord(currRow) ? 'masterDetailRow' : 'summaryCell';\n\n        const args: IActiveNodeChangeEventArgs = {\n            row: this.activeNode.row,\n            column: this.activeNode.column,\n            level: this.activeNode.level,\n            tag: type\n        };\n\n        this.grid.activeNodeChange.emit(args);\n    }\n\n    public isActiveNodeChanged(activeNode: IActiveNode) {\n        let isChanged = false;\n        const checkInnerProp = (aciveNode: ColumnGroupsCache | IMultiRowLayoutNode, prop) => {\n            if (!aciveNode) {\n                isChanged = true;\n                return;\n            }\n\n            props = Object.getOwnPropertyNames(aciveNode);\n            for (const propName of props) {\n                if (this.activeNode[prop][propName] !== aciveNode[propName]) {\n                    isChanged = true;\n                }\n            }\n        };\n\n        if (!this.activeNode) {\n            return isChanged = true;\n        }\n\n        let props = Object.getOwnPropertyNames(activeNode);\n        for (const propName of props) {\n            if (!!this.activeNode[propName] && typeof this.activeNode[propName] === 'object') {\n                checkInnerProp(activeNode[propName], propName);\n            } else if (this.activeNode[propName] !== activeNode[propName]) {\n                isChanged = true;\n            }\n        }\n\n        return isChanged;\n    }\n\n    /** Focus the Grid section (header, body, footer) depending on the current activeNode */\n    public restoreActiveNodeFocus() {\n        if (!this.activeNode || !Object.keys(this.activeNode).length) {\n            return;\n        }\n\n        if (this.activeNode.row >= 0 && this.activeNode.row < this.grid.dataView.length) {\n            this.grid.tbody.nativeElement.focus();\n        }\n        if (this.activeNode.row === -1) {\n            this.grid.theadRow.nativeElement.focus();\n        }\n        if (this.activeNode.row === this.grid.dataView.length) {\n            this.grid.tfoot.nativeElement.focus();\n        }\n    }\n\n    protected getNextPosition(rowIndex: number, colIndex: number, key: string, shift: boolean, ctrl: boolean, event: KeyboardEvent) {\n        if (!this.isDataRow(rowIndex, true) && (key.indexOf('down') < 0 || key.indexOf('up') < 0) && ctrl) {\n            return { rowIndex, colIndex };\n        }\n        switch (key) {\n            case 'pagedown':\n            case 'pageup':\n                event.preventDefault();\n                if (key === 'pagedown') {\n                    this.grid.verticalScrollContainer.scrollNextPage();\n                } else {\n                    this.grid.verticalScrollContainer.scrollPrevPage();\n                }\n                const editCell = this.grid.crudService.cell;\n                this.grid.verticalScrollContainer.chunkLoad\n                    .pipe(first()).subscribe(() => {\n                        if (editCell && this.grid.rowList.map(r => r.index).indexOf(editCell.rowIndex) < 0) {\n                            this.grid.tbody.nativeElement.focus({ preventScroll: true });\n                        }\n                    });\n                break;\n            case 'tab':\n                this.handleEditing(shift, event);\n                break;\n            case 'end':\n                rowIndex = ctrl ? this.findLastDataRowIndex() : this.activeNode.row;\n                colIndex = this.lastColumnIndex;\n                break;\n            case 'home':\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : this.activeNode.row;\n                colIndex = 0;\n                break;\n            case 'arrowleft':\n            case 'left':\n                colIndex = ctrl ? 0 : this.activeNode.column - 1;\n                break;\n            case 'arrowright':\n            case 'right':\n                colIndex = ctrl ? this.lastColumnIndex : this.activeNode.column + 1;\n                break;\n            case 'arrowup':\n            case 'up':\n                if (ctrl && !this.isDataRow(rowIndex) || (this.grid.rowEditable && this.grid.crudService.rowEditingBlocked)) {\n                    break;\n                }\n                colIndex = this.activeNode.column !== undefined ? this.activeNode.column : 0;\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : this.activeNode.row - 1;\n                break;\n            case 'arrowdown':\n            case 'down':\n                if ((ctrl && !this.isDataRow(rowIndex)) || (this.grid.rowEditable && this.grid.crudService.rowEditingBlocked)) {\n                    break;\n                }\n                colIndex = this.activeNode.column !== undefined ? this.activeNode.column : 0;\n                rowIndex = ctrl ? this.findLastDataRowIndex() : this.activeNode.row + 1;\n                break;\n            case 'enter':\n            case 'f2':\n                const cell = this.grid.gridAPI.get_cell_by_visible_index(this.activeNode.row, this.activeNode.column);\n                if (!this.isDataRow(rowIndex) || !cell.editable) {\n                    break;\n                }\n                this.grid.crudService.enterEditMode(cell, event);\n                break;\n            case 'escape':\n            case 'esc':\n                if (!this.isDataRow(rowIndex)) {\n                    break;\n                }\n\n                if (this.grid.crudService.isInCompositionMode) {\n                    return;\n                }\n\n                if (this.grid.crudService.cellInEditMode || this.grid.crudService.rowInEditMode) {\n                    this.grid.crudService.endEdit(false, event);\n                    if (this.platform.isEdge) {\n                        this.grid.cdr.detectChanges();\n                    }\n                    this.grid.tbody.nativeElement.focus();\n                }\n                break;\n            case ' ':\n            case 'spacebar':\n            case 'space':\n                const rowObj = this.grid.gridAPI.get_row_by_index(this.activeNode.row);\n                if (this.grid.isRowSelectable && rowObj) {\n                    if (this.isDataRow(rowIndex)) {\n                        if (rowObj.selected) {\n                            this.grid.selectionService.deselectRow(rowObj.key, event);\n                        } else {\n                            this.grid.selectionService.selectRowById(rowObj.key, false, event);\n                        }\n                    }\n                    if (this.isGroupRow(rowIndex)) {\n                        ((rowObj as any) as IgxGridGroupByRowComponent).onGroupSelectorClick(event);\n                    }\n                }\n                break;\n            default:\n                return;\n        }\n        return { rowIndex, colIndex };\n    }\n\n    protected horizontalNav(event: KeyboardEvent, key: string, rowIndex: number, tag: GridKeydownTargetType) {\n        const ctrl = event.ctrlKey;\n        if (!HORIZONTAL_NAV_KEYS.has(event.key.toLowerCase())) {\n            return;\n        }\n        event.preventDefault();\n        this.activeNode.row = rowIndex;\n        if (rowIndex > 0) {\n            if (this.emitKeyDown('summaryCell', this.activeNode.row, event)) {\n                return;\n            }\n        }\n\n        const newActiveNode = {\n            column: this.activeNode.column,\n            mchCache: {\n                level: this.activeNode.level,\n                visibleIndex: this.activeNode.column\n            }\n        };\n\n        if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n            newActiveNode.column = ctrl || key === 'home' ? 0 : this.activeNode.column - 1;\n        }\n        if ((key.includes('right') || key === 'end') && this.activeNode.column < this.lastColumnIndex) {\n            newActiveNode.column = ctrl || key === 'end' ? this.lastColumnIndex : this.activeNode.column + 1;\n        }\n\n        if (tag === 'headerCell') {\n            const column = this.grid.getColumnByVisibleIndex(newActiveNode.column);\n            newActiveNode.mchCache.level = column.level;\n            newActiveNode.mchCache.visibleIndex = column.visibleIndex;\n        }\n\n        this.setActiveNode({ row: this.activeNode.row, column: newActiveNode.column, mchCache: newActiveNode.mchCache });\n        this.performHorizontalScrollToCell(this.activeNode.column);\n    }\n\n    public get lastColumnIndex() {\n        return Math.max(...this.grid.visibleColumns.map(col => col.visibleIndex));\n    }\n    public get displayContainerWidth() {\n        return Math.round(this.grid.parentVirtDir.dc.instance._viewContainer.element.nativeElement.offsetWidth);\n    }\n    public get displayContainerScrollLeft() {\n        return Math.ceil(this.grid.headerContainer.scrollPosition);\n    }\n    public get containerTopOffset() {\n        return parseInt(this.grid.verticalScrollContainer.dc.instance._viewContainer.element.nativeElement.style.top, 10);\n    }\n\n    protected getColumnUnpinnedIndex(visibleColumnIndex: number) {\n        const column = this.grid.unpinnedColumns.find((col) => !col.columnGroup && col.visibleIndex === visibleColumnIndex);\n        return this.grid.pinnedColumns.length ? this.grid.unpinnedColumns.filter((c) => !c.columnGroup).indexOf(column) :\n            visibleColumnIndex;\n    }\n\n    protected forOfDir(): IgxForOfDirective<any> {\n        const forOfDir = this.grid.dataRowList.length > 0 ? this.grid.dataRowList.first.virtDirRow : this.grid.summariesRowList.length ?\n            this.grid.summariesRowList.first.virtDirRow : this.grid.headerContainer;\n        return forOfDir as IgxForOfDirective<any>;\n    }\n\n    protected handleAlt(key: string, event: KeyboardEvent) {\n        event.preventDefault();\n        // todo TODO ROW\n        const row = this.grid.gridAPI.get_row_by_index(this.activeNode.row);\n\n        if (!(this.isToggleKey(key) || this.isAddKey(key)) || !row) {\n            return;\n        }\n        if (this.isAddKey(key)) {\n            if (!this.grid.rowEditable) {\n                console.warn('The grid must be in row edit mode to perform row adding!');\n                return;\n            }\n\n            if (event.shiftKey && row.treeRow !== undefined) {\n                this.grid.crudService.enterAddRowMode(row, true, event);\n            } else if (!event.shiftKey) {\n                this.grid.crudService.enterAddRowMode(row, false, event);\n            }\n        } else if (!row.expanded && ROW_EXPAND_KEYS.has(key)) {\n            if (row.key === undefined) {\n                // TODO use expanded row.expanded = !row.expanded;\n                (row as any).toggle();\n            } else {\n                this.grid.gridAPI.set_row_expansion_state(row.key, true, event);\n            }\n        } else if (row.expanded && ROW_COLLAPSE_KEYS.has(key)) {\n            if (row.key === undefined) {\n                // TODO use expanded row.expanded = !row.expanded;\n                (row as any).toggle();\n            } else {\n                this.grid.gridAPI.set_row_expansion_state(row.key, false, event);\n            }\n        }\n        this.grid.notifyChanges();\n    }\n\n    protected handleEditing(shift: boolean, event: KeyboardEvent) {\n        const next = shift ? this.grid.getPreviousCell(this.activeNode.row, this.activeNode.column, col => col.editable) :\n            this.grid.getNextCell(this.activeNode.row, this.activeNode.column, col => col.editable);\n        if (!this.grid.crudService.rowInEditMode && this.isActiveNode(next.rowIndex, next.visibleColumnIndex)) {\n            this.grid.crudService.endEdit(true, event);\n            this.grid.tbody.nativeElement.focus();\n            return;\n        }\n        event.preventDefault();\n        if ((this.grid.crudService.rowInEditMode && this.grid.rowEditTabs.length) &&\n            (this.activeNode.row !== next.rowIndex || this.isActiveNode(next.rowIndex, next.visibleColumnIndex))) {\n            const args = this.grid.crudService.updateCell(true, event);\n            if (args.cancel) {\n                return;\n            } else if (shift) {\n                this.grid.rowEditTabs.last.element.nativeElement.focus();\n            } else {\n                this.grid.rowEditTabs.first.element.nativeElement.focus();\n            }\n            return;\n        }\n\n        if (this.grid.crudService.rowInEditMode && !this.grid.rowEditTabs.length) {\n            if (shift && next.rowIndex === this.activeNode.row && next.visibleColumnIndex === this.activeNode.column) {\n                next.visibleColumnIndex = this.grid.lastEditableColumnIndex;\n            } else if (!shift && next.rowIndex === this.activeNode.row && next.visibleColumnIndex === this.activeNode.column) {\n                next.visibleColumnIndex = this.grid.firstEditableColumnIndex;\n            } else {\n                next.rowIndex = this.activeNode.row;\n            }\n        }\n\n        this.navigateInBody(next.rowIndex, next.visibleColumnIndex, (obj) => {\n            obj.target.activate(event);\n            this.grid.cdr.detectChanges();\n        });\n    }\n\n    protected navigateInBody(rowIndex, visibleColIndex, cb: (arg: any) => void = null): void {\n        if (!this.isValidPosition(rowIndex, visibleColIndex) || this.isActiveNode(rowIndex, visibleColIndex)) {\n            return;\n        }\n        this.grid.navigateTo(rowIndex, visibleColIndex, cb);\n    }\n\n\n    protected emitKeyDown(type: GridKeydownTargetType, rowIndex, event) {\n        const row = this.grid.summariesRowList.toArray().concat(this.grid.rowList.toArray()).find(r => r.index === rowIndex);\n        if (!row) {\n            return;\n        }\n\n        const target = type === 'groupRow' ? row :\n            type === 'dataCell' ? row.cells?.find(c => c.visibleColumnIndex === this.activeNode.column) :\n                row.summaryCells?.find(c => c.visibleColumnIndex === this.activeNode.column);\n        const keydownArgs = { targetType: type, event, cancel: false, target };\n        this.grid.gridKeydown.emit(keydownArgs);\n        if (keydownArgs.cancel && type === 'dataCell') {\n            this.grid.selectionService.clear();\n            this.grid.selectionService.keyboardState.active = true;\n            return keydownArgs.cancel;\n        }\n    }\n\n    protected isColumnPinned(columnIndex: number, forOfDir: IgxForOfDirective<any>): boolean {\n        const horizontalScroll = forOfDir.getScroll();\n        return (!horizontalScroll.clientWidth || this.grid.getColumnByVisibleIndex(columnIndex)?.pinned);\n    }\n\n    protected findFirstDataRowIndex(): number {\n        return this.grid.dataView.findIndex(rec => !this.grid.isGroupByRecord(rec) && !this.grid.isDetailRecord(rec) && !rec.summaries);\n    }\n\n    protected findLastDataRowIndex(): number {\n        if ((this.grid as any).totalItemCount) {\n            return (this.grid as any).totalItemCount - 1;\n        }\n        let i = this.grid.dataView.length;\n        while (i--) {\n            if (this.isDataRow(i)) {\n                return i;\n            }\n        }\n    }\n\n    protected getRowElementByIndex(index) {\n        if (this.grid.hasDetails) {\n            const detail = this.grid.nativeElement.querySelector(`[detail=\"true\"][data-rowindex=\"${index}\"]`);\n            if (detail) {\n                return detail;\n            }\n        }\n        return this.grid.rowList.toArray().concat(this.grid.summariesRowList.toArray()).find(r => r.index === index)?.nativeElement;\n    }\n\n    protected isValidPosition(rowIndex: number, colIndex: number): boolean {\n        const length = (this.grid as any).totalItemCount ?? this.grid.dataView.length;\n        if (rowIndex < 0 || colIndex < 0 || length - 1 < rowIndex || this.lastColumnIndex < colIndex) {\n            return false;\n        }\n        return this.activeNode.column !== colIndex && !this.isDataRow(rowIndex, true) ? false : true;\n    }\n    protected performHeaderKeyCombination(column, key, shift, ctrl, alt, event) {\n        let direction = this.grid.sortingExpressions.find(expr => expr.fieldName === column.field)?.dir;\n        if (ctrl && key.includes('up') && column.sortable && !column.columnGroup) {\n            direction = direction === SortingDirection.Asc ? SortingDirection.None : SortingDirection.Asc;\n            this.grid.sort({ fieldName: column.field, dir: direction, ignoreCase: false });\n            return;\n        }\n        if (ctrl && key.includes('down') && column.sortable && !column.columnGroup) {\n            direction = direction === SortingDirection.Desc ? SortingDirection.None : SortingDirection.Desc;\n            this.grid.sort({ fieldName: column.field, dir: direction, ignoreCase: false });\n            return;\n        }\n        if (shift && alt && this.isToggleKey(key) && !column.columnGroup && column.groupable) {\n            direction = direction || SortingDirection.Asc;\n            if (key.includes('right')) {\n                (this.grid as any).groupBy({\n                    fieldName: column.field,\n                    dir: direction,\n                    ignoreCase: column.sortingIgnoreCase,\n                    strategy: column.sortStrategy,\n                    groupingComparer: column.groupingComparer,\n                });\n            } else {\n                (this.grid as any).clearGrouping(column.field);\n            }\n            this.activeNode.column = key.includes('right') && (this.grid as any).hideGroupedColumns &&\n                column.visibleIndex === this.lastColumnIndex ? this.lastColumnIndex - 1 : this.activeNode.column;\n            return;\n        }\n        if (alt && (ROW_EXPAND_KEYS.has(key) || ROW_COLLAPSE_KEYS.has(key))) {\n            this.handleMCHExpandCollapse(key, column);\n            return;\n        }\n        if ([' ', 'spacebar', 'space'].indexOf(key) !== -1) {\n            this.handleColumnSelection(column, event);\n        }\n        if (alt && (key === 'l' || key === '¬') && this.grid.allowAdvancedFiltering) {\n            this.grid.openAdvancedFilteringDialog();\n        }\n        if (ctrl && shift && key === 'l' && this.grid.allowFiltering && !column.columnGroup && column.filterable) {\n            if (this.grid.filterMode === FilterMode.excelStyleFilter) {\n                const headerEl = this.grid.headerGroups.find(g => g.active).nativeElement;\n                this.grid.filteringService.toggleFilterDropdown(headerEl, column);\n            } else {\n                this.performHorizontalScrollToCell(column.visibleIndex);\n                this.grid.filteringService.filteredColumn = column;\n                this.grid.filteringService.isFilterRowVisible = true;\n            }\n        }\n    }\n\n    private firstVisibleNode(rowIndex?) {\n        const colIndex = this.lastActiveNode.column !== undefined ? this.lastActiveNode.column :\n            this.grid.visibleColumns.sort((c1, c2) => c1.visibleIndex - c2.visibleIndex)\n                .find(c => this.isColumnFullyVisible(c.visibleIndex))?.visibleIndex;\n        const column = this.grid.visibleColumns.find((col) => !col.columnLayout && col.visibleIndex === colIndex);\n        const rowInd = rowIndex ? rowIndex : this.grid.rowList.find(r => !this.shouldPerformVerticalScroll(r.index, colIndex))?.index;\n        const node = {\n            row: rowInd ?? 0,\n            column: column?.visibleIndex ?? 0, level: column?.level ?? 0,\n            mchCache: column ? { level: column.level, visibleIndex: column.visibleIndex } : {} as ColumnGroupsCache,\n            layout: column && column.columnLayoutChild ? {\n                rowStart: column.rowStart, colStart: column.colStart,\n                rowEnd: column.rowEnd, colEnd: column.colEnd, columnVisibleIndex: column.visibleIndex\n            } : null\n        };\n        return node;\n    }\n\n    private handleMCHeaderNav(key: string, ctrl: boolean) {\n        const newHeaderNode: ColumnGroupsCache = {\n            visibleIndex: this.activeNode.mchCache.visibleIndex,\n            level: this.activeNode.mchCache.level\n        };\n        const activeCol = this.currentActiveColumn;\n        const lastGroupIndex = Math.max(... this.grid.visibleColumns.\n            filter(c => c.level <= this.activeNode.level).map(col => col.visibleIndex));\n        let nextCol = activeCol;\n        if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n            const index = ctrl || key === 'home' ? 0 : this.activeNode.column - 1;\n            nextCol = this.getNextColumnMCH(index);\n            newHeaderNode.visibleIndex = nextCol.visibleIndex;\n        }\n        if ((key.includes('right') || key === 'end') && activeCol.visibleIndex < lastGroupIndex) {\n            const nextVIndex = activeCol.children ? Math.max(...activeCol.allChildren.map(c => c.visibleIndex)) + 1 :\n                activeCol.visibleIndex + 1;\n            nextCol = ctrl || key === 'end' ? this.getNextColumnMCH(this.lastColumnIndex) : this.getNextColumnMCH(nextVIndex);\n            newHeaderNode.visibleIndex = nextCol.visibleIndex;\n        }\n        if (!ctrl && key.includes('up') && this.activeNode.level > 0) {\n            nextCol = activeCol.parent;\n            newHeaderNode.level = nextCol.level;\n        }\n        if (!ctrl && key.includes('down') && activeCol.children) {\n            nextCol = activeCol.children.find(c => c.visibleIndex === newHeaderNode.visibleIndex) ||\n                activeCol.children.toArray().sort((a, b) => b.visibleIndex - a.visibleIndex)\n                    .filter(col => col.visibleIndex < newHeaderNode.visibleIndex)[0];\n            newHeaderNode.level = nextCol.level;\n        }\n\n        this.setActiveNode({\n            row: this.activeNode.row,\n            column: nextCol.visibleIndex,\n            level: nextCol.level,\n            mchCache: newHeaderNode\n        });\n        this.performHorizontalScrollToCell(nextCol.visibleIndex);\n    }\n\n    private handleMCHExpandCollapse(key, column) {\n        if (!column.children || !column.collapsible) {\n            return;\n        }\n        if (!column.expanded && ROW_EXPAND_KEYS.has(key)) {\n            column.expanded = true;\n        } else if (column.expanded && ROW_COLLAPSE_KEYS.has(key)) {\n            column.expanded = false;\n        }\n    }\n\n    private handleColumnSelection(column, event) {\n        if (!column.selectable || this.grid.columnSelection === GridSelectionMode.none) {\n            return;\n        }\n        const clearSelection = this.grid.columnSelection === GridSelectionMode.single;\n        const columnsToSelect = !column.children ? [column.field] :\n            column.allChildren.filter(c => !c.hidden && c.selectable && !c.columnGroup).map(c => c.field);\n        if (column.selected) {\n            this.grid.selectionService.deselectColumns(columnsToSelect, event);\n        } else {\n            this.grid.selectionService.selectColumns(columnsToSelect, clearSelection, false, event);\n        }\n    }\n\n    private getNextColumnMCH(visibleIndex) {\n        let col = this.grid.getColumnByVisibleIndex(visibleIndex);\n        let parent = col.parent;\n        while (parent && col.level > this.activeNode.mchCache.level) {\n            col = col.parent;\n            parent = col.parent;\n        }\n        return col;\n    }\n\n    private get currentActiveColumn() {\n        return this.grid.visibleColumns.find(c => c.visibleIndex === this.activeNode.column && c.level === this.activeNode.level);\n    }\n\n    private isActiveNode(rIndex: number, cIndex: number): boolean {\n        return this.activeNode ? this.activeNode.row === rIndex && this.activeNode.column === cIndex : false;\n    }\n\n    private isToggleKey(key: string): boolean {\n        return ROW_COLLAPSE_KEYS.has(key) || ROW_EXPAND_KEYS.has(key);\n    }\n\n    private isAddKey(key: string): boolean {\n        return ROW_ADD_KEYS.has(key);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { IgxSummaryResult } from './grid-summary';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { cloneArray, resolveNestedPath } from '../../core/utils';\nimport { GridType, FlatGridType, TreeGridType } from '../common/grid.interface';\n\n/** @hidden */\n@Injectable()\nexport class IgxGridSummaryService {\n    public grid: GridType;\n    public rootSummaryID = 'igxGridRootSummary';\n    public summaryHeight = 0;\n    public maxSummariesLength = 0;\n    public groupingExpressions = [];\n    public retriggerRootPipe = 0;\n    public deleteOperation = false;\n\n    protected summaryCacheMap: Map<string, Map<string, any[]>> = new Map<string, Map<string, IgxSummaryResult[]>>();\n\n    public recalculateSummaries() {\n        this.resetSummaryHeight();\n        this.grid.notifyChanges(true);\n    }\n\n    public clearSummaryCache(args?) {\n        if (!this.summaryCacheMap.size) {\n            return;\n        }\n        if (!args) {\n            this.summaryCacheMap.clear();\n            if (this.grid && this.grid.rootSummariesEnabled) {\n                this.retriggerRootPipe++;\n            }\n            return;\n        }\n        if (args.data) {\n            const rowID = this.grid.primaryKey ? args.data[this.grid.primaryKey] : args.data;\n            this.removeSummaries(rowID);\n        }\n        if (args.rowID !== undefined && args.rowID !== null) {\n            let columnName = args.cellID ? this.grid.columns.find(col => col.index === args.cellID.columnID).field : undefined;\n            if (columnName && this.grid.rowEditable) {\n                return;\n            }\n\n            const isGroupedColumn = (this.grid as FlatGridType).groupingExpressions &&\n                (this.grid as FlatGridType).groupingExpressions.map(expr => expr.fieldName).indexOf(columnName) !== -1;\n            if (columnName && isGroupedColumn) {\n                columnName = undefined;\n            }\n            this.removeSummaries(args.rowID, columnName);\n        }\n    }\n\n    public removeSummaries(rowID, columnName?) {\n        this.deleteSummaryCache(this.rootSummaryID, columnName);\n        if (this.summaryCacheMap.size === 1 && this.summaryCacheMap.has(this.rootSummaryID)) {\n            return;\n        }\n        if (this.grid.type === 'tree') {\n            if (this.grid.transactions.enabled && this.deleteOperation) {\n                this.deleteOperation = false;\n                // TODO: this.removeChildRowSummaries(rowID, columnName);\n                this.summaryCacheMap.clear();\n                return;\n            }\n            this.removeAllTreeGridSummaries(rowID, columnName);\n        } else if (this.grid.type === 'hierarchical') {\n            if (this.grid.transactions.enabled && this.deleteOperation) {\n                this.deleteOperation = false;\n                this.summaryCacheMap.clear();\n            }\n        } else {\n            const summaryIds = this.getSummaryID(rowID, (this.grid as FlatGridType).groupingExpressions);\n            summaryIds.forEach(id => {\n                this.deleteSummaryCache(id, columnName);\n            });\n        }\n    }\n\n    public removeSummariesCachePerColumn(columnName) {\n        this.summaryCacheMap.forEach((cache) => {\n            if (cache.get(columnName)) {\n                cache.delete(columnName);\n            }\n        });\n        if (this.grid.rootSummariesEnabled) {\n            this.retriggerRootPipe++;\n        }\n    }\n\n    public calcMaxSummaryHeight() {\n        if (this.summaryHeight) {\n            return this.summaryHeight;\n        }\n        if (!this.grid.data) {\n            return this.summaryHeight = 0;\n        }\n        let maxSummaryLength = 0;\n        this.grid.columns.filter((col) => col.hasSummary && !col.hidden).forEach((column) => {\n            const getCurrentSummary = column.summaries.operate([], [], column.field);\n            const getCurrentSummaryColumn = column.disabledSummaries.length > 0\n                ? getCurrentSummary.filter(s => !column.disabledSummaries.includes(s.key)).length\n                : getCurrentSummary.length;\n\n            if (maxSummaryLength < getCurrentSummaryColumn) {\n                maxSummaryLength = getCurrentSummaryColumn;\n            }\n        });\n        this.maxSummariesLength = maxSummaryLength;\n        this.summaryHeight = maxSummaryLength * this.grid.defaultSummaryHeight;\n        return this.summaryHeight;\n    }\n\n    public calculateSummaries(rowID, data, groupRecord) {\n        let rowSummaries = this.summaryCacheMap.get(rowID);\n        if (!rowSummaries) {\n            rowSummaries = new Map<string, IgxSummaryResult[]>();\n            this.summaryCacheMap.set(rowID, rowSummaries);\n        }\n\n        if (!this.hasSummarizedColumns || !data) {\n            return rowSummaries;\n        }\n\n        this.grid.columns.filter(col => col.hasSummary).forEach((column) => {\n            if (!rowSummaries.get(column.field)) {\n                let summaryResult = column.summaries.operate(\n                    data.map(r => resolveNestedPath(r, column.field)),\n                    data,\n                    column.field,\n                    groupRecord,\n                    this.grid.locale,\n                    column.pipeArgs\n                );\n\n                summaryResult = column.disabledSummaries.length > 0\n                    ? summaryResult.filter(s => !column.disabledSummaries.includes(s.key))\n                    : summaryResult;\n\n                rowSummaries.set(column.field, summaryResult);\n            }\n        });\n\n        return rowSummaries;\n    }\n\n    public resetSummaryHeight() {\n        this.summaryHeight = 0;\n        if (this.grid) {\n            this.grid.summaryPipeTrigger++;\n            if (this.grid.rootSummariesEnabled) {\n                this.retriggerRootPipe++;\n                Promise.resolve().then(() => this.grid.notifyChanges(true));\n            }\n        }\n    }\n\n    public updateSummaryCache(groupingArgs) {\n        if (this.summaryCacheMap.size === 0 || !this.hasSummarizedColumns) {\n            return;\n        }\n        if (this.groupingExpressions.length === 0) {\n            this.groupingExpressions = groupingArgs.expressions.map(record => record.fieldName);\n            return;\n        }\n        if (groupingArgs.length === 0) {\n            this.groupingExpressions = [];\n            this.clearSummaryCache();\n            return;\n        }\n        this.compareGroupingExpressions(this.groupingExpressions, groupingArgs);\n        this.groupingExpressions = groupingArgs.expressions.map(record => record.fieldName);\n    }\n\n    public get hasSummarizedColumns(): boolean {\n        const summarizedColumns = this.grid.columns.filter(col => col.hasSummary && !col.hidden);\n        return summarizedColumns.length > 0;\n    }\n\n    private deleteSummaryCache(id, columnName) {\n        if (this.summaryCacheMap.get(id)) {\n            const filteringApplied = columnName && this.grid.filteringExpressionsTree &&\n                this.grid.filteringExpressionsTree.filteringOperands.map((expr) => expr.fieldName).indexOf(columnName) !== -1;\n            if (columnName && this.summaryCacheMap.get(id).get(columnName) && !filteringApplied) {\n                this.summaryCacheMap.get(id).delete(columnName);\n            } else {\n                this.summaryCacheMap.delete(id);\n            }\n            if (id === this.rootSummaryID && this.grid.rootSummariesEnabled) {\n                this.retriggerRootPipe++;\n            }\n        }\n    }\n\n    private getSummaryID(rowID, groupingExpressions) {\n        if (groupingExpressions.length === 0) {\n            return [];\n        }\n        const summaryIDs = [];\n        let data = this.grid.data;\n        if (this.grid.transactions.enabled) {\n            data = DataUtil.mergeTransactions(\n                cloneArray(this.grid.data),\n                this.grid.transactions.getAggregatedChanges(true),\n                this.grid.primaryKey,\n                this.grid.dataCloneStrategy\n            );\n        }\n        const rowData = this.grid.primaryKey ? data.find(rec => rec[this.grid.primaryKey] === rowID) : rowID;\n        if (!rowData) {\n            return summaryIDs;\n        }\n        let id = '{ ';\n        groupingExpressions.forEach(expr => {\n            id += `'${expr.fieldName}': '${rowData[expr.fieldName]}'`;\n            summaryIDs.push(id.concat(' }'));\n            id += ', ';\n        });\n        return summaryIDs;\n    }\n\n    private removeAllTreeGridSummaries(rowID, columnName?) {\n        let row = (this.grid as TreeGridType).records.get(rowID);\n        if (!row) {\n            return;\n        }\n        row = row.children ? row : row.parent;\n        while (row) {\n            rowID = row.key;\n            this.deleteSummaryCache(rowID, columnName);\n            row = row.parent;\n        }\n    }\n\n    // TODO: remove only deleted rows\n    // private removeChildRowSummaries(rowID, columnName?) {\n    // }\n\n    private compareGroupingExpressions(current, groupingArgs) {\n        const newExpressions = groupingArgs.expressions.map(record => record.fieldName);\n        const removedCols = groupingArgs.ungroupedColumns;\n        if (current.length <= newExpressions.length) {\n            const newExpr = newExpressions.slice(0, current.length).toString();\n            if (current.toString() !== newExpr) {\n                this.clearSummaryCache();\n            }\n        } else {\n            const currExpr = current.slice(0, newExpressions.length).toString();\n            if (currExpr !== newExpressions.toString()) {\n                this.clearSummaryCache();\n                return;\n            }\n            removedCols.map(col => col.field).forEach(colName => {\n                this.summaryCacheMap.forEach((cache, id) => {\n                    if (id.indexOf(colName) !== -1) {\n                        this.summaryCacheMap.delete(id);\n                    }\n                });\n            });\n        }\n    }\n}\n","import { DOCUMENT, formatNumber, getLocaleNumberFormat, NumberFormatStyle } from '@angular/common';\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    ContentChild,\n    ContentChildren,\n    createComponent,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EnvironmentInjector,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Inject,\n    Injector,\n    Input,\n    IterableChangeRecord,\n    IterableDiffers,\n    LOCALE_ID,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef\n} from '@angular/core';\nimport { formatDate, resizeObservable } from '../core/utils';\nimport { IgcTrialWatermark } from 'igniteui-trial-watermark';\nimport { Subject, pipe, fromEvent, animationFrameScheduler, merge } from 'rxjs';\nimport { takeUntil, first, filter, throttleTime, map, shareReplay, takeWhile } from 'rxjs/operators';\nimport { cloneArray, mergeObjects, compareMaps, resolveNestedPath, isObject, PlatformUtil } from '../core/utils';\nimport { GridColumnDataType } from '../data-operations/data-util';\nimport { FilteringLogic } from '../data-operations/filtering-expression.interface';\nimport { IGroupByRecord } from '../data-operations/groupby-record.interface';\nimport { IForOfDataChangingEventArgs, IgxGridForOfDirective } from '../directives/for-of/for_of.directive';\nimport { IgxTextHighlightService } from '../directives/text-highlight/text-highlight.service';\nimport { ISummaryExpression } from './summaries/grid-summary';\nimport { IgxGridBodyDirective, RowEditPositionStrategy } from './grid.common';\nimport type { IgxGridToolbarComponent } from './toolbar/grid-toolbar.component';\nimport { IgxToolbarToken } from './toolbar/token';\nimport { IgxRowDirective } from './row.directive';\nimport { IgxOverlayOutletDirective, IgxToggleDirective } from '../directives/toggle/toggle.directive';\nimport {\n    FilteringExpressionsTree, IFilteringExpressionsTree, FilteringExpressionsTreeType\n} from '../data-operations/filtering-expressions-tree';\nimport { IFilteringOperation } from '../data-operations/filtering-condition';\nimport { Transaction, TransactionType, TransactionService, State } from '../services/public_api';\nimport {\n    IgxRowAddTextDirective,\n    IgxRowEditTemplateDirective,\n    IgxRowEditTabStopDirective,\n    IgxRowEditTextDirective,\n    IgxRowEditActionsDirective\n} from './grid.rowEdit.directive';\nimport { IgxGridNavigationService, IActiveNode } from './grid-navigation.service';\nimport { IgxFilteringService } from './filtering/grid-filtering.service';\nimport { IgxGridFilteringCellComponent } from './filtering/base/grid-filtering-cell.component';\nimport { WatchChanges } from './watch-changes';\nimport { IgxGridHeaderGroupComponent } from './headers/grid-header-group.component';\nimport { GridResourceStringsEN, IGridResourceStrings } from '../core/i18n/grid-resources';\nimport { IgxGridSummaryService } from './summaries/grid-summary.service';\nimport { IgxSummaryRowComponent } from './summaries/summary-row.component';\nimport { IgxGridSelectionService } from './selection/selection.service';\nimport { IgxEditRow, IgxCell, IgxAddRow } from './common/crud.service';\nimport { ICachedViewLoadedEventArgs, IgxTemplateOutletDirective } from '../directives/template-outlet/template_outlet.directive';\nimport { IgxExcelStyleLoadingValuesTemplateDirective } from './filtering/excel-style/excel-style-search.component';\nimport { IgxGridColumnResizerComponent } from './resizing/resizer.component';\nimport { CharSeparatedValueData } from '../services/csv/char-separated-value-data';\nimport { IgxColumnResizingService } from './resizing/resizing.service';\nimport { FilteringStrategy, IFilteringStrategy } from '../data-operations/filtering-strategy';\nimport {\n    IgxRowExpandedIndicatorDirective, IgxRowCollapsedIndicatorDirective, IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective, IgxExcelStyleHeaderIconDirective, IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective\n} from './grid.directives';\nimport {\n    GridKeydownTargetType,\n    GridSelectionMode,\n    GridSummaryPosition,\n    GridSummaryCalculationMode,\n    FilterMode,\n    ColumnPinningPosition,\n    RowPinningPosition,\n    GridPagingMode,\n    GridValidationTrigger,\n    Size\n} from './common/enums';\nimport {\n    IGridCellEventArgs,\n    IRowSelectionEventArgs,\n    IPinColumnEventArgs,\n    IRowDataEventArgs,\n    IColumnResizeEventArgs,\n    IColumnMovingStartEventArgs,\n    IColumnMovingEventArgs,\n    IColumnMovingEndEventArgs,\n    IGridKeydownEventArgs,\n    IRowDragStartEventArgs,\n    IRowDragEndEventArgs,\n    IGridClipboardEvent,\n    IGridToolbarExportEventArgs,\n    ISearchInfo,\n    ICellPosition,\n    IRowToggleEventArgs,\n    IColumnSelectionEventArgs,\n    IPinRowEventArgs,\n    IGridScrollEventArgs,\n    IActiveNodeChangeEventArgs,\n    ISortingEventArgs,\n    IFilteringEventArgs,\n    IColumnVisibilityChangedEventArgs,\n    IColumnVisibilityChangingEventArgs,\n    IPinColumnCancellableEventArgs,\n    IGridEditEventArgs,\n    IRowDataCancelableEventArgs,\n    IGridEditDoneEventArgs,\n    IGridRowEventArgs,\n    IGridContextMenuEventArgs,\n    IColumnsAutoGeneratedEventArgs\n} from './common/events';\nimport { IgxAdvancedFilteringDialogComponent } from './filtering/advanced-filtering/advanced-filtering-dialog.component';\nimport {\n    ColumnType,\n    GridServiceType,\n    GridType,\n    IGridFormGroupCreatedEventArgs,\n    IGridValidationStatusEventArgs,\n    IgxGridEmptyTemplateContext,\n    IgxGridHeaderTemplateContext,\n    IgxGridRowDragGhostContext,\n    IgxGridRowEditActionsTemplateContext,\n    IgxGridRowEditTemplateContext,\n    IgxGridRowEditTextTemplateContext,\n    IgxGridRowTemplateContext,\n    IgxGridTemplateContext,\n    IgxHeadSelectorTemplateContext,\n    IgxRowSelectorTemplateContext,\n    IGX_GRID_SERVICE_BASE,\n    ISizeInfo,\n    RowType,\n    IPinningConfig,\n    IClipboardOptions\n} from './common/grid.interface';\nimport { DropPosition } from './moving/moving.service';\nimport { IgxHeadSelectorDirective, IgxRowSelectorDirective } from './selection/row-selectors';\nimport { IgxColumnComponent } from './columns/column.component';\nimport { IgxColumnGroupComponent } from './columns/column-group.component';\nimport { IgxRowDragGhostDirective, IgxDragIndicatorIconDirective } from './row-drag.directive';\nimport { IgxSnackbarComponent } from '../snackbar/snackbar.component';\nimport { IgxActionStripToken } from '../action-strip/token';\nimport { IgxGridRowComponent } from './grid/grid-row.component';\nimport type { IgxPaginatorComponent } from '../paginator/paginator.component';\nimport { IgxPaginatorToken } from '../paginator/token';\nimport { IgxGridHeaderRowComponent } from './headers/grid-header-row.component';\nimport { IgxGridGroupByAreaComponent } from './grouping/grid-group-by-area.component';\nimport { IgxFlatTransactionFactory, TRANSACTION_TYPE } from '../services/transaction/transaction-factory.service';\nimport { ISortingOptions } from './columns/interfaces';\nimport { GridSelectionRange, IgxGridTransaction } from './common/types';\nimport { VerticalAlignment, HorizontalAlignment, PositionSettings, OverlaySettings } from '../services/overlay/utilities';\nimport { IgxOverlayService } from '../services/overlay/overlay';\nimport { ConnectedPositioningStrategy } from '../services/overlay/position/connected-positioning-strategy';\nimport { ContainerPositionStrategy } from '../services/overlay/position/container-position-strategy';\nimport { AbsoluteScrollStrategy } from '../services/overlay/scroll/absolute-scroll-strategy';\nimport { Action, StateUpdateEvent, TransactionEventOrigin } from '../services/transaction/transaction';\nimport { ISortingExpression } from '../data-operations/sorting-strategy';\nimport { IGridSortingStrategy } from './common/strategy';\nimport { IgxGridExcelStyleFilteringComponent } from './filtering/excel-style/excel-style-filtering.component';\nimport { IgxGridHeaderComponent } from './headers/grid-header.component';\nimport { IgxGridFilteringRowComponent } from './filtering/base/grid-filtering-row.component';\nimport { DefaultDataCloneStrategy, IDataCloneStrategy } from '../data-operations/data-clone-strategy';\nimport { IgxGridCellComponent } from './cell.component';\nimport { IgxGridValidationService } from './grid/grid-validation.service';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { isTree, recreateTreeFromFields } from '../data-operations/expressions-tree-util';\n\ninterface IMatchInfoCache {\n    row: any;\n    index: number;\n    column: string;\n    metadata: Map<string, boolean>;\n}\n\nlet FAKE_ROW_ID = -1;\nconst DEFAULT_ITEMS_PER_PAGE = 15;\nconst MINIMUM_COLUMN_WIDTH = 136;\n// By default row editing overlay outlet is inside grid body so that overlay is hidden below grid header when scrolling.\n// In cases when grid has 1-2 rows there isn't enough space in grid body and row editing overlay should be shown above header.\n// Default row editing overlay height is higher then row height that is why the case is valid also for row with 2 rows.\n// More accurate calculation is not possible, cause row editing overlay is still not shown and we don't know its height,\n// but in the same time we need to set row editing overlay outlet before opening the overlay itself.\nconst MIN_ROW_EDITING_COUNT_THRESHOLD = 2;\n\n/* blazorIndirectRender\n   blazorComponent\n   omitModule\n   wcSkipComponentSuffix */\n@Directive()\nexport abstract class IgxGridBaseDirective implements GridType,\n    OnInit, DoCheck, OnDestroy, AfterContentInit, AfterViewInit {\n\n    /**\n     * Gets/Sets the display time for the row adding snackbar notification.\n     *\n     * @remarks\n     * By default it is 6000ms.\n     */\n    @Input()\n    public snackbarDisplayTime = 6000;\n\n    /**\n     * Gets/Sets whether to auto-generate the columns.\n     *\n     * @remarks\n     * The default value is false. When set to true, it will override all columns declared through code or in markup.\n     * @example\n     * ```html\n     * <igx-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public autoGenerate = false;\n\n    /**\n     * Gets/Sets a list of property keys to be excluded from the generated column collection\n     * @remarks\n     * The collection is only used during initialization and changing it will not cause any changes in the generated columns at runtime\n     * unless the grid is destroyed and recreated. To modify the columns visible in the UI at runtime, please use their\n     * [hidden](https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/classes/IgxColumnComponent.html#hidden) property.\n     * @example\n     * ```html\n     * <igx-grid data=[Data] [autoGenerate]=\"true\" [autoGenerateExclude]=\"['ProductName', 'Count']\"></igx-grid>\n     * ```\n     * ```typescript\n     * const Data = [{ 'Id': '1', 'ProductName': 'name1', 'Description': 'description1', 'Count': 5 }]\n     * ```\n     */\n    @Input()\n    public autoGenerateExclude: string[] = [];\n\n    /**\n     * Controls whether columns moving is enabled in the grid.\n     *\n     */\n    @Input({ transform: booleanAttribute })\n    public moving = false;\n\n    /**\n     * Gets/Sets a custom template when empty.\n     *\n     * @example\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [emptyGridTemplate]=\"myTemplate\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public emptyGridTemplate: TemplateRef<void>;\n\n    /**\n     * Gets/Sets a custom template for adding row UI when grid is empty.\n     *\n     * @example\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [addRowEmptyTemplate]=\"myTemplate\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public addRowEmptyTemplate: TemplateRef<void>;\n\n    /**\n     * Gets/Sets a custom template when loading.\n     *\n     * @example\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [loadingGridTemplate]=\"myTemplate\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public loadingGridTemplate: TemplateRef<void>;\n\n    /**\n     * Get/Set IgxSummaryRow height\n     */\n    @Input()\n    public set summaryRowHeight(value: number) {\n        this._summaryRowHeight = value | 0;\n        this.summaryService.summaryHeight = value;\n        if (!this._init) {\n            this.reflow();\n        }\n    }\n\n    public get summaryRowHeight(): number {\n        if (this.hasSummarizedColumns && this.rootSummariesEnabled) {\n            return this._summaryRowHeight || this.summaryService.calcMaxSummaryHeight();\n        }\n        return 0;\n    }\n\n    /** @hidden @internal */\n    public get hasColumnsToAutosize() {\n        return this._columns.some(x => x.width === 'fit-content');\n    }\n\n    /**\n     * Gets/Sets the data clone strategy of the grid when in edit mode.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [dataCloneStrategy]=\"customCloneStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get dataCloneStrategy(): IDataCloneStrategy {\n        return this._dataCloneStrategy;\n    }\n\n    public set dataCloneStrategy(strategy: IDataCloneStrategy) {\n        if (strategy) {\n            this._dataCloneStrategy = strategy;\n            this._transactions.cloneStrategy = strategy;\n        }\n    }\n\n    /**\n     * Controls the copy behavior of the grid.\n     */\n    @Input()\n    public clipboardOptions: IClipboardOptions = {\n        /**\n         * Enables/disables the copy behavior\n         */\n        enabled: true,\n        /**\n         * Include the columns headers in the clipboard output.\n         */\n        copyHeaders: true,\n        /**\n         * Apply the columns formatters (if any) on the data in the clipboard output.\n         */\n        copyFormatters: true,\n        /**\n         * The separator used for formatting the copy output. Defaults to `\\t`.\n         */\n        separator: '\\t'\n    };\n\n    /**\n     * Emitted after filtering is performed.\n     *\n     * @remarks\n     * Returns the filtering expressions tree of the column for which filtering was performed.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"\n     *              (filteringExpressionsTreeChange)=\"filteringExprTreeChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public filteringExpressionsTreeChange = new EventEmitter<IFilteringExpressionsTree>();\n\n    /**\n     * Emitted after advanced filtering is performed.\n     *\n     * @remarks\n     * Returns the advanced filtering expressions tree.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"\n     *           (advancedFilteringExpressionsTreeChange)=\"advancedFilteringExprTreeChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public advancedFilteringExpressionsTreeChange = new EventEmitter<IFilteringExpressionsTree>();\n\n    /**\n     * Emitted when grid is scrolled horizontally/vertically.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"\n     *              (gridScroll)=\"onScroll($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public gridScroll = new EventEmitter<IGridScrollEventArgs>();\n\n    /* treatAsRef */\n    /**\n     * Sets a conditional class selector to the grid's row element.\n     * Accepts an object literal, containing key-value pairs,\n     * where the key is the name of the CSS class and the value is\n     * either a callback function that returns a boolean, or boolean, like so:\n     * ```typescript\n     * callback = (row: RowType) => { return row.selected > 6; }\n     * rowClasses = { 'className' : this.callback };\n     * ```\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [rowClasses] = \"rowClasses\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowClasses: any;\n\n    /* treatAsRef */\n    /**\n     * Sets conditional style properties on the grid row element.\n     * It accepts an object literal where the keys are\n     * the style properties and the value is an expression to be evaluated.\n     * ```typescript\n     * styles = {\n     *  background: 'yellow',\n     *  color: (row: RowType) => row.selected : 'red': 'white'\n     * }\n     * ```\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [rowStyles]=\"styles\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowStyles = null;\n\n    /**\n     * Gets/Sets the primary key.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [primaryKey]=\"'ProductID'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get primaryKey(): string {\n        return this._primaryKey;\n    }\n\n    public set primaryKey(value: string) {\n        this._primaryKey = value;\n        this.checkPrimaryKeyField();\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets/Sets a unique values strategy used by the Excel Style Filtering\n     *\n     * @remarks\n     * Provides a callback for loading unique column values on demand.\n     * If this property is provided, the unique values it generates will be used by the Excel Style Filtering.\n     * @example\n     * ```html\n     * <igx-grid [data]=\"localData\" [filterMode]=\"'excelStyleFilter'\" [uniqueColumnValuesStrategy]=\"columnValuesStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public uniqueColumnValuesStrategy: (column: ColumnType,\n        filteringExpressionsTree: IFilteringExpressionsTree,\n        done: (values: any[]) => void) => void;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxGridExcelStyleFilteringComponent, { read: IgxGridExcelStyleFilteringComponent, descendants: false })\n    public excelStyleFilteringComponents: QueryList<IgxGridExcelStyleFilteringComponent>;\n\n    /** @hidden @internal */\n    public get excelStyleFilteringComponent() {\n        return this.excelStyleFilteringComponents?.first;\n    }\n\n    /** @hidden @internal */\n    public get headerGroups() {\n        return this.theadRow.groups;\n    }\n\n    /**\n     * Emitted when a cell is clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridCell`.\n     * @example\n     * ```html\n     * <igx-grid #grid (cellClick)=\"cellClick($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public cellClick = new EventEmitter<IGridCellEventArgs>();\n\n    /**\n     * Emitted when a row is clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridRow`.\n     * @example\n     * ```html\n     * <igx-grid #grid (rowClick)=\"rowClick($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowClick = new EventEmitter<IGridRowEventArgs>();\n\n\n    /**\n     * Emitted when formGroup is created on edit of row/cell.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (formGroupCreated)=\"formGroupCreated($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public formGroupCreated = new EventEmitter<IGridFormGroupCreatedEventArgs>();\n\n    /**\n     * Emitted when grid's validation status changes.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (validationStatusChange)=\"validationStatusChange($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public validationStatusChange = new EventEmitter<IGridValidationStatusEventArgs>();\n\n    /**\n     * Emitted when a cell is selected.\n     *\n     * @remarks\n     *  Returns the `IgxGridCell`.\n     * @example\n     * ```html\n     * <igx-grid #grid (selected)=\"onCellSelect($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public selected = new EventEmitter<IGridCellEventArgs>();\n\n    /**\n     *  Emitted when `IgxGridRowComponent` is selected.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (rowSelectionChanging)=\"rowSelectionChanging($event)\" [data]=\"localData\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowSelectionChanging = new EventEmitter<IRowSelectionEventArgs>();\n\n    /**\n     *  Emitted when `IgxColumnComponent` is selected.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (columnSelectionChanging)=\"columnSelectionChanging($event)\" [data]=\"localData\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnSelectionChanging = new EventEmitter<IColumnSelectionEventArgs>();\n\n    /**\n     * Emitted before `IgxColumnComponent` is pinned.\n     *\n     * @remarks\n     * The index at which to insert the column may be changed through the `insertAtIndex` property.\n     * @example\n     * ```typescript\n     * public columnPinning(event) {\n     *     if (event.column.field === \"Name\") {\n     *       event.insertAtIndex = 0;\n     *     }\n     * }\n     * ```\n     */\n    @Output()\n    public columnPin = new EventEmitter<IPinColumnCancellableEventArgs>();\n\n    /**\n     * Emitted after `IgxColumnComponent` is pinned.\n     *\n     * @remarks\n     * The index that the column is inserted at may be changed through the `insertAtIndex` property.\n     * @example\n     * ```typescript\n     * public columnPinning(event) {\n     *     if (event.column.field === \"Name\") {\n     *       event.insertAtIndex = 0;\n     *     }\n     * }\n     * ```\n     */\n    @Output()\n    public columnPinned = new EventEmitter<IPinColumnEventArgs>();\n\n    /**\n     * Emitted when cell enters edit mode.\n     *\n     * @remarks\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEditEnter)=\"editStart($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEditEnter = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * Emitted when cell exits edit mode.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEditExit)=\"editExit($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEditExit = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when cell has been edited.\n     *\n     * @remarks\n     * Event is fired after editing is completed, when the cell is exiting edit mode.\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEdit)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEdit = new EventEmitter<IGridEditEventArgs>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted after cell has been edited and editing has been committed.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEditDone)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEditDone = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when a row enters edit mode.\n     *\n     * @remarks\n     * Emitted when [rowEditable]=\"true\".\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEditEnter)=\"editStart($event)\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEditEnter = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * Emitted when exiting edit mode for a row.\n     *\n     * @remarks\n     * Emitted when [rowEditable]=\"true\" & `endEdit(true)` is called.\n     * Emitted when changing rows during edit mode, selecting an un-editable cell in the edited row,\n     * performing paging operation, column resizing, pinning, moving or hitting `Done`\n     * button inside of the rowEditingOverlay, or hitting the `Enter` key while editing a cell.\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEdit)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEdit = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * Emitted after exiting edit mode for a row and editing has been committed.\n     *\n     * @remarks\n     * Emitted when [rowEditable]=\"true\" & `endEdit(true)` is called.\n     * Emitted when changing rows during edit mode, selecting an un-editable cell in the edited row,\n     * performing paging operation, column resizing, pinning, moving or hitting `Done`\n     * button inside of the rowEditingOverlay, or hitting the `Enter` key while editing a cell.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEditDone)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEditDone = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when row editing is canceled.\n     *\n     * @remarks\n     * Emits when [rowEditable]=\"true\" & `endEdit(false)` is called.\n     * Emitted when changing hitting `Esc` key during cell editing and when click on the `Cancel` button\n     * in the row editing overlay.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEditExit)=\"editExit($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEditExit = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when a column is initialized.\n     *\n     * @remarks\n     * Returns the column object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (columnInit)=\"initColumns($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnInit = new EventEmitter<IgxColumnComponent>();\n\n    /* blazorInclude */\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public columnsAutogenerated = new EventEmitter<IColumnsAutoGeneratedEventArgs>();\n\n    /**\n     * Emitted before sorting expressions are applied.\n     *\n     * @remarks\n     * Returns an `ISortingEventArgs` object. `sortingExpressions` key holds the sorting expressions.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (sorting)=\"sorting($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public sorting = new EventEmitter<ISortingEventArgs>();\n\n    /**\n     * Emitted after sorting is completed.\n     *\n     * @remarks\n     * Returns the sorting expression.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (sortingDone)=\"sortingDone($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public sortingDone = new EventEmitter<ISortingExpression | ISortingExpression[]>();\n\n    /**\n     * Emitted before filtering expressions are applied.\n     *\n     * @remarks\n     * Returns an `IFilteringEventArgs` object. `filteringExpressions` key holds the filtering expressions for the column.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\" (filtering)=\"filtering($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public filtering = new EventEmitter<IFilteringEventArgs>();\n\n    /**\n     * Emitted after filtering is performed through the UI.\n     *\n     * @remarks\n     * Returns the filtering expressions tree of the column for which filtering was performed.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\" (filteringDone)=\"filteringDone($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public filteringDone = new EventEmitter<IFilteringExpressionsTree>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted when a row is added.\n     *\n     * @remarks\n     * Returns the data for the new `IgxGridRowComponent` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowAdded)=\"rowAdded($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowAdded = new EventEmitter<IRowDataEventArgs>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted when a row is deleted.\n     *\n     * @remarks\n     * Returns an `IRowDataEventArgs` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowDeleted)=\"rowDeleted($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowDeleted = new EventEmitter<IRowDataEventArgs>();\n\n    /**\n     * Emmited when deleting a row.\n     *\n     * @remarks\n     * This event is cancelable.\n     * Returns an IRowDataCancellableEventArgs` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowDelete)=\"rowDelete($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowDelete = new EventEmitter<IRowDataCancelableEventArgs>();\n\n    /**\n     * Emmited just before the newly added row is commited.\n     *\n     * @remarks\n     * This event is cancelable.\n     * Returns an IRowDataCancellableEventArgs` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowAdd)=\"rowAdd($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowAdd = new EventEmitter<IRowDataCancelableEventArgs>();\n\n    /**\n     * Emitted after column is resized.\n     *\n     * @remarks\n     * Returns the `IgxColumnComponent` object's old and new width.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (columnResized)=\"resizing($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnResized = new EventEmitter<IColumnResizeEventArgs>();\n\n    /**\n     * Emitted when a cell or row is right clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridCell` object if the immediate context menu target is a cell or an `IgxGridRow` otherwise.\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (contextMenu)=\"contextMenu($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public contextMenu = new EventEmitter<IGridContextMenuEventArgs>();\n\n    /**\n     * Emitted when a cell is double clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridCell` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (doubleClick)=\"dblClick($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public doubleClick = new EventEmitter<IGridCellEventArgs>();\n\n    /**\n     * Emitted before column visibility is changed.\n     *\n     * @remarks\n     * Args: { column: any, newValue: boolean }\n     * @example\n     * ```html\n     * <igx-grid (columnVisibilityChanging)=\"visibilityChanging($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnVisibilityChanging = new EventEmitter<IColumnVisibilityChangingEventArgs>();\n\n    /**\n     * Emitted after column visibility is changed.\n     *\n     * @remarks\n     * Args: { column: IgxColumnComponent, newValue: boolean }\n     * @example\n     * ```html\n     * <igx-grid (columnVisibilityChanged)=\"visibilityChanged($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnVisibilityChanged = new EventEmitter<IColumnVisibilityChangedEventArgs>();\n\n    /**\n     * Emitted when column moving starts.\n     *\n     * @remarks\n     * Returns the moved `IgxColumnComponent` object.\n     * @example\n     * ```html\n     * <igx-grid (columnMovingStart)=\"movingStart($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnMovingStart = new EventEmitter<IColumnMovingStartEventArgs>();\n\n    /**\n     * Emitted during the column moving operation.\n     *\n     * @remarks\n     * Returns the source and target `IgxColumnComponent` objects. This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid (columnMoving)=\"moving($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnMoving = new EventEmitter<IColumnMovingEventArgs>();\n\n    /**\n     * Emitted when column moving ends.\n     *\n     * @remarks\n     * Returns the source and target `IgxColumnComponent` objects.\n     * @example\n     * ```html\n     * <igx-grid (columnMovingEnd)=\"movingEnds($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnMovingEnd = new EventEmitter<IColumnMovingEndEventArgs>();\n\n    /**\n     * Emitted when keydown is triggered over element inside grid's body.\n     *\n     * @remarks\n     * This event is fired only if the key combination is supported in the grid.\n     * Return the target type, target object and the original event. This event is cancelable.\n     * @example\n     * ```html\n     *  <igx-grid (gridKeydown)=\"customKeydown($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public gridKeydown = new EventEmitter<IGridKeydownEventArgs>();\n\n    /**\n     * Emitted when start dragging a row.\n     *\n     * @remarks\n     * Return the dragged row.\n     */\n    @Output()\n    public rowDragStart = new EventEmitter<IRowDragStartEventArgs>();\n\n    /**\n     * Emitted when dropping a row.\n     *\n     * @remarks\n     * Return the dropped row.\n     */\n    @Output()\n    public rowDragEnd = new EventEmitter<IRowDragEndEventArgs>();\n\n    /**\n     * Emitted when a copy operation is executed.\n     *\n     * @remarks\n     * Fired only if copy behavior is enabled through the [`clipboardOptions`]{@link IgxGridBaseDirective#clipboardOptions}.\n     */\n    @Output()\n    public gridCopy = new EventEmitter<IGridClipboardEvent>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public expansionStatesChange = new EventEmitter<Map<any, boolean>>();\n\n    /* blazorInclude */\n    /** @hidden @internal */\n    @Output()\n    public selectedRowsChange = new EventEmitter<any[]>();\n\n    /**\n     * Emitted when the expanded state of a row gets changed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (rowToggle)=\"rowToggle($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowToggle = new EventEmitter<IRowToggleEventArgs>();\n\n    /**\n     * Emitted when the pinned state of a row is changed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (rowPinning)=\"rowPin($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowPinning = new EventEmitter<IPinRowEventArgs>();\n\n    /**\n     * Emitted when the pinned state of a row is changed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (rowPinned)=\"rowPin($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowPinned = new EventEmitter<IPinRowEventArgs>();\n\n    /**\n     * Emmited when the active node is changed.\n     *\n     * @example\n     * ```\n     * <igx-grid [data]=\"data\" [autoGenerate]=\"true\" (activeNodeChange)=\"activeNodeChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public activeNodeChange = new EventEmitter<IActiveNodeChangeEventArgs>();\n\n    /**\n     * Emitted before sorting is performed.\n     *\n     * @remarks\n     * Returns the sorting expressions.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (sortingExpressionsChange)=\"sortingExprChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public sortingExpressionsChange = new EventEmitter<ISortingExpression[]>();\n\n\n    /**\n     * Emitted when an export process is initiated by the user.\n     *\n     * @example\n     * ```typescript\n     * toolbarExporting(event: IGridToolbarExportEventArgs){\n     *     const toolbarExporting = event;\n     * }\n     * ```\n     */\n    @Output()\n    public toolbarExporting = new EventEmitter<IGridToolbarExportEventArgs>();\n\n    /* End of toolbar related definitions */\n\n    /**\n     * Emitted when making a range selection.\n     *\n     * @remarks\n     * Range selection can be made either through drag selection or through keyboard selection.\n     */\n    @Output()\n    public rangeSelected = new EventEmitter<GridSelectionRange>();\n\n    /** Emitted after the ngAfterViewInit hook. At this point the grid exists in the DOM */\n    @Output()\n    public rendered = new EventEmitter<boolean>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public localeChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted before the grid's data view is changed because of a data operation, rebinding, etc.\n     *\n     * @example\n     * ```typescript\n     *  <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (dataChanging)='handleDataChangingEvent()'></igx-grid>\n     * ```\n     */\n    @Output()\n    public dataChanging = new EventEmitter<IForOfDataChangingEventArgs>();\n\n    /**\n     * Emitted after the grid's data view is changed because of a data operation, rebinding, etc.\n     *\n     * @example\n     * ```typescript\n     *  <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (dataChanged)='handleDataChangedEvent()'></igx-grid>\n     * ```\n     */\n    @Output()\n    public dataChanged = new EventEmitter<any>();\n\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxSnackbarComponent)\n    public addRowSnackbar: IgxSnackbarComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxGridColumnResizerComponent)\n    public resizeLine: IgxGridColumnResizerComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('loadingOverlay', { read: IgxToggleDirective, static: true })\n    public loadingOverlay: IgxToggleDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('igxLoadingOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    public loadingOutlet: IgxOverlayOutletDirective;\n\n    /* reactContentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ColumnCollection */\n    /* ngQueryListName: columnList */\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxColumnComponent, { read: IgxColumnComponent, descendants: true })\n    public columnList: QueryList<IgxColumnComponent> = new QueryList<IgxColumnComponent>();\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ActionStripCollection */\n    /* blazorCollectionItemName: ActionStrip */\n    /* ngQueryListName: actionStripComponents */\n    /** @hidden @internal */\n    @ContentChildren(IgxActionStripToken)\n    protected actionStripComponents: QueryList<IgxActionStripToken>;\n\n    /** @hidden @internal */\n    public get actionStrip() {\n        return this.actionStripComponents?.first;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxExcelStyleLoadingValuesTemplateDirective, { read: IgxExcelStyleLoadingValuesTemplateDirective, static: true })\n    public excelStyleLoadingValuesTemplateDirective: IgxExcelStyleLoadingValuesTemplateDirective;\n\n    /** @hidden @internal */\n    @ViewChild('emptyFilteredGrid', { read: TemplateRef, static: true })\n    public emptyFilteredGridTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('defaultEmptyGrid', { read: TemplateRef, static: true })\n    public emptyGridDefaultTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultLoadingGrid', { read: TemplateRef, static: true })\n    public loadingGridDefaultTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('scrollContainer', { read: IgxGridForOfDirective, static: true })\n    public parentVirtDir: IgxGridForOfDirective<any, any[]>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxHeadSelectorDirective, { read: TemplateRef, descendants: false })\n    public headSelectorsTemplates: QueryList<TemplateRef<IgxHeadSelectorTemplateContext>>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxRowSelectorDirective, { read: TemplateRef, descendants: false })\n    public rowSelectorsTemplates: QueryList<TemplateRef<IgxRowSelectorTemplateContext>>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxRowDragGhostDirective, { read: TemplateRef, descendants: false })\n    public dragGhostCustomTemplates: QueryList<TemplateRef<IgxGridRowDragGhostContext>>;\n\n\n    /**\n     * Gets the custom template, if any, used for row drag ghost.\n     */\n    @Input()\n    public get dragGhostCustomTemplate() {\n        return this._dragGhostCustomTemplate || this.dragGhostCustomTemplates?.first;\n    }\n\n    /**\n     * Sets a custom template for the row drag ghost.\n     *```html\n     * <ng-template #template igxRowDragGhost>\n     *    <igx-icon>menu</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.dragGhostCustomTemplate = this.template;\n     * ```\n     */\n    public set dragGhostCustomTemplate(template: TemplateRef<IgxGridRowDragGhostContext>) {\n        this._dragGhostCustomTemplate = template;\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('verticalScrollContainer', { read: IgxGridForOfDirective, static: true })\n    public verticalScrollContainer: IgxGridForOfDirective<any, any[]>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('verticalScrollHolder', { read: IgxGridForOfDirective, static: true })\n    public verticalScroll: IgxGridForOfDirective<any, any[]>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('scr', { read: ElementRef, static: true })\n    public scr: ElementRef;\n\n    /** @hidden @internal */\n    @ViewChild('headSelectorBaseTemplate', { read: TemplateRef, static: true })\n    public headerSelectorBaseTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('footer', { read: ElementRef })\n    public footer: ElementRef;\n\n    /** @hidden @internal */\n    public get headerContainer() {\n        return this.theadRow?.headerForOf;\n    }\n\n    /** @hidden @internal */\n    public get headerSelectorContainer() {\n        return this.theadRow?.headerSelectorContainer;\n    }\n\n    /** @hidden @internal */\n    public get headerDragContainer() {\n        return this.theadRow?.headerDragContainer;\n    }\n\n    /** @hidden @internal */\n    public get headerGroupContainer() {\n        return this.theadRow?.headerGroupContainer;\n    }\n\n    /** @hidden @internal */\n    public get filteringRow(): IgxGridFilteringRowComponent {\n        return this.theadRow?.filterRow;\n    }\n\n    /** @hidden @internal */\n    @ViewChild(IgxGridHeaderRowComponent, { static: true })\n    public theadRow: IgxGridHeaderRowComponent;\n\n    /** @hidden @internal */\n    @ViewChild(IgxGridGroupByAreaComponent)\n    public groupArea: IgxGridGroupByAreaComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('tbody', { static: true })\n    public tbody: ElementRef;\n\n    @ViewChild(IgxGridBodyDirective, { static: true, read: ElementRef })\n    protected tbodyContainer: ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('pinContainer', { read: ElementRef })\n    public pinContainer: ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('tfoot', { static: true })\n    public tfoot: ElementRef<HTMLElement>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('igxRowEditingOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    public rowEditingOutletDirective: IgxOverlayOutletDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxTemplateOutletDirective, { read: IgxTemplateOutletDirective })\n    public tmpOutlets: QueryList<any> = new QueryList<any>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('dragIndicatorIconBase', { read: TemplateRef, static: true })\n    public dragIndicatorIconBase: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditTemplateDirective, { descendants: false, read: TemplateRef })\n    public rowEditCustomDirectives: QueryList<TemplateRef<IgxGridRowEditTemplateContext>>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditTextDirective, { descendants: false, read: TemplateRef })\n    public rowEditTextDirectives: QueryList<TemplateRef<IgxGridRowEditTextTemplateContext>>;\n\n    /**\n     * Gets the row edit text template.\n     */\n    @Input()\n    public get rowEditTextTemplate(): TemplateRef<IgxGridRowEditTextTemplateContext> {\n        return this._rowEditTextTemplate || this.rowEditTextDirectives?.first;\n    }\n    /**\n     * Sets the row edit text template.\n     *```html\n     * <ng-template #template igxRowEditText let-rowChangesCount>\n     * Changes: {{rowChangesCount}}\n     * </ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowEditTextTemplate = this.template;\n     * ```\n     */\n    public set rowEditTextTemplate(template: TemplateRef<IgxGridRowEditTextTemplateContext>) {\n        this._rowEditTextTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxRowAddTextDirective, { read: TemplateRef })\n    public rowAddText: TemplateRef<IgxGridEmptyTemplateContext>;\n\n    /**\n     * Gets the row add text template.\n     */\n    @Input()\n    public get rowAddTextTemplate(): TemplateRef<IgxGridEmptyTemplateContext> {\n        return this._rowAddTextTemplate || this.rowAddText;\n    }\n    /**\n     * Sets the row add text template.\n     *```html\n     * <ng-template #template igxRowAddText>\n     * Adding Row\n     * </ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowAddTextTemplate = this.template;\n     * ```\n     */\n    public set rowAddTextTemplate(template: TemplateRef<IgxGridEmptyTemplateContext>) {\n        this._rowAddTextTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditActionsDirective, { descendants: false, read: TemplateRef })\n    public rowEditActionsDirectives: QueryList<TemplateRef<IgxGridRowEditActionsTemplateContext>>;\n\n    /**\n     * Gets the row edit actions template.\n     */\n    @Input()\n    public get rowEditActionsTemplate(): TemplateRef<IgxGridRowEditActionsTemplateContext> {\n        return this._rowEditActionsTemplate || this.rowEditActionsDirectives?.first;\n    }\n    /**\n     * Sets the row edit actions template.\n     *```html\n     * <ng-template #template igxRowEditActions let-endRowEdit>\n     *     <button type=\"button\" igxButton igxRowEditTabStop (click)=\"endRowEdit(false)\">Cancel</button>\n     *     <button type=\"button\" igxButton igxRowEditTabStop (click)=\"endRowEdit(true)\">Apply</button>\n     * </ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowEditActionsTemplate = this.template;\n     * ```\n     */\n    public set rowEditActionsTemplate(template: TemplateRef<IgxGridRowEditActionsTemplateContext>) {\n        this._rowEditActionsTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a row expand indicator.\n     */\n    @ContentChild(IgxRowExpandedIndicatorDirective, { read: TemplateRef })\n    protected rowExpandedIndicatorDirectiveTemplate: TemplateRef<IgxGridRowTemplateContext> = null;\n\n    /**\n     * Gets the row expand indicator template.\n    */\n    @Input()\n    public get rowExpandedIndicatorTemplate(): TemplateRef<IgxGridRowTemplateContext> {\n        return this._rowExpandedIndicatorTemplate || this.rowExpandedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the row expand indicator template.\n     *```html\n     *<ng-template igxRowExpandedIndicator>\n     *  <igx-icon role=\"button\">remove</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowExpandedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set rowExpandedIndicatorTemplate(template: TemplateRef<IgxGridRowTemplateContext>) {\n        this._rowExpandedIndicatorTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a row collapse indicator.\n     */\n    @ContentChild(IgxRowCollapsedIndicatorDirective, { read: TemplateRef })\n    protected rowCollapsedIndicatorDirectiveTemplate: TemplateRef<IgxGridRowTemplateContext> = null;\n\n    /**\n     * Gets the row collapse indicator template.\n    */\n    @Input()\n    public get rowCollapsedIndicatorTemplate(): TemplateRef<IgxGridRowTemplateContext> {\n        return this._rowCollapsedIndicatorTemplate || this.rowCollapsedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the row collapse indicator template.\n     *```html\n     *<ng-template igxRowCollapsedIndicator>\n     *  <igx-icon role=\"button\">add</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowCollapsedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set rowCollapsedIndicatorTemplate(template: TemplateRef<IgxGridRowTemplateContext>) {\n        this._rowCollapsedIndicatorTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a header expand indicator.\n     */\n    @ContentChild(IgxHeaderExpandedIndicatorDirective, { read: TemplateRef })\n    protected headerExpandedIndicatorDirectiveTemplate: TemplateRef<IgxGridTemplateContext> = null;\n\n    /**\n     * Gets the header expand indicator template.\n    */\n    @Input()\n    public get headerExpandedIndicatorTemplate(): TemplateRef<IgxGridTemplateContext> {\n        return this._headerExpandIndicatorTemplate || this.headerExpandedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the header expand indicator template.\n     *```html\n     *<ng-template igxHeaderExpandedIndicator>\n     *  <igx-icon role=\"button\">remove</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.headerExpandedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set headerExpandedIndicatorTemplate(template: TemplateRef<IgxGridTemplateContext>) {\n        this._headerExpandIndicatorTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a header collapse indicator.\n     */\n    @ContentChild(IgxHeaderCollapsedIndicatorDirective, { read: TemplateRef })\n    protected headerCollapsedIndicatorDirectiveTemplate: TemplateRef<IgxGridTemplateContext> = null;\n\n    /**\n     * Gets the row collapse indicator template.\n    */\n    @Input()\n    public get headerCollapsedIndicatorTemplate(): TemplateRef<IgxGridTemplateContext> {\n        return this._headerCollapseIndicatorTemplate || this.headerCollapsedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the row collapse indicator template.\n     *```html\n     *<ng-template igxHeaderCollapsedIndicator>\n     *  <igx-icon role=\"button\">add</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.headerCollapsedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set headerCollapsedIndicatorTemplate(template: TemplateRef<IgxGridTemplateContext>) {\n        this._headerCollapseIndicatorTemplate = template;\n    }\n\n    /** @hidden @internal */\n    @ContentChild(IgxExcelStyleHeaderIconDirective, { read: TemplateRef })\n    public excelStyleHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * Gets the excel style header icon.\n    */\n    @Input()\n    public get excelStyleHeaderIconTemplate(): TemplateRef<IgxGridHeaderTemplateContext> {\n        return this._excelStyleHeaderIconTemplate || this.excelStyleHeaderIconDirectiveTemplate;\n    }\n\n    /**\n     * Sets the excel style header icon.\n     *```html\n     *<ng-template #template igxExcelStyleHeaderIcon>\n     * <igx-icon>filter_alt</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.excelStyleHeaderIconTemplate = this.template;\n     * ```\n    */\n    public set excelStyleHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._excelStyleHeaderIconTemplate = template;\n    }\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxSortAscendingHeaderIconDirective, { read: TemplateRef })\n    public sortAscendingHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering a header sorting indicator when columns are sorted in asc order.\n     */\n    @Input()\n    public get sortAscendingHeaderIconTemplate(): TemplateRef<IgxGridHeaderTemplateContext> {\n        return this._sortAscendingHeaderIconTemplate;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering a header sorting indicator when columns are sorted in asc order.\n     *```html\n     * <ng-template #template igxSortAscendingHeaderIcon>\n     *    <igx-icon>expand_less</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.sortAscendingHeaderIconTemplate = this.template;\n     * ```\n     */\n    public set sortAscendingHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._sortAscendingHeaderIconTemplate = template;\n    }\n\n    /** @hidden @internal */\n    @ContentChild(IgxSortDescendingHeaderIconDirective, { read: TemplateRef })\n    public sortDescendingHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering a header sorting indicator when columns are sorted in desc order.\n     */\n    @Input()\n    public get sortDescendingHeaderIconTemplate() {\n        return this._sortDescendingHeaderIconTemplate;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering a header sorting indicator when columns are sorted in desc order.\n     *```html\n     * <ng-template #template igxSortDescendingHeaderIcon>\n     *    <igx-icon>expand_more</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.sortDescendingHeaderIconTemplate = this.template;\n     * ```\n     */\n    public set sortDescendingHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._sortDescendingHeaderIconTemplate = template;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxSortHeaderIconDirective, { read: TemplateRef })\n    public sortHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * Gets custom template, if any, that should be used when rendering a header sorting indicator when columns are not sorted.\n     */\n    @Input()\n    public get sortHeaderIconTemplate(): TemplateRef<IgxGridHeaderTemplateContext> {\n        return this._sortHeaderIconTemplate;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering a header sorting indicator when columns are not sorted.\n     *```html\n     * <ng-template #template igxSortHeaderIcon>\n     *    <igx-icon>unfold_more</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.sortHeaderIconTemplate = this.template;\n     * ```\n     */\n    public set sortHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._sortHeaderIconTemplate = template;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxDragIndicatorIconDirective, { read: TemplateRef, descendants: false })\n    public dragIndicatorIconTemplates: QueryList<TemplateRef<IgxGridEmptyTemplateContext>>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxRowEditTabStopDirective)\n    public rowEditTabsDEFAULT: QueryList<IgxRowEditTabStopDirective>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditTabStopDirective, { descendants: true })\n    public rowEditTabsCUSTOM: QueryList<IgxRowEditTabStopDirective>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('rowEditingOverlay', { read: IgxToggleDirective })\n    public rowEditingOverlay: IgxToggleDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.tabindex')\n    public tabindex = 0;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public hostRole = 'grid';\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: GridToolbarCollection */\n    /* ngQueryListName: toolbar */\n    /** @hidden @internal */\n    @ContentChildren(IgxToolbarToken)\n    public toolbar: QueryList<IgxGridToolbarComponent>;\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: PaginatorCollection */\n    /* ngQueryListName: paginationComponents */\n    /** @hidden @internal */\n    @ContentChildren(IgxPaginatorToken)\n    protected paginationComponents: QueryList<IgxPaginatorComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('igxFilteringOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    protected _outletDirective: IgxOverlayOutletDirective;\n\n    /**\n     * @hidden @internal\n     * @igxElementsAnchor\n     */\n    @ViewChild('sink', { read: ViewContainerRef, static: true })\n    public anchor: ViewContainerRef;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultCollapsedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultESFHeaderIcon', { read: TemplateRef, static: true })\n    protected defaultESFHeaderIconTemplate: TemplateRef<any>;\n\n    @ViewChildren('summaryRow', { read: IgxSummaryRowComponent })\n    protected _summaryRowList: QueryList<IgxSummaryRowComponent>;\n\n    @ViewChildren('row')\n    private _rowList: QueryList<IgxGridRowComponent>;\n\n    @ViewChildren('pinnedRow')\n    private _pinnedRowList: QueryList<IgxGridRowComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultRowEditTemplate', { read: TemplateRef, static: true })\n    private defaultRowEditTemplate: TemplateRef<IgxGridRowEditTemplateContext>;\n\n    @ViewChildren(IgxRowDirective, { read: IgxRowDirective })\n    private _dataRowList: QueryList<IgxRowDirective>;\n\n    @HostBinding('class.igx-grid')\n    protected baseClass = 'igx-grid';\n\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IGridResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    public get resourceStrings(): IGridResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Gets/Sets the filtering logic of the `IgxGridComponent`.\n     *\n     * @remarks\n     * The default is AND.\n     * @example\n     * ```html\n     * <igx-grid [data]=\"Data\" [autoGenerate]=\"true\" [filteringLogic]=\"filtering\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get filteringLogic() {\n        return this._filteringExpressionsTree.operator;\n    }\n\n    public set filteringLogic(value: FilteringLogic) {\n        this._filteringExpressionsTree.operator = value;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor */\n    /**\n     * Gets/Sets the filtering state.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(filteringExpressionsTree)]=\"model.filteringExpressions\"></igx-grid>\n     * ```\n     * @remarks\n     * Supports two-way binding.\n     */\n    @WatchChanges()\n    @Input()\n    public get filteringExpressionsTree() {\n        return this._filteringExpressionsTree;\n    }\n\n    public set filteringExpressionsTree(value) {\n        if (value && isTree(value)) {\n            for (let index = 0; index < value.filteringOperands.length; index++) {\n                if (!(isTree(value.filteringOperands[index]))) {\n                    const newExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And, value.filteringOperands[index].fieldName);\n                    newExpressionsTree.filteringOperands.push(value.filteringOperands[index]);\n                    value.filteringOperands[index] = newExpressionsTree;\n                }\n            }\n\n            value.type = FilteringExpressionsTreeType.Regular;\n            if (value && this._columns?.length > 0) {\n                this._filteringExpressionsTree = recreateTreeFromFields(value, this._columns) as IFilteringExpressionsTree;\n            } else {\n                this._filteringExpressionsTree = value;\n            }\n            this.filteringPipeTrigger++;\n            this.filteringExpressionsTreeChange.emit(this._filteringExpressionsTree);\n\n            if (this.filteringService.isFilteringExpressionsTreeEmpty(this._filteringExpressionsTree) &&\n                this.filteringService.isFilteringExpressionsTreeEmpty(this._advancedFilteringExpressionsTree)) {\n                this._filteredData = null;\n            }\n\n            this.filteringService.refreshExpressions();\n            this.selectionService.clearHeaderCBState();\n            this.summaryService.clearSummaryCache();\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Gets/Sets the advanced filtering state.\n     *\n     * @example\n     * ```typescript\n     * let advancedFilteringExpressionsTree = this.grid.advancedFilteringExpressionsTree;\n     * this.grid.advancedFilteringExpressionsTree = logic;\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get advancedFilteringExpressionsTree() {\n        return this._advancedFilteringExpressionsTree;\n    }\n\n    public set advancedFilteringExpressionsTree(value) {\n        const filteringEventArgs: IFilteringEventArgs = {\n            owner: this,\n            filteringExpressions: value,\n            cancel: false\n        };\n\n        this.filtering.emit(filteringEventArgs);\n\n        if (filteringEventArgs.cancel) {\n            return;\n        }\n\n        if (value && isTree(value)) {\n            value.type = FilteringExpressionsTreeType.Advanced;\n            if (this._columns && this._columns.length > 0) {\n                this._advancedFilteringExpressionsTree = recreateTreeFromFields(value, this._columns) as IFilteringExpressionsTree;\n            } else {\n                this._advancedFilteringExpressionsTree = value;\n            }\n            this.filteringPipeTrigger++;\n        } else {\n            this._advancedFilteringExpressionsTree = null;\n        }\n        this.advancedFilteringExpressionsTreeChange.emit(this._advancedFilteringExpressionsTree);\n\n        if (this.filteringService.isFilteringExpressionsTreeEmpty(this._filteringExpressionsTree) &&\n            this.filteringService.isFilteringExpressionsTreeEmpty(this._advancedFilteringExpressionsTree)) {\n            this._filteredData = null;\n        }\n\n        this.selectionService.clearHeaderCBState();\n        this.summaryService.clearSummaryCache();\n        this.notifyChanges();\n\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.filteringDone.emit(this._advancedFilteringExpressionsTree));\n    }\n\n    /**\n     * Gets/Sets the locale.\n     *\n     * @remarks\n     * If not set, returns browser's language.\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale;\n    }\n\n    public set locale(value: string) {\n        if (value !== this._locale) {\n            this._locale = value;\n            this._currencyPositionLeft = undefined;\n            this.summaryService.clearSummaryCache();\n            this.pipeTrigger++;\n            this.notifyChanges();\n            this.localeChange.emit();\n        }\n    }\n\n    @Input()\n    public get pagingMode() {\n        return this._pagingMode;\n    }\n\n    public set pagingMode(val: GridPagingMode) {\n        this._pagingMode = val;\n        this.pipeTrigger++;\n        this.notifyChanges(true);\n    }\n\n    /** @hidden @internal */\n    public get page(): number {\n        return this.paginator?.page || 0;\n    }\n\n    public set page(val: number) {\n        if (this.paginator) {\n            this.paginator.page = val;\n        }\n    }\n\n    /** @hidden @internal */\n    public get perPage(): number {\n        return this.paginator?.perPage || DEFAULT_ITEMS_PER_PAGE;\n    }\n\n    public set perPage(val: number) {\n        if (this.paginator) {\n            this.paginator.perPage = val;\n        }\n    }\n\n    /**\n     * Gets/Sets if the row selectors are hidden.\n     *\n     * @remarks\n     *  By default row selectors are shown\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public get hideRowSelectors() {\n        return this._hideRowSelectors;\n    }\n\n    public set hideRowSelectors(value: boolean) {\n        this._hideRowSelectors = value;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Gets/Sets whether rows can be moved.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [rowDraggable]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get rowDraggable(): boolean {\n        return this._rowDrag && this.hasVisibleColumns;\n    }\n\n    public set rowDraggable(val: boolean) {\n        this._rowDrag = val;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Gets/Sets the trigger for validators used when editing the grid.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid validationTrigger='blur'></igx-grid>\n     * ```\n     */\n    @Input()\n    public validationTrigger: GridValidationTrigger = 'change';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public rowDragging = false;\n\n    /** @hidden @internal */\n    public dragRowID = null;\n\n    /**\n     * Gets/Sets whether the rows are editable.\n     *\n     * @remarks\n     * By default it is set to false.\n     * @example\n     * ```html\n     * <igx-grid #grid [rowEditable]=\"true\" [primaryKey]=\"'ProductID'\" ></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public get rowEditable(): boolean {\n        return this._rowEditable;\n    }\n\n    public set rowEditable(val: boolean) {\n        if (!this._init) {\n            this.refreshGridState();\n        }\n        this._rowEditable = val;\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets/Sets the height.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @HostBinding('style.height')\n    @Input()\n    public get height(): string | null {\n        return this._height;\n    }\n\n    public set height(value: string | null) {\n        if (this._height !== value) {\n            this._height = value;\n            this.nativeElement.style.height = value;\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('style.width')\n    public get hostWidth() {\n        return this._width || this._hostWidth;\n    }\n\n    /**\n     * Gets/Sets the width of the grid.\n     *\n     * @example\n     * ```typescript\n     * let gridWidth = this.grid.width;\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get width(): string | null {\n        return this._width;\n    }\n\n    public set width(value: string | null) {\n        if (this._width !== value) {\n            this._width = value;\n            this.nativeElement.style.width = value;\n            this.notifyChanges(true);\n        }\n    }\n\n    /** @hidden @internal */\n    public get headerWidth() {\n        return parseInt(this.width, 10) - 17;\n    }\n\n    /**\n     * Gets/Sets the row height.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [rowHeight]=\"100\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get rowHeight(): number {\n        return this._rowHeight ? this._rowHeight : this.defaultRowHeight;\n    }\n\n    public set rowHeight(value: number | string) {\n        if (typeof value !== 'number') {\n            value = parseInt(value, 10);\n        }\n        this._rowHeight = value;\n    }\n\n    /**\n     * Gets/Sets the default width of the columns.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [columnWidth]=\"100\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get columnWidth(): string {\n        return this._columnWidth;\n    }\n    public set columnWidth(value: string) {\n        this._columnWidth = value;\n        this.columnWidthSetByUser = true;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Get/Sets the message displayed when there are no records.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [emptyGridMessage]=\"'The grid is empty'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public set emptyGridMessage(value: string) {\n        this._emptyGridMessage = value;\n    }\n    public get emptyGridMessage(): string {\n        return this._emptyGridMessage || this.resourceStrings.igx_grid_emptyGrid_message;\n    }\n\n    /**\n     * Gets/Sets whether the grid is going to show a loading indicator.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [isLoading]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public set isLoading(value: boolean) {\n        if (this._isLoading !== value) {\n            this._isLoading = value;\n            if (this.data) {\n                this.evaluateLoadingState();\n            }\n        }\n        Promise.resolve().then(() => {\n            // wait for the current detection cycle to end before triggering a new one.\n            this.notifyChanges();\n        });\n    }\n\n    public get isLoading(): boolean {\n        return this._isLoading;\n    }\n\n    /**\n     * Gets/Sets whether the columns should be auto-generated once again after the initialization of the grid\n     *\n     * @remarks\n     * This will allow to bind the grid to remote data and having auto-generated columns at the same time.\n     * Note that after generating the columns, this property would be disabled to avoid re-creating\n     * columns each time a new data is assigned.\n     * @example\n     * ```typescript\n     *  this.grid.shouldGenerate = true;\n     * ```\n     * @deprecated in version 18.2.0. Column re-creation now relies on `autoGenerate` instead.\n     */\n    public get shouldGenerate(): boolean {\n        return this.autoGenerate;\n    }\n\n    public set shouldGenerate(value: boolean) {\n        this.autoGenerate = value;\n    }\n\n    /**\n     * Gets/Sets the message displayed when there are no records and the grid is filtered.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [emptyGridMessage]=\"'The grid is empty'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public set emptyFilteredGridMessage(value: string) {\n        this._emptyFilteredGridMessage = value;\n    }\n\n    public get emptyFilteredGridMessage(): string {\n        return this._emptyFilteredGridMessage || this.resourceStrings.igx_grid_emptyFilteredGrid_message;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * Gets/Sets the initial pinning configuration.\n     *\n     * @remarks\n     * Allows to apply pinning the columns to the start or the end.\n     * Note that pinning to both sides at a time is not allowed.\n     * @example\n     * ```html\n     * <igx-grid [pinning]=\"pinningConfig\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get pinning() {\n        return this._pinning;\n    }\n    public set pinning(value) {\n        if (value !== this._pinning) {\n            this.resetCaches();\n        }\n        this._pinning = value;\n    }\n\n    /**\n     * Gets/Sets if the filtering is enabled.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [allowFiltering]=\"true\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get allowFiltering() {\n        return this._allowFiltering;\n    }\n\n    public set allowFiltering(value) {\n        if (this._allowFiltering !== value) {\n            this._allowFiltering = value;\n            this.filteringService.registerSVGIcons();\n\n\n            this.filteringService.isFilterRowVisible = false;\n            this.filteringService.filteredColumn = null;\n\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * Gets/Sets a value indicating whether the advanced filtering is enabled.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [allowAdvancedFiltering]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get allowAdvancedFiltering() {\n        return this._allowAdvancedFiltering;\n    }\n\n    public set allowAdvancedFiltering(value) {\n        if (this._allowAdvancedFiltering !== value) {\n            this._allowAdvancedFiltering = value;\n            this.filteringService.registerSVGIcons();\n\n            if (!this._init) {\n                this.notifyChanges(true);\n            }\n        }\n    }\n\n    /**\n     * Gets/Sets the filter mode.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [filterMode]=\"'quickFilter'\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default it's set to FilterMode.quickFilter.\n     */\n    @Input()\n    public get filterMode() {\n        return this._filterMode;\n    }\n\n    public set filterMode(value: FilterMode) {\n        switch (value) {\n            case FilterMode.excelStyleFilter:\n            case FilterMode.quickFilter:\n                this._filterMode = value;\n                break;\n            default:\n                break;\n        }\n\n        if (this.filteringService.isFilterRowVisible) {\n            this.filteringRow.close();\n        }\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Gets/Sets the summary position.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" summaryPosition=\"top\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default it is bottom.\n     */\n    @Input()\n    public get summaryPosition() {\n        return this._summaryPosition;\n    }\n\n    public set summaryPosition(value: GridSummaryPosition) {\n        this._summaryPosition = value;\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets/Sets the summary calculation mode.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" summaryCalculationMode=\"rootLevelOnly\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default it is rootAndChildLevels which means the summaries are calculated for the root level and each child level.\n     */\n    @Input()\n    public get summaryCalculationMode() {\n        return this._summaryCalculationMode;\n    }\n\n    public set summaryCalculationMode(value: GridSummaryCalculationMode) {\n        this._summaryCalculationMode = value;\n        if (!this._init) {\n            this.crudService.endEdit(false);\n            this.summaryService.resetSummaryHeight();\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * Controls whether the summary row is visible when groupBy/parent row is collapsed.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [showSummaryOnCollapse]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default showSummaryOnCollapse is set to 'false' which means that the summary row is not visible\n     * when the groupBy/parent row is collapsed.\n     */\n    @Input({ transform: booleanAttribute })\n    public get showSummaryOnCollapse() {\n        return this._showSummaryOnCollapse;\n    }\n\n    public set showSummaryOnCollapse(value: boolean) {\n        this._showSummaryOnCollapse = value;\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets/Sets the filtering strategy of the grid.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [filterStrategy]=\"filterStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get filterStrategy(): IFilteringStrategy {\n        return this._filterStrategy;\n    }\n\n    public set filterStrategy(classRef: IFilteringStrategy) {\n        this._filterStrategy = classRef;\n    }\n\n    /**\n     * Gets/Sets the sorting strategy of the grid.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [sortStrategy]=\"sortStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get sortStrategy(): IGridSortingStrategy {\n        return this._sortingStrategy;\n    }\n\n    public set sortStrategy(value: IGridSortingStrategy) {\n        this._sortingStrategy = value;\n    }\n\n    /**\n     * Gets/Sets the sorting options - single or multiple sorting.\n     * Accepts an `ISortingOptions` object with any of the `mode` properties.\n     *\n     * @example\n     * ```typescript\n     * const _sortingOptions: ISortingOptions = {\n     *      mode: 'single'\n     * }\n     * ```html\n     * <igx-grid [sortingOptions]=\"sortingOptions\"><igx-grid>\n     * ```\n     */\n    @Input()\n    public set sortingOptions(value: ISortingOptions) {\n        if (!this._init) {\n            // clear sort only if option is changed runtime. No need to clear on initial load.\n            this.clearSort();\n        }\n        this._sortingOptions = Object.assign(this._sortingOptions, value);\n    }\n\n    public get sortingOptions() {\n        return this._sortingOptions;\n    }\n\n    /* blazorByValueArray */\n    /* blazorAlwaysWriteback */\n    /* @tsTwoWayProperty (true, \"SelectedRowsChange\", \"Detail\", false) */\n    /* blazorPrimitiveValue */\n    /**\n     * Gets/Sets the current selection state.\n     *\n     * @remarks\n     * Represents the selected rows' IDs (primary key or rowData)\n     * @example\n     * ```html\n     * <igx-grid [data]=\"localData\" primaryKey=\"ID\" rowSelection=\"multiple\" [selectedRows]=\"[0, 1, 2]\"><igx-grid>\n     * ```\n     */\n    @Input()\n    public set selectedRows(rowIDs: any[]) {\n        this.selectRows(rowIDs || [], true);\n    }\n\n    public get selectedRows(): any[] {\n        return this.selectionService.getSelectedRows();\n    }\n\n\n    /** @hidden @internal */\n    public get headerGroupsList(): IgxGridHeaderGroupComponent[] {\n        return this.theadRow.groups;\n    }\n\n    /** @hidden @internal */\n    public get headerCellList(): IgxGridHeaderComponent[] {\n        return this.headerGroupsList.map(headerGroup => headerGroup.header).filter(header => header);\n    }\n\n    /** @hidden @internal */\n    public get filterCellList(): IgxGridFilteringCellComponent[] {\n        return this.headerGroupsList.map(group => group.filter).filter(cell => cell);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get summariesRowList() {\n        const res = new QueryList<any>();\n        if (!this._summaryRowList) {\n            return res;\n        }\n        const sumList = this._summaryRowList.filter((item) => item.element.nativeElement.parentElement !== null);\n        res.reset(sumList);\n        return res;\n    }\n\n    /* csSuppress */\n    /**\n     * A list of `IgxGridRowComponent`.\n     *\n     * @example\n     * ```typescript\n     * const rowList = this.grid.rowList;\n     * ```\n     */\n    public get rowList() {\n        const res = new QueryList<IgxRowDirective>();\n        if (!this._rowList) {\n            return res;\n        }\n        const rList = this._rowList\n            .filter((item) => item.element.nativeElement.parentElement !== null)\n            .sort((a, b) => a.index - b.index);\n        res.reset(rList);\n        return res;\n    }\n\n    /* csSuppress */\n    /**\n     * A list of currently rendered `IgxGridRowComponent`'s.\n     *\n     * @example\n     * ```typescript\n     * const dataList = this.grid.dataRowList;\n     * ```\n     */\n    public get dataRowList(): QueryList<IgxRowDirective> {\n        const res = new QueryList<IgxRowDirective>();\n        if (!this._dataRowList) {\n            return res;\n        }\n        const rList = this._dataRowList.filter(item => item.element.nativeElement.parentElement !== null).sort((a, b) => a.index - b.index);\n        res.reset(rList);\n        return res;\n    }\n\n    /**\n     * Gets the header row selector template.\n     */\n    @Input()\n    public get headSelectorTemplate(): TemplateRef<IgxHeadSelectorTemplateContext> {\n        return this._headSelectorTemplate || this.headSelectorsTemplates?.first;\n    }\n\n    /**\n     * Sets the header row selector template.\n     * ```html\n     * <ng-template #template igxHeadSelector let-headContext>\n     * {{ headContext.selectedCount }} / {{ headContext.totalCount  }}\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.headSelectorTemplate = this.template;\n     * ```\n     */\n    public set headSelectorTemplate(template: TemplateRef<IgxHeadSelectorTemplateContext>) {\n        this._headSelectorTemplate = template;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get isPinningToStart() {\n        return this.pinning.columns !== ColumnPinningPosition.End;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get isRowPinningToTop() {\n        return this.pinning.rows !== RowPinningPosition.Bottom;\n    }\n\n    /**\n     * Gets the row selector template.\n     */\n    @Input()\n    public get rowSelectorTemplate(): TemplateRef<IgxRowSelectorTemplateContext> {\n        return this._rowSelectorTemplate || this.rowSelectorsTemplates?.first;\n    }\n\n    /**\n         * Sets a custom template for the row selectors.\n         * ```html\n         * <ng-template #template igxRowSelector let-rowContext>\n         *    <igx-checkbox [checked]=\"rowContext.selected\"></igx-checkbox>\n         * </ng-template>\n         * ```\n         * ```typescript\n         * @ViewChild(\"'template'\", {read: TemplateRef })\n         * public template: TemplateRef<any>;\n         * this.grid.rowSelectorTemplate = this.template;\n         * ```\n         */\n    public set rowSelectorTemplate(template: TemplateRef<IgxRowSelectorTemplateContext>) {\n        this._rowSelectorTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rowOutletDirective() {\n        return this.rowEditingOutletDirective;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get parentRowOutletDirective() {\n        return this.outlet;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rowEditCustom(): TemplateRef<IgxGridRowEditTemplateContext> {\n        if (this.rowEditCustomDirectives && this.rowEditCustomDirectives.first) {\n            return this.rowEditCustomDirectives.first;\n        }\n        return null;\n    }\n\n    /**\n\n    /**\n     * @hidden @internal\n     */\n    public get rowEditContainer(): TemplateRef<IgxGridRowEditTemplateContext> {\n        return this.rowEditCustom ? this.rowEditCustom : this.defaultRowEditTemplate;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering the row drag indicator icon\n     */\n    @Input()\n    public get dragIndicatorIconTemplate(): TemplateRef<IgxGridEmptyTemplateContext> {\n        return this._customDragIndicatorIconTemplate || this.dragIndicatorIconTemplates?.first;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering the row drag indicator icon.\n     *```html\n     * <ng-template #template igxDragIndicatorIcon>\n     *    <igx-icon>expand_less</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.dragIndicatorIconTemplate = this.template;\n     * ```\n     */\n    public set dragIndicatorIconTemplate(val: TemplateRef<IgxGridEmptyTemplateContext>) {\n        this._customDragIndicatorIconTemplate = val;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get firstEditableColumnIndex(): number {\n        const index = this.visibleColumns.filter(col => col.editable)\n            .map(c => c.visibleIndex).sort((a, b) => a - b);\n        return index.length ? index[0] : null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get lastEditableColumnIndex(): number {\n        const index = this.visibleColumns.filter(col => col.editable)\n            .map(c => c.visibleIndex).sort((a, b) => a > b ? -1 : 1);\n        return index.length ? index[0] : null;\n    }\n\n    /**\n     * @hidden @internal\n     * TODO: Nav service logic doesn't handle 0 results from this querylist\n     */\n    public get rowEditTabs(): QueryList<IgxRowEditTabStopDirective> {\n        return this.rowEditTabsCUSTOM.length ? this.rowEditTabsCUSTOM : this.rowEditTabsDEFAULT;\n    }\n\n    /** @hidden @internal */\n    public get activeDescendant() {\n        const activeElem = this.navigation.activeNode;\n\n        if (!activeElem || !Object.keys(activeElem).length) {\n            return this.id;\n        }\n\n        return activeElem.row < 0 ?\n            `${this.id}_${activeElem.row}_${activeElem.mchCache.level}_${activeElem.column}` :\n            `${this.id}_${activeElem.row}_${activeElem.column}`;\n    }\n\n    /** @hidden @internal */\n    public get bannerClass(): string {\n        const position = this.rowEditPositioningStrategy.isTop ? 'igx-banner__border-top' : 'igx-banner__border-bottom';\n        return `igx-banner ${position}`;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * Gets/Sets the sorting state.\n     *\n     * @remarks\n     * Supports two-way data binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(sortingExpressions)]=\"model.sortingExpressions\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get sortingExpressions(): ISortingExpression[] {\n        return this._sortingExpressions;\n    }\n\n    public set sortingExpressions(value: ISortingExpression[]) {\n        this._sortingExpressions = cloneArray(value);\n        this.sortingExpressionsChange.emit(this._sortingExpressions);\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get maxLevelHeaderDepth() {\n        if (this._maxLevelHeaderDepth === null) {\n            this._maxLevelHeaderDepth = this.hasColumnLayouts ?\n                this._columns.reduce((acc, col) => Math.max(acc, col.rowStart), 0) :\n                this._columns.reduce((acc, col) => Math.max(acc, col.level), 0);\n        }\n        return this._maxLevelHeaderDepth;\n    }\n\n    /**\n     * Gets the number of hidden columns.\n     *\n     * @example\n     * ```typescript\n     * const hiddenCol = this.grid.hiddenColumnsCount;\n     * ``\n     */\n    public get hiddenColumnsCount() {\n        return this._columns.filter((col) => col.columnGroup === false && col.hidden === true).length;\n    }\n\n    /**\n     * Gets the number of pinned columns.\n     */\n    public get pinnedColumnsCount() {\n        return this.pinnedColumns.filter(col => !col.columnLayout).length;\n    }\n\n    /**\n     * Gets/Sets whether the grid has batch editing enabled.\n     * When batch editing is enabled, changes are not made directly to the underlying data.\n     * Instead, they are stored as transactions, which can later be committed w/ the `commit` method.\n     *\n     * @example\n     * ```html\n     * <igx-grid [batchEditing]=\"true\" [data]=\"someData\">\n     * </igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get batchEditing(): boolean {\n        return this._batchEditing;\n    }\n\n    public set batchEditing(val: boolean) {\n        if (val !== this._batchEditing) {\n            delete this._transactions;\n            this._batchEditing = val;\n            this.switchTransactionService(val);\n            this.subscribeToTransactions();\n        }\n    }\n\n    /* blazorSuppress */\n    /**\n     * Get transactions service for the grid.\n     */\n    public get transactions(): TransactionService<Transaction, State> {\n        if (this._diTransactions && !this.batchEditing) {\n            return this._diTransactions;\n        }\n        return this._transactions;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currentRowState(): any {\n        return this._currentRowState;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currencyPositionLeft(): boolean {\n        if (this._currencyPositionLeft !== undefined) {\n            return this._currencyPositionLeft;\n        }\n        const format = getLocaleNumberFormat(this.locale, NumberFormatStyle.Currency);\n        const formatParts = format.split(',');\n        const i = formatParts.indexOf(formatParts.find(c => c.includes('¤')));\n        return this._currencyPositionLeft = i < 1;\n    }\n\n    /**\n     * Gets/Sets cell selection mode.\n     *\n     * @remarks\n     * By default the cell selection mode is multiple\n     * @param selectionMode: GridSelectionMode\n     */\n    @WatchChanges()\n    @Input()\n    public get cellSelection() {\n        return this._cellSelectionMode;\n    }\n\n    public set cellSelection(selectionMode: GridSelectionMode) {\n        this._cellSelectionMode = selectionMode;\n        // if (this.gridAPI.grid) {\n        this.selectionService.clear(true);\n        this.notifyChanges();\n        // }\n    }\n\n    /**\n     * Gets/Sets row selection mode\n     *\n     * @remarks\n     * By default the row selection mode is 'none'\n     * Note that in IgxGrid and IgxHierarchicalGrid 'multipleCascade' behaves like 'multiple'\n     */\n    @WatchChanges()\n    @Input()\n    public get rowSelection() {\n        return this._rowSelectionMode;\n    }\n\n    public set rowSelection(selectionMode: GridSelectionMode) {\n        this._rowSelectionMode = selectionMode;\n        if (!this._init) {\n            this.selectionService.clearAllSelectedRows();\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * Gets/Sets column selection mode\n     *\n     * @remarks\n     * By default the row selection mode is none\n     * @param selectionMode: GridSelectionMode\n     */\n    @WatchChanges()\n    @Input()\n    public get columnSelection() {\n        return this._columnSelectionMode;\n    }\n\n    public set columnSelection(selectionMode: GridSelectionMode) {\n        this._columnSelectionMode = selectionMode;\n        // if (this.gridAPI.grid) {\n        this.selectionService.clearAllSelectedColumns();\n        this.notifyChanges(true);\n        // }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set pagingState(value) {\n        this._pagingState = value;\n        if (this.paginator && !this._init) {\n            this.paginator.totalRecords = value.metadata.countRecords;\n        }\n    }\n\n    public get pagingState() {\n        return this._pagingState;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowEditMessage;\n\n    /**\n     * @hidden @internal\n     */\n    public calcWidth: number;\n    /**\n     * @hidden @internal\n     */\n    public calcHeight = 0;\n    /**\n     * @hidden @internal\n     */\n    public tfootHeight: number;\n\n    /**\n     * @hidden @internal\n     */\n    public disableTransitions = false;\n\n    /**\n     * Represents the last search information.\n     */\n    public get lastSearchInfo(): ISearchInfo {\n        return this._lastSearchInfo;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public columnWidthSetByUser = false;\n\n    /**\n     * @hidden @internal\n     */\n    public pinnedRecords: any[];\n\n    /**\n     * @hidden @internal\n     */\n    public unpinnedRecords: any[];\n\n    /**\n     * @hidden @internal\n     */\n    public rendered$ = this.rendered.asObservable().pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n    /** @hidden @internal */\n    public resizeNotify = new Subject<void>();\n\n    /** @hidden @internal */\n    public rowAddedNotifier = new Subject<IRowDataEventArgs>();\n\n    /** @hidden @internal */\n    public rowDeletedNotifier = new Subject<IRowDataEventArgs>();\n\n    /** @hidden @internal */\n    public pipeTriggerNotifier = new Subject();\n\n    /** @hidden @internal */\n    public _filteredSortedPinnedData: any[];\n\n    /** @hidden @internal */\n    public _filteredSortedUnpinnedData: any[];\n\n    /** @hidden @internal */\n    public _filteredPinnedData: any[];\n\n    /**\n     * @hidden\n     */\n    public _filteredUnpinnedData;\n    /**\n     * @hidden @internal\n     */\n    public _destroyed = false;\n    /**\n     * @hidden @internal\n     */\n    public _totalRecords = -1;\n    /**\n     * @hidden @internal\n     */\n    public columnsWithNoSetWidths = null;\n    /**\n     * @hidden @internal\n     */\n    public pipeTrigger = 0;\n    /**\n     * @hidden @internal\n     */\n    public filteringPipeTrigger = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public isColumnWidthSum = false;\n\n    /**\n     * @hidden @internal\n     */\n    public summaryPipeTrigger = 0;\n    /**\n     * @hidden @internal\n     */\n    public groupablePipeTrigger = 0;\n\n    /**\n    * @hidden @internal\n    */\n    public EMPTY_DATA = [];\n\n    /** @hidden @internal */\n    public get type(): GridType[\"type\"] {\n        return 'flat';\n    }\n\n    /** @hidden @internal */\n    public _baseFontSize: number;\n\n    /**\n     * @hidden\n     */\n    public destroy$ = new Subject<any>();\n    /**\n     * @hidden\n     */\n    protected _pagingMode = GridPagingMode.Local;\n    /**\n     * @hidden\n     */\n    protected _pagingState;\n    /**\n     * @hidden\n     */\n    protected _hideRowSelectors = false;\n    /**\n     * @hidden\n     */\n    protected _rowDrag = false;\n    /**\n     * @hidden\n     */\n    protected _columns: IgxColumnComponent[] = [];\n    /**\n     * @hidden\n     */\n    protected _pinnedColumns: IgxColumnComponent[] = [];\n    /**\n     * @hidden\n     */\n    protected _unpinnedColumns: IgxColumnComponent[] = [];\n    /**\n     * @hidden\n     */\n    protected _filteringExpressionsTree: IFilteringExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n    /**\n     * @hidden\n     */\n    protected _advancedFilteringExpressionsTree: IFilteringExpressionsTree;\n    /**\n     * @hidden\n     */\n    protected _sortingExpressions: Array<ISortingExpression> = [];\n    /**\n     * @hidden\n     */\n    protected _maxLevelHeaderDepth = null;\n    /**\n     * @hidden\n     */\n    protected _columnHiding = false;\n    /**\n     * @hidden\n     */\n    protected _columnPinning = false;\n\n    protected _pinnedRecordIDs = [];\n\n    /**\n     * @hidden\n     */\n    protected _hasVisibleColumns;\n    protected _allowFiltering = false;\n    protected _allowAdvancedFiltering = false;\n    protected _filterMode: FilterMode = FilterMode.quickFilter;\n\n\n    protected _defaultTargetRecordNumber = 10;\n    protected _expansionStates: Map<any, boolean> = new Map<any, boolean>();\n    protected _defaultExpandState = false;\n    protected _headerFeaturesWidth = NaN;\n    protected _init = true;\n    protected _firstAutoResize = true;\n    protected _autoSizeColumnsNotify = new Subject<void>();\n    protected _cdrRequestRepaint = false;\n    protected _userOutletDirective: IgxOverlayOutletDirective;\n    protected _transactions: TransactionService<Transaction, State>;\n    protected _batchEditing = false;\n    protected _sortingOptions: ISortingOptions = { mode: 'multiple' };\n    protected _filterStrategy: IFilteringStrategy = new FilteringStrategy();\n    protected _autoGeneratedCols = [];\n    protected _dataView = [];\n    protected _lastSearchInfo: ISearchInfo = {\n        searchText: '',\n        caseSensitive: false,\n        exactMatch: false,\n        activeMatchIndex: 0,\n        matchInfoCache: [],\n        matchCount: 0,\n        content: ''\n    };\n    protected gridComputedStyles;\n\n    /** @hidden @internal */\n    public get paginator() {\n        return this.paginationComponents?.first;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get scrollSize() {\n        return this.verticalScrollContainer.getScrollNativeSize();\n    }\n\n    private _primaryKey: string;\n    private _rowEditable = false;\n    private _currentRowState: any;\n    private _filteredSortedData = null;\n    private _filteredData = null;\n\n    private _customDragIndicatorIconTemplate: TemplateRef<IgxGridEmptyTemplateContext>;\n    private _excelStyleHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    private _rowSelectorTemplate: TemplateRef<IgxRowSelectorTemplateContext>;\n    private _headSelectorTemplate: TemplateRef<IgxHeadSelectorTemplateContext>;\n    private _rowEditTextTemplate: TemplateRef<IgxGridRowEditTextTemplateContext>;\n    private _rowAddTextTemplate: TemplateRef<IgxGridEmptyTemplateContext>;\n    private _rowEditActionsTemplate: TemplateRef<IgxGridRowEditActionsTemplateContext>;\n    private _dragGhostCustomTemplate: TemplateRef<IgxGridRowDragGhostContext>;\n    private _rowExpandedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    private _rowCollapsedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    private _headerExpandIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    private _headerCollapseIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n\n    private _cdrRequests = false;\n    private _resourceStrings = getCurrentResourceStrings(GridResourceStringsEN);\n    private _emptyGridMessage = null;\n    private _emptyFilteredGridMessage = null;\n    private _isLoading = false;\n    private _locale: string;\n    private overlayIDs = [];\n    private _sortingStrategy: IGridSortingStrategy;\n    private _pinning: IPinningConfig = { columns: ColumnPinningPosition.Start };\n    private _shouldRecalcRowHeight = false;\n\n    private _hostWidth;\n    private _advancedFilteringOverlayId: string;\n    private _advancedFilteringPositionSettings: PositionSettings = {\n        verticalDirection: VerticalAlignment.Middle,\n        horizontalDirection: HorizontalAlignment.Center,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalStartPoint: VerticalAlignment.Middle\n    };\n\n    private _advancedFilteringOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: false,\n        modal: false,\n        positionStrategy: new ConnectedPositioningStrategy(this._advancedFilteringPositionSettings),\n    };\n\n    private columnListDiffer;\n    private rowListDiffer;\n    private _height: string | null = '100%';\n    private _width: string | null = '100%';\n    private _rowHeight: number | undefined;\n    private _horizontalForOfs: Array<IgxGridForOfDirective<any, any[]>> = [];\n    private _multiRowLayoutRowSize = 1;\n    // Caches\n    private _totalWidth = NaN;\n    private _pinnedVisible = [];\n    private _unpinnedVisible = [];\n    private _pinnedWidth = NaN;\n    private _unpinnedWidth = NaN;\n    private _visibleColumns = [];\n    private _columnGroups = false;\n\n    private _columnWidth: string;\n\n    private _summaryPosition: GridSummaryPosition = GridSummaryPosition.bottom;\n    private _summaryCalculationMode: GridSummaryCalculationMode = GridSummaryCalculationMode.rootAndChildLevels;\n    private _showSummaryOnCollapse = false;\n    private _summaryRowHeight = 0;\n    private _cellSelectionMode: GridSelectionMode = GridSelectionMode.multiple;\n    private _rowSelectionMode: GridSelectionMode = GridSelectionMode.none;\n    private _selectRowOnClick = true;\n    private _columnSelectionMode: GridSelectionMode = GridSelectionMode.none;\n\n    private lastAddedRowIndex;\n\n    private _currencyPositionLeft: boolean;\n\n    private rowEditPositioningStrategy = new RowEditPositionStrategy({\n        horizontalDirection: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Bottom,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalStartPoint: VerticalAlignment.Bottom,\n        closeAnimation: null\n    });\n\n    private rowEditSettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: false,\n        outlet: this.rowOutletDirective,\n        positionStrategy: this.rowEditPositioningStrategy\n    };\n\n    private transactionChange$ = new Subject<void>();\n    private _rendered = false;\n    private readonly DRAG_SCROLL_DELTA = 10;\n    private _dataCloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy();\n    private _autoSize = false;\n    private _sortHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n    private _sortAscendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n    private _sortDescendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n    private _gridSize: Size = Size.Large;\n    private _defaultRowHeight = 50;\n\n    /**\n     * @hidden @internal\n     */\n    public get minColumnWidth() {\n        return MINIMUM_COLUMN_WIDTH;\n    }\n\n    protected get isCustomSetRowHeight(): boolean {\n        return !isNaN(this._rowHeight);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public abstract id: string;\n    /* blazorSuppress */\n    public abstract data: any[] | null;\n\n    /**\n     * Returns an array of objects containing the filtered data.\n     *\n     * @example\n     * ```typescript\n     * let filteredData = this.grid.filteredData;\n     * ```\n     */\n    public get filteredData() {\n        return this._filteredData;\n    }\n\n    /**\n     * Returns an array containing the filtered sorted data.\n     *\n     * @example\n     * ```typescript\n     * const filteredSortedData = this.grid1.filteredSortedData;\n     * ```\n     */\n    public get filteredSortedData(): any[] {\n        return this._filteredSortedData;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rowChangesCount() {\n        if (!this.crudService.row) {\n            return 0;\n        }\n        const f = (obj: any) => {\n            let changes = 0;\n            Object.keys(obj).forEach(key => isObject(obj[key]) ? changes += f(obj[key]) : changes++);\n            return changes;\n        };\n        if (this.transactions.getState(this.crudService.row.id)?.type === TransactionType.ADD) {\n            return this._columns.filter(c => c.field).length;\n        }\n        const rowChanges = this.transactions.getAggregatedValue(this.crudService.row.id, false);\n        return rowChanges ? f(rowChanges) : 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get dataWithAddedInTransactionRows() {\n        const result = cloneArray(this.gridAPI.get_all_data());\n        if (this.transactions.enabled) {\n            result.push(...this.transactions.getAggregatedChanges(true)\n                .filter(t => t.type === TransactionType.ADD)\n                .map(t => t.newValue));\n        }\n\n        if (this.crudService.row && this.crudService.row.getClassName() === IgxAddRow.name) {\n            result.splice(this.crudService.row.index, 0, this.crudService.row.data);\n        }\n\n        return result;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get dataLength() {\n        return this.transactions.enabled ? this.dataWithAddedInTransactionRows.length : this.gridAPI.get_all_data().length;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get template(): TemplateRef<IgxGridTemplateContext> {\n        if (this.isLoading && (this.hasZeroResultFilter || this.hasNoData)) {\n            return this.loadingGridTemplate ? this.loadingGridTemplate : this.loadingGridDefaultTemplate;\n        }\n\n        if (this.hasZeroResultFilter) {\n            return this.emptyGridTemplate ? this.emptyGridTemplate : this.emptyFilteredGridTemplate;\n        }\n\n        if (this.hasNoData) {\n            return this.emptyGridTemplate ? this.emptyGridTemplate : this.emptyGridDefaultTemplate;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    private get hasZeroResultFilter(): boolean {\n        return this.filteredData && this.filteredData.length === 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    private get hasNoData(): boolean {\n        return !this.data || this.dataLength === 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get shouldOverlayLoading(): boolean {\n        return this.isLoading && !this.hasNoData && !this.hasZeroResultFilter;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isMultiRowSelectionEnabled(): boolean {\n        return this.rowSelection === GridSelectionMode.multiple\n            || this.rowSelection === GridSelectionMode.multipleCascade;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isRowSelectable(): boolean {\n        return this.rowSelection !== GridSelectionMode.none;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isCellSelectable() {\n        return this.cellSelection !== GridSelectionMode.none;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get columnInDrag() {\n        return this.gridAPI.cms.column;\n    }\n\n    constructor(\n        public readonly validation: IgxGridValidationService,\n        /** @hidden @internal */\n        public readonly selectionService: IgxGridSelectionService,\n        protected colResizingService: IgxColumnResizingService,\n        @Inject(IGX_GRID_SERVICE_BASE) public readonly gridAPI: GridServiceType,\n        protected transactionFactory: IgxFlatTransactionFactory,\n        private elementRef: ElementRef<HTMLElement>,\n        protected zone: NgZone,\n        /** @hidden @internal */\n        @Inject(DOCUMENT) public document: any,\n        public readonly cdr: ChangeDetectorRef,\n        protected differs: IterableDiffers,\n        protected viewRef: ViewContainerRef,\n        protected injector: Injector,\n        protected envInjector: EnvironmentInjector,\n        public navigation: IgxGridNavigationService,\n        /** @hidden @internal */\n        public filteringService: IgxFilteringService,\n        protected textHighlightService: IgxTextHighlightService,\n        @Inject(IgxOverlayService) protected overlayService: IgxOverlayService,\n        /** @hidden @internal */\n        public summaryService: IgxGridSummaryService,\n        @Inject(LOCALE_ID) private localeId: string,\n        protected platform: PlatformUtil,\n        @Optional() @Inject(IgxGridTransaction) protected _diTransactions?: TransactionService<Transaction, State>,\n    ) {\n        this.locale = this.locale || this.localeId;\n        this._transactions = this.transactionFactory.create(TRANSACTION_TYPE.None);\n        this._transactions.cloneStrategy = this.dataCloneStrategy;\n        this.cdr.detach();\n        this.selectionService.selectedRowsChange.pipe(takeUntil(this.destroy$)).subscribe((args: any[]) => {\n            this.selectedRowsChange.emit(args);\n        });\n        IgcTrialWatermark.register();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mouseleave')\n    public hideActionStrip() {\n        this.actionStrip?.hide();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get headerFeaturesWidth() {\n        return this._headerFeaturesWidth;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isDetailRecord(_rec) {\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isGroupByRecord(_rec) {\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isGhostRecord(record: any): boolean {\n        return record.ghostRecord !== undefined;\n    }\n    /**\n     * @hidden @internal\n     */\n    public isAddRowRecord(record: any): boolean {\n        return record.addRow !== undefined;\n    }\n\n    /**\n     * @hidden\n     * Returns the row index of a row that takes into account the full view data like pinning.\n     */\n    public getDataViewIndex(rowIndex, pinned) {\n        if (pinned && !this.isRowPinningToTop) {\n            rowIndex = rowIndex + this.unpinnedDataView.length;\n        } else if (!pinned && this.isRowPinningToTop) {\n            rowIndex = rowIndex + this.pinnedDataView.length;\n        }\n        return rowIndex;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get hasDetails() {\n        return false;\n    }\n\n    /**\n     * Returns the state of the grid virtualization.\n     *\n     * @remarks\n     * Includes the start index and how many records are rendered.\n     * @example\n     * ```typescript\n     * const gridVirtState = this.grid1.virtualizationState;\n     * ```\n     */\n    public get virtualizationState() {\n        return this.verticalScrollContainer.state;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public hideOverlays() {\n        this.overlayIDs.forEach(overlayID => {\n            const overlay = this.overlayService.getOverlayById(overlayID);\n\n            if (overlay?.visible && !overlay.closeAnimationPlayer?.hasStarted()) {\n                this.overlayService.hide(overlayID);\n\n                this.nativeElement.focus();\n            }\n        });\n    }\n\n    /**\n     * Returns whether the record is pinned or not.\n     *\n     * @param rowIndex Index of the record in the `dataView` collection.\n     *\n     * @hidden\n     * @internal\n     */\n    public isRecordPinnedByViewIndex(rowIndex: number) {\n        return this.hasPinnedRecords && (this.isRowPinningToTop && rowIndex < this.pinnedDataView.length) ||\n            (!this.isRowPinningToTop && rowIndex >= this.unpinnedDataView.length);\n    }\n\n    /**\n     * Returns whether the record is pinned or not.\n     *\n     * @param rowIndex Index of the record in the `filteredSortedData` collection.\n     */\n    public isRecordPinnedByIndex(rowIndex: number) {\n        return this.hasPinnedRecords && (this.isRowPinningToTop && rowIndex < this._filteredSortedPinnedData.length) ||\n            (!this.isRowPinningToTop && rowIndex >= this._filteredSortedUnpinnedData.length);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isRecordPinned(rec) {\n        return this.getInitialPinnedIndex(rec) !== -1;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * Returns the record index in order of pinning by the user. Does not consider sorting/filtering.\n     */\n    public getInitialPinnedIndex(rec) {\n        const id = this.gridAPI.get_row_id(rec);\n        return this._pinnedRecordIDs.indexOf(id);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get hasPinnedRecords() {\n        return this._pinnedRecordIDs.length > 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get pinnedRecordsCount() {\n        return this._pinnedRecordIDs.length;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get crudService() {\n        return this.gridAPI.crudService;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public _setupServices() {\n        this.gridAPI.grid = this as any;\n        this.crudService.grid = this as any;\n        this.selectionService.grid = this as any;\n        this.validation.grid = this as any;\n        this.navigation.grid = this as any;\n        this.filteringService.grid = this as any;\n        this.summaryService.grid = this as any;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public _setupListeners() {\n        const destructor = takeUntil<any>(this.destroy$);\n        fromEvent(this.nativeElement, 'focusout').pipe(filter(() => !!this.navigation.activeNode), destructor).subscribe((event) => {\n            const activeNode = this.navigation.activeNode;\n            if (!this.crudService.cell && !!activeNode &&\n                ((event.target === this.tbody.nativeElement && activeNode.row >= 0 &&\n                    activeNode.row < this.dataView.length)\n                    || (event.target === this.theadRow.nativeElement && activeNode.row === -1)\n                    || (event.target === this.tfoot.nativeElement && activeNode.row === this.dataView.length)) &&\n                !(this.rowEditable && this.crudService.rowEditingBlocked && this.crudService.rowInEditMode)) {\n                this.clearActiveNode();\n            }\n        });\n        this.rowAddedNotifier.pipe(destructor).subscribe(args => this.refreshGridState(args));\n        this.rowDeletedNotifier.pipe(destructor).subscribe(args => {\n            this.summaryService.deleteOperation = true;\n            this.summaryService.clearSummaryCache(args);\n        });\n\n        this.subscribeToTransactions();\n\n        this.resizeNotify.pipe(\n            filter(() => !this._init),\n            throttleTime(40, animationFrameScheduler, { leading: true, trailing: true }),\n            destructor\n        )\n        .subscribe(() => {\n            this.zone.run(() => {\n                // do not trigger reflow if element is detached.\n                if (this.nativeElement.isConnected) {\n                    if (this.shouldResize) {\n                        // resizing occurs due to the change of --ig-size css var\n                        this._gridSize = this.gridSize;\n                        this.updateDefaultRowHeight();\n                        this._autoSize = this.isPercentHeight && this.calcHeight !== this.getDataBasedBodyHeight();\n                        this.crudService.endEdit(false);\n                        if (this._summaryRowHeight === 0) {\n                            this.summaryService.summaryHeight = 0;\n                        }\n                    }\n                    this.notifyChanges(true);\n                }\n            });\n        });\n\n        this.pipeTriggerNotifier.pipe(takeUntil(this.destroy$)).subscribe(() => this.pipeTrigger++);\n        this.columnMovingEnd.pipe(destructor).subscribe(() => this.crudService.endEdit(false));\n\n        this.overlayService.opening.pipe(destructor).subscribe((event) => {\n            if (this._advancedFilteringOverlayId === event.id) {\n                const instance = event.componentRef.instance as IgxAdvancedFilteringDialogComponent;\n                if (instance) {\n                    instance.initialize(this as any, this.overlayService, event.id);\n                }\n            }\n        });\n\n        this.overlayService.opened.pipe(destructor).subscribe((event) => {\n            const overlaySettings = this.overlayService.getOverlayById(event.id)?.settings;\n\n            // do not hide the advanced filtering overlay on scroll\n            if (this._advancedFilteringOverlayId === event.id) {\n                const instance = event.componentRef.instance as IgxAdvancedFilteringDialogComponent;\n                if (instance) {\n                    instance.lastActiveNode = this.navigation.activeNode;\n                    instance.queryBuilder.setAddButtonFocus();\n                }\n                return;\n            }\n\n            // do not hide the overlay if it's attached to a row\n            if (this.rowEditingOverlay?.overlayId === event.id) {\n                return;\n            }\n\n            if (overlaySettings?.outlet === this.outlet && this.overlayIDs.indexOf(event.id) === -1) {\n                this.overlayIDs.push(event.id);\n            }\n        });\n\n        this.overlayService.closed.pipe(filter(() => !this._init), destructor).subscribe((event) => {\n            if (this._advancedFilteringOverlayId === event.id) {\n                this.overlayService.detach(this._advancedFilteringOverlayId);\n                this._advancedFilteringOverlayId = null;\n                return;\n            }\n\n            const ind = this.overlayIDs.indexOf(event.id);\n            if (ind !== -1) {\n                this.overlayIDs.splice(ind, 1);\n            }\n        });\n\n        this.verticalScrollContainer.dataChanging.pipe(filter(() => !this._init), destructor).subscribe(($event) => {\n            const shouldRecalcSize = this.isPercentHeight &&\n                (!this.calcHeight || this.calcHeight === this.getDataBasedBodyHeight() ||\n                    this.calcHeight === this.renderedRowHeight * this._defaultTargetRecordNumber);\n            if (shouldRecalcSize) {\n                this.calculateGridHeight();\n                $event.containerSize = this.calcHeight;\n            }\n            this.evaluateLoadingState();\n        });\n\n        this.verticalScrollContainer.scrollbarVisibilityChanged.pipe(filter(() => !this._init), destructor).subscribe(() => {\n            // called to recalc all widths that may have changes as a result of\n            // the vert. scrollbar showing/hiding\n            this.notifyChanges(true);\n            this.cdr.detectChanges();\n            Promise.resolve().then(() => this.headerContainer.updateScroll());\n        });\n\n\n        this.headerContainer?.scrollbarVisibilityChanged.pipe(filter(() => !this._init), destructor).subscribe(() => {\n            // the horizontal scrollbar showing/hiding\n            // update scrollbar visibility and recalc heights\n            this.notifyChanges(true);\n            this.cdr.detectChanges();\n        });\n\n        this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), throttleTime(30), destructor).subscribe(() => {\n            this.notifyChanges(true);\n        });\n\n        // notifier for column autosize requests\n        this._autoSizeColumnsNotify.pipe(\n            throttleTime(0, animationFrameScheduler, { leading: false, trailing: true }),\n            destructor\n        )\n        .subscribe(() => {\n            this.autoSizeColumnsInView();\n            this._firstAutoResize = false;\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        this._setupServices();\n        this._setupListeners();\n        this.rowListDiffer = this.differs.find([]).create(null);\n        // compare based on field, not on object ref.\n        this.columnListDiffer = this.differs.find([]).create((index, col: ColumnType) => col.field);\n        this.calcWidth = this.width && this.width.indexOf('%') === -1 ? parseInt(this.width, 10) : 0;\n        this.gridComputedStyles = this.document.defaultView.getComputedStyle(this.nativeElement);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetColumnsCaches() {\n        this._columns.forEach(column => column.resetCaches());\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public generateRowID(): string | number {\n        const primaryColumn = this._columns.find(col => col.field === this.primaryKey);\n        const idType = this.data.length ?\n            this.resolveDataTypes(this.data[0][this.primaryKey]) : primaryColumn ? primaryColumn.dataType : 'string';\n        return idType === 'string' ? crypto.randomUUID() : FAKE_ROW_ID--;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetForOfCache() {\n        const firstVirtRow = this.dataRowList.first;\n        if (firstVirtRow) {\n            if (this._cdrRequests) {\n                firstVirtRow.virtDirRow.cdr.detectChanges();\n            }\n            firstVirtRow.virtDirRow.assumeMaster();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public setFilteredData(data, pinned: boolean) {\n        if (this.hasPinnedRecords && pinned) {\n            this._filteredPinnedData = data || [];\n            const filteredUnpinned = this._filteredUnpinnedData || [];\n            const filteredData = [... this._filteredPinnedData, ...filteredUnpinned];\n            this._filteredData = filteredData.length > 0 ? filteredData : this._filteredUnpinnedData;\n        } else if (this.hasPinnedRecords && !pinned) {\n            this._filteredUnpinnedData = data;\n        } else {\n            this._filteredData = data;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetColumnCollections() {\n        if (this.hasColumnLayouts) {\n            this._columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n        this._visibleColumns.length = 0;\n        this._pinnedVisible.length = 0;\n        this._unpinnedVisible.length = 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetCachedWidths() {\n        this._unpinnedWidth = NaN;\n        this._pinnedWidth = NaN;\n        this._totalWidth = NaN;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetCaches(recalcFeatureWidth = true) {\n        if (recalcFeatureWidth) {\n            this._headerFeaturesWidth = NaN;\n            this.summaryService.summaryHeight = 0;\n        }\n        this.resetColumnsCaches();\n        this.resetColumnCollections();\n        this.resetForOfCache();\n        this.resetCachedWidths();\n        this.hasVisibleColumns = undefined;\n        this._columnGroups = this._columns.some(col => col.columnGroup);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit() {\n        if (this.sortHeaderIconDirectiveTemplate) {\n            this.sortHeaderIconTemplate = this.sortHeaderIconDirectiveTemplate;\n        }\n\n        if (this.sortAscendingHeaderIconDirectiveTemplate) {\n            this.sortAscendingHeaderIconTemplate = this.sortAscendingHeaderIconDirectiveTemplate;\n        }\n\n        if (this.sortDescendingHeaderIconDirectiveTemplate) {\n            this.sortDescendingHeaderIconTemplate = this.sortDescendingHeaderIconDirectiveTemplate;\n        }\n\n        this.setupColumns();\n        this.toolbar.changes.pipe(filter(() => !this._init), takeUntil(this.destroy$)).subscribe(() => this.notifyChanges(true));\n        this.setUpPaginator();\n        this.paginationComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.setUpPaginator();\n        });\n        if (this.actionStrip) {\n            this.actionStrip.menuOverlaySettings.outlet = this.outlet;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataRebinding(event: IForOfDataChangingEventArgs) {\n        if (event.state.chunkSize == 0) {\n            this._shouldRecalcRowHeight = true;\n        }\n        this.dataChanging.emit(event);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataRebound(event) {\n        this.selectionService.clearHeaderCBState();\n        if (this._shouldRecalcRowHeight) {\n            this._shouldRecalcRowHeight = false;\n            this.updateDefaultRowHeight();\n        }\n        this.dataChanged.emit(event);\n    }\n\n    /** @hidden @internal */\n    public createFilterDropdown(column: ColumnType, options: OverlaySettings) {\n        options.outlet = this.outlet;\n        if (this.excelStyleFilteringComponent) {\n            this.excelStyleFilteringComponent.initialize(column, this.overlayService);\n            const id = this.overlayService.attach(this.excelStyleFilteringComponent.element, options);\n            this.excelStyleFilteringComponent.overlayComponentId = id;\n            return id;\n        }\n        const id = this.overlayService.attach(IgxGridExcelStyleFilteringComponent, this.viewRef, options);\n        return id;\n    }\n\n    /** @hidden @internal */\n    public setUpPaginator() {\n        if (this.paginator) {\n            this.paginator.pageChange.pipe(takeWhile(() => !!this.paginator), filter(() => !this._init))\n                .subscribe(() => {\n                    this.selectionService.clear(true);\n                    this.crudService.endEdit(false);\n                    this.pipeTrigger++;\n                    this.navigateTo(0);\n                    this.notifyChanges();\n                });\n            this.paginator.perPageChange.pipe(takeWhile(() => !!this.paginator), filter(() => !this._init))\n                .subscribe(() => {\n                    this.selectionService.clear(true);\n                    this.page = 0;\n                    this.crudService.endEdit(false);\n                    this.notifyChanges();\n                });\n        } else {\n            this.markForCheck();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public setFilteredSortedData(data, pinned: boolean) {\n        data = data || [];\n        if (this.pinnedRecordsCount > 0) {\n            if (pinned) {\n                this._filteredSortedPinnedData = data;\n                this.pinnedRecords = data;\n                this._filteredSortedData = this.isRowPinningToTop ? [... this._filteredSortedPinnedData, ... this._filteredSortedUnpinnedData] :\n                    [... this._filteredSortedUnpinnedData, ... this._filteredSortedPinnedData];\n                this.refreshSearch(true, false);\n            } else {\n                this._filteredSortedUnpinnedData = data;\n            }\n        } else {\n            this._filteredSortedData = data;\n            this.refreshSearch(true, false);\n        }\n        this.buildDataView(data);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public resetHorizontalVirtualization() {\n        const elementFilter = (item: IgxRowDirective | IgxSummaryRowComponent) => this.isDefined(item.nativeElement.parentElement);\n        this._horizontalForOfs = [\n            ...this._dataRowList.filter(elementFilter).map(item => item.virtDirRow),\n            ...this._summaryRowList.filter(elementFilter).map(item => item.virtDirRow)\n        ];\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public _setupRowObservers() {\n        const elementFilter = (item: IgxRowDirective | IgxSummaryRowComponent) => this.isDefined(item.nativeElement.parentElement);\n        const extractForOfs = pipe(map((collection: any[]) => collection.filter(elementFilter).map(item => item.virtDirRow)));\n        const rowListObserver = extractForOfs(this._dataRowList.changes);\n        const summaryRowObserver = extractForOfs(this._summaryRowList.changes);\n        rowListObserver.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.resetHorizontalVirtualization();\n        });\n        summaryRowObserver.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.resetHorizontalVirtualization();\n        });\n        this.resetHorizontalVirtualization();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public _zoneBegoneListeners() {\n        this.zone.runOutsideAngular(() => {\n            this.verticalScrollContainer.getScroll().addEventListener('scroll', this.verticalScrollHandler.bind(this));\n            this.headerContainer?.getScroll().addEventListener('scroll', this.horizontalScrollHandler.bind(this));\n            if (this.hasColumnsToAutosize) {\n                this.headerContainer?.dataChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n                    this.cdr.detectChanges();\n                    this.zone.onStable.pipe(first()).subscribe(() => {\n                        this.autoSizeColumnsInView();\n                    });\n                });\n            }\n            // Window resize observer not needed because when you resize the window element the tbody container always resize so\n            // it would always notify resizing, thus a change detection and recalculation of sizes will occur\n            resizeObservable(this.nativeElement).pipe(first(), takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n            resizeObservable(this.tbodyContainer.nativeElement).pipe(takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        this.initPinning();\n        this.calculateGridSizes();\n        this._init = false;\n        this.cdr.reattach();\n        this._setupRowObservers();\n        this._zoneBegoneListeners();\n\n        const vertScrDC = this.verticalScrollContainer.displayContainer;\n        vertScrDC.addEventListener('scroll', this.preventContainerScroll.bind(this));\n\n        this._pinnedRowList.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxGridRowComponent>) => {\n                this.onPinnedRowsChanged(change);\n            });\n\n        this.addRowSnackbar?.clicked.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            const rec = this.filteredSortedData[this.lastAddedRowIndex];\n            this.scrollTo(rec, 0);\n            this.addRowSnackbar.close();\n        });\n\n        // Keep the stream open for future subscribers\n        this.rendered$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.paginator) {\n                this.paginator.totalRecords = this.totalRecords ? this.totalRecords : this.paginator.totalRecords;\n                this.paginator.overlaySettings = { outlet: this.outlet };\n            }\n            if (this.hasColumnsToAutosize) {\n                this.autoSizeColumnsInView();\n            }\n            this._rendered = true;\n        });\n        Promise.resolve().then(() => this.rendered.next(true));\n\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public notifyChanges(repaint = false) {\n        this._cdrRequests = true;\n        this._cdrRequestRepaint = repaint;\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        if (this._init) {\n            return;\n        }\n\n        if (this._cdrRequestRepaint) {\n            this.resetNotifyChanges();\n            this.calculateGridSizes();\n            this.refreshSearch(true);\n            return;\n        }\n\n        if (this._cdrRequests) {\n            this.resetNotifyChanges();\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getDragGhostCustomTemplate() {\n\n        return this.dragGhostCustomTemplate;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy() {\n        this.tmpOutlets.forEach((tmplOutlet) => {\n            tmplOutlet.cleanCache();\n        });\n\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        this.transactionChange$.next();\n        this.transactionChange$.complete();\n        this._destroyed = true;\n\n        this.textHighlightService.destroyGroup(this.id);\n\n        if (this._advancedFilteringOverlayId) {\n            this.overlayService.detach(this._advancedFilteringOverlayId);\n            delete this._advancedFilteringOverlayId;\n        }\n\n        this.overlayIDs.forEach(overlayID => {\n            const overlay = this.overlayService.getOverlayById(overlayID);\n\n            if (overlay && !overlay.detached) {\n                this.overlayService.detach(overlayID);\n            }\n        });\n\n\n        this.zone.runOutsideAngular(() => {\n            this.verticalScrollContainer?.getScroll()?.removeEventListener('scroll', this.verticalScrollHandler);\n            this.headerContainer?.getScroll()?.removeEventListener('scroll', this.horizontalScrollHandler);\n            const vertScrDC = this.verticalScrollContainer?.displayContainer;\n            vertScrDC?.removeEventListener('scroll', this.preventContainerScroll);\n        });\n    }\n\n    /**\n     * Toggles the specified column's visibility.\n     *\n     * @example\n     * ```typescript\n     * this.grid1.toggleColumnVisibility({\n     *       column: this.grid1.columns[0],\n     *       newValue: true\n     * });\n     * ```\n     */\n    public toggleColumnVisibility(args: IColumnVisibilityChangedEventArgs) {\n        const col = args.column ? this._columns.find((c) => c === args.column) : undefined;\n\n        if (!col) {\n            return;\n        }\n        col.toggleVisibility(args.newValue);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets/Sets a list of key-value pairs [row ID, expansion state].\n     *\n     * @remarks\n     * Includes only states that differ from the default one.\n     * Supports two-way binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"data\" [(expansionStates)]=\"model.expansionStates\">\n     * </igx-grid>\n     * ```\n     */\n    @Input()\n    public get expansionStates() {\n        return this._expansionStates;\n    }\n\n    /* blazorSuppress */\n    public set expansionStates(value) {\n        this._expansionStates = new Map<any, boolean>(value);\n        this.expansionStatesChange.emit(this._expansionStates);\n        this.notifyChanges(true);\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * Expands all rows.\n     *\n     * @example\n     * ```typescript\n     * this.grid.expandAll();\n     * ```\n     */\n    public expandAll() {\n        this._defaultExpandState = true;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Collapses all rows.\n     *\n     * @example\n     * ```typescript\n     * this.grid.collapseAll();\n     * ```\n     */\n    public collapseAll() {\n        this._defaultExpandState = false;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Expands the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.expandRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public expandRow(rowID: any) {\n        this.gridAPI.set_row_expansion_state(rowID, true);\n    }\n\n    /**\n     * Collapses the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.collapseRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public collapseRow(rowID: any) {\n        this.gridAPI.set_row_expansion_state(rowID, false);\n    }\n\n\n    /**\n     * Toggles the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.toggleRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public toggleRow(rowID: any) {\n        const rec = this.gridAPI.get_rec_by_id(rowID);\n        const state = this.gridAPI.get_row_expansion_state(rec);\n        this.gridAPI.set_row_expansion_state(rowID, !state);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getDefaultExpandState(_rec: any) {\n        return this._defaultExpandState;\n    }\n\n    /**\n     * Gets the native element.\n     *\n     * @example\n     * ```typescript\n     * const nativeEl = this.grid.nativeElement.\n     * ```\n     */\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * Gets/Sets the outlet used to attach the grid's overlays to.\n     *\n     * @remarks\n     * If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.\n     */\n    @Input()\n    public get outlet() {\n        return this.resolveOutlet();\n    }\n\n    public set outlet(val: IgxOverlayOutletDirective) {\n        this._userOutletDirective = val;\n    }\n\n\n    /**\n     * Gets the default row height.\n     *\n     * @example\n     * ```typescript\n     * const rowHeigh = this.grid.defaultRowHeight;\n     * ```\n     */\n    public get defaultRowHeight(): number {\n        return this._defaultRowHeight;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get defaultSummaryHeight(): number {\n        switch (this.gridSize) {\n            case Size.Medium:\n                return 30;\n            case Size.Small:\n                return 24;\n            default:\n                return 36;\n        }\n    }\n\n    /**\n     * Returns the `IgxGridHeaderGroupComponent`'s minimum allowed width.\n     *\n     * @remarks\n     * Used internally for restricting header group component width.\n     * The values below depend on the header cell default right/left padding values.\n     */\n    public get defaultHeaderGroupMinWidth(): number {\n        switch (this.gridSize) {\n            case Size.Medium:\n                return 32;\n            case Size.Small:\n                return 24;\n            default:\n                return 48;\n        }\n    }\n\n    /** @hidden @internal */\n    public get pinnedWidth() {\n        if (!isNaN(this._pinnedWidth)) {\n            return this._pinnedWidth;\n        }\n        this._pinnedWidth = this.getPinnedWidth();\n        return this._pinnedWidth;\n    }\n\n    /** @hidden @internal */\n    public get unpinnedWidth() {\n        if (!isNaN(this._unpinnedWidth)) {\n            return this._unpinnedWidth;\n        }\n        this._unpinnedWidth = this.getUnpinnedWidth();\n        return this._unpinnedWidth;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isHorizontalScrollHidden = false;\n\n    /**\n     * @hidden @internal\n     * Gets the header cell inner width for auto-sizing.\n     */\n    public getHeaderCellWidth(element: HTMLElement): ISizeInfo {\n        const range = this.document.createRange();\n        const headerWidth = this.platform.getNodeSizeViaRange(range,\n            element,\n            element.parentElement);\n\n        const headerStyle = this.document.defaultView.getComputedStyle(element);\n        const headerPadding = parseFloat(headerStyle.paddingLeft) + parseFloat(headerStyle.paddingRight) +\n            parseFloat(headerStyle.borderRightWidth);\n\n        // Take into consideration the header group element, since column pinning applies borders to it if its not a columnGroup.\n        const headerGroupStyle = this.document.defaultView.getComputedStyle(element.parentElement);\n        const borderSize = parseFloat(headerGroupStyle.borderRightWidth) + parseFloat(headerGroupStyle.borderLeftWidth);\n        return { width: Math.ceil(headerWidth), padding: Math.ceil(headerPadding + borderSize) };\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the combined width of the columns that are specific to the enabled grid features. They are fixed.\n     */\n    public featureColumnsWidth(expander?: ElementRef) {\n        if (Number.isNaN(this._headerFeaturesWidth)) {\n            // TODO: platformUtil.isBrowser check\n            const rowSelectArea = this.headerSelectorContainer?.nativeElement?.getBoundingClientRect ?\n                this.headerSelectorContainer.nativeElement.getBoundingClientRect().width : 0;\n            const rowDragArea = this.rowDraggable && this.headerDragContainer?.nativeElement?.getBoundingClientRect ?\n                this.headerDragContainer.nativeElement.getBoundingClientRect().width : 0;\n            const groupableArea = this.headerGroupContainer?.nativeElement?.getBoundingClientRect ?\n                this.headerGroupContainer.nativeElement.getBoundingClientRect().width : 0;\n            const expanderWidth = expander?.nativeElement?.getBoundingClientRect ? expander.nativeElement.getBoundingClientRect().width : 0;\n            this._headerFeaturesWidth = rowSelectArea + rowDragArea + groupableArea + expanderWidth;\n        }\n        return this._headerFeaturesWidth;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get summariesMargin() {\n        return this.featureColumnsWidth();\n    }\n\n    /**\n     * Gets an array of `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const colums = this.grid.columns.\n     * ```\n     */\n    public get columns(): IgxColumnComponent[] {\n        return this._columns || [];\n    }\n\n    /**\n     * Gets an array of the pinned `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const pinnedColumns = this.grid.pinnedColumns.\n     * ```\n     */\n    public get pinnedColumns(): IgxColumnComponent[] {\n        if (this._pinnedVisible.length) {\n            return this._pinnedVisible;\n        }\n        this._pinnedVisible = this._pinnedColumns.filter(col => !col.hidden);\n        return this._pinnedVisible;\n    }\n\n    /* csSuppress */\n    /**\n     * Gets an array of the pinned `IgxRowComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const pinnedRow = this.grid.pinnedRows;\n     * ```\n     */\n    public get pinnedRows(): IgxGridRowComponent[] {\n        return this._pinnedRowList.toArray().sort((a, b) => a.index - b.index);\n    }\n\n    /**\n     * Gets an array of unpinned `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const unpinnedColumns = this.grid.unpinnedColumns.\n     * ```\n     */\n    public get unpinnedColumns(): IgxColumnComponent[] {\n        if (this._unpinnedVisible.length) {\n            return this._unpinnedVisible;\n        }\n        this._unpinnedVisible = this._unpinnedColumns.filter((col) => !col.hidden);\n        return this._unpinnedVisible;\n    }\n\n    /**\n     * Gets the `width` to be set on `IgxGridHeaderGroupComponent`.\n     */\n    public getHeaderGroupWidth(column: IgxColumnComponent): string {\n        return this.hasColumnLayouts\n            ? ''\n            : `${Math.max(parseFloat(column.calcWidth), this.defaultHeaderGroupMinWidth)}px`;\n    }\n\n    /**\n     * Returns the `IgxColumnComponent` by field name.\n     *\n     * @example\n     * ```typescript\n     * const myCol = this.grid1.getColumnByName(\"ID\");\n     * ```\n     * @param name\n     */\n    public getColumnByName(name: string): IgxColumnComponent {\n        return this._columns.find((col) => col.field === name);\n    }\n\n    public getColumnByVisibleIndex(index: number): IgxColumnComponent {\n        return this.visibleColumns.find((col) =>\n            !col.columnGroup && !col.columnLayout &&\n            col.visibleIndex === index\n        );\n    }\n\n    /**\n     * Recalculates all widths of columns that have size set to `auto`.\n     *\n     * @example\n     * ```typescript\n     * this.grid1.recalculateAutoSizes();\n     * ```\n     */\n    public recalculateAutoSizes() {\n        // reset auto-size and calculate it again.\n        this._columns.forEach(x => x.autoSize = undefined);\n        this.resetCaches();\n        this.zone.onStable.pipe(first()).subscribe(() => {\n            this.cdr.detectChanges();\n            this.autoSizeColumnsInView();\n        });\n    }\n\n    /**\n     * Returns an array of visible `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const visibleColumns = this.grid.visibleColumns.\n     * ```\n     */\n    public get visibleColumns(): IgxColumnComponent[] {\n        if (this._visibleColumns.length) {\n            return this._visibleColumns;\n        }\n        this._visibleColumns = this._columns.filter(c => !c.hidden);\n        return this._visibleColumns;\n    }\n\n    /**\n     * Returns the total number of records.\n     *\n     * @remarks\n     * Only functions when paging is enabled.\n     * @example\n     * ```typescript\n     * const totalRecords = this.grid.totalRecords;\n     * ```\n     */\n    @Input()\n    public get totalRecords(): number {\n        return this._totalRecords >= 0 ? this._totalRecords : this.pagingState?.metadata.countRecords;\n    }\n\n    public set totalRecords(total: number) {\n        if (total >= 0) {\n            if (this.paginator) {\n                this.paginator.totalRecords = total;\n            }\n            this._totalRecords = total;\n            this.pipeTrigger++;\n            this.notifyChanges();\n        }\n    }\n\n    /** @hidden @internal */\n    public get totalWidth(): number {\n        if (!isNaN(this._totalWidth)) {\n            return this._totalWidth;\n        }\n        // Take only top level columns\n        const cols = this.visibleColumns.filter(col => col.level === 0 && !col.pinned);\n        let totalWidth = 0;\n        let i = 0;\n        for (i; i < cols.length; i++) {\n            totalWidth += parseFloat(cols[i].calcWidth) || 0;\n        }\n        this._totalWidth = totalWidth;\n        return totalWidth;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get showRowSelectors(): boolean {\n        return this.isRowSelectable && this.hasVisibleColumns && !this.hideRowSelectors;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get showAddButton() {\n        return this.rowEditable && this.dataView.length === 0 && this._columns.length > 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get showDragIcons(): boolean {\n        return this.rowDraggable && this._columns.length > this.hiddenColumnsCount;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected _getDataViewIndex(index: number): number {\n        let newIndex = index;\n        if ((index < 0 || index >= this.dataView.length) && this.pagingMode === 1 && this.page !== 0) {\n            newIndex = index - this.perPage * this.page;\n        } else if (this.gridAPI.grid.verticalScrollContainer.isRemote) {\n            newIndex = index - this.gridAPI.grid.virtualizationState.startIndex;\n        }\n        return newIndex;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected getDataIndex(dataViewIndex: number): number {\n        let newIndex = dataViewIndex;\n        if (this.gridAPI.grid.verticalScrollContainer.isRemote) {\n            newIndex = dataViewIndex + this.gridAPI.grid.virtualizationState.startIndex;\n        }\n        return newIndex;\n    }\n\n    /**\n     * Places a column before or after the specified target column.\n     *\n     * @example\n     * ```typescript\n     * grid.moveColumn(column, target);\n     * ```\n     */\n    public moveColumn(column: IgxColumnComponent, target: IgxColumnComponent, pos: DropPosition = DropPosition.AfterDropTarget) {\n        // M.A. May 11th, 2021 #9508 Make the event cancelable\n        const eventArgs: IColumnMovingEndEventArgs = { source: column, target, cancel: false };\n\n        this.columnMovingEnd.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        if (column === target || (column.level !== target.level) ||\n            (column.topLevelParent !== target.topLevelParent)) {\n            return;\n        }\n\n        if (column.level) {\n            this._moveChildColumns(column.parent, column, target, pos);\n        }\n\n        // let columnPinStateChanged;\n        // pinning and unpinning will work correctly even without passing index\n        // but is easier to calclulate the index here, and later use it in the pinning event args\n        if (target.pinned && !column.pinned) {\n            const pinnedIndex = this._pinnedColumns.indexOf(target);\n            const index = pos === DropPosition.AfterDropTarget ? pinnedIndex + 1 : pinnedIndex;\n            column.pin(index);\n        }\n\n        if (!target.pinned && column.pinned) {\n            const unpinnedIndex = this._unpinnedColumns.indexOf(target);\n            const index = pos === DropPosition.AfterDropTarget ? unpinnedIndex + 1 : unpinnedIndex;\n            column.unpin(index);\n        }\n\n        // if (target.pinned && column.pinned && !columnPinStateChanged) {\n        //     this._reorderColumns(column, target, pos, this._pinnedColumns);\n        // }\n\n        // if (!target.pinned && !column.pinned && !columnPinStateChanged) {\n        //     this._reorderColumns(column, target, pos, this._unpinnedColumns);\n        // }\n\n        this._moveColumns(column, target, pos);\n        this._columnsReordered(column);\n    }\n\n    /**\n     * Triggers change detection for the `IgxGridComponent`.\n     * Calling markForCheck also triggers the grid pipes explicitly, resulting in all updates being processed.\n     * May degrade performance if used when not needed, or if misused:\n     * ```typescript\n     * // DON'Ts:\n     * // don't call markForCheck from inside a loop\n     * // don't call markForCheck when a primitive has changed\n     * grid.data.forEach(rec => {\n     *  rec = newValue;\n     *  grid.markForCheck();\n     * });\n     *\n     * // DOs\n     * // call markForCheck after updating a nested property\n     * grid.data.forEach(rec => {\n     *  rec.nestedProp1.nestedProp2 = newValue;\n     * });\n     * grid.markForCheck();\n     * ```\n     *\n     * @example\n     * ```typescript\n     * grid.markForCheck();\n     * ```\n     */\n    public markForCheck() {\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /* csSuppress */\n    /**\n     * Creates a new `IgxGridRowComponent` and adds the data record to the end of the data source.\n     *\n     * @example\n     * ```typescript\n     * this.grid1.addRow(record);\n     * ```\n     * @param data\n     */\n    public addRow(data: any): void {\n        // commit pending states prior to adding a row\n        this.crudService.endEdit(true);\n        this.gridAPI.addRowToData(data);\n\n        this.pipeTrigger++;\n        this.rowAddedNotifier.next({ data: data, rowData: data, owner: this, primaryKey: data[this.primaryKey], rowKey: data[this.primaryKey] });\n        this.notifyChanges();\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Removes the `IgxGridRowComponent` and the corresponding data record by primary key.\n     *\n     * @remarks\n     * Requires that the `primaryKey` property is set.\n     * The method accept rowSelector as a parameter, which is the rowID.\n     * @example\n     * ```typescript\n     * this.grid1.deleteRow(0);\n     * ```\n     * @param rowSelector\n     */\n    public deleteRow(rowSelector: any): any {\n        if (this.primaryKey !== undefined && this.primaryKey !== null) {\n            return this.deleteRowById(rowSelector);\n        }\n    }\n\n    /** @hidden */\n    public deleteRowById(rowId: any): any {\n        const args: IRowDataCancelableEventArgs = {\n            rowID: rowId,\n            primaryKey: rowId,\n            rowKey: rowId,\n            rowData: this.getRowData(rowId),\n            data: this.getRowData(rowId),\n            oldValue: this.getRowData(rowId),\n            owner: this,\n            isAddRow: false,\n            cancel: false\n        };\n        this.rowDelete.emit(args);\n        if (args.cancel) {\n            return;\n        }\n\n        const record = this.gridAPI.deleteRowById(rowId);\n        if (record !== null && record !== undefined) {\n            const rowDeletedEventArgs: IRowDataEventArgs = {\n                data: record,\n                rowData: record,\n                owner: this,\n                primaryKey: record[this.primaryKey],\n                rowKey: record[this.primaryKey]\n            };\n            this.rowDeleted.emit(rowDeletedEventArgs);\n        }\n        return record;\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Updates the `IgxGridRowComponent` and the corresponding data record by primary key.\n     *\n     * @remarks\n     * Requires that the `primaryKey` property is set.\n     * @example\n     * ```typescript\n     * this.gridWithPK.updateCell('Updated', 1, 'ProductName');\n     * ```\n     * @param value the new value which is to be set.\n     * @param rowSelector corresponds to rowID.\n     * @param column corresponds to column field.\n     */\n    public updateCell(value: any, rowSelector: any, column: string): void {\n        if (this.isDefined(this.primaryKey)) {\n            const col = this._columns.find(c => c.field === column);\n            if (col) {\n                // Simplify\n                const rowData = this.gridAPI.getRowData(rowSelector);\n                const index = this.gridAPI.get_row_index_in_data(rowSelector);\n                // If row passed is invalid\n                if (index < 0) {\n                    return;\n                }\n\n                const id = {\n                    rowID: rowSelector,\n                    columnID: col.index,\n                    rowIndex: index\n                };\n\n                const cell = new IgxCell(id, index, col, rowData[col.field], value, rowData, this as any);\n                const formControl = this.validation.getFormControl(cell.id.rowID, cell.column.field);\n                formControl.setValue(value);\n                this.gridAPI.update_cell(cell);\n                this.cdr.detectChanges();\n            }\n        }\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Updates the `IgxGridRowComponent`\n     *\n     * @remarks\n     * The row is specified by\n     * rowSelector parameter and the data source record with the passed value.\n     * This method will apply requested update only if primary key is specified in the grid.\n     * @example\n     * ```typescript\n     * grid.updateRow({\n     *       ProductID: 1, ProductName: 'Spearmint', InStock: true, UnitsInStock: 1, OrderDate: new Date('2005-03-21')\n     *   }, 1);\n     * ```\n     * @param value–\n     * @param rowSelector correspond to rowID\n     */\n    // TODO: prevent event invocation\n    public updateRow(value: any, rowSelector: any): void {\n        if (this.isDefined(this.primaryKey)) {\n            const editableCell = this.crudService.cell;\n            if (editableCell && editableCell.id.rowID === rowSelector) {\n                this.crudService.endCellEdit();\n            }\n            const row = new IgxEditRow(rowSelector, -1, this.gridAPI.getRowData(rowSelector), this as any);\n            this.gridAPI.update_row(row, value);\n\n            // TODO: fix for #5934 and probably break for #5763\n            // consider adding of third optional boolean parameter in updateRow.\n            // If developer set this parameter to true we should call notifyChanges(true), and\n            // vise-versa if developer set it to false we should call notifyChanges(false).\n            // The parameter should default to false\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Returns the data that is contained in the row component.\n     *\n     * @remarks\n     * If the primary key is not specified the row selector match the row data.\n     * @example\n     * ```typescript\n     * const data = grid.getRowData(94741);\n     * ```\n     * @param rowSelector correspond to rowID\n     */\n    public getRowData(rowSelector: any): any {\n        if (!this.primaryKey) {\n            return rowSelector;\n        }\n        const data = this.gridAPI.get_all_data(this.transactions.enabled);\n        const index = this.gridAPI.get_row_index_in_data(rowSelector);\n        return index < 0 ? {} : data[index];\n    }\n\n    /**\n     * Sort a single `IgxColumnComponent`.\n     *\n     * @remarks\n     * Sort the `IgxGridComponent`'s `IgxColumnComponent` based on the provided array of sorting expressions.\n     * @example\n     * ```typescript\n     * this.grid.sort({ fieldName: name, dir: SortingDirection.Asc, ignoreCase: false });\n     * ```\n     */\n    public sort(expression: ISortingExpression | Array<ISortingExpression>): void {\n        const sortingState = cloneArray(this.sortingExpressions);\n\n        if (expression instanceof Array) {\n            for (const each of expression) {\n                this.gridAPI.prepare_sorting_expression([sortingState], each);\n            }\n        } else {\n            if (this._sortingOptions.mode === 'single') {\n                this._columns.forEach((col) => {\n                    if (!(col.field === expression.fieldName)) {\n                        this.clearSort(col.field);\n                    }\n                });\n            }\n            this.gridAPI.prepare_sorting_expression([sortingState], expression);\n        }\n\n        const eventArgs: ISortingEventArgs = { owner: this, sortingExpressions: sortingState, cancel: false };\n        this.sorting.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        this.crudService.endEdit(false);\n        if (expression instanceof Array) {\n            this.gridAPI.sort_multiple(expression);\n        } else {\n            this.gridAPI.sort(expression);\n        }\n        requestAnimationFrame(() => this.sortingDone.emit(expression));\n    }\n\n    /**\n     * Filters a single `IgxColumnComponent`.\n     *\n     * @example\n     * ```typescript\n     * public filter(term) {\n     *      this.grid.filter(\"ProductName\", term, IgxStringFilteringOperand.instance().condition(\"contains\"));\n     * }\n     * ```\n     * @param name\n     * @param value\n     * @param conditionOrExpressionTree\n     * @param ignoreCase\n     */\n    public filter(name: string, value: any, conditionOrExpressionTree?: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase?: boolean) {\n        this.filteringService.filter(name, value, conditionOrExpressionTree, ignoreCase);\n    }\n\n    /**\n     * Filters all the `IgxColumnComponent` in the `IgxGridComponent` with the same condition.\n     *\n     * @example\n     * ```typescript\n     * grid.filterGlobal('some', IgxStringFilteringOperand.instance().condition('contains'));\n     * ```\n     * @param value\n     * @param condition\n     * @param ignoreCase\n     * @deprecated in version 19.0.0.\n     */\n    public filterGlobal(value: any, condition, ignoreCase?) {\n        this.filteringService.filterGlobal(value, condition, ignoreCase);\n    }\n\n    /**\n     * Enables summaries for the specified column and applies your customSummary.\n     *\n     * @remarks\n     * If you do not provide the customSummary, then the default summary for the column data type will be applied.\n     * @example\n     * ```typescript\n     * grid.enableSummaries([{ fieldName: 'ProductName' }, { fieldName: 'ID' }]);\n     * ```\n     * Enable summaries for the listed columns.\n     * @example\n     * ```typescript\n     * grid.enableSummaries('ProductName');\n     * ```\n     * @param rest\n     */\n    public enableSummaries(...rest) {\n        if (rest.length === 1 && Array.isArray(rest[0])) {\n            this._multipleSummaries(rest[0], true);\n        } else {\n            this._summaries(rest[0], true, rest[1]);\n        }\n    }\n\n    /**\n     * Disable summaries for the specified column.\n     *\n     * @example\n     * ```typescript\n     * grid.disableSummaries('ProductName');\n     * ```\n     * @remarks\n     * Disable summaries for the listed columns.\n     * @example\n     * ```typescript\n     * grid.disableSummaries([{ fieldName: 'ProductName' }]);\n     * ```\n     */\n    public disableSummaries(...rest) {\n        if (rest.length === 1 && Array.isArray(rest[0])) {\n            this._disableMultipleSummaries(rest[0]);\n        } else {\n            this._summaries(rest[0], false);\n        }\n    }\n\n    /**\n     * If name is provided, clears the filtering state of the corresponding `IgxColumnComponent`.\n     *\n     * @remarks\n     * Otherwise clears the filtering state of all `IgxColumnComponent`s.\n     * @example\n     * ```typescript\n     * this.grid.clearFilter();\n     * ```\n     * @param name\n     */\n    public clearFilter(name?: string) {\n        this.filteringService.clearFilter(name);\n    }\n\n    /**\n     * If name is provided, clears the sorting state of the corresponding `IgxColumnComponent`.\n     *\n     * @remarks\n     * otherwise clears the sorting state of all `IgxColumnComponent`.\n     * @example\n     * ```typescript\n     * this.grid.clearSort();\n     * ```\n     * @param name\n     */\n    public clearSort(name?: string) {\n        if (!name) {\n            this.sortingExpressions = [];\n            return;\n        }\n        if (!this.gridAPI.get_column_by_name(name)) {\n            return;\n        }\n        this.gridAPI.clear_sort(name);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public refreshGridState(_args?) {\n        this.crudService.endEdit(true);\n        this.selectionService.clearHeaderCBState();\n        this.summaryService.clearSummaryCache();\n        this.summaryPipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    // TODO: We have return values here. Move them to event args ??\n\n    /**\n     * Pins a column by field name.\n     *\n     * @remarks\n     * Returns whether the operation is successful.\n     * @example\n     * ```typescript\n     * this.grid.pinColumn(\"ID\");\n     * ```\n     * @param columnName\n     * @param index\n     */\n    public pinColumn(columnName: string | IgxColumnComponent, index?: number): boolean {\n        const col = columnName instanceof IgxColumnComponent ? columnName : this.getColumnByName(columnName);\n        return col.pin(index);\n    }\n\n    /**\n     * Unpins a column by field name. Returns whether the operation is successful.\n     *\n     * @example\n     * ```typescript\n     * this.grid.pinColumn(\"ID\");\n     * ```\n     * @param columnName\n     * @param index\n     */\n    public unpinColumn(columnName: string | IgxColumnComponent, index?: number): boolean {\n        const col = columnName instanceof IgxColumnComponent ? columnName : this.getColumnByName(columnName);\n        return col.unpin(index);\n    }\n\n    /* csSuppress */\n    /**\n     * Pin the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.pinRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     * @param index The index at which to insert the row in the pinned collection.\n     */\n    public pinRow(rowID: any, index?: number, row?: RowType): boolean {\n        if (this._pinnedRecordIDs.indexOf(rowID) !== -1) {\n            return false;\n        }\n        const eventArgs = this.gridAPI.get_pin_row_event_args(rowID, index, row, true);\n        this.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        this.crudService.endEdit(false);\n\n        const insertIndex = typeof eventArgs.insertAtIndex === 'number' ? eventArgs.insertAtIndex : this._pinnedRecordIDs.length;\n        this._pinnedRecordIDs.splice(insertIndex, 0, rowID);\n        this.pipeTrigger++;\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n            this.rowPinned.emit(eventArgs);\n        }\n\n        return true;\n    }\n\n    /* csSuppress */\n    /**\n     * Unpin the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.unpinRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public unpinRow(rowID: any, row?: RowType): boolean {\n        const index = this._pinnedRecordIDs.indexOf(rowID);\n        if (index === -1) {\n            return false;\n        }\n\n        const eventArgs = this.gridAPI.get_pin_row_event_args(rowID, null, row, false);\n        this.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        this.crudService.endEdit(false);\n        this._pinnedRecordIDs.splice(index, 1);\n        this.pipeTrigger++;\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n            this.rowPinned.emit(eventArgs);\n        }\n\n        return true;\n    }\n\n    /** @hidden @internal */\n    public get pinnedRowHeight() {\n        const containerHeight = this.pinContainer ? this.pinContainer.nativeElement.offsetHeight : 0;\n        return this.hasPinnedRecords ? containerHeight : 0;\n    }\n\n    /** @hidden @internal */\n    public get totalHeight() {\n        return this.calcHeight ? this.calcHeight + this.pinnedRowHeight : this.calcHeight;\n    }\n\n    /**\n     * Recalculates grid width/height dimensions.\n     *\n     * @remarks\n     * Should be run when changing DOM elements dimentions manually that affect the grid's size.\n     * @example\n     * ```typescript\n     * this.grid.reflow();\n     * ```\n     */\n    public reflow() {\n        this.calculateGridSizes();\n    }\n\n    /**\n     * Finds the next occurrence of a given string in the grid and scrolls to the cell if it isn't visible.\n     *\n     * @remarks\n     * Returns how many times the grid contains the string.\n     * @example\n     * ```typescript\n     * this.grid.findNext(\"financial\");\n     * ```\n     * @param text the string to search.\n     * @param caseSensitive optionally, if the search should be case sensitive (defaults to false).\n     * @param exactMatch optionally, if the text should match the entire value  (defaults to false).\n     */\n    public findNext(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        return this.find(text, 1, caseSensitive, exactMatch);\n    }\n\n    /**\n     * Finds the previous occurrence of a given string in the grid and scrolls to the cell if it isn't visible.\n     *\n     * @remarks\n     * Returns how many times the grid contains the string.\n     * @example\n     * ```typescript\n     * this.grid.findPrev(\"financial\");\n     * ```\n     * @param text the string to search.\n     * @param caseSensitive optionally, if the search should be case sensitive (defaults to false).\n     * @param exactMatch optionally, if the text should match the entire value (defaults to false).\n     */\n    public findPrev(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        return this.find(text, -1, caseSensitive, exactMatch);\n    }\n\n    /**\n     * Reapplies the existing search.\n     *\n     * @remarks\n     * Returns how many times the grid contains the last search.\n     * @example\n     * ```typescript\n     * this.grid.refreshSearch();\n     * ```\n     * @param updateActiveInfo\n     */\n    public refreshSearch(updateActiveInfo?: boolean, endEdit = true): number {\n        if (this._lastSearchInfo.searchText) {\n            this.rebuildMatchCache();\n\n            if (updateActiveInfo) {\n                const activeInfo = this.textHighlightService.highlightGroupsMap.get(this.id);\n                this._lastSearchInfo.matchInfoCache.forEach((match, i) => {\n                    if (match.column === activeInfo.column &&\n                        match.row === activeInfo.row &&\n                        match.index === activeInfo.index &&\n                        compareMaps(match.metadata, activeInfo.metadata)) {\n                        this._lastSearchInfo.activeMatchIndex = i;\n                    }\n                });\n            }\n\n            return this.find(this._lastSearchInfo.searchText,\n                0,\n                this._lastSearchInfo.caseSensitive,\n                this._lastSearchInfo.exactMatch,\n                false,\n                endEdit);\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Removes all the highlights in the cell.\n     *\n     * @example\n     * ```typescript\n     * this.grid.clearSearch();\n     * ```\n     */\n    public clearSearch() {\n        this._lastSearchInfo = {\n            searchText: '',\n            caseSensitive: false,\n            exactMatch: false,\n            activeMatchIndex: 0,\n            matchInfoCache: [],\n            matchCount: 0,\n            content: ''\n        };\n\n        this.rowList.forEach((row) => {\n            if (row.cells) {\n                row.cells.forEach((c: IgxGridCellComponent) => {\n                    c.clearHighlight();\n                });\n            }\n        });\n    }\n\n    /** @hidden @internal */\n    public get hasEditableColumns(): boolean {\n        return this._columns.some((col) => col.editable);\n    }\n\n    /** @hidden @internal */\n    public get hasSummarizedColumns(): boolean {\n        const summarizedColumns = this._columns.filter(col => col.hasSummary && !col.hidden);\n        return summarizedColumns.length > 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rootSummariesEnabled(): boolean {\n        return this.summaryCalculationMode !== GridSummaryCalculationMode.childLevelsOnly;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get hasVisibleColumns(): boolean {\n        if (this._hasVisibleColumns === undefined) {\n            return this._columns ? this._columns.some(c => !c.hidden) : false;\n        }\n        return this._hasVisibleColumns;\n    }\n\n    public set hasVisibleColumns(value) {\n        this._hasVisibleColumns = value;\n    }\n\n    /** @hidden @internal */\n    public get hasMovableColumns(): boolean {\n        return this.moving;\n    }\n\n    /** @hidden @internal */\n    public get hasColumnGroups(): boolean {\n        return this._columnGroups;\n    }\n\n    /** @hidden @internal */\n    public get hasColumnLayouts() {\n        return !!this._columns.some(col => col.columnLayout);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public get multiRowLayoutRowSize() {\n        return this._multiRowLayoutRowSize;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get rowBasedHeight() {\n        return this.dataLength * this.rowHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get isPercentWidth() {\n        return this.width && this.width.indexOf('%') !== -1;\n    }\n\n    protected get shouldResize(): boolean {\n        return this._gridSize !== this.gridSize;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isPercentHeight() {\n        return this._height && this._height.indexOf('%') !== -1;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get defaultTargetBodyHeight(): number {\n        const allItems = this.dataLength;\n        return this.renderedActualRowHeight * Math.min(this._defaultTargetRecordNumber,\n            this.paginator ? Math.min(allItems, this.paginator.perPage) : allItems);\n    }\n\n    /**\n     * @hidden @internal\n     * The rowHeight input is bound to min-height css prop of rows that adds a 1px border in all cases\n     */\n    public get renderedRowHeight(): number {\n        return this.rowHeight + 1;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get outerWidth() {\n        return this.hasVerticalScroll() ? this.calcWidth + this.scrollSize : this.calcWidth;\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the size of the grid\n     */\n    public get gridSize(): Size {\n        return this.gridComputedStyles?.getPropertyValue('--component-size') || Size.Large;\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the visible content height that includes header + tbody + footer.\n     */\n    public getVisibleContentHeight() {\n        let height = this.theadRow.nativeElement.clientHeight + this.tbody.nativeElement.clientHeight;\n        if (this.hasSummarizedColumns) {\n            height += this.tfoot.nativeElement.clientHeight;\n        }\n        return height;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getPossibleColumnWidth(baseWidth: number = null) {\n        let computedWidth;\n        if (baseWidth !== null) {\n            computedWidth = baseWidth;\n        } else {\n            computedWidth = this.calcWidth ||\n                parseFloat(this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('width'));\n        }\n\n        const visibleChildColumns = this.visibleColumns.filter(c => !c.columnGroup);\n\n\n        // Column layouts related\n        let visibleCols = [];\n        const columnBlocks = this.visibleColumns.filter(c => c.columnGroup);\n        const colsPerBlock = columnBlocks.map(block => block.getInitialChildColumnSizes(block.children));\n        const combinedBlocksSize = colsPerBlock.reduce((acc, item) => acc + item.length, 0);\n        colsPerBlock.forEach(blockCols => visibleCols = visibleCols.concat(blockCols));\n        //\n\n        const columnsWithSetWidths = this.hasColumnLayouts ?\n            visibleCols.filter(c => c.widthSetByUser) :\n            visibleChildColumns.filter(c => c.widthSetByUser && c.width !== 'fit-content');\n\n        const columnsToSize = this.hasColumnLayouts ?\n            combinedBlocksSize - columnsWithSetWidths.length :\n            visibleChildColumns.length - columnsWithSetWidths.length;\n        const sumExistingWidths = columnsWithSetWidths\n            .reduce((prev, curr) => {\n                const colWidth = curr.width;\n                let widthValue = parseFloat(colWidth);\n                if (isNaN(widthValue)) {\n                    widthValue = MINIMUM_COLUMN_WIDTH;\n                }\n                const currWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1 ?\n                    widthValue / 100 * computedWidth :\n                    widthValue;\n                return prev + currWidth;\n            }, 0);\n\n        // When all columns are hidden, return 0px width\n        if (!sumExistingWidths && !columnsToSize) {\n            return '0px';\n        }\n        computedWidth -= this.featureColumnsWidth();\n\n        const columnWidth = !Number.isFinite(sumExistingWidths) ?\n            Math.max(computedWidth / columnsToSize, this.minColumnWidth) :\n            Math.max((computedWidth - sumExistingWidths) / columnsToSize, this.minColumnWidth);\n\n        return columnWidth + 'px';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public hasVerticalScroll() {\n        if (this._init) {\n            return false;\n        }\n        const isScrollable = this.verticalScrollContainer ? this.verticalScrollContainer.isScrollable() : false;\n        return !!(this.calcWidth && this.dataView && this.dataView.length > 0 && isScrollable);\n    }\n\n    /**\n     * Gets calculated width of the pinned area.\n     *\n     * @example\n     * ```typescript\n     * const pinnedWidth = this.grid.getPinnedWidth();\n     * ```\n     * @param takeHidden If we should take into account the hidden columns in the pinned area.\n     */\n    public getPinnedWidth(takeHidden = false) {\n        const fc = takeHidden ? this._pinnedColumns : this.pinnedColumns;\n        let sum = 0;\n        for (const col of fc) {\n            if (col.level === 0) {\n                sum += parseInt(col.calcWidth, 10);\n            }\n        }\n        if (this.isPinningToStart) {\n            sum += this.featureColumnsWidth();\n        }\n\n        return sum;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isColumnGrouped(_fieldName: string): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     * TODO: REMOVE\n     */\n    public onHeaderSelectorClick(event) {\n        if (!this.isMultiRowSelectionEnabled) {\n            return;\n        }\n        if (this.selectionService.areAllRowSelected()) {\n            this.selectionService.clearRowSelection(event);\n        } else {\n            this.selectionService.selectAllRows(event);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get headSelectorBaseAriaLabel() {\n        if (this._filteringExpressionsTree.filteringOperands.length > 0) {\n            return this.selectionService.areAllRowSelected() ? 'Deselect all filtered' : 'Select all filtered';\n        }\n\n        return this.selectionService.areAllRowSelected() ? 'Deselect all' : 'Select all';\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get totalRowsCountAfterFilter() {\n        if (this.data) {\n            return this.selectionService.allData.length;\n        }\n\n        return 0;\n    }\n\n    /** @hidden @internal */\n    public get pinnedDataView(): any[] {\n        return this.pinnedRecords ? this.pinnedRecords : [];\n    }\n\n    /** @hidden @internal */\n    public get unpinnedDataView(): any[] {\n        return this.unpinnedRecords ? this.unpinnedRecords : this.verticalScrollContainer?.igxForOf || [];\n    }\n\n    /**\n     * Returns the currently transformed paged/filtered/sorted/grouped/pinned/unpinned row data, displayed in the grid.\n     *\n     * @example\n     * ```typescript\n     *      const dataView = this.grid.dataView;\n     * ```\n     */\n    public get dataView() {\n        return this._dataView;\n    }\n\n    /**\n     * Gets/Sets whether clicking over a row should select/deselect it\n     *\n     * @remarks\n     * By default it is set to true\n     * @param enabled: boolean\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public get selectRowOnClick() {\n        return this._selectRowOnClick;\n    }\n\n    public set selectRowOnClick(enabled: boolean) {\n        this._selectRowOnClick = enabled;\n    }\n\n    /**\n     * Select specified rows by ID.\n     *\n     * @example\n     * ```typescript\n     * this.grid.selectRows([1,2,5], true);\n     * ```\n     * @param rowIDs\n     * @param clearCurrentSelection if true clears the current selection\n     */\n    public selectRows(rowIDs: any[], clearCurrentSelection?: boolean) {\n        this.selectionService.selectRowsWithNoEvent(rowIDs, clearCurrentSelection);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselect specified rows by ID.\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectRows([1,2,5]);\n     * ```\n     * @param rowIDs\n     */\n    public deselectRows(rowIDs: any[]) {\n        this.selectionService.deselectRowsWithNoEvent(rowIDs);\n        this.notifyChanges();\n    }\n\n    /**\n     * Selects all rows\n     *\n     * @remarks\n     * By default if filtering is in place, selectAllRows() and deselectAllRows() select/deselect all filtered rows.\n     * If you set the parameter onlyFilterData to false that will select all rows in the grid exept deleted rows.\n     * @example\n     * ```typescript\n     * this.grid.selectAllRows();\n     * this.grid.selectAllRows(false);\n     * ```\n     * @param onlyFilterData\n     */\n    public selectAllRows(onlyFilterData = true) {\n        const data = onlyFilterData && this.filteredData ? this.filteredData : this.gridAPI.get_all_data(true);\n        const rowIDs = this.selectionService.getRowIDs(data).filter(rID => !this.gridAPI.row_deleted_transaction(rID));\n        this.selectRows(rowIDs);\n    }\n\n    /**\n     * Deselects all rows\n     *\n     * @remarks\n     * By default if filtering is in place, selectAllRows() and deselectAllRows() select/deselect all filtered rows.\n     * If you set the parameter onlyFilterData to false that will deselect all rows in the grid exept deleted rows.\n     * @example\n     * ```typescript\n     * this.grid.deselectAllRows();\n     * ```\n     * @param onlyFilterData\n     */\n    public deselectAllRows(onlyFilterData = true) {\n        if (onlyFilterData && this.filteredData && this.filteredData.length > 0) {\n            this.deselectRows(this.selectionService.getRowIDs(this.filteredData));\n        } else {\n            this.selectionService.clearAllSelectedRows();\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Deselect selected cells.\n     * @example\n     * ```typescript\n     * this.grid.clearCellSelection();\n     * ```\n     */\n    public clearCellSelection(): void {\n        this.selectionService.clear(true);\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dragScroll(delta: { left: number; top: number }): void {\n        const horizontal = this.headerContainer.getScroll();\n        const vertical = this.verticalScrollContainer.getScroll();\n        const { left, top } = delta;\n\n        horizontal.scrollLeft += left * this.DRAG_SCROLL_DELTA;\n        vertical.scrollTop += top * this.DRAG_SCROLL_DELTA;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isDefined(arg: any): boolean {\n        return arg !== undefined && arg !== null;\n    }\n\n    /**\n     * Select range(s) of cells between certain rows and columns of the grid.\n     */\n    public selectRange(arg: GridSelectionRange | GridSelectionRange[] | null | undefined): void {\n        if (!this.isDefined(arg)) {\n            this.clearCellSelection();\n            return;\n        }\n        if (arg instanceof Array) {\n            arg.forEach(range => this.setSelection(range));\n        } else {\n            this.setSelection(arg);\n        }\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public columnToVisibleIndex(field: string | number): number {\n        const visibleColumns = this.visibleColumns;\n        if (typeof field === 'number') {\n            return field;\n        }\n        return visibleColumns.find(column => column.field === field).visibleIndex;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public setSelection(range: GridSelectionRange): void {\n        const startNode = { row: range.rowStart, column: this.columnToVisibleIndex(range.columnStart) };\n        const endNode = { row: range.rowEnd, column: this.columnToVisibleIndex(range.columnEnd) };\n\n        this.selectionService.pointerState.node = startNode;\n        this.selectionService.selectRange(endNode, this.selectionService.pointerState);\n        this.selectionService.addRangeMeta(endNode, this.selectionService.pointerState);\n        this.selectionService.initPointerState();\n    }\n\n    /**\n     * Get the currently selected ranges in the grid.\n     */\n    public getSelectedRanges(): GridSelectionRange[] {\n        return this.selectionService.ranges;\n    }\n\n    /**\n     *\n     * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public getSelectedData(formatters = false, headers = false) {\n        const source = this.filteredSortedData;\n        return this.extractDataFromSelection(source, formatters, headers);\n    }\n\n    /**\n     * Get current selected columns.\n     *\n     * @example\n     * Returns an array with selected columns\n     * ```typescript\n     * const selectedColumns = this.grid.selectedColumns();\n     * ```\n     */\n    public selectedColumns(): ColumnType[] {\n        const fields = this.selectionService.getSelectedColumns();\n        return fields.map(field => this.getColumnByName(field)).filter(field => field);\n    }\n\n    /**\n     * Select specified columns.\n     *\n     * @example\n     * ```typescript\n     * this.grid.selectColumns(['ID','Name'], true);\n     * ```\n     * @param columns\n     * @param clearCurrentSelection if true clears the current selection\n     */\n    public selectColumns(columns: string[] | ColumnType[], clearCurrentSelection?: boolean) {\n        let fieldToSelect: string[] = [];\n        if (columns.length === 0 || typeof columns[0] === 'string') {\n            fieldToSelect = columns as string[];\n        } else {\n            (columns as ColumnType[]).forEach(col => {\n                if (col.columnGroup) {\n                    const children = col.allChildren.filter(c => !c.columnGroup).map(c => c.field);\n                    fieldToSelect = [...fieldToSelect, ...children];\n                } else {\n                    fieldToSelect.push(col.field);\n                }\n            });\n        }\n\n        this.selectionService.selectColumnsWithNoEvent(fieldToSelect, clearCurrentSelection);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselect specified columns by field.\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectColumns(['ID','Name']);\n     * ```\n     * @param columns\n     */\n    public deselectColumns(columns: string[] | ColumnType[]) {\n        let fieldToDeselect: string[] = [];\n        if (columns.length === 0 || typeof columns[0] === 'string') {\n            fieldToDeselect = columns as string[];\n        } else {\n            (columns as ColumnType[]).forEach(col => {\n                if (col.columnGroup) {\n                    const children = col.allChildren.filter(c => !c.columnGroup).map(c => c.field);\n                    fieldToDeselect = [...fieldToDeselect, ...children];\n                } else {\n                    fieldToDeselect.push(col.field);\n                }\n            });\n        }\n        this.selectionService.deselectColumnsWithNoEvent(fieldToDeselect);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselects all columns\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectAllColumns();\n     * ```\n     */\n    public deselectAllColumns() {\n        this.selectionService.clearAllSelectedColumns();\n        this.notifyChanges();\n    }\n\n    /**\n     * Selects all columns\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectAllColumns();\n     * ```\n     */\n    public selectAllColumns() {\n        this.selectColumns(this._columns.filter(c => !c.columnGroup));\n    }\n\n    /**\n     *\n     * Returns an array of the current columns selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public getSelectedColumnsData(formatters = false, headers = false) {\n        const source = this.filteredSortedData ? this.filteredSortedData : this.data;\n        return this.extractDataFromColumnsSelection(source, formatters, headers);\n    }\n\n\n    /** @hidden @internal **/\n    public combineSelectedCellAndColumnData(columnData: any[], formatters = false, headers = false) {\n        const source = this.filteredSortedData;\n        return this.extractDataFromSelection(source, formatters, headers, columnData);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public preventContainerScroll = (evt) => {\n        if (evt.target.scrollTop !== 0) {\n            this.verticalScrollContainer.addScroll(evt.target.scrollTop);\n            evt.target.scrollTop = 0;\n        }\n        if (evt.target.scrollLeft !== 0) {\n            this.headerContainer.scrollPosition += evt.target.scrollLeft;\n            evt.target.scrollLeft = 0;\n        }\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public copyHandler(event) {\n        const eventPathElements = event.composedPath().map(el => el.tagName?.toLowerCase());\n        if (eventPathElements.includes('igx-grid-filtering-row') ||\n            eventPathElements.includes('igx-grid-filtering-cell')) {\n            return;\n        }\n\n        const selectedColumns = this.gridAPI.grid.selectedColumns();\n        const columnData = this.getSelectedColumnsData(this.clipboardOptions.copyFormatters, this.clipboardOptions.copyHeaders);\n        let selectedData;\n        if (event.type === 'copy') {\n            selectedData = this.getSelectedData(this.clipboardOptions.copyFormatters, this.clipboardOptions.copyHeaders);\n        }\n\n        let data = [];\n        let result;\n\n        if (event.code === 'KeyC' && (event.ctrlKey || event.metaKey) && event.currentTarget.className === 'igx-grid-thead__wrapper') {\n            if (selectedData.length) {\n                if (columnData.length === 0) {\n                    result = this.prepareCopyData(event, selectedData);\n                } else {\n                    data = this.combineSelectedCellAndColumnData(columnData, this.clipboardOptions.copyFormatters,\n                        this.clipboardOptions.copyHeaders);\n                    result = this.prepareCopyData(event, data[0], data[1]);\n                }\n            } else {\n                data = columnData;\n                result = this.prepareCopyData(event, data);\n            }\n\n            navigator.clipboard.writeText(result).then().catch(e => console.error(e));\n        } else if (!this.clipboardOptions.enabled || this.crudService.cellInEditMode || event.type === 'keydown') {\n            return;\n        } else {\n            if (selectedColumns.length) {\n                data = this.combineSelectedCellAndColumnData(columnData, this.clipboardOptions.copyFormatters,\n                    this.clipboardOptions.copyHeaders);\n                result = this.prepareCopyData(event, data[0], data[1]);\n            } else {\n                data = selectedData;\n                result = this.prepareCopyData(event, data);\n            }\n            event.clipboardData.setData('text/plain', result);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public prepareCopyData(event, data, keys?) {\n        const ev = { data, cancel: false } as IGridClipboardEvent;\n        this.gridCopy.emit(ev);\n\n        if (ev.cancel) {\n            return;\n        }\n\n        const transformer = new CharSeparatedValueData(ev.data, this.clipboardOptions.separator);\n        let result = keys ? transformer.prepareData(keys) : transformer.prepareData();\n\n        if (!this.clipboardOptions.copyHeaders) {\n            result = result.substring(result.indexOf('\\n') + 1);\n        }\n\n        if (data && data.length > 0 && Object.values(data[0]).length === 1) {\n            result = result.slice(0, -2);\n        }\n\n        event.preventDefault();\n\n        /* Necessary for the hiearachical case but will probably have to\n           change how getSelectedData is propagated in the hiearachical grid\n        */\n        event.stopPropagation();\n\n        return result;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public showSnackbarFor(index: number) {\n        this.addRowSnackbar.actionText = index === -1 ? '' : this.resourceStrings.igx_grid_snackbar_addrow_actiontext;\n        this.lastAddedRowIndex = index;\n        this.addRowSnackbar.open();\n    }\n\n    /* blazorCsSuppress */\n    /**\n     * Navigates to a position in the grid based on provided `rowindex` and `visibleColumnIndex`.\n     *\n     * @remarks\n     * Also can execute a custom logic over the target element,\n     * through a callback function that accepts { targetType: GridKeydownTargetType, target: Object }\n     * @example\n     * ```typescript\n     *  this.grid.navigateTo(10, 3, (args) => { args.target.nativeElement.focus(); });\n     * ```\n     */\n    public navigateTo(rowIndex: number, visibleColIndex = -1, cb: (args: any) => void = null) {\n        const totalItems = (this as any).totalItemCount ?? this.dataView.length - 1;\n        if (rowIndex < 0 || rowIndex > totalItems || (visibleColIndex !== -1\n            && this._columns.map(col => col.visibleIndex).indexOf(visibleColIndex) === -1)) {\n            return;\n        }\n        if (this.dataView.slice(rowIndex, rowIndex + 1).find(rec => rec.expression || rec.childGridsData)) {\n            visibleColIndex = -1;\n        }\n        // If the target row is pinned no need to scroll as well.\n        const shouldScrollVertically = this.navigation.shouldPerformVerticalScroll(rowIndex, visibleColIndex);\n        const shouldScrollHorizontally = this.navigation.shouldPerformHorizontalScroll(visibleColIndex, rowIndex);\n        if (shouldScrollVertically) {\n            this.navigation.performVerticalScrollToCell(rowIndex, visibleColIndex, () => {\n                if (shouldScrollHorizontally) {\n                    this.navigation.performHorizontalScrollToCell(visibleColIndex, () =>\n                        this.executeCallback(rowIndex, visibleColIndex, cb));\n                } else {\n                    this.executeCallback(rowIndex, visibleColIndex, cb);\n                }\n            });\n        } else if (shouldScrollHorizontally) {\n            this.navigation.performHorizontalScrollToCell(visibleColIndex, () => {\n                if (shouldScrollVertically) {\n                    this.navigation.performVerticalScrollToCell(rowIndex, visibleColIndex, () =>\n                        this.executeCallback(rowIndex, visibleColIndex, cb));\n                } else {\n                    this.executeCallback(rowIndex, visibleColIndex, cb);\n                }\n            });\n        } else {\n            this.executeCallback(rowIndex, visibleColIndex, cb);\n        }\n    }\n\n    /* blazorCsSuppress */\n    /**\n     * Returns `ICellPosition` which defines the next cell,\n     * according to the current position, that match specific criteria.\n     *\n     * @remarks\n     * You can pass callback function as a third parameter of `getPreviousCell` method.\n     * The callback function accepts IgxColumnComponent as a param\n     * @example\n     * ```typescript\n     *  const nextEditableCellPosition = this.grid.getNextCell(0, 3, (column) => column.editable);\n     * ```\n     */\n    public getNextCell(currRowIndex: number, curVisibleColIndex: number,\n        callback: (IgxColumnComponent) => boolean = null): ICellPosition {\n        const columns = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0);\n        const dataViewIndex = this._getDataViewIndex(currRowIndex);\n        if (!this.isValidPosition(dataViewIndex, curVisibleColIndex)) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n        }\n        const colIndexes = callback ? columns.filter((col) => callback(col)).map(editCol => editCol.visibleIndex).sort((a, b) => a - b) :\n            columns.map(editCol => editCol.visibleIndex).sort((a, b) => a - b);\n        const nextCellIndex = colIndexes.find(index => index > curVisibleColIndex);\n        if (this.dataView.slice(dataViewIndex, dataViewIndex + 1)\n            .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData && !rec.detailsData) && nextCellIndex !== undefined) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: nextCellIndex };\n        } else {\n            const nextIndex = this.getNextDataRowIndex(currRowIndex)\n            if (colIndexes.length === 0 || nextIndex === currRowIndex) {\n                return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n            } else {\n                return { rowIndex: nextIndex, visibleColumnIndex: colIndexes[0] };\n            }\n        }\n    }\n\n    /* blazorCsSuppress */\n    /**\n     * Returns `ICellPosition` which defines the previous cell,\n     * according to the current position, that match specific criteria.\n     *\n     * @remarks\n     * You can pass callback function as a third parameter of `getPreviousCell` method.\n     * The callback function accepts IgxColumnComponent as a param\n     * @example\n     * ```typescript\n     *  const previousEditableCellPosition = this.grid.getPreviousCell(0, 3, (column) => column.editable);\n     * ```\n     */\n    public getPreviousCell(currRowIndex: number, curVisibleColIndex: number,\n        callback: (IgxColumnComponent) => boolean = null): ICellPosition {\n        const columns = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0);\n        const dataViewIndex = this._getDataViewIndex(currRowIndex);\n        if (!this.isValidPosition(dataViewIndex, curVisibleColIndex)) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n        }\n        const colIndexes = callback ? columns.filter((col) => callback(col)).map(editCol => editCol.visibleIndex).sort((a, b) => b - a) :\n            columns.map(editCol => editCol.visibleIndex).sort((a, b) => b - a);\n        const prevCellIndex = colIndexes.find(index => index < curVisibleColIndex);\n        if (this.dataView.slice(dataViewIndex, dataViewIndex + 1)\n            .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData && !rec.detailsData) && prevCellIndex !== undefined) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: prevCellIndex };\n        } else {\n            const prevIndex = this.getNextDataRowIndex(currRowIndex, true);\n            if (colIndexes.length === 0 || prevIndex === currRowIndex) {\n                return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n            } else {\n                return { rowIndex: prevIndex, visibleColumnIndex: colIndexes[0] };\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public endRowEditTabStop(commit = true, event?: Event) {\n        const canceled = this.crudService.endEdit(commit, event);\n\n        if (canceled) {\n            return true;\n        }\n\n        this.navigation.restoreActiveNodeFocus();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public trackColumnChanges(index, col) {\n        return col.field + col._calcWidth;\n    }\n\n    /**\n     * @hidden\n     */\n    public isExpandedGroup(_group: IGroupByRecord): boolean {\n        return undefined;\n    }\n\n    /**\n     * @hidden @internal\n     * TODO: MOVE to CRUD\n     */\n    public openRowOverlay(id) {\n        this.configureRowEditingOverlay(id, this.rowList.length <= MIN_ROW_EDITING_COUNT_THRESHOLD);\n\n        this.rowEditingOverlay.open(this.rowEditSettings);\n        this.rowEditingOverlay.element.addEventListener('wheel', this.rowEditingWheelHandler.bind(this));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public closeRowEditingOverlay() {\n        this.rowEditingOverlay.element.removeEventListener('wheel', this.rowEditingWheelHandler);\n        this.rowEditPositioningStrategy.isTopInitialPosition = null;\n        this.rowEditingOverlay.close();\n        this.rowEditingOverlay.element.parentElement.style.display = '';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleRowEditingOverlay(show) {\n        const rowStyle = this.rowEditingOverlay.element.style;\n        if (show) {\n            rowStyle.display = 'block';\n        } else {\n            rowStyle.display = 'none';\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public repositionRowEditingOverlay(row: RowType) {\n        if (row && !this.rowEditingOverlay.collapsed) {\n            const rowStyle = this.rowEditingOverlay.element.parentElement.style;\n            if (row) {\n                rowStyle.display = '';\n                this.configureRowEditingOverlay(row.key);\n                this.rowEditingOverlay.reposition();\n            } else {\n                rowStyle.display = 'none';\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cachedViewLoaded(args: ICachedViewLoadedEventArgs) {\n        if (this.hasHorizontalScroll()) {\n            const tmplId = args.context.templateID.type;\n            const index = args.context.index;\n            args.view.detectChanges();\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                const row = tmplId === 'dataRow' ? this.gridAPI.get_row_by_index(index) : null;\n                const summaryRow = tmplId === 'summaryRow' ? this.summariesRowList.find((sr) => sr.dataRowIndex === index) : null;\n                if (row && row instanceof IgxRowDirective) {\n                    this._restoreVirtState(row);\n                } else if (summaryRow) {\n                    this._restoreVirtState(summaryRow);\n                }\n            });\n        }\n    }\n\n    /**\n     * Opens the advanced filtering dialog.\n     */\n    public openAdvancedFilteringDialog(overlaySettings?: OverlaySettings) {\n        const settings = overlaySettings ? overlaySettings : this._advancedFilteringOverlaySettings;\n        if (!this._advancedFilteringOverlayId) {\n            this._advancedFilteringOverlaySettings.target =\n                (this as any).rootGrid ? (this as any).rootGrid.nativeElement : this.nativeElement;\n            this._advancedFilteringOverlaySettings.outlet = this.outlet;\n\n            this._advancedFilteringOverlayId = this.overlayService.attach(\n                IgxAdvancedFilteringDialogComponent,\n                this.viewRef,\n                settings);\n            this.overlayService.show(this._advancedFilteringOverlayId);\n        }\n    }\n\n    /**\n     * Closes the advanced filtering dialog.\n     *\n     * @param applyChanges indicates whether the changes should be applied\n     */\n    public closeAdvancedFilteringDialog(applyChanges: boolean) {\n        if (this._advancedFilteringOverlayId) {\n            const advancedFilteringOverlay = this.overlayService.getOverlayById(this._advancedFilteringOverlayId);\n            const advancedFilteringDialog = advancedFilteringOverlay.componentRef.instance as IgxAdvancedFilteringDialogComponent;\n\n            if (applyChanges) {\n                advancedFilteringDialog.applyChanges();\n            }\n            advancedFilteringDialog.closeDialog();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getEmptyRecordObjectFor(inRow: RowType) {\n        const row = { ...inRow?.data };\n        Object.keys(row).forEach(key => row[key] = undefined);\n        const id = this.generateRowID();\n        row[this.primaryKey] = id;\n        return { rowID: id, data: row, recordRef: row };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public hasHorizontalScroll() {\n        return this.totalWidth - this.unpinnedWidth > 0 && this.width !== null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isSummaryRow(rowData): boolean {\n        return rowData && rowData.summaries && (rowData.summaries instanceof Map);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public triggerPipes() {\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    public rowEditingWheelHandler(event: WheelEvent) {\n        if (event.deltaY > 0) {\n            this.verticalScrollContainer.scrollNext();\n        } else {\n            this.verticalScrollContainer.scrollPrev();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getUnpinnedIndexById(id) {\n        return this.unpinnedRecords.findIndex(x => x[this.primaryKey] === id);\n    }\n\n    /**\n     * Finishes the row transactions on the current row and returns whether the grid editing was canceled.\n     *\n     * @remarks\n     * If `commit === true`, passes them from the pending state to the data (or transaction service)\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton (click)=\"grid.endEdit(true)\">Commit Row</button>\n     * ```\n     * @param commit\n     */\n    // TODO: Facade for crud service refactoring. To be removed\n    // TODO: do not remove this, as it is used in rowEditTemplate, but mark is as internal and hidden\n    /* blazorCSSuppress */\n    public endEdit(commit = true, event?: Event): boolean {\n        const document = this.nativeElement?.getRootNode() as Document | ShadowRoot;\n        const focusWithin = this.nativeElement?.contains(document.activeElement);\n\n        const success = this.crudService.endEdit(commit, event);\n\n        if (focusWithin) {\n            // restore focus for navigation\n            this.navigation.restoreActiveNodeFocus();\n        } else if (this.navigation.activeNode) {\n            // grid already lost focus, clear active node\n            this.clearActiveNode();\n        }\n\n        return success;\n    }\n\n    /**\n     * Enters add mode by spawning the UI under the specified row by rowID.\n     *\n     * @remarks\n     * If null is passed as rowID, the row adding UI is spawned as the first record in the data view\n     * @remarks\n     * Spawning the UI to add a child for a record only works if you provide a rowID\n     * @example\n     * ```typescript\n     * this.grid.beginAddRowById('ALFKI');\n     * this.grid.beginAddRowById('ALFKI', true);\n     * this.grid.beginAddRowById(null);\n     * ```\n     * @param rowID - The rowID to spawn the add row UI for, or null to spawn it as the first record in the data view\n     * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n     */\n    public beginAddRowById(rowID: any, asChild?: boolean): void {\n        let index = rowID;\n        if (rowID == null) {\n            if (asChild) {\n                console.warn('The record cannot be added as a child to an unspecified record.');\n                return;\n            }\n            index = null;\n        } else {\n            // find the index of the record with that PK\n            index = this.gridAPI.get_rec_index_by_id(rowID, this.dataView);\n            if (index === -1) {\n                console.warn('No row with the specified ID was found.');\n                return;\n            }\n        }\n\n        this._addRowForIndex(index, asChild);\n    }\n\n    protected _addRowForIndex(index: number, asChild?: boolean) {\n        if (!this.dataView.length) {\n            this.beginAddRowForIndex(index, asChild);\n            return;\n        }\n        // check if the index is valid - won't support anything outside the data view\n        if (index >= 0 && index < this.dataView.length) {\n            // check if the index is in the view port\n            if ((index < this.virtualizationState.startIndex ||\n                index >= this.virtualizationState.startIndex + this.virtualizationState.chunkSize) &&\n                !this.isRecordPinnedByViewIndex(index)) {\n                this.verticalScrollContainer.chunkLoad\n                    .pipe(first(), takeUntil(this.destroy$))\n                    .subscribe(() => {\n                        this.beginAddRowForIndex(index, asChild);\n                    });\n                this.navigateTo(index);\n                this.notifyChanges(true);\n                return;\n            }\n            this.beginAddRowForIndex(index, asChild);\n        } else {\n            console.warn('The row with the specified PK or index is outside of the current data view.');\n        }\n    }\n\n    /* csSuppress */\n    /**\n     * Enters add mode by spawning the UI at the specified index.\n     *\n     * @remarks\n     * Accepted values for index are integers from 0 to this.grid.dataView.length\n     * @example\n     * ```typescript\n     * this.grid.beginAddRowByIndex(0);\n     * ```\n     * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n     */\n    public beginAddRowByIndex(index: number): void {\n        if (index === 0) {\n            return this.beginAddRowById(null);\n        }\n        return this._addRowForIndex(index - 1);\n    }\n\n    /**\n     * @hidden\n     */\n    public preventHeaderScroll(args) {\n        if (args.target.scrollLeft !== 0) {\n            (this.navigation as any).forOfDir().getScroll().scrollLeft = args.target.scrollLeft;\n            args.target.scrollLeft = 0;\n        }\n    }\n\n    protected beginAddRowForIndex(index: number, asChild = false) {\n        // TODO is row from rowList suitable for enterAddRowMode\n        const row = index == null ?\n            null : this.rowList.find(r => r.index === index);\n        if (row !== undefined) {\n            this.crudService.enterAddRowMode(row, asChild);\n        } else {\n            console.warn('No row with the specified PK or index was found.');\n        }\n    }\n\n    protected switchTransactionService(val: boolean) {\n        if (val) {\n            this._transactions = this.transactionFactory.create(TRANSACTION_TYPE.Base);\n        } else {\n            this._transactions = this.transactionFactory.create(TRANSACTION_TYPE.None);\n        }\n\n        if (this.dataCloneStrategy) {\n            this._transactions.cloneStrategy = this.dataCloneStrategy;\n        }\n    }\n\n    protected subscribeToTransactions(): void {\n        this.transactionChange$.next();\n        this.transactions.onStateUpdate.pipe(takeUntil(merge(this.destroy$, this.transactionChange$)))\n            .subscribe(this.transactionStatusUpdate.bind(this));\n    }\n\n    protected transactionStatusUpdate(event: StateUpdateEvent) {\n        let actions: Action<Transaction>[] = [];\n        if (event.origin === TransactionEventOrigin.REDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n        } else if (event.origin === TransactionEventOrigin.UNDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n        }\n        if (actions.length > 0) {\n            for (const action of actions) {\n                if (this.selectionService.isRowSelected(action.transaction.id)) {\n                    this.selectionService.deselectRow(action.transaction.id);\n                }\n            }\n        }\n        if (event.origin === TransactionEventOrigin.REDO || event.origin === TransactionEventOrigin.UNDO) {\n            event.actions.forEach(x => {\n                if (x.transaction.type === TransactionType.UPDATE) {\n                    const value = this.transactions.getAggregatedValue(x.transaction.id, true);\n                    this.validation.update(x.transaction.id, value ?? x.recordRef);\n                } else if (x.transaction.type === TransactionType.DELETE || x.transaction.type === TransactionType.ADD) {\n                    const value = this.transactions.getAggregatedValue(x.transaction.id, true);\n                    if (value) {\n                        this.validation.create(x.transaction.id, value ?? x.recordRef);\n                        this.validation.update(x.transaction.id, value ?? x.recordRef);\n                        this.validation.markAsTouched(x.transaction.id);\n                    } else {\n                        this.validation.clear(x.transaction.id);\n                    }\n                }\n\n            });\n        }\n\n        this.selectionService.clearHeaderCBState();\n        this.summaryService.clearSummaryCache();\n        this.pipeTrigger++;\n        this.notifyChanges();\n    }\n\n    protected writeToData(rowIndex: number, value: any) {\n        mergeObjects(this.gridAPI.get_all_data()[rowIndex], value);\n    }\n\n    protected _restoreVirtState(row) {\n        // check virtualization state of data record added from cache\n        // in case state is no longer valid - update it.\n        const rowForOf = row.virtDirRow;\n        const gridScrLeft = rowForOf.getScroll().scrollLeft;\n        rowForOf.onHScroll(gridScrLeft);\n        rowForOf.cdr.detectChanges();\n    }\n\n    protected changeRowEditingOverlayStateOnScroll(row: RowType) {\n        if (!this.rowEditable || !this.rowEditingOverlay || this.rowEditingOverlay.collapsed) {\n            return;\n        }\n        if (!row) {\n            this.toggleRowEditingOverlay(false);\n        } else {\n            this.repositionRowEditingOverlay(row);\n        }\n    }\n\n    /**\n     * Should be called when data and/or isLoading input changes so that the overlay can be\n     * hidden/shown based on the current value of shouldOverlayLoading\n     */\n    protected evaluateLoadingState() {\n        if (this.shouldOverlayLoading) {\n            // a new overlay should be shown\n            const overlaySettings: OverlaySettings = {\n                outlet: this.loadingOutlet,\n                closeOnOutsideClick: false,\n                positionStrategy: new ContainerPositionStrategy()\n            };\n            this.loadingOverlay.open(overlaySettings);\n        } else {\n            this.loadingOverlay.close();\n        }\n    }\n\n    /**\n     * @hidden\n     * Sets grid width i.e. this.calcWidth\n     */\n    protected calculateGridWidth() {\n        let width;\n\n        if (this.isPercentWidth) {\n            /* width in %*/\n            const computed = this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('width');\n            width = computed.indexOf('%') === -1 ? parseFloat(computed) : null;\n        } else {\n            width = parseInt(this.width, 10);\n        }\n\n        if (!width && this.nativeElement) {\n            width = this.nativeElement.offsetWidth;\n        }\n\n\n        if (this.width === null || !width) {\n            this.isColumnWidthSum = true;\n            width = this.getColumnWidthSum();\n        } else {\n            this.isColumnWidthSum = false;\n        }\n\n        if (this.hasVerticalScroll() && this.width !== null) {\n            width -= this.scrollSize;\n        }\n        if ((Number.isFinite(width) || width === null) && width !== this.calcWidth) {\n            this.calcWidth = width;\n        }\n        this._derivePossibleWidth();\n    }\n\n    /**\n     * @hidden\n     * Sets columns defaultWidth property\n     */\n    protected _derivePossibleWidth() {\n        if (!this.columnWidthSetByUser) {\n            this._columnWidth = this.width !== null ? this.getPossibleColumnWidth() : this.minColumnWidth + 'px';\n        }\n        this._columns.forEach((column: IgxColumnComponent) => {\n            if (this.hasColumnLayouts && parseFloat(this._columnWidth)) {\n                const columnWidthCombined = parseFloat(this._columnWidth) * (column.colEnd ? column.colEnd - column.colStart : 1);\n                column.defaultWidth = columnWidthCombined + 'px';\n            } else {\n                // D.K. March 29th, 2021 #9145 Consider min/max width when setting defaultWidth property\n                column.defaultWidth = this.getExtremumBasedColWidth(column);\n                column.resetCaches();\n            }\n        });\n        this.resetCachedWidths();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected getExtremumBasedColWidth(column: IgxColumnComponent): string {\n        let width = this._columnWidth;\n        if (width && typeof width !== 'string') {\n            width = String(width);\n        }\n        const minWidth = width.indexOf('%') === -1 ? column.minWidthPx : column.minWidthPercent;\n        const maxWidth = width.indexOf('%') === -1 ? column.maxWidthPx : column.maxWidthPercent;\n        if (column.hidden) {\n            return width;\n        }\n\n        if (minWidth > parseFloat(width)) {\n            width = String(column.minWidth);\n        } else if (maxWidth < parseFloat(width)) {\n            width = String(column.maxWidth);\n        }\n\n        // if no px or % are defined in maxWidth/minWidth consider it px\n        if (width.indexOf('%') === -1 && width.indexOf('px') === -1) {\n            width += 'px';\n        }\n        return width;\n    }\n\n    protected resetNotifyChanges() {\n        this._cdrRequestRepaint = false;\n        this._cdrRequests = false;\n    }\n\n    /** @hidden @internal */\n    public resolveOutlet() {\n        return this._userOutletDirective ? this._userOutletDirective : this._outletDirective;\n    }\n\n    /**\n     * Reorder columns in the main columnList and _columns collections.\n     *\n     * @hidden\n     */\n    protected _moveColumns(from: IgxColumnComponent, to: IgxColumnComponent, pos: DropPosition) {\n        const orderedList = this._pinnedColumns.concat(this._unpinnedColumns);\n        const list = orderedList;\n        this._reorderColumns(from, to, pos, list);\n        const newList = this._resetColumnList(list);\n        this.updateColumns(newList);\n    }\n\n\n    /**\n     * Update internal column's collection.\n     * @hidden\n     */\n    public updateColumns(newColumns: IgxColumnComponent[]) {\n        // update internal collections to retain order.\n        this._pinnedColumns = newColumns\n            .filter((c) => c.pinned);\n        this._unpinnedColumns = newColumns.filter((c) => !c.pinned);\n        this._columns = newColumns;\n        if (this._columns && this._columns.length && this._filteringExpressionsTree) {\n            this._filteringExpressionsTree = recreateTreeFromFields(this._filteringExpressionsTree, this.columns) as IFilteringExpressionsTree;\n        }\n        if (this._columns && this._columns.length && this._advancedFilteringExpressionsTree) {\n            this._advancedFilteringExpressionsTree = recreateTreeFromFields(this._advancedFilteringExpressionsTree, this.columns) as IFilteringExpressionsTree;\n        }\n        this.resetCaches();\n    }\n\n    /**\n     * @hidden\n     */\n    protected _resetColumnList(list?) {\n        if (!list) {\n            list = this._columns;\n        }\n        let newList = [];\n        list.filter(c => c.level === 0).forEach(p => {\n            newList.push(p);\n            if (p.columnGroup) {\n                newList = newList.concat(p.allChildren);\n            }\n        });\n        return newList;\n    }\n\n    /**\n     * Reorders columns inside the passed column collection.\n     * When reordering column group collection, the collection is not flattened.\n     * In all other cases, the columns collection is flattened, this is why adittional calculations on the dropIndex are done.\n     *\n     * @hidden\n     */\n    protected _reorderColumns(from: IgxColumnComponent, to: IgxColumnComponent, position: DropPosition, columnCollection: any[],\n        inGroup = false) {\n        const fromIndex = columnCollection.indexOf(from);\n        const childColumnsCount = inGroup ? 1 : from.allChildren.length + 1;\n        columnCollection.splice(fromIndex, childColumnsCount);\n        let dropIndex = columnCollection.indexOf(to);\n        if (position === DropPosition.AfterDropTarget) {\n            dropIndex++;\n            if (!inGroup && to.columnGroup) {\n                dropIndex += to.allChildren.length;\n            }\n        }\n        columnCollection.splice(dropIndex, 0, from);\n    }\n\n    /**\n     * Reorder column group collection.\n     *\n     * @hidden\n     */\n    protected _moveChildColumns(parent: IgxColumnComponent, from: IgxColumnComponent, to: IgxColumnComponent, pos: DropPosition) {\n        const buffer = parent.children.toArray();\n        this._reorderColumns(from, to, pos, buffer, true);\n        parent.children.reset(buffer);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected setupColumns() {\n        if (this.autoGenerate) {\n            this.autogenerateColumns();\n        } else {\n            this._columns = this.getColumnList();\n        }\n        if (this._columns && this._columns.length && this._filteringExpressionsTree) {\n            this._filteringExpressionsTree = recreateTreeFromFields(this._filteringExpressionsTree, this._columns) as IFilteringExpressionsTree;\n        }\n        if (this._columns && this._columns.length && this._advancedFilteringExpressionsTree) {\n            this._advancedFilteringExpressionsTree = recreateTreeFromFields(this._advancedFilteringExpressionsTree, this._columns) as IFilteringExpressionsTree;\n        }\n\n        this.initColumns(this._columns, (col: IgxColumnComponent) => this.columnInit.emit(col));\n        this.columnListDiffer.diff(this.columnList);\n\n        this.columnList.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxColumnComponent>) => {\n                this.onColumnsChanged(change);\n            });\n    }\n\n    protected getColumnList() {\n        return this.columnList.toArray();\n    }\n\n    /**\n     * @hidden\n     */\n    protected deleteRowFromData(rowID: any, index: number) {\n        //  if there is a row (index !== 0) delete it\n        //  if there is a row in ADD or UPDATE state change it's state to DELETE\n        if (index !== -1) {\n            if (this.transactions.enabled) {\n                const transaction: Transaction = { id: rowID, type: TransactionType.DELETE, newValue: null };\n                this.transactions.add(transaction, this.data[index]);\n            } else {\n                this.data.splice(index, 1);\n            }\n        } else {\n            const state: State = this.transactions.getState(rowID);\n            this.transactions.add({ id: rowID, type: TransactionType.DELETE, newValue: null }, state && state.recordRef);\n        }\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    protected getDataBasedBodyHeight(): number {\n        return !this.data || (this.data.length < this._defaultTargetRecordNumber) ?\n            0 : this.defaultTargetBodyHeight;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected onPinnedRowsChanged(change: QueryList<IgxGridRowComponent>) {\n        const diff = this.rowListDiffer.diff(change);\n        if (diff) {\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected onColumnsChanged(change: QueryList<IgxColumnComponent>) {\n        const diff = this.columnListDiffer.diff(change);\n\n        if (this.autoGenerate && this._columns.length === 0 && this._autoGeneratedCols.length > 0) {\n            // In Ivy if there are nested conditional templates the content children are re-evaluated\n            // hence autogenerated columns are cleared and need to be reset.\n            this.updateColumns(this._autoGeneratedCols);\n            return;\n        }\n        if (diff) {\n            let added = false;\n            let removed = false;\n            let pinning = false;\n            diff.forEachAddedItem((record: IterableChangeRecord<IgxColumnComponent>) => {\n                added = true;\n                if (record.item.pinned) {\n                    this._pinnedColumns.push(record.item);\n                    pinning = true;\n                } else {\n                    this._unpinnedColumns.push(record.item);\n                }\n            });\n\n            this.initColumns(this.columnList.toArray(), (col: IgxColumnComponent) => this.columnInit.emit(col));\n            if (pinning) {\n                this.initPinning();\n            }\n\n            diff.forEachRemovedItem((record: IterableChangeRecord<IgxColumnComponent | IgxColumnGroupComponent>) => {\n                const isColumnGroup = record.item instanceof IgxColumnGroupComponent;\n                if (!isColumnGroup) {\n                    // Clear Grouping\n                    this.gridAPI.clear_groupby(record.item.field);\n\n                    // Clear Filtering\n                    this.filteringService.clear_filter(record.item.field);\n\n                    // Close filter row\n                    if (this.filteringService.isFilterRowVisible\n                        && this.filteringService.filteredColumn\n                        && this.filteringService.filteredColumn.field === record.item.field) {\n                        this.filteringRow.close();\n                    }\n\n                    // Clear Sorting\n                    this.gridAPI.clear_sort(record.item.field);\n\n                    // Remove column selection\n                    this.selectionService.deselectColumnsWithNoEvent([record.item.field]);\n                }\n                removed = true;\n            });\n\n            this.resetCaches();\n\n            if (added || removed) {\n                this.onColumnsAddedOrRemoved();\n            }\n        }\n    }\n\n    protected checkPrimaryKeyField() {\n        if (this.primaryKey && this.data?.length && !(this.primaryKey in this.data[0])) {\n            console.warn(`Field \"${this.primaryKey}\" is not defined in the data. Set \\`primaryKey\\` to a valid field.`);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected onColumnsAddedOrRemoved() {\n        this.summaryService.clearSummaryCache();\n        Promise.resolve().then(() => {\n            // `onColumnsChanged` can be executed midway a current detectChange cycle and markForCheck will be ignored then.\n            // This ensures that we will wait for the current cycle to end so we can trigger a new one and ngDoCheck to fire.\n            this.notifyChanges(true);\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    protected calculateGridSizes(recalcFeatureWidth = true) {\n        /*\n            TODO: (R.K.) This layered lasagne should be refactored\n            ASAP. The reason I have to reset the caches so many times is because\n            after teach `detectChanges` call they are filled with invalid\n            state. Of course all of this happens midway through the grid\n            sizing process which of course, uses values from the caches, thus resulting\n            in a broken layout.\n        */\n        this.cdr.detectChanges();\n        this.resetCaches(recalcFeatureWidth);\n        const hasScroll = this.hasVerticalScroll();\n        const hasHScroll = !this.isHorizontalScrollHidden;\n        this.calculateGridWidth();\n        this.resetCaches(recalcFeatureWidth);\n        this.cdr.detectChanges();\n        this.calculateGridHeight();\n\n        if (this.rowEditable) {\n            this.repositionRowEditingOverlay(this.crudService.rowInEditMode);\n        }\n\n        if (this.filteringService.isFilterRowVisible) {\n            this.filteringRow.resetChipsArea();\n        }\n\n        this.cdr.detectChanges();\n        // in case scrollbar has appeared recalc to size correctly.\n        if (hasScroll !== this.hasVerticalScroll()) {\n            this.calculateGridWidth();\n            this.cdr.detectChanges();\n        }\n\n        // in case horizontal scrollbar has appeared recalc to size correctly.\n        if (hasHScroll !== this.hasHorizontalScroll()) {\n            this.isHorizontalScrollHidden = !this.hasHorizontalScroll();\n            this.cdr.detectChanges();\n            this.calculateGridHeight();\n            this.cdr.detectChanges();\n        }\n        if (this.zone.isStable) {\n            this.zone.run(() => {\n                this._applyWidthHostBinding();\n                this.cdr.detectChanges();\n            });\n        } else {\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this.zone.run(() => {\n                    this._applyWidthHostBinding();\n                });\n            });\n        }\n        this.resetCaches(recalcFeatureWidth);\n        if (this.hasColumnsToAutosize) {\n            this.cdr.detectChanges();\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this._autoSizeColumnsNotify.next();\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * Sets TBODY height i.e. this.calcHeight\n     */\n    protected calculateGridHeight() {\n\n        this.calcHeight = this._calculateGridBodyHeight();\n        if (this.pinnedRowHeight && this.calcHeight) {\n            this.calcHeight -= this.pinnedRowHeight;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected getGroupAreaHeight(): number {\n        return 0;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getComputedHeight(elem) {\n        return elem.offsetHeight ? parseFloat(this.document.defaultView.getComputedStyle(elem).getPropertyValue('height')) : 0;\n    }\n    /**\n     * @hidden\n     */\n    protected getFooterHeight(): number {\n        return this.summaryRowHeight || this.getComputedHeight(this.tfoot.nativeElement);\n    }\n    /**\n     * @hidden\n     */\n    protected getTheadRowHeight(): number {\n        // D.P.: Before CSS loads,theadRow computed height will be 'auto'->NaN, so use 0 fallback\n        const height = this.getComputedHeight(this.theadRow.nativeElement) || 0;\n        return (!this.allowFiltering || (this.allowFiltering && this.filterMode !== FilterMode.quickFilter)) ?\n            height - this.getFilterCellHeight() :\n            height;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getToolbarHeight(): number {\n        let toolbarHeight = 0;\n        if (this.toolbar.first) {\n            toolbarHeight = this.getComputedHeight(this.toolbar.first.nativeElement);\n        }\n        return toolbarHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getPagingFooterHeight(): number {\n        let pagingHeight = 0;\n        if (this.footer) {\n            const height = this.getComputedHeight(this.footer.nativeElement);\n            pagingHeight = this.footer.nativeElement.firstElementChild ?\n                height : 0;\n        }\n        return pagingHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getFilterCellHeight(): number {\n        const headerGroupNativeEl = (this.headerGroupsList.length !== 0) ?\n            this.headerGroupsList[0].nativeElement : null;\n        const filterCellNativeEl = (headerGroupNativeEl) ?\n            headerGroupNativeEl.querySelector('igx-grid-filtering-cell') as HTMLElement : null;\n        return (filterCellNativeEl) ? filterCellNativeEl.offsetHeight : 0;\n    }\n\n    /**\n     * @hidden\n     */\n    protected _calculateGridBodyHeight(): number {\n        if (!this._height) {\n            return null;\n        }\n        const actualTheadRow = this.getTheadRowHeight();\n        const footerHeight = this.getFooterHeight();\n        const toolbarHeight = this.getToolbarHeight();\n        const pagingHeight = this.getPagingFooterHeight();\n        const groupAreaHeight = this.getGroupAreaHeight();\n        const scrHeight = this.getComputedHeight(this.scr.nativeElement);\n        const renderedHeight = toolbarHeight + actualTheadRow +\n            footerHeight + pagingHeight + groupAreaHeight +\n            scrHeight;\n\n        let gridHeight = 0;\n\n        if (this.isPercentHeight) {\n            const computed = this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('height');\n            const autoSize = this._shouldAutoSize(renderedHeight);\n            if (autoSize || computed.indexOf('%') !== -1) {\n                const bodyHeight = this.getDataBasedBodyHeight();\n                return bodyHeight > 0 ? bodyHeight : null;\n            }\n            gridHeight = parseFloat(computed);\n        } else {\n            gridHeight = parseInt(this._height, 10);\n        }\n        const height = Math.abs(gridHeight - renderedHeight);\n\n        if (Math.round(height) === 0 || isNaN(gridHeight)) {\n            const bodyHeight = this.defaultTargetBodyHeight;\n            return bodyHeight > 0 ? bodyHeight : null;\n        }\n        return height;\n    }\n\n    protected checkContainerSizeChange() {\n        const parentElement = this.nativeElement.parentElement || (this.nativeElement.getRootNode() as any).host;\n        const origHeight = parentElement.offsetHeight;\n        this.nativeElement.style.display = 'none';\n        const height = parentElement.offsetHeight;\n        this.nativeElement.style.display = '';\n        return origHeight !== height;\n    }\n\n    protected _shouldAutoSize(renderedHeight) {\n        this.tbody.nativeElement.style.display = 'none';\n        const parentElement = this.nativeElement.parentElement || (this.nativeElement.getRootNode() as any).host;\n        let res = !parentElement ||\n            parentElement.clientHeight === 0 ||\n            parentElement.clientHeight === renderedHeight;\n        if (parentElement && (res || this._autoSize)) {\n            // If grid causes the parent container to extend (for example when container is flex)\n            // we should always auto-size since the actual size of the container will continuously change as the grid renders elements.\n            this._autoSize = false;\n            res = this.checkContainerSizeChange();\n        }\n        this.tbody.nativeElement.style.display = '';\n        return res;\n    }\n\n    /**\n     * @hidden\n     * Gets calculated width of the unpinned area\n     * @param takeHidden If we should take into account the hidden columns in the pinned area.\n     */\n    protected getUnpinnedWidth(takeHidden = false) {\n        let width = this.isPercentWidth ?\n            this.calcWidth :\n            parseInt(this.width, 10) || parseInt(this.hostWidth, 10) || this.calcWidth;\n        if (this.hasVerticalScroll() && !this.isPercentWidth) {\n            width -= this.scrollSize;\n        }\n        if (!this.isPinningToStart) {\n            width -= this.featureColumnsWidth();\n        }\n\n        return width - this.getPinnedWidth(takeHidden);\n    }\n\n    /**\n     * @hidden\n     */\n    protected _summaries(fieldName: string, hasSummary: boolean, summaryOperand?: any) {\n        const column = this.gridAPI.get_column_by_name(fieldName);\n        if (column) {\n            column.hasSummary = hasSummary;\n            if (summaryOperand) {\n                if (this.rootSummariesEnabled) {\n                    this.summaryService.retriggerRootPipe++;\n                }\n                column.summaries = summaryOperand;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected _multipleSummaries(expressions: ISummaryExpression[], hasSummary: boolean) {\n        expressions.forEach((element) => {\n            this._summaries(element.fieldName, hasSummary, element.customSummary);\n        });\n    }\n    /**\n     * @hidden\n     */\n    protected _disableMultipleSummaries(expressions) {\n        expressions.forEach((column) => {\n            const columnName = column && column.fieldName ? column.fieldName : column;\n            this._summaries(columnName, false);\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public resolveDataTypes(rec) {\n        if (typeof rec === 'number') {\n            return GridColumnDataType.Number;\n        } else if (typeof rec === 'boolean') {\n            return GridColumnDataType.Boolean;\n        } else if (typeof rec === 'object' && rec instanceof Date) {\n            return GridColumnDataType.Date;\n        } else if (typeof rec === 'string' && (/\\.(gif|jpe?g|tiff?|png|webp|bmp)$/i).test(rec)) {\n            return GridColumnDataType.Image;\n        }\n        return GridColumnDataType.String;\n    }\n\n    /**\n     * @hidden\n     */\n    protected autogenerateColumns() {\n        const data = this.gridAPI.get_data();\n        const fields = this.generateDataFields(data);\n        const columns = [];\n\n        fields.forEach((field) => {\n            const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n            ref.instance.field = field;\n            ref.instance.dataType = this.resolveDataTypes(data[0][field]);\n            ref.changeDetectorRef.detectChanges();\n            columns.push(ref.instance);\n        });\n        this._autoGeneratedCols = columns;\n\n        this.updateColumns(columns);\n        this.columnsAutogenerated.emit({ columns: this._autoGeneratedCols });\n    }\n\n    protected generateDataFields(data: any[]): string[] {\n        return Object.keys(data && data.length !== 0 ? data[0] : [])\n            .filter(key => !this.autoGenerateExclude.includes(key));\n    }\n\n    /**\n     * @hidden\n     */\n    protected initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n        this._columnGroups = collection.some(col => col.columnGroup);\n        if (this.hasColumnLayouts) {\n            // Set overall row layout size\n            collection.forEach((col) => {\n                if (col.columnLayout) {\n                    const layoutSize = col.children ?\n                        col.children.reduce((acc, val) => Math.max(val.rowStart + val.gridRowSpan - 1, acc), 1) :\n                        1;\n                    this._multiRowLayoutRowSize = Math.max(layoutSize, this._multiRowLayoutRowSize);\n                }\n            });\n        }\n        if (this.hasColumnLayouts && this.hasColumnGroups) {\n            // invalid configuration - multi-row and column groups\n            // remove column groups\n            const columnLayoutColumns = collection.filter((col) => col.columnLayout || col.columnLayoutChild);\n            collection = columnLayoutColumns;\n        }\n        this._maxLevelHeaderDepth = null;\n        collection.forEach((column: IgxColumnComponent) => {\n            column.defaultWidth = this.columnWidthSetByUser ? this._columnWidth : column.defaultWidth ? column.defaultWidth : '';\n\n            if (cb) {\n                cb(column);\n            }\n        });\n\n        this.updateColumns(collection);\n\n        if (this.hasColumnLayouts) {\n            collection.forEach((column: IgxColumnComponent) => {\n                column.populateVisibleIndexes();\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected reinitPinStates() {\n        this._pinnedColumns = this._columns\n            .filter((c) => c.pinned).sort((a, b) => this._pinnedColumns.indexOf(a) - this._pinnedColumns.indexOf(b));\n        this._unpinnedColumns = this.hasColumnGroups ? this._columns.filter((c) => !c.pinned) :\n            this._columns.filter((c) => !c.pinned)\n                .sort((a, b) => this._unpinnedColumns.indexOf(a) - this._unpinnedColumns.indexOf(b));\n    }\n\n    protected extractDataFromSelection(source: any[], formatters = false, headers = false, columnData?: any[]): any[] {\n        let columnsArray: IgxColumnComponent[];\n        let record = {};\n        let selectedData = [];\n        let keys = [];\n        const selectionCollection = new Map();\n        const keysAndData = [];\n        const activeEl = this.selectionService.activeElement;\n\n        if (this.type === 'hierarchical') {\n            const expansionRowIndexes = [];\n            for (const [key, value] of this.expansionStates.entries()) {\n                if (value) {\n                    const rowIndex = this.gridAPI.get_rec_index_by_id(key, this.dataView);\n                    expansionRowIndexes.push(rowIndex);\n                }\n            }\n            if (this.selectionService.selection.size > 0) {\n                if (expansionRowIndexes.length > 0) {\n                    for (const [key, value] of this.selectionService.selection.entries()) {\n                        const updatedKey = key;\n                        let subtract = 0;\n                        expansionRowIndexes.forEach((row) => {\n                            if (updatedKey > Number(row)) {\n                                subtract++;\n                            }\n                        });\n                        selectionCollection.set(updatedKey - subtract, value);\n                    }\n                }\n            } else if (activeEl) {\n                let subtract = 0;\n                if (expansionRowIndexes.length > 0) {\n                    expansionRowIndexes.forEach(row => {\n                        if (activeEl.row > Number(row)) {\n                            subtract++;\n                        }\n                    });\n                    activeEl.row -= subtract;\n                }\n            }\n        }\n\n        const totalItems = (this as any).totalItemCount ?? 0;\n        const isRemote = totalItems && totalItems > this.dataView.length;\n        let selectionMap;\n        if (this.type === 'hierarchical' && selectionCollection.size > 0) {\n            selectionMap = isRemote ? Array.from(selectionCollection) :\n                Array.from(selectionCollection).filter((tuple) => tuple[0] < source.length);\n        } else {\n            selectionMap = isRemote ? Array.from(this.selectionService.selection) :\n                Array.from(this.selectionService.selection).filter((tuple) => tuple[0] < source.length);\n        }\n\n        if (this.cellSelection === GridSelectionMode.single && activeEl) {\n            selectionMap.push([activeEl.row, new Set<number>().add(activeEl.column)]);\n        }\n\n        if (this.cellSelection === GridSelectionMode.none && activeEl) {\n            selectionMap.push([activeEl.row, new Set<number>().add(activeEl.column)]);\n        }\n\n        if (columnData) {\n            selectedData = columnData;\n        }\n\n        // eslint-disable-next-line prefer-const\n        for (let [row, set] of selectionMap) {\n            row = this.paginator && (this.pagingMode === GridPagingMode.Local && source === this.filteredSortedData) ? row + (this.perPage * this.page) : row;\n            row = isRemote ? row - this.virtualizationState.startIndex : row;\n            if (!source[row] || source[row].detailsData !== undefined) {\n                continue;\n            }\n            const temp = Array.from(set);\n            for (const each of temp) {\n                columnsArray = this.getSelectableColumnsAt(each);\n                columnsArray.forEach((col) => {\n                    if (col) {\n                        const key = this.type !== 'pivot' && headers ? col.header || col.field : col.field;\n                        const rowData = source[row].ghostRecord ? source[row].recordRef : source[row];\n                        const value = this.type === 'pivot' ? rowData.aggregationValues.get(col.field)\n                            : resolveNestedPath(rowData, col.field);\n                        record[key] = formatters && col.formatter ? col.formatter(value, rowData) : value;\n                        if (columnData) {\n                            if (!record[key]) {\n                                record[key] = '';\n                            }\n                            record[key] = record[key].toString().concat('recordRow-' + row);\n                        }\n                    }\n                });\n            }\n            if (Object.keys(record).length) {\n                if (columnData) {\n                    if (!keys.length) {\n                        keys = Object.keys(columnData[0]);\n                    }\n                    for (const [key, value] of Object.entries(record)) {\n                        if (!keys.includes(key)) {\n                            keys.push(key);\n                        }\n                        let c: any = value;\n                        const rowNumber = +c.split('recordRow-')[1];\n                        c = c.split('recordRow-')[0];\n                        record[key] = c;\n                        const mergedObj = Object.assign(selectedData[rowNumber], record);\n                        selectedData[rowNumber] = mergedObj;\n                    }\n                } else {\n                    selectedData.push(record);\n                }\n            }\n            record = {};\n        }\n\n        if (keys.length) {\n            keysAndData.push(selectedData);\n            keysAndData.push(keys);\n            return keysAndData;\n        } else {\n            return selectedData;\n        }\n    }\n\n    protected getSelectableColumnsAt(index) {\n        if (this.hasColumnLayouts) {\n            const visibleLayoutColumns = this.visibleColumns\n                .filter(col => col.columnLayout)\n                .sort((a, b) => a.visibleIndex - b.visibleIndex);\n            const colLayout = visibleLayoutColumns[index];\n            return colLayout ? colLayout.children.toArray() : [];\n        } else {\n            const visibleColumns = this.visibleColumns\n                .filter(col => !col.columnGroup)\n                .sort((a, b) => a.visibleIndex - b.visibleIndex);\n            return [visibleColumns[index]];\n        }\n    }\n\n    protected autoSizeColumnsInView() {\n        if (!this.hasColumnsToAutosize) return;\n        const vState = this.headerContainer.state;\n        let colResized = false;\n        const unpinnedInView = this.headerContainer.igxGridForOf.slice(vState.startIndex, vState.startIndex + vState.chunkSize).flatMap(x => x.columnGroup ? x.allChildren : x);\n        const columnsInView = this.pinnedColumns.concat(unpinnedInView as IgxColumnComponent[]);\n        for (const col of columnsInView) {\n            if (!col.autoSize && col.headerCell) {\n                const cellsContentWidths = [];\n                if (col._cells.length !== this.rowList.length) {\n                    this.rowList.forEach(x => x.cdr.detectChanges());\n                }\n                const cells = this._dataRowList.map(x => x.cells.find(c => c.column === col));\n                cells.forEach((cell) => cellsContentWidths.push(cell?.nativeElement?.offsetWidth || 0));\n                let maxForCells = Math.max(...cellsContentWidths);\n                const header = this.headerCellList.find(x => x.column === col);\n                cellsContentWidths.push(header.nativeElement.offsetWidth);\n                const max = Math.max(...cellsContentWidths);\n                // in cases with template contains something, like a webcomponent,\n                // that renders fully only after it is already injected in the DOM,\n                // and initially renders as empty, skip measuring it.\n                let emptyCellWithPaddingOnly = 0;\n                if (cells.length > 0 && !!col.bodyTemplate) {\n                    const cellStyle = this.document.defaultView.getComputedStyle(cells[0].nativeElement);\n                    emptyCellWithPaddingOnly = parseFloat(cellStyle.paddingLeft) + parseFloat(cellStyle.paddingRight);\n                } else {\n                    maxForCells = max;\n                }\n\n                if (max === 0 || (maxForCells <= emptyCellWithPaddingOnly && this._firstAutoResize)) {\n                    // cells not in DOM yet or content not fully initialized.\n                    continue;\n                }\n                let maxSize = Math.ceil(Math.max(...cellsContentWidths)) + 1;\n                if (col.maxWidth && maxSize > col.maxWidthPx) {\n                    maxSize = col.maxWidthPx;\n                } else if (maxSize < col.minWidthPx) {\n                    maxSize = col.minWidthPx;\n                }\n                col.autoSize = maxSize;\n                col.resetCaches();\n                colResized = true;\n            }\n        }\n        if (colResized) {\n            this.resetCachedWidths();\n            this.cdr.detectChanges();\n        }\n\n        if (this.isColumnWidthSum) {\n            this.calcWidth = this.getColumnWidthSum();\n        }\n    }\n\n    protected extractDataFromColumnsSelection(source: any[], formatters = false, headers = false): any[] {\n        let record = {};\n        const selectedData = [];\n        const selectedColumns = this.selectedColumns();\n        if (selectedColumns.length === 0) {\n            return [];\n        }\n\n        for (const data of source) {\n            selectedColumns.forEach((col) => {\n                const key = headers ? col.header || col.field : col.field;\n                record[key] = formatters && col.formatter ? col.formatter(data[col.field], data)\n                    : data[col.field];\n            });\n\n            if (Object.keys(record).length) {\n                selectedData.push(record);\n            }\n            record = {};\n        }\n        return selectedData;\n    }\n\n    /**\n     * @hidden\n     */\n    protected initPinning() {\n        this.calculateGridWidth();\n        this.resetCaches();\n        this.handleColumnPinningForGroups();\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    protected scrollTo(row: any | number, column: any | number, inCollection = this._filteredSortedUnpinnedData): void {\n        let delayScrolling = false;\n\n        if (this.paginator && typeof (row) !== 'number') {\n            const rowIndex = inCollection.indexOf(row);\n            const page = Math.floor(rowIndex / this.perPage);\n\n            if (this.page !== page) {\n                delayScrolling = true;\n                this.page = page;\n            }\n        }\n\n        if (delayScrolling) {\n            this.verticalScrollContainer.dataChanged.pipe(first()).subscribe(() => {\n                this.scrollDirective(this.verticalScrollContainer,\n                    typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(row));\n            });\n        } else {\n            this.scrollDirective(this.verticalScrollContainer,\n                typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(row));\n        }\n\n        this.scrollToHorizontally(column);\n    }\n\n    /**\n     * @hidden\n     */\n    protected scrollToHorizontally(column: any | number) {\n        let columnIndex = typeof column === 'number' ? column : this.getColumnByName(column).visibleIndex;\n        const scrollRow = this.rowList.find(r => !!r.virtDirRow);\n        const virtDir = scrollRow ? scrollRow.virtDirRow : null;\n        if (this.isPinningToStart && this.pinnedColumns.length) {\n            if (columnIndex >= this.pinnedColumns.length) {\n                columnIndex -= this.pinnedColumns.length;\n                this.scrollDirective(virtDir, columnIndex);\n            }\n        } else {\n            this.scrollDirective(virtDir, columnIndex);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected scrollDirective(directive: IgxGridForOfDirective<any, any[]>, goal: number): void {\n        if (!directive) {\n            return;\n        }\n        directive.scrollTo(goal);\n    }\n\n\n    /**\n     * @hidden\n     */\n    protected getColumnWidthSum(): number {\n        let colSum = 0;\n        const cols = this.hasColumnLayouts ?\n            this.visibleColumns.filter(x => x.columnLayout) : this.visibleColumns.filter(x => !x.columnGroup);\n        cols.forEach((item) => {\n            colSum += parseInt((item.calcWidth || item.defaultWidth), 10) || this.minColumnWidth;\n        });\n        if (!colSum) {\n            return null;\n        }\n        this.cdr.detectChanges();\n        colSum += this.featureColumnsWidth();\n        return colSum;\n    }\n\n    /**\n     * Notify changes, reset cache and populateVisibleIndexes.\n     *\n     * @hidden\n     */\n    private _columnsReordered(column: IgxColumnComponent) {\n        this.notifyChanges();\n        // after reordering is done reset cached column collections.\n        this.resetColumnCollections();\n        column.resetCaches();\n    }\n\n    protected buildDataView(_data: any[]) {\n        this._dataView = this.isRowPinningToTop ?\n            [...this.pinnedDataView, ...this.unpinnedDataView] :\n            [...this.unpinnedDataView, ...this.pinnedDataView];\n    }\n\n    private _applyWidthHostBinding() {\n        let width = this._width;\n        if (width === null) {\n            let currentWidth = this.calcWidth;\n            if (this.hasVerticalScroll()) {\n                currentWidth += this.scrollSize;\n            }\n            width = currentWidth + 'px';\n            this.resetCaches();\n        }\n        this._hostWidth = width;\n        this.cdr.markForCheck();\n    }\n\n    protected verticalScrollHandler(event) {\n        this.verticalScrollContainer.onScroll(event);\n        this.disableTransitions = true;\n\n        this.zone.run(() => {\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this.verticalScrollContainer.chunkLoad.emit(this.verticalScrollContainer.state);\n                if (this.rowEditable) {\n                    this.changeRowEditingOverlayStateOnScroll(this.crudService.rowInEditMode);\n                }\n            });\n        });\n        this.disableTransitions = false;\n\n        this.hideOverlays();\n        this.actionStrip?.hide();\n        if (this.actionStrip) {\n            this.actionStrip.context = null;\n        }\n        const args: IGridScrollEventArgs = {\n            direction: 'vertical',\n            event,\n            scrollPosition: this.verticalScrollContainer.scrollPosition\n        };\n        this.gridScroll.emit(args);\n    }\n\n    protected horizontalScrollHandler(event) {\n        const scrollLeft = event.target.scrollLeft;\n        this.headerContainer.onHScroll(scrollLeft);\n        this._horizontalForOfs.forEach(vfor => vfor.onHScroll(scrollLeft));\n        this.cdr.markForCheck();\n\n        this.zone.run(() => {\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this.parentVirtDir.chunkLoad.emit(this.headerContainer.state);\n                requestAnimationFrame(() => {\n                    this.autoSizeColumnsInView();\n                });\n            });\n        });\n        if (!this.navigation.isColumnFullyVisible(this.navigation.lastColumnIndex)) {\n            this.hideOverlays();\n        }\n        const args: IGridScrollEventArgs = { direction: 'horizontal', event, scrollPosition: this.headerContainer.scrollPosition };\n        this.gridScroll.emit(args);\n    }\n\n    protected get renderedActualRowHeight() {\n        let border = 1;\n        if (this.rowList.toArray().length > 0) {\n            const rowStyles = this.document.defaultView.getComputedStyle(this.rowList.first.nativeElement);\n            border = rowStyles.borderBottomWidth ? Math.ceil(parseFloat(rowStyles.borderBottomWidth)) : border;\n        }\n        return this.rowHeight + border;\n    }\n\n    private executeCallback(rowIndex, visibleColIndex = -1, cb: (args: any) => void = null) {\n        if (!cb) {\n            return;\n        }\n        let row = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).find(r => r.index === rowIndex);\n        if (!row) {\n            if ((this as any).totalItemCount) {\n                this.verticalScrollContainer.dataChanged.pipe(first()).subscribe(() => {\n                    this.cdr.detectChanges();\n                    row = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).find(r => r.index === rowIndex);\n                    const cbArgs = this.getNavigationArguments(row, visibleColIndex);\n                    cb(cbArgs);\n                });\n            }\n            const dataViewIndex = this._getDataViewIndex(rowIndex);\n            if (this.dataView[dataViewIndex].detailsData) {\n                this.navigation.setActiveNode({ row: rowIndex });\n                this.cdr.detectChanges();\n            }\n\n            return;\n        }\n        const args = this.getNavigationArguments(row, visibleColIndex);\n        cb(args);\n    }\n\n    private getNavigationArguments(row, visibleColIndex) {\n        let targetType: GridKeydownTargetType; let target;\n        switch (row.nativeElement.tagName.toLowerCase()) {\n            case 'igx-grid-groupby-row':\n                targetType = 'groupRow';\n                target = row;\n                break;\n            case 'igx-grid-summary-row':\n                targetType = 'summaryCell';\n                target = visibleColIndex !== -1 ?\n                    row.summaryCells.find(c => c.visibleColumnIndex === visibleColIndex) : row.summaryCells.first;\n                break;\n            case 'igx-child-grid-row':\n                targetType = 'hierarchicalRow';\n                target = row;\n                break;\n            default:\n                targetType = 'dataCell';\n                target = visibleColIndex !== -1 ? row.cells.find(c => c.visibleColumnIndex === visibleColIndex) : row.cells.first;\n                break;\n        }\n        return { targetType, target };\n    }\n\n    private getNextDataRowIndex(currentRowIndex, previous = false): number {\n        const resolvedIndex = this._getDataViewIndex(currentRowIndex);\n        if (currentRowIndex < 0 || (currentRowIndex === 0 && previous) || (resolvedIndex >= this.dataView.length - 1 && !previous)) {\n            return currentRowIndex;\n        }\n        // find next/prev record that is editable.\n        const nextRowIndex = previous ? this.findPrevEditableDataRowIndex(currentRowIndex) :\n            this.dataView.findIndex((rec, index) =>\n                index > resolvedIndex && this.isEditableDataRecordAtIndex(index));\n        const nextDataIndex = this.getDataIndex(nextRowIndex);\n        return nextDataIndex !== -1 ? nextDataIndex : currentRowIndex;\n    }\n\n    /**\n     * Returns the previous editable row index or -1 if no such row is found.\n     *\n     * @param currentIndex The index of the current editable record.\n     */\n    private findPrevEditableDataRowIndex(currentIndex): number {\n        let i = this.dataView.length;\n        const resolvedIndex = this._getDataViewIndex(currentIndex);\n        while (i--) {\n            if (i < resolvedIndex && this.isEditableDataRecordAtIndex(i)) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n\n    /**\n     * Returns if the record at the specified data view index is a an editable data record.\n     * If record is group rec, summary rec, child rec, ghost rec. etc. it is not editable.\n     *\n     * @param dataViewIndex The index of that record in the data view.\n     *\n     */\n    // TODO: Consider moving it into CRUD\n    private isEditableDataRecordAtIndex(dataViewIndex) {\n        const rec = this.dataView[dataViewIndex];\n        return !rec.expression && !rec.summaries && !rec.childGridsData && !rec.detailsData &&\n            !this.isGhostRecordAtIndex(dataViewIndex);\n    }\n\n    /**\n     * Returns if the record at the specified data view index is a ghost.\n     * If record is pinned but is not in pinned area then it is a ghost record.\n     *\n     * @param dataViewIndex The index of that record in the data view.\n     */\n    private isGhostRecordAtIndex(dataViewIndex) {\n        const isPinned = this.isRecordPinned(this.dataView[dataViewIndex]);\n        const isInPinnedArea = this.isRecordPinnedByViewIndex(dataViewIndex);\n        return isPinned && !isInPinnedArea;\n    }\n\n    private isValidPosition(rowIndex, colIndex): boolean {\n        const rows = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).length;\n        const cols = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0 && !col.hidden).length;\n        if (rows < 1 || cols < 1) {\n            return false;\n        }\n        if (rowIndex > -1 && rowIndex < this.dataView.length &&\n            colIndex > - 1 && colIndex <= Math.max(...this.visibleColumns.map(c => c.visibleIndex))) {\n            return true;\n        }\n        return false;\n    }\n\n    private find(text: string, increment: number, caseSensitive?: boolean, exactMatch?: boolean, scroll?: boolean, endEdit = true) {\n        if (!this.rowList) {\n            return 0;\n        }\n\n        if (endEdit) {\n            this.crudService.endEdit(false);\n        }\n\n        if (!text) {\n            this.clearSearch();\n            return 0;\n        }\n\n        const caseSensitiveResolved = caseSensitive ? true : false;\n        const exactMatchResolved = exactMatch ? true : false;\n        let rebuildCache = false;\n\n        if (this._lastSearchInfo.searchText !== text ||\n            this._lastSearchInfo.caseSensitive !== caseSensitiveResolved ||\n            this._lastSearchInfo.exactMatch !== exactMatchResolved) {\n            this._lastSearchInfo = {\n                searchText: text,\n                activeMatchIndex: 0,\n                caseSensitive: caseSensitiveResolved,\n                exactMatch: exactMatchResolved,\n                matchInfoCache: [],\n                matchCount: 0,\n                content: ''\n            };\n\n            rebuildCache = true;\n        } else {\n            this._lastSearchInfo.activeMatchIndex += increment;\n        }\n\n        if (rebuildCache) {\n            this.rowList.forEach((row) => {\n                if (row.cells) {\n                    row.cells.forEach((c: IgxGridCellComponent) => {\n                        c.highlightText(text, caseSensitiveResolved, exactMatchResolved);\n                    });\n                }\n            });\n\n            this.rebuildMatchCache();\n        }\n\n        if (this._lastSearchInfo.activeMatchIndex >= this._lastSearchInfo.matchCount) {\n            this._lastSearchInfo.activeMatchIndex = 0;\n        } else if (this._lastSearchInfo.activeMatchIndex < 0) {\n            this._lastSearchInfo.activeMatchIndex = this._lastSearchInfo.matchCount - 1;\n        }\n\n        if (this._lastSearchInfo.matchCount > 0) {\n            const matchInfo = this._lastSearchInfo.matchInfoCache[this._lastSearchInfo.activeMatchIndex];\n            this._lastSearchInfo = { ...this._lastSearchInfo };\n\n            if (scroll !== false) {\n                this.scrollTo(matchInfo.row, matchInfo.column);\n            }\n\n            this.textHighlightService.setActiveHighlight(this.id, {\n                column: matchInfo.column,\n                row: matchInfo.row,\n                index: matchInfo.index,\n                metadata: matchInfo.metadata,\n            });\n\n        } else {\n            this.textHighlightService.clearActiveHighlight(this.id);\n        }\n\n        return this._lastSearchInfo.matchCount;\n    }\n\n    private rebuildMatchCache() {\n        this._lastSearchInfo.matchInfoCache = [];\n\n        const caseSensitive = this._lastSearchInfo.caseSensitive;\n        const exactMatch = this._lastSearchInfo.exactMatch;\n        const searchText = caseSensitive ? this._lastSearchInfo.searchText : this._lastSearchInfo.searchText.toLowerCase();\n        const data = this.filteredSortedData;\n        const columnItems = this.visibleColumns.filter((c) => !c.columnGroup).sort((c1, c2) => c1.visibleIndex - c2.visibleIndex);\n\n        data.forEach((dataRow, rowIndex) => {\n            columnItems.forEach((c) => {\n                const pipeArgs = this.getColumnByName(c.field).pipeArgs;\n                const value = c.formatter ? c.formatter(resolveNestedPath(dataRow, c.field), dataRow) :\n                    c.dataType === 'number' ? formatNumber(resolveNestedPath(dataRow, c.field), this.locale, pipeArgs.digitsInfo) :\n                        c.dataType === 'date'\n                            ? formatDate(resolveNestedPath(dataRow, c.field), pipeArgs.format, this.locale, pipeArgs.timezone)\n                            : resolveNestedPath(dataRow, c.field);\n                if (value !== undefined && value !== null && c.searchable) {\n                    let searchValue = caseSensitive ? String(value) : String(value).toLowerCase();\n\n                    if (exactMatch) {\n                        if (searchValue === searchText) {\n                            const mic: IMatchInfoCache = {\n                                row: dataRow,\n                                column: c.field,\n                                index: 0,\n                                metadata: new Map<string, boolean>([['pinned', this.isRecordPinnedByIndex(rowIndex)]])\n                            };\n\n                            this._lastSearchInfo.matchInfoCache.push(mic);\n                        }\n                    } else {\n                        let occurrenceIndex = 0;\n                        let searchIndex = searchValue.indexOf(searchText);\n\n                        while (searchIndex !== -1) {\n                            const mic: IMatchInfoCache = {\n                                row: dataRow,\n                                column: c.field,\n                                index: occurrenceIndex++,\n                                metadata: new Map<string, boolean>([['pinned', this.isRecordPinnedByIndex(rowIndex)]])\n                            };\n\n                            this._lastSearchInfo.matchInfoCache.push(mic);\n\n                            searchValue = searchValue.substring(searchIndex + searchText.length);\n                            searchIndex = searchValue.indexOf(searchText);\n                        }\n                    }\n                }\n            });\n        });\n\n        this._lastSearchInfo.matchCount = this._lastSearchInfo.matchInfoCache.length;\n    }\n\n    protected updateDefaultRowHeight() {\n        if (this.dataRowList.length > 0 && this.dataRowList.first.cells && this.dataRowList.first.cells.length > 0) {\n            const height = parseFloat(this.document.defaultView.getComputedStyle(this.dataRowList.first.cells.first.nativeElement)?.getPropertyValue('height'));\n            if (height) {\n                this._defaultRowHeight = height;\n            } else {\n                this._shouldRecalcRowHeight = true;\n            }\n        }\n    }\n\n    // TODO: About to Move to CRUD\n    private configureRowEditingOverlay(rowID: any, useOuter = false) {\n        let settings = this.rowEditSettings;\n        const overlay = this.overlayService.getOverlayById(this.rowEditingOverlay.overlayId);\n        if (overlay) {\n            settings = overlay.settings;\n        }\n        settings.outlet = useOuter ? this.parentRowOutletDirective : this.rowOutletDirective;\n        this.rowEditPositioningStrategy.settings.container = this.tbody.nativeElement;\n        const pinned = this._pinnedRecordIDs.indexOf(rowID) !== -1;\n        const targetRow = !pinned ?\n            this.gridAPI.get_row_by_key(rowID) as IgxRowDirective\n            : this.pinnedRows.find(x => x.key === rowID) as IgxRowDirective;\n        if (!targetRow) {\n            return;\n        }\n        settings.target = targetRow.element.nativeElement;\n        this.toggleRowEditingOverlay(true);\n    }\n\n    private handleColumnPinningForGroups(): void {\n        // When a column is a group or is inside a group, pin all related.\n        const pinnedColumns = [];\n        const unpinnedColumns = [];\n\n        this._pinnedColumns.forEach(col => {\n            if (col.parent) {\n                col.parent.pinned = true;\n            }\n            if (col.columnGroup) {\n                col.children.forEach(child => child.pinned = true);\n            }\n        });\n\n        // Make sure we don't exceed unpinned area min width and get pinned and unpinned col collections.\n        // We take into account top level columns (top level groups and non groups).\n        // If top level is unpinned the pinning handles all children to be unpinned as well.\n        for (const column of this._columns) {\n            if (column.pinned && !column.parent) {\n                pinnedColumns.push(column);\n            } else if (column.pinned && column.parent) {\n                if (column.topLevelParent.pinned) {\n                    pinnedColumns.push(column);\n                } else {\n                    column.pinned = false;\n                    unpinnedColumns.push(column);\n                }\n            } else {\n                unpinnedColumns.push(column);\n            }\n        }\n        // Assign the applicable collections.\n        this._pinnedColumns = pinnedColumns;\n        this._unpinnedColumns = unpinnedColumns;\n    }\n\n    protected shouldRecreateColumns(oldData: any[] | null | undefined, newData: any[] | null | undefined): boolean {\n        if (!oldData || !oldData.length) return true;\n        if (!newData || !newData.length) return false;\n        return Object.keys(oldData[0]).join() !== Object.keys(newData[0]).join();\n    }\n\n    /**\n     * Clears the current navigation service active node\n     */\n    private clearActiveNode() {\n        this.navigation.lastActiveNode = this.navigation.activeNode;\n        this.navigation.activeNode = {} as IActiveNode;\n        this.notifyChanges();\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { cloneArray, reverseMapper, mergeObjects } from '../core/utils';\nimport { DataUtil, GridColumnDataType } from '../data-operations/data-util';\nimport { IFilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';\nimport { Transaction, TransactionType, State } from '../services/transaction/transaction';\nimport { IgxCell, IgxGridCRUDService, IgxEditRow } from './common/crud.service';\nimport { CellType, ColumnType, GridServiceType, GridType, RowType } from './common/grid.interface';\nimport { IGridEditEventArgs, IPinRowEventArgs, IRowToggleEventArgs } from './common/events';\nimport { IgxColumnMovingService } from './moving/moving.service';\nimport { IGroupingExpression } from '../data-operations/grouping-expression.interface';\nimport { ISortingExpression, SortingDirection } from '../data-operations/sorting-strategy';\nimport { FilterUtil } from '../data-operations/filtering-strategy';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class GridBaseAPIService<T extends GridType> implements GridServiceType {\n\n\n    public grid: T;\n    protected destroyMap: Map<string, Subject<boolean>> = new Map<string, Subject<boolean>>();\n\n    constructor(\n        public crudService: IgxGridCRUDService,\n        public cms: IgxColumnMovingService\n    ) { }\n\n    public get_column_by_name(name: string): ColumnType {\n        return this.grid.columns.find((col: ColumnType) => col.field === name);\n    }\n\n    public get_summary_data() {\n        const grid = this.grid;\n        let data = grid.filteredData;\n        if (data && grid.hasPinnedRecords) {\n            data = grid._filteredUnpinnedData;\n        }\n        if (!data) {\n            if (grid.transactions.enabled) {\n                data = DataUtil.mergeTransactions(\n                    cloneArray(grid.data),\n                    grid.transactions.getAggregatedChanges(true),\n                    grid.primaryKey,\n                    grid.dataCloneStrategy\n                );\n                const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);\n                deletedRows.forEach(rowID => {\n                    const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n                    const index = tempData.indexOf(rowID);\n                    if (index !== -1) {\n                        data.splice(index, 1);\n                    }\n                });\n            } else {\n                data = grid.data;\n            }\n        }\n        return data;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getRowData(rowID: any) {\n        const data = this.get_all_data(this.grid.transactions.enabled);\n        const index = this.get_row_index_in_data(rowID, data);\n        return data[index];\n    }\n\n    public get_row_index_in_data(rowID: any, dataCollection?: any[]): number {\n        const grid = this.grid;\n        if (!grid) {\n            return -1;\n        }\n        const data = dataCollection ?? this.get_all_data(grid.transactions.enabled);\n        return grid.primaryKey ? data.findIndex(record => record.recordRef ? record.recordRef[grid.primaryKey] === rowID\n            : record[grid.primaryKey] === rowID) : data.indexOf(rowID);\n    }\n\n    public get_row_by_key(rowSelector: any): RowType {\n        if (!this.grid) {\n            return null;\n        }\n        const primaryKey = this.grid.primaryKey;\n        if (primaryKey !== undefined && primaryKey !== null) {\n            return this.grid.dataRowList.find((row) => row.data[primaryKey] === rowSelector);\n        } else {\n            return this.grid.dataRowList.find((row) => row.data === rowSelector);\n        }\n    }\n\n    public get_row_by_index(rowIndex: number): RowType {\n        return this.grid.rowList.find((row) => row.index === rowIndex);\n    }\n\n    /**\n     * Gets the rowID of the record at the specified data view index\n     *\n     * @param index\n     * @param dataCollection\n     */\n    public get_rec_id_by_index(index: number, dataCollection?: any[]): any {\n        dataCollection = dataCollection || this.grid.data;\n        if (index >= 0 && index < dataCollection.length) {\n            const rec = dataCollection[index];\n            return this.grid.primaryKey ? rec[this.grid.primaryKey] : rec;\n        }\n        return null;\n    }\n\n    public get_cell_by_key(rowSelector: any, field: string): CellType {\n        const row = this.get_row_by_key(rowSelector);\n        if (row && row.cells) {\n            return row.cells.find((cell) => cell.column.field === field);\n        }\n    }\n\n    public get_cell_by_index(rowIndex: number, columnID: number | string): CellType {\n        const row = this.get_row_by_index(rowIndex);\n        const hasCells = row && row.cells;\n        if (hasCells && typeof columnID === 'number') {\n            return row.cells.find((cell) => cell.column.index === columnID);\n        }\n        if (hasCells && typeof columnID === 'string') {\n            return row.cells.find((cell) => cell.column.field === columnID);\n        }\n\n    }\n\n    public get_cell_by_visible_index(rowIndex: number, columnIndex: number): CellType {\n        const row = this.get_row_by_index(rowIndex);\n        if (row && row.cells) {\n            return row.cells.find((cell) => cell.visibleColumnIndex === columnIndex);\n        }\n    }\n\n    public update_cell(cell: IgxCell): IGridEditEventArgs {\n        if (!cell) {\n            return;\n        }\n        const args = cell.createCellEditEventArgs(true);\n        if (!this.grid.crudService.row) { // should not recalculate summaries when there is row in edit mode\n            this.grid.summaryService.clearSummaryCache(args);\n        }\n        const data = this.getRowData(cell.id.rowID);\n        const newRowData = reverseMapper(cell.column.field, args.newValue);\n        this.updateData(this.grid, cell.id.rowID, data, cell.rowData, newRowData);\n        if (!this.grid.crudService.row) {\n            this.grid.validation.update(cell.id.rowID, newRowData);\n        }\n        if (this.grid.primaryKey === cell.column.field) {\n            if (this.grid.pinnedRecords.length > 0) {\n                const rowIndex = this.grid.pinnedRecords.indexOf(cell.rowData);\n                if (rowIndex !== -1) {\n                    const previousRowId = cell.value;\n                    const rowType = this.grid.getRowByIndex(cell.rowIndex);\n                    this.unpin_row(previousRowId, rowType);\n                    this.pin_row(args.newValue, rowIndex, rowType);\n                }\n            }\n            if (this.grid.selectionService.isRowSelected(cell.id.rowID)) {\n                this.grid.selectionService.deselectRow(cell.id.rowID);\n                this.grid.selectionService.selectRowById(args.newValue);\n            }\n            if (this.grid.hasSummarizedColumns) {\n                this.grid.summaryService.removeSummaries(cell.id.rowID);\n            }\n        }\n        if (!this.grid.rowEditable || !this.crudService.row ||\n            this.crudService.row.id !== cell.id.rowID || !this.grid.transactions.enabled) {\n            this.grid.summaryService.clearSummaryCache(args);\n            this.grid.pipeTrigger++;\n        }\n\n        return args;\n    }\n\n    // TODO: CRUD refactor to not emit editing evts.\n    public update_row(row: IgxEditRow, value: any, event?: Event) {\n        const grid = this.grid;\n        const selected = grid.selectionService.isRowSelected(row.id);\n        const rowInEditMode = this.crudService.row;\n        const data = this.get_all_data(grid.transactions.enabled);\n        const index = this.get_row_index_in_data(row.id, data);\n        const hasSummarized = grid.hasSummarizedColumns;\n        this.crudService.updateRowEditData(row, value);\n\n        const args = row.createRowEditEventArgs(true, event);\n\n        // If no valid row is found\n        if (index === -1) {\n            return args;\n        }\n\n        if (rowInEditMode) {\n            const hasChanges = grid.transactions.getState(args.rowID, true);\n            grid.transactions.endPending(false);\n            if (!hasChanges) {\n                return args;\n            }\n        }\n\n        if (!args.newValue) {\n            return args;\n        }\n\n        if (hasSummarized) {\n            grid.summaryService.removeSummaries(args.rowID);\n        }\n\n        this.updateData(grid, row.id, data[index], args.oldValue, args.newValue);\n        this.grid.validation.update(row.id, args.newValue);\n        const newId = grid.primaryKey ? args.newValue[grid.primaryKey] : args.newValue;\n        if (selected) {\n            grid.selectionService.deselectRow(row.id);\n            grid.selectionService.selectRowById(newId);\n        }\n        // make sure selection is handled prior to updating the row.id\n        row.id = newId;\n        if (hasSummarized) {\n            grid.summaryService.removeSummaries(newId);\n        }\n        grid.pipeTrigger++;\n\n        return args;\n    }\n\n    public sort(expression: ISortingExpression): void {\n        if (expression.dir === SortingDirection.None) {\n            this.remove_grouping_expression(expression.fieldName);\n        }\n        const sortingState = cloneArray(this.grid.sortingExpressions);\n        this.prepare_sorting_expression([sortingState], expression);\n        this.grid.sortingExpressions = sortingState;\n    }\n\n    public sort_decoupled(expression: IGroupingExpression): void {\n        if (expression.dir === SortingDirection.None) {\n            this.remove_grouping_expression(expression.fieldName);\n        }\n        const groupingState = cloneArray((this.grid as any).groupingExpressions);\n        this.prepare_grouping_expression([groupingState], expression);\n        (this.grid as any).groupingExpressions = groupingState;\n    }\n\n    public sort_multiple(expressions: ISortingExpression[]): void {\n        const sortingState = cloneArray(this.grid.sortingExpressions);\n\n        for (const each of expressions) {\n            if (each.dir === SortingDirection.None) {\n                this.remove_grouping_expression(each.fieldName);\n            }\n            this.prepare_sorting_expression([sortingState], each);\n        }\n\n        this.grid.sortingExpressions = sortingState;\n    }\n\n    public sort_groupBy_multiple(expressions: ISortingExpression[]): void {\n        const groupingState = cloneArray((this.grid as any).groupingExpressions);\n\n        for (const each of expressions) {\n            if (each.dir === SortingDirection.None) {\n                this.remove_grouping_expression(each.fieldName);\n            }\n            this.prepare_grouping_expression([groupingState], each);\n        }\n    }\n\n    public clear_sort(fieldName: string) {\n        const sortingState = this.grid.sortingExpressions;\n        const index = sortingState.findIndex((expr) => expr.fieldName === fieldName);\n        if (index > -1) {\n            sortingState.splice(index, 1);\n            this.grid.sortingExpressions = sortingState;\n        }\n    }\n\n    public clear_groupby(_name?: string | Array<string>) {\n    }\n\n    public should_apply_number_style(column: ColumnType): boolean {\n        return column.dataType === GridColumnDataType.Number;\n    }\n\n    public get_data(): any[] {\n        const grid = this.grid;\n        const data = grid.data ? grid.data : [];\n        return data;\n    }\n\n    public get_all_data(includeTransactions = false): any[] {\n        const grid = this.grid;\n        let data = grid && grid.data ? grid.data : [];\n        data = includeTransactions ? grid.dataWithAddedInTransactionRows : data;\n        return data;\n    }\n\n    public get_filtered_data(): any[] {\n        return this.grid.filteredData;\n    }\n\n    public addRowToData(rowData: any, _parentID?: any) {\n        // Add row goes to transactions and if rowEditable is properly implemented, added rows will go to pending transactions\n        // If there is a row in edit - > commit and close\n        const grid = this.grid;\n        const rowId = grid.primaryKey ? rowData[grid.primaryKey] : rowData;\n        if (grid.transactions.enabled) {\n            const transaction: Transaction = { id: rowId, type: TransactionType.ADD, newValue: rowData };\n            grid.transactions.add(transaction);\n        } else {\n            grid.data.push(rowData);\n        }\n        grid.validation.markAsTouched(rowId);\n        grid.validation.update(rowId, rowData);\n    }\n\n    public deleteRowFromData(rowID: any, index: number) {\n        //  if there is a row (index !== 0) delete it\n        //  if there is a row in ADD or UPDATE state change it's state to DELETE\n        const grid = this.grid;\n        if (index !== -1) {\n            if (grid.transactions.enabled) {\n                const transaction: Transaction = { id: rowID, type: TransactionType.DELETE, newValue: null };\n                grid.transactions.add(transaction, grid.data[index]);\n            } else {\n                grid.data.splice(index, 1);\n            }\n        } else {\n            const state: State = grid.transactions.getState(rowID);\n            grid.transactions.add({ id: rowID, type: TransactionType.DELETE, newValue: null }, state && state.recordRef);\n        }\n        grid.validation.clear(rowID);\n    }\n\n    public deleteRowById(rowId: any): any {\n        let index: number;\n        const grid = this.grid;\n        const data = this.get_all_data(grid.transactions.enabled);\n        if (grid.primaryKey) {\n            index = data.map((record) => record[grid.primaryKey]).indexOf(rowId);\n        } else {\n            index = data.indexOf(rowId);\n        }\n        const state: State = grid.transactions.getState(rowId);\n        const hasRowInNonDeletedState = state && state.type !== TransactionType.DELETE;\n\n        //  if there is a row (index !== -1) and the we have cell in edit mode on same row exit edit mode\n        //  if there is no row (index === -1), but there is a row in ADD or UPDATE state do as above\n        //  Otherwise just exit - there is nothing to delete\n        if (index !== -1 || hasRowInNonDeletedState) {\n            // Always exit edit when row is deleted\n            this.crudService.endEdit(true);\n        } else {\n            return;\n        }\n\n        const record = data[index];\n        const key = record ? record[grid.primaryKey] : undefined;\n        grid.rowDeletedNotifier.next({ data: record, rowData: record, owner: grid, primaryKey: key, rowKey: key });\n\n        this.deleteRowFromData(rowId, index);\n\n        if (grid.selectionService.isRowSelected(rowId)) {\n            grid.selectionService.deselectRowsWithNoEvent([rowId]);\n        } else {\n            grid.selectionService.clearHeaderCBState();\n        }\n        grid.pipeTrigger++;\n        grid.notifyChanges();\n        // Data needs to be recalculated if transactions are in place\n        // If no transactions, `data` will be a reference to the grid getter, otherwise it will be stale\n        const dataAfterDelete = grid.transactions.enabled ? grid.dataWithAddedInTransactionRows : data;\n        grid.refreshSearch();\n        if (dataAfterDelete.length % grid.perPage === 0 && dataAfterDelete.length / grid.perPage - 1 < grid.page && grid.page !== 0) {\n            grid.page--;\n        }\n\n        return record;\n    }\n\n    public get_row_id(rowData) {\n        return this.grid.primaryKey ? rowData[this.grid.primaryKey] : rowData;\n    }\n\n    public row_deleted_transaction(rowID: any): boolean {\n        const grid = this.grid;\n        if (!grid) {\n            return false;\n        }\n        if (!grid.transactions.enabled) {\n            return false;\n        }\n        const state = grid.transactions.getState(rowID);\n        if (state) {\n            return state.type === TransactionType.DELETE;\n        }\n\n        return false;\n    }\n\n    public get_row_expansion_state(record: any): boolean {\n        const grid = this.grid;\n        const states = grid.expansionStates;\n        const rowID = grid.primaryKey ? record[grid.primaryKey] : record;\n        const expanded = states.get(rowID);\n\n        if (expanded !== undefined) {\n            return expanded;\n        } else {\n            return grid.getDefaultExpandState(record);\n        }\n    }\n\n    public set_row_expansion_state(rowID: any, expanded: boolean, event?: Event) {\n        const grid = this.grid;\n        const expandedStates = grid.expansionStates;\n\n        if (!this.allow_expansion_state_change(rowID, expanded)) {\n            return;\n        }\n\n        const args: IRowToggleEventArgs = {\n            rowKey: rowID,\n            rowID,\n            expanded,\n            event,\n            cancel: false\n        };\n\n        grid.rowToggle.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n        expandedStates.set(rowID, expanded);\n        grid.expansionStates = expandedStates;\n        // K.D. 28 Feb, 2022 #10634 Don't trigger endEdit/commit upon row expansion state change\n        // this.crudService.endEdit(false);\n    }\n\n    public get_rec_by_id(rowID) {\n        return this.grid.primaryKey ? this.getRowData(rowID) : rowID;\n    }\n\n    /**\n     * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n     *\n     * @param pk\n     * @param dataCollection\n     */\n    public get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number {\n        dataCollection = dataCollection || this.grid.data;\n        return this.grid.primaryKey ? dataCollection.findIndex(rec => rec[this.grid.primaryKey] === pk) : -1;\n    }\n\n    public allow_expansion_state_change(rowID, expanded) {\n        return this.grid.expansionStates.get(rowID) !== expanded;\n    }\n\n    public prepare_sorting_expression(stateCollections: Array<Array<any>>, expression: ISortingExpression) {\n        if (expression.dir === SortingDirection.None) {\n            stateCollections.forEach(state => {\n                state.splice(state.findIndex((expr) => expr.fieldName === expression.fieldName), 1);\n            });\n            return;\n        }\n\n        /**\n         * We need to make sure the states in each collection with same fields point to the same object reference.\n         * If the different state collections provided have different sizes we need to get the largest one.\n         * That way we can get the state reference from the largest one that has the same fieldName as the expression to prepare.\n         */\n        let maxCollection = stateCollections[0];\n        for (let i = 1; i < stateCollections.length; i++) {\n            if (maxCollection.length < stateCollections[i].length) {\n                maxCollection = stateCollections[i];\n            }\n        }\n        const maxExpr = maxCollection.find((expr) => expr.fieldName === expression.fieldName);\n\n        stateCollections.forEach(collection => {\n            const myExpr = collection.find((expr) => expr.fieldName === expression.fieldName);\n            if (!myExpr && !maxExpr) {\n                // Expression with this fieldName is missing from the current and the max collection.\n                collection.push(expression);\n            } else if (!myExpr && maxExpr) {\n                // Expression with this fieldName is missing from the current and but the max collection has.\n                collection.push(maxExpr);\n                Object.assign(maxExpr, expression);\n            } else {\n                // The current collection has the expression so just update it.\n                Object.assign(myExpr, expression);\n            }\n        });\n    }\n\n    public prepare_grouping_expression(stateCollections: Array<Array<any>>, expression: IGroupingExpression) {\n        if (expression.dir === SortingDirection.None) {\n            stateCollections.forEach(state => {\n                state.splice(state.findIndex((expr) => expr.fieldName === expression.fieldName), 1);\n            });\n            return;\n        }\n\n        /**\n         * We need to make sure the states in each collection with same fields point to the same object reference.\n         * If the different state collections provided have different sizes we need to get the largest one.\n         * That way we can get the state reference from the largest one that has the same fieldName as the expression to prepare.\n         */\n        let maxCollection = stateCollections[0];\n        for (let i = 1; i < stateCollections.length; i++) {\n            if (maxCollection.length < stateCollections[i].length) {\n                maxCollection = stateCollections[i];\n            }\n        }\n        const maxExpr = maxCollection.find((expr) => expr.fieldName === expression.fieldName);\n\n        stateCollections.forEach(collection => {\n            const myExpr = collection.find((expr) => expr.fieldName === expression.fieldName);\n            if (!myExpr && !maxExpr) {\n                // Expression with this fieldName is missing from the current and the max collection.\n                collection.push(expression);\n            } else if (!myExpr && maxExpr) {\n                // Expression with this fieldName is missing from the current and but the max collection has.\n                collection.push(maxExpr);\n                Object.assign(maxExpr, expression);\n            } else {\n                // The current collection has the expression so just update it.\n                Object.assign(myExpr, expression);\n            }\n        });\n    }\n\n    public remove_grouping_expression(_fieldName) {\n    }\n\n    public filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[] {\n        let data = this.get_all_data();\n\n        if (expressionsTree.filteringOperands.length) {\n            const state = { expressionsTree, strategy: this.grid.filterStrategy };\n            data = FilterUtil.filter(cloneArray(data), state, this.grid);\n        }\n\n        return data;\n    }\n\n    public sortDataByExpressions(data: any[], expressions: ISortingExpression[]) {\n        return DataUtil.sort(cloneArray(data), expressions, this.grid.sortStrategy, this.grid);\n    }\n\n    public pin_row(rowID: any, index?: number, row?: RowType): void {\n        const grid = (this.grid as any);\n        if (grid._pinnedRecordIDs.indexOf(rowID) !== -1) {\n            return;\n        }\n        const eventArgs = this.get_pin_row_event_args(rowID, index, row, true);\n        grid.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        const insertIndex = typeof eventArgs.insertAtIndex === 'number' ? eventArgs.insertAtIndex : grid._pinnedRecordIDs.length;\n        grid._pinnedRecordIDs.splice(insertIndex, 0, rowID);\n    }\n\n    public unpin_row(rowID: any, row: RowType): void {\n        const grid = (this.grid as any);\n        const index = grid._pinnedRecordIDs.indexOf(rowID);\n        if (index === -1) {\n            return;\n        }\n        const eventArgs = this.get_pin_row_event_args(rowID, null , row, false);\n        grid.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        grid._pinnedRecordIDs.splice(index, 1);\n    }\n\n    public get_pin_row_event_args(rowID: any, index?: number, row?: RowType, pinned?: boolean) {\n        const eventArgs: IPinRowEventArgs = {\n            isPinned: pinned ? true : false,\n            rowKey: rowID,\n            rowID,\n            row,\n            cancel: false\n        }\n        if (typeof index === 'number') {\n            eventArgs.insertAtIndex = index <= this.grid.pinnedRecords.length ? index : this.grid.pinnedRecords.length;\n        }\n        return eventArgs;\n    }\n\n    /**\n     * Updates related row of provided grid's data source with provided new row value\n     *\n     * @param grid Grid to update data for\n     * @param rowID ID of the row to update\n     * @param rowValueInDataSource Initial value of the row as it is in data source\n     * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n     * @param rowNewValue New value of the row\n     */\n    protected updateData(grid, rowID, rowValueInDataSource: any, rowCurrentValue: any, rowNewValue: { [x: string]: any }) {\n        if (grid.transactions.enabled) {\n            const transaction: Transaction = {\n                id: rowID,\n                type: TransactionType.UPDATE,\n                newValue: rowNewValue\n            };\n            grid.transactions.add(transaction, rowCurrentValue);\n        } else {\n            mergeObjects(rowValueInDataSource, rowNewValue);\n        }\n    }\n\n\n    protected update_row_in_array(value: any, rowID: any, index: number) {\n        const grid = this.grid;\n        grid.data[index] = value;\n    }\n\n    protected getSortStrategyPerColumn(fieldName: string) {\n        return this.get_column_by_name(fieldName) ?\n            this.get_column_by_name(fieldName).sortStrategy : undefined;\n    }\n\n}\n","import { GridBaseAPIService } from '../api.service';\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { IGroupByExpandState } from '../../data-operations/groupby-expand-state.interface';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { cloneArray } from '../../core/utils';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { Injectable } from '@angular/core';\nimport { GridServiceType, GridType } from '../common/grid.interface';\n\n@Injectable()\nexport class IgxGridAPIService extends GridBaseAPIService<GridType> implements GridServiceType {\n\n    public groupBy(expression: IGroupingExpression): void {\n        const groupingState = cloneArray(this.grid.groupingExpressions);\n        this.prepare_grouping_expression([groupingState], expression);\n        this.grid.groupingExpressions = groupingState;\n        this.arrange_sorting_expressions();\n    }\n\n    public groupBy_multiple(expressions: IGroupingExpression[]): void {\n        const groupingState = cloneArray(this.grid.groupingExpressions);\n\n        for (const each of expressions) {\n            this.prepare_grouping_expression([groupingState], each);\n        }\n\n        this.grid.groupingExpressions = groupingState;\n        this.arrange_sorting_expressions();\n    }\n\n    public override clear_groupby(name?: string | Array<string>) {\n        const groupingState = cloneArray(this.grid.groupingExpressions);\n\n        if (name) {\n            const names = typeof name === 'string' ? [name] : name;\n            const groupedCols = groupingState.filter((state) => names.indexOf(state.fieldName) < 0);\n            this.grid.groupingExpressions = groupedCols;\n            names.forEach((colName) => {\n                const grExprIndex = groupingState.findIndex((exp) => exp.fieldName === colName);\n                const grpExpandState = this.grid.groupingExpansionState;\n                /* remove expansion states related to the cleared group\n                   and all with deeper hierarchy than the cleared group */\n                const newExpandState = grpExpandState.filter((val) => val.hierarchy && val.hierarchy.length <= grExprIndex);\n                /* Do not set the new instance produced by filter\n                    when there are no differences between expansion states */\n                if (newExpandState.length !== grpExpandState.length) {\n                    this.grid.groupingExpansionState = newExpandState;\n                }\n            });\n        } else {\n            // clear all\n            this.grid.groupingExpressions = [];\n            this.grid.groupingExpansionState = [];\n        }\n    }\n\n    public groupBy_get_expanded_for_group(groupRow: IGroupByRecord): IGroupByExpandState {\n        const grState = this.grid.groupingExpansionState;\n        const hierarchy = DataUtil.getHierarchy(groupRow);\n        return grState.find((state) =>\n            DataUtil.isHierarchyMatch(\n                state.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }],\n                hierarchy,\n                this.grid.groupingExpressions));\n    }\n\n    public groupBy_is_row_in_group(groupRow: IGroupByRecord, rowID): boolean {\n        const grid = this.grid;\n        let rowInGroup = false;\n        groupRow.records.forEach(row => {\n            if (grid.primaryKey ? row[grid.primaryKey] === rowID : row === rowID) {\n                rowInGroup = true;\n            }\n        });\n        return rowInGroup;\n    }\n\n    public groupBy_toggle_group(groupRow: IGroupByRecord) {\n        const grid = this.grid;\n        if (grid.gridAPI.crudService.cellInEditMode) {\n            this.crudService.endEdit(false);\n        }\n\n        const expansionState = grid.groupingExpansionState;\n        const state: IGroupByExpandState = this.groupBy_get_expanded_for_group(groupRow);\n        if (state) {\n            state.expanded = !state.expanded;\n        } else {\n            expansionState.push({\n                expanded: !grid.groupsExpanded,\n                hierarchy: DataUtil.getHierarchy(groupRow)\n            });\n        }\n        this.grid.groupingExpansionState = [...expansionState];\n        if (grid.rowEditable) {\n            grid.repositionRowEditingOverlay(grid.gridAPI.crudService.rowInEditMode);\n        }\n    }\n    public set_grouprow_expansion_state(groupRow: IGroupByRecord, value: boolean) {\n        if (this.grid.isExpandedGroup(groupRow) !== value) {\n            this.groupBy_toggle_group(groupRow);\n        }\n    }\n\n    public groupBy_fully_expand_group(groupRow: IGroupByRecord) {\n        const state: IGroupByExpandState = this.groupBy_get_expanded_for_group(groupRow);\n        const expanded = state ? state.expanded : this.grid.groupsExpanded;\n        if (!expanded) {\n            this.groupBy_toggle_group(groupRow);\n        }\n        if (groupRow.groupParent) {\n            this.groupBy_fully_expand_group(groupRow.groupParent);\n        }\n    }\n\n    public groupBy_select_all_rows_in_group(groupRow: IGroupByRecord, clearPrevSelection: boolean) {\n        this.grid.selectionService.selectRowsWithNoEvent(this.grid.primaryKey ?\n            groupRow.records.map(x => x[this.grid.primaryKey]) : groupRow.records, clearPrevSelection);\n    }\n\n    public groupBy_deselect_all_rows_in_group(groupRow: IGroupByRecord) {\n        this.grid.selectionService.deselectRowsWithNoEvent(this.grid.primaryKey ?\n            groupRow.records.map(x => x[this.grid.primaryKey]) : groupRow.records);\n    }\n\n    public arrange_sorting_expressions() {\n        const groupingState = this.grid.groupingExpressions;\n        const sortingState = cloneArray(this.grid.sortingExpressions);\n        for (const grExpr of groupingState) {\n            const sortExprIndex = sortingState.findIndex((exp) => exp.fieldName === grExpr.fieldName);\n            if (sortExprIndex > -1) {\n                sortingState.splice(sortExprIndex, 1);\n            }\n        }\n        this.grid.sortingExpressions = sortingState;\n    }\n\n    public get_groupBy_record_id(gRow: IGroupByRecord): string {\n        let recordId = '{ ';\n        const hierrarchy = DataUtil.getHierarchy(gRow);\n\n        for (let i = 0; i < hierrarchy.length; i++) {\n            const groupByKey = hierrarchy[i];\n            recordId += `'${groupByKey.fieldName}': '${groupByKey.value}'`;\n\n            if (i < hierrarchy.length - 1) {\n                recordId += ', ';\n            }\n        }\n        recordId += ' }';\n\n        return recordId;\n    }\n\n    public override remove_grouping_expression(fieldName: string) {\n        const groupingExpressions = this.grid.groupingExpressions;\n        const index = groupingExpressions.findIndex((expr) => expr.fieldName === fieldName);\n        if (index !== -1) {\n            groupingExpressions.splice(index, 1);\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    ViewChild,\n    TemplateRef,\n    OnDestroy,\n    Inject\n} from '@angular/core';\nimport { NgTemplateOutlet, DecimalPipe, DatePipe, getLocaleCurrencyCode, PercentPipe, CurrencyPipe } from '@angular/common';\n\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxGridRowComponent } from './grid-row.component';\nimport { GridSelectionMode } from '../common/enums';\nimport { ISelectionNode } from '../common/types';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxBadgeComponent } from '../../badge/badge.component';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxColumnFormatterPipe } from '../common/pipes';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-groupby-row',\n    templateUrl: './groupby-row.component.html',\n    imports: [\n        NgTemplateOutlet,\n        DecimalPipe,\n        DatePipe,\n        PercentPipe,\n        CurrencyPipe,\n        IgxIconComponent,\n        IgxBadgeComponent,\n        IgxCheckboxComponent,\n        IgxColumnFormatterPipe\n    ]\n})\nexport class IgxGridGroupByRowComponent implements OnDestroy {\n    /**\n     * @hidden\n     */\n    @Input()\n    public hideGroupRowSelectors: boolean;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public rowDraggable: boolean;\n\n    /**\n     * Sets the index of the row.\n     * ```html\n     * <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" #row></igx-grid-groupby-row>\n     * ```\n     */\n    @Input()\n    public index: number;\n\n    /**\n     * Sets the id of the grid the row belongs to.\n     * ```html\n     * <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" #row></igx-grid-groupby-row>\n     * ```\n     */\n    @Input()\n    public gridID: string;\n\n    /**\n     * The group record the component renders for.\n     * ```typescript\n     * <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" #row></igx-grid-groupby-row>\n     * ```\n     */\n    @Input()\n    public groupRow: IGroupByRecord;\n\n    /**\n     * Returns a reference of the content of the group.\n     * ```typescript\n     * const groupRowContent = this.grid1.rowList.first.groupContent;\n     * ```\n     */\n    @ViewChild('groupContent', { static: true })\n    public groupContent: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    protected isFocused = false;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultGroupByExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultGroupByExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultGroupByCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultGroupByCollapsedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    protected destroy$ = new Subject<void>();\n\n    /**\n     * @hidden\n     */\n    protected defaultCssClass = 'igx-grid__group-row';\n\n    /**\n     * @hidden\n     */\n    protected paddingIndentationCssClass = 'igx-grid__group-row--padding-level';\n\n    /**\n     * Returns whether the row is focused.\n     * ```\n     * let gridRowFocused = this.grid1.rowList.first.focused;\n     * ```\n     */\n    public get focused(): boolean {\n        return this.isActive();\n    }\n\n    /** @hidden @internal */\n    public get currencyCode(): string {\n        return this.groupRow.column.pipeArgs.currencyCode ?\n            this.groupRow.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);\n    }\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public grid: GridType,\n        public gridSelection: IgxGridSelectionService,\n        public element: ElementRef,\n        public cdr: ChangeDetectorRef,\n        public filteringService: IgxFilteringService) {\n        this.gridSelection.selectedRowsChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.cdr.markForCheck();\n        });\n    }\n\n\n    @HostListener('pointerdown')\n    public activate() {\n        this.grid.navigation.setActiveNode({ row: this.index });\n    }\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        this.grid.rowClick.emit({\n            row: this.grid.createRow(this.index),\n            event\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    /**\n     * Returns whether the group row is expanded.\n     * ```typescript\n     * const groupRowExpanded = this.grid1.rowList.first.expanded;\n     * ```\n     */\n    @HostBinding('attr.aria-expanded')\n    public get expanded(): boolean {\n        return this.grid.isExpandedGroup(this.groupRow);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.aria-describedby')\n    public get describedBy(): string {\n        const grRowExpr = this.groupRow.expression !== undefined ? this.groupRow.expression.fieldName : '';\n        return this.gridID + '_' + grRowExpr;\n    }\n\n    @HostBinding('attr.data-rowIndex')\n    public get dataRowIndex() {\n        return this.index;\n    }\n\n    /**\n     * Returns a reference to the underlying HTML element.\n     * ```typescript\n     * const groupRowElement = this.nativeElement;\n     * ```\n     */\n    public get nativeElement(): any {\n        return this.element.nativeElement;\n    }\n\n    @HostBinding('attr.id')\n    public get attrCellID() {\n        return `${this.gridID}_${this.index}`;\n    }\n\n    /**\n     * Returns the style classes applied to the group rows.\n     * ```typescript\n     * const groupCssStyles = this.grid1.rowList.first.styleClasses;\n     * ```\n     */\n    @HostBinding('class')\n    public get styleClasses(): string {\n        return `${this.defaultCssClass} ` + `${this.paddingIndentationCssClass}-` + this.groupRow.level +\n            (this.isActive() ? ` ${this.defaultCssClass}--active` : '');\n    }\n\n    public isActive() {\n        return this.grid.navigation.activeNode ? this.grid.navigation.activeNode.row === this.index : false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getRowID(rowData): IgxGridRowComponent {\n        return this.grid.primaryKey ? rowData[this.grid.primaryKey] : rowData;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onGroupSelectorClick(event) {\n        if (!this.grid.isMultiRowSelectionEnabled) {\n            return;\n        }\n        event.stopPropagation();\n        if (this.areAllRowsInTheGroupSelected) {\n            this.gridSelection.deselectRows(this.groupRow.records.map(x => this.getRowID(x)));\n        } else {\n            this.gridSelection.selectRows(this.groupRow.records.map(x => this.getRowID(x)));\n        }\n    }\n\n    /**\n     * Toggles the group row.\n     * ```typescript\n     * this.grid1.rowList.first.toggle()\n     * ```\n     */\n    public toggle() {\n        this.grid.toggleGroup(this.groupRow);\n    }\n\n    public get iconTemplate() {\n        if (this.expanded) {\n            return this.grid.rowExpandedIndicatorTemplate || this.defaultGroupByExpandedTemplate;\n        } else {\n            return this.grid.rowCollapsedIndicatorTemplate || this.defaultGroupByCollapsedTemplate;\n        }\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.index,\n            column: this.gridSelection.activeElement ? this.gridSelection.activeElement.column : 0\n        };\n    }\n\n    /**\n     * @hidden @internal\n    */\n    public get dataType(): any {\n        const column = this.groupRow.column;\n        return (column && column.dataType) || GridColumnDataType.String;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get formatter(): any {\n        const column = this.groupRow.column;\n        return (column && column.formatter) || null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get areAllRowsInTheGroupSelected(): boolean {\n        return this.groupRow.records.every(x => this.gridSelection.isRowSelected(this.getRowID(x)));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedRowsInTheGroup(): any[] {\n        const selectedIds = new Set(this.gridSelection.filteredSelectedRowIds);\n        return this.groupRow.records.filter(rowID => selectedIds.has(this.getRowID(rowID)));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get groupByRowCheckboxIndeterminateState(): boolean {\n        if (this.selectedRowsInTheGroup.length > 0) {\n            return !this.areAllRowsInTheGroupSelected;\n        }\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get groupByRowSelectorBaseAriaLabel(): string {\n        const ariaLabel: string = this.areAllRowsInTheGroupSelected ?\n            this.grid.resourceStrings.igx_grid_groupByArea_deselect_message : this.grid.resourceStrings.igx_grid_groupByArea_select_message;\n        return ariaLabel.replace('{0}', this.groupRow.expression.fieldName).replace('{1}', this.groupRow.value);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get showRowSelectors(): boolean {\n        return this.grid.rowSelection !== GridSelectionMode.none && !this.hideGroupRowSelectors;\n    }\n\n}\n","<ng-container #defaultGroupRow>\n\n    @if (rowDraggable) {\n        <div class=\"igx-grid__drag-indicator igx-grid__tr-action\">\n            <igx-icon family=\"default\" name=\"drag_indicator\" [style.visibility]=\"'hidden'\"></igx-icon>\n        </div>\n    }\n\n    @if (showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\"\n            (click)=\"onGroupSelectorClick($event)\">\n            <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n                this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n                context: { $implicit: {\n                    selectedCount: selectedRowsInTheGroup.length,\n                    totalCount: this.groupRow.records.length,\n                    groupRow: this.groupRow }}\">\n            </ng-template>\n        </div>\n    }\n\n    <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\">\n        <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n        </ng-container>\n    </div>\n\n    <div class=\"igx-grid__group-content\" #groupContent>\n        <ng-container\n            *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n        </ng-container>\n    </div>\n\n    <ng-template #defaultGroupByExpandedTemplate>\n        <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n    </ng-template>\n\n    <ng-template #defaultGroupByCollapsedTemplate>\n        <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n    </ng-template>\n\n\n    <ng-template #defaultGroupByTemplate>\n        <div class=\"igx-group-label\">\n            <igx-icon family=\"default\" name=\"group_work\" class=\"igx-group-label__icon\"></igx-icon>\n            <span class=\"igx-group-label__column-name\">\n                {{ groupRow.column && groupRow.column.header ?\n                groupRow.column.header :\n                (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n            </span>\n\n            <span class=\"igx-group-label__text\">{{\n                formatter\n                    ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n                    : dataType === \"number\"\n                    ? (groupRow.value | number:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n                    : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n                    ? (groupRow.value | date:groupRow.column.pipeArgs.format:groupRow.column.pipeArgs.timezone:grid.locale)\n                    : dataType === 'currency'\n                    ? (groupRow.value | currency:currencyCode:groupRow.column.pipeArgs.display:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n                    : dataType === 'percent'\n                    ? (groupRow.value | percent:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n                    : groupRow.value\n            }}</span>\n\n            <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n            </igx-badge>\n        </div>\n    </ng-template>\n    <ng-template #groupByRowSelectorBaseTemplate let-context>\n        <div class=\"igx-grid__cbx-padding\">\n            <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n                [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n                [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n                #groupByRowCheckbox>\n            </igx-checkbox>\n        </div>\n    </ng-template>\n</ng-container>\n","import { Injectable } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { IgxGridNavigationService } from './grid-navigation.service';\nimport { HORIZONTAL_NAV_KEYS, HEADER_KEYS } from '../core/utils';\nimport { GridKeydownTargetType } from './common/enums';\nimport { ColumnType } from './common/grid.interface';\n\n/** @hidden */\n@Injectable()\nexport class IgxGridMRLNavigationService extends IgxGridNavigationService {\n\n    public override isValidPosition(rowIndex: number, colIndex: number): boolean {\n        if (rowIndex < 0 || colIndex < 0 || this.grid.dataView.length - 1 < rowIndex ||\n            Math.max(...this.grid.visibleColumns.map(col => col.visibleIndex)) < colIndex ||\n            (this.activeNode.column !== colIndex && !this.isDataRow(rowIndex, true))) {\n            return false;\n        }\n        return true;\n    }\n\n    public override shouldPerformVerticalScroll(targetRowIndex: number, visibleColIndex: number): boolean {\n        if (!super.shouldPerformVerticalScroll(targetRowIndex, visibleColIndex)) {\n            return false;\n        }\n        if (!this.isDataRow(targetRowIndex) || visibleColIndex < 0) {\n            return super.shouldPerformVerticalScroll(targetRowIndex, visibleColIndex);\n        }\n\n        const targetRow = super.getRowElementByIndex(targetRowIndex);\n        const containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;\n        const scrollPos = this.getVerticalScrollPositions(targetRowIndex, visibleColIndex);\n        return (!targetRow || targetRow.offsetTop + scrollPos.topOffset < Math.abs(this.containerTopOffset)\n            || containerHeight && containerHeight < scrollPos.rowBottom -  Math.ceil(this.scrollTop));\n    }\n\n    public override isColumnFullyVisible(visibleColIndex: number): boolean {\n        const targetCol = this.grid.getColumnByVisibleIndex(visibleColIndex);\n        if (this.isParentColumnFullyVisible(targetCol?.parent) || super.isColumnPinned(visibleColIndex, this.forOfDir())) {\n            return true;\n        }\n\n        const scrollPos = this.getChildColumnScrollPositions(visibleColIndex);\n        const colWidth = scrollPos.rightScroll - scrollPos.leftScroll;\n        if (this.displayContainerWidth < colWidth && this.displayContainerScrollLeft === scrollPos.leftScroll) {\n            return true;\n        }\n        return this.displayContainerWidth >= scrollPos.rightScroll - this.displayContainerScrollLeft &&\n            this.displayContainerScrollLeft <= scrollPos.leftScroll;\n    }\n\n    public getVerticalScrollPositions(rowIndex: number, visibleIndex: number) {\n        const targetCol = this.grid.getColumnByVisibleIndex(visibleIndex);\n        const rowSpan = targetCol.rowEnd && targetCol.rowEnd - targetCol.rowStart ? targetCol.rowEnd - targetCol.rowStart : 1;\n        const topOffset = this.grid.defaultRowHeight * (targetCol.rowStart - 1);\n        const rowTop = this.grid.verticalScrollContainer.sizesCache[rowIndex] + topOffset;\n        return { topOffset, rowTop, rowBottom: rowTop + (this.grid.defaultRowHeight * rowSpan) };\n    }\n\n    public override performHorizontalScrollToCell(visibleColumnIndex: number, cb?: () => void) {\n        if (!this.shouldPerformHorizontalScroll(visibleColumnIndex)) {\n            return;\n        }\n        const scrollPos = this.getChildColumnScrollPositions(visibleColumnIndex);\n        const startScroll = scrollPos.rightScroll - this.displayContainerScrollLeft;\n        const nextScroll = !(this.displayContainerScrollLeft <= scrollPos.leftScroll) && this.displayContainerWidth >= startScroll ?\n            scrollPos.leftScroll : scrollPos.rightScroll - this.displayContainerWidth;\n        this.forOfDir().getScroll().scrollLeft = nextScroll;\n        this.grid.parentVirtDir.chunkLoad\n            .pipe(first())\n            .subscribe(() => {\n                if (cb) {\n                    cb();\n                }\n            });\n    }\n\n    public override performVerticalScrollToCell(rowIndex: number, visibleColIndex: number, cb?: () => void) {\n        const children = this.parentByChildIndex(visibleColIndex || 0)?.children;\n        if (!super.isDataRow(rowIndex) || (children && children.length < 2) || visibleColIndex < 0) {\n            return super.performVerticalScrollToCell(rowIndex, visibleColIndex, cb);\n        }\n\n        const containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;\n        const pos = this.getVerticalScrollPositions(rowIndex, visibleColIndex);\n        const row = super.getRowElementByIndex(rowIndex);\n        if ((this.scrollTop > pos.rowTop) && (!row || row.offsetTop + pos.topOffset < Math.abs(this.containerTopOffset))) {\n            if (pos.topOffset === 0) {\n                this.grid.verticalScrollContainer.scrollTo(rowIndex);\n            } else {\n                this.grid.verticalScrollContainer.scrollPosition = pos.rowTop;\n            }\n        } else {\n            this.grid.verticalScrollContainer.addScrollTop(Math.abs(pos.rowBottom - this.scrollTop - containerHeight));\n        }\n        this.grid.verticalScrollContainer.chunkLoad\n            .pipe(first()).subscribe(() => {\n                if (cb) {\n                    cb();\n                }\n            });\n    }\n\n    public getNextHorizontalCellPosition(previous = false) {\n        const parent = this.parentByChildIndex(this.activeNode.column);\n        if (!this.hasNextHorizontalPosition(previous, parent)) {\n            return { row: this.activeNode.row, column: this.activeNode.column };\n        }\n        const columns = previous ? parent.children.filter(c => c.rowStart <= this.activeNode.layout.rowStart)\n            .sort((a, b) => b.visibleIndex - a.visibleIndex) : parent.children.filter(c => c.rowStart <= this.activeNode.layout.rowStart);\n        let column = columns.find((col) => previous ?\n                col.visibleIndex < this.activeNode.column && this.rowEnd(col) > this.activeNode.layout.rowStart :\n                col.visibleIndex > this.activeNode.column && col.colStart > this.activeNode.layout.colStart);\n        if (!column || (previous && this.activeNode.layout.colStart === 1)) {\n            const index = previous ? parent.visibleIndex - 1 : parent.visibleIndex + 1;\n            const children = this.grid.columns.find(cols => cols.columnLayout && cols.visibleIndex === index).children;\n            column = previous ? children.toArray().reverse().find(child => child.rowStart <= this.activeNode.layout.rowStart) :\n                children.find(child => this.rowEnd(child) > this.activeNode.layout.rowStart && child.colStart === 1);\n        }\n        return { row: this.activeNode.row, column: column.visibleIndex };\n    }\n\n    public getNextVerticalPosition(previous = false) {\n        this.activeNode.column = this.activeNode.column || 0;\n        if (!this.hasNextVerticalPosition(previous)) {\n            return { row: this.activeNode.row, column: this.activeNode.column };\n        }\n        const currentRowStart = this.grid.getColumnByVisibleIndex(this.activeNode.column).rowStart;\n        const nextBlock = !this.isDataRow(this.activeNode.row) ||\n        (previous ? currentRowStart === 1 : currentRowStart === this.lastRowStartPerBlock());\n        const nextRI = previous ? this.activeNode.row - 1 : this.activeNode.row + 1;\n        if (nextBlock && !this.isDataRow(nextRI)) {\n            return {row: nextRI,  column: this.activeNode.column};\n        }\n        const children = this.parentByChildIndex(this.activeNode.column).children;\n        const col = previous ? this.getPreviousRowIndex(children, nextBlock) : this.getNextRowIndex(children, nextBlock);\n        return { row: nextBlock ? nextRI : this.activeNode.row, column: col.visibleIndex };\n    }\n\n    public override headerNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (!HEADER_KEYS.has(key)) {\n            return;\n        }\n        event.preventDefault();\n        if (!this.activeNode.layout) {\n            this.activeNode.layout = this.layout(this.activeNode.column || 0);\n        }\n        const alt = event.altKey;\n        const ctrl = event.ctrlKey;\n        this.performHeaderKeyCombination(this.grid.getColumnByVisibleIndex(this.activeNode.column), key, event.shiftKey, ctrl, alt, event);\n        if (!ctrl && !alt && (key.includes('down') || key.includes('up'))) {\n            const children = this.parentByChildIndex(this.activeNode.column).children;\n            const col = key.includes('down') ? this.getNextRowIndex(children, false) : this.getPreviousRowIndex(children, false);\n            if (!col) {\n                return;\n            }\n            this.activeNode.column = col.visibleIndex;\n            const layout = this.layout(this.activeNode.column);\n            const nextLayout = {...this.activeNode.layout, rowStart: layout.rowStart, rowEnd: layout.rowEnd};\n            this.setActiveNode({row: this.activeNode.row, layout: nextLayout});\n            return;\n        }\n        this.horizontalNav(event, key, -1, 'headerCell');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public layout(visibleIndex) {\n        const column = this.grid.getColumnByVisibleIndex(visibleIndex);\n        return {colStart: column.colStart, rowStart: column.rowStart,\n                colEnd: column.colEnd, rowEnd: column.rowEnd, columnVisibleIndex: column.visibleIndex };\n    }\n\n    protected override getNextPosition(rowIndex: number, colIndex: number, key: string, shift: boolean, ctrl: boolean, event: KeyboardEvent) {\n        if (!this.activeNode.layout) {\n            this.activeNode.layout = this.layout(this.activeNode.column || 0);\n        }\n        switch (key) {\n            case 'tab':\n            case ' ':\n            case 'spacebar':\n            case 'space':\n            case 'escape':\n            case 'esc':\n            case 'enter':\n            case 'f2':\n                super.getNextPosition(rowIndex, colIndex, key, shift, ctrl, event);\n                break;\n            case 'end':\n                rowIndex = ctrl ? this.findLastDataRowIndex() : this.activeNode.row;\n                colIndex = ctrl ? this.lastColIndexPerMRLBlock(this.lastIndexPerRow) : this.lastIndexPerRow;\n                break;\n            case 'home':\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : this.activeNode.row;\n                colIndex = ctrl ? 0 : this.firstIndexPerRow;\n                break;\n            case 'arrowleft':\n            case 'left':\n                colIndex = ctrl ? this.firstIndexPerRow : this.getNextHorizontalCellPosition(true).column;\n                break;\n            case 'arrowright':\n            case 'right':\n                colIndex = ctrl ? this.lastIndexPerRow : this.getNextHorizontalCellPosition().column;\n                break;\n            case 'arrowup':\n            case 'up':\n                const prevPos = this.getNextVerticalPosition(true);\n                colIndex = ctrl ? this.activeNode.column : prevPos.column;\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : prevPos.row;\n                break;\n            case 'arrowdown':\n            case 'down':\n                const nextPos = this.getNextVerticalPosition();\n                colIndex = ctrl ? this.activeNode.column : nextPos.column;\n                rowIndex = ctrl ? this.findLastDataRowIndex() : nextPos.row;\n                break;\n            default:\n                return;\n        }\n        const nextLayout = this.layout(colIndex);\n        const newLayout = key.includes('up') || key.includes('down') ? {rowStart: nextLayout.rowStart} : {colStart: nextLayout.colStart};\n        Object.assign(this.activeNode.layout, newLayout, {rowEnd: nextLayout.rowEnd});\n\n        if (ctrl && (key === 'home' || key === 'end')) {\n            this.activeNode.layout = nextLayout;\n        }\n        return { rowIndex, colIndex };\n    }\n\n    protected override horizontalNav(event: KeyboardEvent, key: string, rowIndex: number, tag: GridKeydownTargetType) {\n        const ctrl = event.ctrlKey;\n        if (!HORIZONTAL_NAV_KEYS.has(key) || event.altKey) {\n            return;\n        }\n        this.activeNode.row = rowIndex;\n\n        const newActiveNode = {\n            column: this.activeNode.column,\n            mchCache: {\n                level: this.activeNode.level,\n                visibleIndex: this.activeNode.column\n            }\n        };\n\n        if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n            newActiveNode.column = ctrl || key === 'home' ? this.firstIndexPerRow : this.getNextHorizontalCellPosition(true).column;\n        }\n        if ((key.includes('right') || key === 'end') && this.activeNode.column !== this.lastIndexPerRow) {\n            newActiveNode.column = ctrl || key === 'end' ? this.lastIndexPerRow : this.getNextHorizontalCellPosition().column;\n        }\n\n        if (tag === 'headerCell') {\n            const column = this.grid.getColumnByVisibleIndex(newActiveNode.column);\n            newActiveNode.mchCache.level = column.level;\n            newActiveNode.mchCache.visibleIndex = column.visibleIndex;\n        }\n\n        const layout = this.layout(newActiveNode.column);\n        const newLayout = {...this.activeNode.layout, colStart: layout.colStart, rowEnd: layout.rowEnd};\n        this.setActiveNode({row: this.activeNode.row, column: newActiveNode.column,\n            layout: newLayout, mchCache: newActiveNode.mchCache});\n        this.performHorizontalScrollToCell(newActiveNode.column);\n    }\n\n    private isParentColumnFullyVisible(parent: ColumnType): boolean {\n        if (!this.forOfDir().getScroll().clientWidth || parent?.pinned) {\n            return true;\n        }\n\n        const index = this.forOfDir().igxForOf.indexOf(parent);\n        return this.displayContainerWidth >= this.forOfDir().getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft &&\n            this.displayContainerScrollLeft <= this.forOfDir().getColumnScrollLeft(index);\n    }\n\n    private getChildColumnScrollPositions(visibleColIndex: number) {\n        const targetCol = this.grid.getColumnByVisibleIndex(visibleColIndex);\n        const parentVIndex = this.forOfDir().igxForOf.indexOf(targetCol.parent);\n        let leftScroll = this.forOfDir().getColumnScrollLeft(parentVIndex);\n        let rightScroll = this.forOfDir().getColumnScrollLeft(parentVIndex + 1);\n        targetCol.parent.children.forEach((c) => {\n            if (c.rowStart >= targetCol.rowStart && c.visibleIndex < targetCol.visibleIndex) {\n                leftScroll += parseInt(c.width, 10);\n            }\n            if (c.rowStart <= targetCol.rowStart && c.visibleIndex > targetCol.visibleIndex) {\n                rightScroll -= parseInt(c.width, 10);\n            }\n        });\n        return { leftScroll, rightScroll };\n    }\n\n    private getNextRowIndex(children, next) {\n        const rowStart = next ? 1 : this.rowEnd(this.grid.getColumnByVisibleIndex(this.activeNode.column));\n        const  col = children.filter(c => c.rowStart === rowStart);\n        return col.find(co => co.colStart === this.activeNode.layout.colStart) ||\n            col.sort((a, b) => b.visibleIndex - a.visibleIndex).find(co => co.colStart <= this.activeNode.layout.colStart);\n}\n\n    private getPreviousRowIndex(children, prev) {\n        const end = prev ? Math.max(...children.map(c => this.rowEnd(c))) :\n            this.grid.getColumnByVisibleIndex(this.activeNode.column).rowStart;\n        const col = children.filter(c => this.rowEnd(c) ===  end);\n        return col.find(co => co.colStart === this.activeNode.layout.colStart) ||\n            col.sort((a, b) => b.visibleIndex - a.visibleIndex).find(co => co.colStart <= this.activeNode.layout.colStart);\n    }\n\n    private get lastIndexPerRow(): number {\n        const children = this.grid.visibleColumns.find(c => c.visibleIndex === this.lastLayoutIndex && c.columnLayout)\n            .children.toArray().reverse();\n        const column = children.find(co => co.rowStart === this.activeNode.layout.rowStart) ||\n        children.find(co => co.rowStart <= this.activeNode.layout.rowStart);\n        return column.visibleIndex;\n    }\n\n    private get firstIndexPerRow(): number {\n        const children = this.grid.visibleColumns.find(c => c.visibleIndex === 0 && c.columnLayout).children;\n        const column = children.find(co => co.rowStart === this.activeNode.layout.rowStart) ||\n        children.find(co => co.rowStart <= this.activeNode.layout.rowStart);\n        return column.visibleIndex;\n    }\n\n    private get lastLayoutIndex(): number {\n        return Math.max(...this.grid.visibleColumns.filter(c => c.columnLayout).map(col => col.visibleIndex));\n    }\n\n    private get scrollTop(): number {\n       return Math.abs(this.grid.verticalScrollContainer.getScroll().scrollTop);\n    }\n\n    private lastColIndexPerMRLBlock(visibleIndex = this.activeNode.column): number {\n        return this.parentByChildIndex(visibleIndex).children.last.visibleIndex;\n    }\n\n    private lastRowStartPerBlock(visibleIndex = this.activeNode.column) {\n        return Math.max(...this.parentByChildIndex(visibleIndex).children.map(c => c.rowStart));\n    }\n\n    private rowEnd(column): number {\n        return column.rowEnd && column.rowEnd - column.rowStart ? column.rowStart + column.rowEnd - column.rowStart : column.rowStart + 1;\n    }\n\n    private parentByChildIndex(visibleIndex) {\n        return this.grid.getColumnByVisibleIndex(visibleIndex)?.parent;\n\n    }\n\n    private hasNextHorizontalPosition(previous = false, parent) {\n        if (previous && parent.visibleIndex === 0 && this.activeNode.layout.colStart === 1 ||\n            !previous && parent.visibleIndex === this.lastLayoutIndex && this.activeNode.column === this.lastIndexPerRow) {\n            return false;\n        }\n        return true;\n    }\n\n    private hasNextVerticalPosition(prev = false) {\n        if ((prev && this.activeNode.row === 0 && (!this.isDataRow(this.activeNode.row) || this.activeNode.layout.rowStart === 1)) ||\n            (!prev && this.activeNode.row >= this.grid.dataView.length - 1 && this.activeNode.column === this.lastColIndexPerMRLBlock())) {\n            return false;\n        }\n        return true;\n    }\n}\n","import { PipeTransform, Pipe, Inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\n\n/** @hidden */\n@Pipe({\n    name: 'gridDetails',\n    standalone: true\n})\nexport class IgxGridDetailsPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], hasDetails: boolean, expansionStates: Map<any, boolean>, _pipeTrigger: number) {\n        if (!hasDetails) {\n            return collection;\n        }\n        const res = this.addDetailRows(collection, expansionStates);\n        return res;\n    }\n\n    protected addDetailRows(collection: any[], _expansionStates: Map<any, boolean>) {\n        const result = [];\n        collection.forEach((v) => {\n            result.push(v);\n            if (!this.grid.isGroupByRecord(v) && !this.grid.isSummaryRow(v) &&\n                this.grid.gridAPI.get_row_expansion_state(v)) {\n                const detailsObj = { detailsData: v };\n                result.push(detailsObj);\n            }\n        });\n        return result;\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { ISummaryRecord } from '../summaries/grid-summary';\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { IGroupByResult } from '../../data-operations/grouping-result.interface';\nimport { GridSummaryCalculationMode, GridSummaryPosition } from '../common/enums';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\n\n/** @hidden */\ninterface ISkipRecord { skip?: boolean }\n\n/** @hidden */\n@Pipe({\n    name: 'gridSummary',\n    standalone: true\n})\nexport class IgxGridSummaryPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: IGroupByResult,\n        hasSummary: boolean,\n        summaryCalculationMode: GridSummaryCalculationMode,\n        summaryPosition: GridSummaryPosition,\n        id: string, showSummary, _: number, __: number): any[] {\n\n        if (!collection.data || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n            return collection.data;\n        }\n\n        return this.addSummaryRows(id, collection, summaryPosition, showSummary);\n    }\n\n    private addSummaryRows(gridId: string, collection: IGroupByResult, summaryPosition: GridSummaryPosition, showSummary): any[] {\n        const recordsWithSummary = [];\n        const lastChildMap = new Map<any, IGroupByRecord[]>();\n        const maxSummaryHeight = this.grid.summaryService.calcMaxSummaryHeight();\n\n        if (collection.metadata.length && !this.grid.isGroupByRecord(collection.data[0]) &&\n            this.grid.isGroupByRecord(collection.metadata[0]) && summaryPosition === GridSummaryPosition.bottom) {\n            const groups: Array<IGroupByRecord & ISkipRecord> = [];\n            groups.push(collection.metadata[0]);\n            while (groups[groups.length - 1].groupParent) {\n                groups.push(groups[groups.length - 1].groupParent);\n            }\n            groups.reverse();\n            groups.forEach(g => g.skip = true);\n            collection.data.splice(0, 0, ...groups);\n        }\n        for (const record of collection.data) {\n            let skipAdd = false;\n            let recordId;\n            let groupByRecord: IGroupByRecord = null;\n            if (this.grid.isGroupByRecord(record)) {\n                skipAdd = !!record.skip;\n                record.skip = null;\n                groupByRecord = record as IGroupByRecord;\n                recordId = this.grid.gridAPI.get_groupBy_record_id(groupByRecord);\n            } else {\n                recordId = this.grid.gridAPI.get_row_id(record);\n            }\n            if (!skipAdd) {\n                recordsWithSummary.push(record);\n            }\n\n            if (summaryPosition === GridSummaryPosition.bottom && showSummary &&\n                (groupByRecord && !this.grid.isExpandedGroup(groupByRecord))) {\n                const records = this.removeDeletedRecord(this.grid, groupByRecord.records.slice());\n                const summaries = this.grid.summaryService.calculateSummaries(recordId, records);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight\n                };\n                recordsWithSummary.push(summaryRecord);\n            }\n            if (summaryPosition === GridSummaryPosition.bottom && lastChildMap.has(recordId)) {\n                const groupRecords = lastChildMap.get(recordId);\n\n                for (const groupRecord of groupRecords) {\n                    const groupRecordId = this.grid.gridAPI.get_groupBy_record_id(groupRecord);\n                    const records = this.removeDeletedRecord(this.grid, groupRecord.records.slice());\n                    const summaries = this.grid.summaryService.calculateSummaries(groupRecordId, records, groupRecord);\n                    const summaryRecord: ISummaryRecord = {\n                        summaries,\n                        max: maxSummaryHeight\n                    };\n                    recordsWithSummary.push(summaryRecord);\n                }\n            }\n\n            const showSummaries = showSummary ? false : (groupByRecord && !this.grid.isExpandedGroup(groupByRecord));\n            if (groupByRecord === null || showSummaries) {\n                continue;\n            }\n\n            if (summaryPosition === GridSummaryPosition.top) {\n                const records = this.removeDeletedRecord(this.grid, groupByRecord.records.slice());\n                const summaries = this.grid.summaryService.calculateSummaries(recordId, records, groupByRecord);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight\n                };\n                recordsWithSummary.push(summaryRecord);\n            } else if (summaryPosition === GridSummaryPosition.bottom) {\n                let lastChild = groupByRecord;\n\n                while (lastChild.groups && lastChild.groups.length > 0 && this.grid.isExpandedGroup(lastChild)) {\n                    lastChild = lastChild.groups[lastChild.groups.length - 1];\n                }\n\n                let lastChildId;\n                if (this.grid.isExpandedGroup(lastChild)) {\n                    lastChildId = this.grid.gridAPI.get_row_id(lastChild.records[lastChild.records.length - 1]);\n                } else {\n                    lastChildId = this.grid.gridAPI.get_groupBy_record_id(lastChild);\n                }\n\n                let groupRecords = lastChildMap.get(lastChildId);\n                if (!groupRecords) {\n                    groupRecords = [];\n                    lastChildMap.set(lastChildId, groupRecords);\n                }\n                groupRecords.unshift(groupByRecord);\n            }\n        }\n        return recordsWithSummary;\n    }\n\n    private removeDeletedRecord(grid: GridType, data: any[]) {\n        if (!grid.transactions.enabled) {\n            return data;\n        }\n        const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n        deletedRows.forEach(rowID => {\n            const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n            const index = tempData.indexOf(rowID);\n            if (index !== -1) {\n                data.splice(index, 1);\n            }\n        });\n        return data;\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { cloneArray } from '../../core/utils';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { IGroupByExpandState } from '../../data-operations/groupby-expand-state.interface';\nimport { IGroupByResult } from '../../data-operations/grouping-result.interface';\nimport { IFilteringExpressionsTree, FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { FilterUtil, IFilteringStrategy } from '../../data-operations/filtering-strategy';\nimport { GridPagingMode } from '../common/enums';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { IGridSortingStrategy, IGridGroupingStrategy } from '../common/strategy';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridSort',\n    standalone: true\n})\nexport class IgxGridSortingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], sortExpressions: ISortingExpression[], groupExpressions: IGroupingExpression[], sorting: IGridSortingStrategy,\n        id: string, pipeTrigger: number, pinned?): any[] {\n        let result: any[];\n        const expressions = groupExpressions.concat(sortExpressions);\n        if (!expressions.length) {\n            result = collection;\n        } else {\n            result = DataUtil.sort(cloneArray(collection), expressions, sorting, this.grid);\n        }\n        this.grid.setFilteredSortedData(result, pinned);\n\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridGroupBy',\n    standalone: true\n})\nexport class IgxGridGroupingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], expression: IGroupingExpression | IGroupingExpression[],\n        expansion: IGroupByExpandState | IGroupByExpandState[],\n        groupingStrategy: IGridGroupingStrategy, defaultExpanded: boolean,\n        id: string, groupsRecords: any[], _pipeTrigger: number): IGroupByResult {\n\n        const state = { expressions: [], expansion: [], defaultExpanded };\n        state.expressions = this.grid.groupingExpressions;\n        let result: IGroupByResult;\n        const fullResult: IGroupByResult = { data: [], metadata: [] };\n\n        if (!state.expressions.length) {\n            // empty the array without changing reference\n            groupsRecords.splice(0, groupsRecords.length);\n            result = {\n                data: collection,\n                metadata: collection\n            };\n        } else {\n            state.expansion = this.grid.groupingExpansionState;\n            state.defaultExpanded = this.grid.groupsExpanded;\n            result = DataUtil.group(cloneArray(collection), state, groupingStrategy, this.grid, groupsRecords, fullResult);\n        }\n        this.grid.groupingFlatResult = result.data;\n        this.grid.groupingResult = fullResult.data;\n        this.grid.groupingMetadata = fullResult.metadata;\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridPaging',\n    standalone: true\n})\nexport class IgxGridPagingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: IGroupByResult, enabled: boolean, page = 0, perPage = 15, _: number): IGroupByResult {\n        if (!enabled || this.grid.pagingMode !== GridPagingMode.Local) {\n            return collection;\n        }\n        const state = {\n            index: page,\n            recordsPerPage: perPage\n        };\n        const total = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.data?.length;\n        DataUtil.correctPagingState(state, total);\n\n        const result = {\n            data: DataUtil.page(cloneArray(collection.data), state, total),\n            metadata: DataUtil.page(cloneArray(collection.metadata), state, total)\n        };\n        if (this.grid.page !== state.index) {\n            this.grid.page = state.index;\n        }\n        this.grid.pagingState = state;\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridFiltering',\n    standalone: true\n})\nexport class IgxGridFilteringPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], expressionsTree: IFilteringExpressionsTree,\n        filterStrategy: IFilteringStrategy,\n        advancedExpressionsTree: IFilteringExpressionsTree, id: string, pipeTrigger: number, filteringPipeTrigger: number, pinned?) {\n        const state = {\n            expressionsTree,\n            strategy: filterStrategy,\n            advancedExpressionsTree\n        };\n\n        if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n            return collection;\n        }\n\n        const result = FilterUtil.filter(cloneArray(collection), state, this.grid);\n        this.grid.setFilteredData(result, pinned);\n        return result;\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\n\n@Pipe({\n    name: 'igxGridSummaryDataPipe',\n    standalone: true\n})\nexport class IgxSummaryDataPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    public transform(id: string, trigger = 0) {\n        const summaryService = this.grid.summaryService;\n        return summaryService.calculateSummaries(\n            summaryService.rootSummaryID,\n            this.grid.gridAPI.get_summary_data()\n        );\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    TemplateRef,\n    ViewChild,\n    NgZone,\n    OnInit,\n    OnDestroy,\n    OnChanges,\n    SimpleChanges,\n    Inject,\n    ViewChildren,\n    QueryList,\n    AfterViewInit,\n    booleanAttribute\n} from '@angular/core';\nimport { formatPercent, NgClass, NgTemplateOutlet, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe, getLocaleCurrencyCode, getCurrencySymbol } from '@angular/common';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { first, takeUntil, takeWhile } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport { IgxTextHighlightDirective } from '../directives/text-highlight/text-highlight.directive';\nimport { formatCurrency, formatDate, PlatformUtil } from '../core/utils';\nimport { IgxGridSelectionService } from './selection/selection.service';\nimport { HammerGesturesManager } from '../core/touch';\nimport { GridSelectionMode } from './common/enums';\nimport { CellType, ColumnType, GridType, IgxCellTemplateContext, IGX_GRID_BASE, RowType } from './common/grid.interface';\nimport { GridColumnDataType } from '../data-operations/data-util';\nimport { IgxRowDirective } from './row.directive';\nimport { ISearchInfo } from './common/events';\nimport { IgxGridCell } from './grid-public-cell';\nimport { ISelectionNode } from './common/types';\nimport { AutoPositionStrategy, HorizontalAlignment, IgxOverlayService } from '../services/public_api';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from './common/pipes';\nimport { IgxTooltipDirective } from '../directives/tooltip/tooltip.directive';\nimport { IgxTooltipTargetDirective } from '../directives/tooltip/tooltip-target.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxDateTimeEditorDirective } from '../directives/date-time-editor/date-time-editor.directive';\nimport { IgxTimePickerComponent } from '../time-picker/time-picker.component';\nimport { IgxDatePickerComponent } from '../date-picker/date-picker.component';\nimport { IgxCheckboxComponent } from '../checkbox/checkbox.component';\nimport { IgxTextSelectionDirective } from '../directives/text-selection/text-selection.directive';\nimport { IgxFocusDirective } from '../directives/focus/focus.directive';\nimport { IgxInputDirective } from '../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\nimport { IgxChipComponent } from '../chips/chip.component';\n\n/**\n * Providing reference to `IgxGridCellComponent`:\n * ```typescript\n * @ViewChild('grid', { read: IgxGridComponent })\n *  public grid: IgxGridComponent;\n * ```\n * ```typescript\n *  let column = this.grid.columnList.first;\n * ```\n * ```typescript\n *  let cell = column.cells[0];\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-cell',\n    templateUrl: './cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [\n        NgClass,\n        NgTemplateOutlet,\n        DecimalPipe,\n        PercentPipe,\n        CurrencyPipe,\n        DatePipe,\n        ReactiveFormsModule,\n        IgxChipComponent,\n        IgxTextHighlightDirective,\n        IgxIconComponent,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxFocusDirective,\n        IgxTextSelectionDirective,\n        IgxCheckboxComponent,\n        IgxDatePickerComponent,\n        IgxTimePickerComponent,\n        IgxDateTimeEditorDirective,\n        IgxPrefixDirective,\n        IgxSuffixDirective,\n        IgxTooltipTargetDirective,\n        IgxTooltipDirective,\n        IgxGridCellImageAltPipe,\n        IgxStringReplacePipe,\n        IgxColumnFormatterPipe\n    ]\n})\nexport class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy, CellType, AfterViewInit {\n    private _destroy$ = new Subject<void>();\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid__td--new')\n    public get isEmptyAddRowCell() {\n        return this.intRow.addRowUI && (this.value === undefined || this.value === null);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChildren('error', { read: IgxTooltipDirective })\n    public errorTooltip: QueryList<IgxTooltipDirective>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('errorIcon', { read: IgxIconComponent, static: false })\n    public errorIcon: IgxIconComponent;\n\n    /**\n     * Gets the default error template.\n     * @hidden @internal\n     */\n    @ViewChild('defaultError', { read: TemplateRef, static: true })\n    public defaultErrorTemplate: TemplateRef<any>;\n\n    /**\n     * Gets the column of the cell.\n     * ```typescript\n     *  let cellColumn = this.cell.column;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public column: ColumnType;\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected get formGroup(): FormGroup {\n        return this.grid.validation.getFormGroup(this.intRow.key);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public intRow: IgxRowDirective;\n\n    /**\n     * Gets the row of the cell.\n     * ```typescript\n     * let cellRow = this.cell.row;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public get row(): RowType {\n        return this.grid.createRow(this.intRow.index);\n    }\n\n    /**\n     * Gets the data of the row of the cell.\n     * ```typescript\n     * let rowData = this.cell.rowData;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public rowData: any;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public columnData: any;\n\n    /**\n     * Sets/gets the template of the cell.\n     * ```html\n     * <ng-template #cellTemplate igxCell let-value>\n     *   <div style=\"font-style: oblique; color:blueviolet; background:red\">\n     *       <span>{{value}}</span>\n     *   </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild('cellTemplate',{read: TemplateRef})\n     * cellTemplate: TemplateRef<any>;\n     * ```\n     * ```typescript\n     * this.cell.cellTemplate = this.cellTemplate;\n     * ```\n     * ```typescript\n     * let template =  this.cell.cellTemplate;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public cellTemplate: TemplateRef<any>;\n\n    @Input()\n    public cellValidationErrorTemplate: TemplateRef<any>;\n\n    @Input()\n    public pinnedIndicator: TemplateRef<any>;\n\n    /**\n     * Sets/gets the cell value.\n     * ```typescript\n     * this.cell.value = \"Cell Value\";\n     * ```\n     * ```typescript\n     * let cellValue = this.cell.value;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public value: any;\n\n    /**\n     * Gets the cell formatter.\n     * ```typescript\n     * let cellForamatter = this.cell.formatter;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public formatter: (value: any, rowData?: any, columnData?: any) => any;\n\n    /**\n     * Gets the cell template context object.\n     * ```typescript\n     *  let context = this.cell.context();\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get context(): IgxCellTemplateContext {\n        const getCellType = () => this.getCellType(true);\n        const ctx: IgxCellTemplateContext = {\n            $implicit: this.value,\n            additionalTemplateContext: this.column.additionalTemplateContext,\n            get cell() {\n                /* Turns the `cell` property from the template context object into lazy-evaluated one.\n                 * Otherwise on each detection cycle the cell template is recreating N cell instances where\n                 * N = number of visible cells in the grid, leading to massive performance degradation in large grids.\n                 */\n                return getCellType();\n            }\n        };\n        if (this.editMode) {\n            ctx.formControl = this.formControl;\n        }\n        if (this.isInvalid) {\n            ctx.defaultErrorTemplate = this.defaultErrorTemplate;\n        }\n        return ctx;\n    }\n\n    /**\n     * Gets the cell template.\n     * ```typescript\n     * let template = this.cell.template;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get template(): TemplateRef<any> {\n        if (this.editMode && this.formGroup) {\n            const inlineEditorTemplate = this.column.inlineEditorTemplate;\n            return inlineEditorTemplate ? inlineEditorTemplate : this.inlineEditorTemplate;\n        }\n        if (this.cellTemplate) {\n            return this.cellTemplate;\n        }\n        if (this.grid.rowEditable && this.intRow.addRowUI) {\n            return this.addRowCellTemplate;\n        }\n        return this.defaultCellTemplate;\n    }\n\n    /**\n     * Gets the pinned indicator template.\n     * ```typescript\n     * let template = this.cell.pinnedIndicatorTemplate;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get pinnedIndicatorTemplate() {\n        if (this.pinnedIndicator) {\n            return this.pinnedIndicator;\n        }\n        return this.defaultPinnedIndicator;\n    }\n\n    /**\n     * Gets the `id` of the grid in which the cell is stored.\n     * ```typescript\n     * let gridId = this.cell.gridID;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get gridID(): any {\n        return this.intRow.gridID;\n    }\n\n\n    /**\n     * Gets the `index` of the row where the cell is stored.\n     * ```typescript\n     * let rowIndex = this.cell.rowIndex;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.data-rowIndex')\n    public get rowIndex(): number {\n        return this.intRow.index;\n    }\n\n    /**\n     * Gets the `index` of the cell column.\n     * ```typescript\n     * let columnIndex = this.cell.columnIndex;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get columnIndex(): number {\n        return this.column.index;\n    }\n\n    /**\n     * Returns the column visible index.\n     * ```typescript\n     * let visibleColumnIndex = this.cell.visibleColumnIndex;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.data-visibleIndex')\n    @Input()\n    public get visibleColumnIndex() {\n        return this.column.columnLayoutChild ? this.column.visibleIndex : this._vIndex;\n    }\n\n    public set visibleColumnIndex(val) {\n        this._vIndex = val;\n    }\n\n    /**\n     * Gets the ID of the cell.\n     * ```typescript\n     * let cellID = this.cell.cellID;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get cellID() {\n        const primaryKey = this.grid.primaryKey;\n        const rowID = primaryKey ? this.rowData[primaryKey] : this.rowData;\n        return { rowID, columnID: this.columnIndex, rowIndex: this.rowIndex };\n    }\n\n    @HostBinding('attr.id')\n    public get attrCellID() {\n        return `${this.intRow.gridID}_${this.rowIndex}_${this.visibleColumnIndex}`;\n    }\n\n    @HostBinding('attr.title')\n    public get title() {\n        if (this.editMode || this.cellTemplate || this.errorShowing) {\n            return '';\n        }\n\n        if (this.formatter) {\n            return this.formatter(this.value, this.rowData, this.columnData);\n        }\n\n        const args = this.column.pipeArgs;\n        const locale = this.grid.locale;\n\n        switch (this.column.dataType) {\n            case GridColumnDataType.Percent:\n                return formatPercent(this.value, locale, args.digitsInfo);\n            case GridColumnDataType.Currency:\n                return formatCurrency(this.value, this.currencyCode, args.display, args.digitsInfo, locale);\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return formatDate(this.value, args.format, locale, args.timezone);\n        }\n        return this.value;\n    }\n\n    @HostBinding('class.igx-grid__td--bool-true')\n    public get booleanClass() {\n        return this.column.dataType === 'boolean' && this.value;\n    }\n\n    /**\n     * Returns a reference to the nativeElement of the cell.\n     * ```typescript\n     * let cellNativeElement = this.cell.nativeElement;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get nativeElement(): HTMLElement {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public get cellSelectionMode() {\n        return this._cellSelection;\n    }\n\n    public set cellSelectionMode(value) {\n        if (this._cellSelection === value) {\n            return;\n        }\n        this.zone.runOutsideAngular(() => {\n            if (value === GridSelectionMode.multiple) {\n                this.addPointerListeners(value);\n            } else {\n                this.removePointerListeners(this._cellSelection);\n            }\n        });\n        this._cellSelection = value;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public set lastSearchInfo(value: ISearchInfo) {\n        this._lastSearchInfo = value;\n        this.highlightText(this._lastSearchInfo.searchText, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--pinned-last')\n    public lastPinned = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--pinned-first')\n    public firstPinned = false;\n\n    /**\n     * Returns whether the cell is in edit mode.\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-grid__td--editing')\n    public editMode = false;\n\n    /**\n     * Sets/get the `role` property of the cell.\n     * Default value is `\"gridcell\"`.\n     * ```typescript\n     * this.cell.role = 'grid-cell';\n     * ```\n     * ```typescript\n     * let cellRole = this.cell.role;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.role')\n    public role = 'gridcell';\n\n    /**\n     * Gets whether the cell is editable.\n     * ```typescript\n     * let isCellReadonly = this.cell.readonly;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.aria-readonly')\n    public get readonly(): boolean {\n        return !this.editable;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('attr.aria-describedby')\n    public get ariaDescribeBy() {\n        let describeBy = (this.gridID + '_' + this.column.field).replace('.', '_');\n        if (this.isInvalid) {\n            describeBy += ' ' + this.ariaErrorMessage;\n        }\n        return describeBy;\n    }\n\n    /** @hidden @internal */\n    public get ariaErrorMessage() {\n        return this.grid.id + '_' + this.column.field + '_' + this.intRow.index + '_error';\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid__td--invalid')\n    @HostBinding('attr.aria-invalid')\n    public get isInvalid() {\n        const isInvalid = this.formGroup?.get(this.column?.field)?.invalid && this.formGroup?.get(this.column?.field)?.touched;\n        return !this.intRow.deleted && isInvalid;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid__td--valid')\n    public get isValidAfterEdit() {\n        const formControl = this.formGroup?.get(this.column?.field);\n        return this.editMode && formControl && !formControl.invalid && formControl.dirty;\n    }\n\n    /**\n     * Gets the formControl responsible for value changes and validation for this cell.\n     */\n    protected get formControl(): FormControl {\n        return this.grid.validation.getFormControl(this.intRow.key, this.column.field) as FormControl;\n    }\n\n    public get gridRowSpan(): number {\n        return this.column.gridRowSpan;\n    }\n\n    public get gridColumnSpan(): number {\n        return this.column.gridColumnSpan;\n    }\n\n    public get rowEnd(): number {\n        return this.column.rowEnd;\n    }\n\n    public get colEnd(): number {\n        return this.column.colEnd;\n    }\n\n    public get rowStart(): number {\n        return this.column.rowStart;\n    }\n\n    public get colStart(): number {\n        return this.column.colStart;\n    }\n\n    /**\n     * Gets the width of the cell.\n     * ```typescript\n     * let cellWidth = this.cell.width;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public width = '';\n\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--active')\n    public active = false;\n\n    @HostBinding('attr.aria-selected')\n    public get ariaSelected() {\n        return this.selected || this.column.selected || this.intRow.selected;\n    }\n\n    /**\n     * Gets whether the cell is selected.\n     * ```typescript\n     * let isSelected = this.cell.selected;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('class.igx-grid__td--selected')\n    public get selected() {\n        return this.selectionService.selected(this.selectionNode);\n    }\n\n    /**\n     * Selects/deselects the cell.\n     * ```typescript\n     * this.cell.selected = true.\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public set selected(val: boolean) {\n        const node = this.selectionNode;\n        if (val) {\n            this.selectionService.add(node);\n        } else {\n            this.selectionService.remove(node);\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Gets whether the cell column is selected.\n     * ```typescript\n     * let isCellColumnSelected = this.cell.columnSelected;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('class.igx-grid__td--column-selected')\n    public get columnSelected() {\n        return this.selectionService.isColumnSelected(this.column.field);\n    }\n\n    /**\n     * Sets the current edit value while a cell is in edit mode.\n     * Only for cell editing mode.\n     * ```typescript\n     * this.cell.editValue = value;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public set editValue(value) {\n        if (this.grid.crudService.cellInEditMode) {\n            this.grid.crudService.cell.editValue = value;\n        }\n    }\n\n    /**\n     * Gets the current edit value while a cell is in edit mode.\n     * Only for cell editing mode.\n     * ```typescript\n     * let editValue = this.cell.editValue;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get editValue() {\n        if (this.grid.crudService.cellInEditMode) {\n            return this.grid.crudService.cell.editValue;\n        }\n    }\n\n    /**\n     * Returns whether the cell is editable.\n     */\n    public get editable(): boolean {\n        return this.column.editable && !this.intRow.disabled;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--row-pinned-first')\n    public displayPinnedChip = false;\n\n    @HostBinding('style.min-height.px')\n    protected get minHeight() {\n        if ((this.grid as any).isCustomSetRowHeight) {\n            return this.grid.renderedRowHeight;\n        }\n    }\n\n    @ViewChild('defaultCell', { read: TemplateRef, static: true })\n    protected defaultCellTemplate: TemplateRef<any>;\n\n    @ViewChild('defaultPinnedIndicator', { read: TemplateRef, static: true })\n    protected defaultPinnedIndicator: TemplateRef<any>;\n\n    @ViewChild('inlineEditor', { read: TemplateRef, static: true })\n    protected inlineEditorTemplate: TemplateRef<any>;\n\n    @ViewChild('addRowCell', { read: TemplateRef, static: true })\n    protected addRowCellTemplate: TemplateRef<any>;\n\n    @ViewChild(IgxTextHighlightDirective, { read: IgxTextHighlightDirective })\n    protected set highlight(value: IgxTextHighlightDirective) {\n        this._highlight = value;\n\n        if (this._highlight && this.grid.lastSearchInfo.searchText) {\n            this._highlight.highlight(this.grid.lastSearchInfo.searchText,\n                this.grid.lastSearchInfo.caseSensitive,\n                this.grid.lastSearchInfo.exactMatch);\n            this._highlight.activateIfNecessary();\n        }\n    }\n\n    protected get highlight() {\n        return this._highlight;\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.rowIndex,\n            column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,\n            layout: this.column.columnLayoutChild ? {\n                rowStart: this.column.rowStart,\n                colStart: this.column.colStart,\n                rowEnd: this.column.rowEnd,\n                colEnd: this.column.colEnd,\n                columnVisibleIndex: this.visibleColumnIndex\n            } : null\n        };\n    }\n\n    /**\n     * Sets/gets the highlight class of the cell.\n     * Default value is `\"igx-highlight\"`.\n     * ```typescript\n     * let highlightClass = this.cell.highlightClass;\n     * ```\n     * ```typescript\n     * this.cell.highlightClass = 'igx-cell-highlight';\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public highlightClass = 'igx-highlight';\n\n    /**\n     * Sets/gets the active highlight class class of the cell.\n     * Default value is `\"igx-highlight__active\"`.\n     * ```typescript\n     * let activeHighlightClass = this.cell.activeHighlightClass;\n     * ```\n     * ```typescript\n     * this.cell.activeHighlightClass = 'igx-cell-highlight_active';\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public activeHighlightClass = 'igx-highlight__active';\n\n    /** @hidden @internal */\n    public get step(): number {\n        const digitsInfo = this.column.pipeArgs.digitsInfo;\n        if (!digitsInfo) {\n            return 1;\n        }\n        const step = +digitsInfo.substr(digitsInfo.indexOf('.') + 1, 1);\n        return 1 / (Math.pow(10, step));\n    }\n\n    /** @hidden @internal */\n    public get currencyCode(): string {\n        return this.column.pipeArgs.currencyCode ?\n            this.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);\n    }\n\n    /** @hidden @internal */\n    public get currencyCodeSymbol(): string {\n        return getCurrencySymbol(this.currencyCode, 'wide', this.grid.locale);\n    }\n\n    protected _lastSearchInfo: ISearchInfo;\n    private _highlight: IgxTextHighlightDirective;\n    private _cellSelection: GridSelectionMode = GridSelectionMode.multiple;\n    private _vIndex = -1;\n\n    constructor(\n        protected selectionService: IgxGridSelectionService,\n        @Inject(IGX_GRID_BASE) public grid: GridType,\n        @Inject(IgxOverlayService) protected overlayService: IgxOverlayService,\n        public cdr: ChangeDetectorRef,\n        private element: ElementRef<HTMLElement>,\n        protected zone: NgZone,\n        private touchManager: HammerGesturesManager,\n        protected platformUtil: PlatformUtil\n    ) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('dblclick', ['$event'])\n    public onDoubleClick = (event: MouseEvent) => {\n        if (event.type === 'doubletap') {\n            // prevent double-tap to zoom on iOS\n            event.preventDefault();\n        }\n        if (this.editable && !this.editMode && !this.intRow.deleted && !this.grid.crudService.rowEditingBlocked) {\n            this.grid.crudService.enterEditMode(this, event as Event);\n        }\n\n        this.grid.doubleClick.emit({\n            cell: this.getCellType(),\n            event\n        });\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        this.grid.cellClick.emit({\n            cell: this.getCellType(),\n            event\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnInit() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.addEventListener('pointerdown', this.pointerdown);\n            this.addPointerListeners(this.cellSelectionMode);\n        });\n        if (this.platformUtil.isIOS) {\n            this.touchManager.addEventListener(this.nativeElement, 'doubletap', this.onDoubleClick, {\n                cssProps: {} /* don't disable user-select, etc */\n            });\n        }\n\n    }\n\n    public ngAfterViewInit() {\n        this.errorTooltip.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {\n            if (this.errorTooltip.length > 0 && this.active) {\n                // error ocurred\n                this.cdr.detectChanges();\n                this.openErrorTooltip();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public errorShowing = false;\n\n    private openErrorTooltip() {\n        const tooltip = this.errorTooltip.first;\n        tooltip.open(\n            {\n                target: this.errorIcon.el.nativeElement,\n                closeOnOutsideClick: true,\n                excludeFromOutsideClick: [this.nativeElement],\n                closeOnEscape: false,\n                outlet: this.grid.outlet,\n                modal: false,\n                positionStrategy: new AutoPositionStrategy({\n                    horizontalStartPoint: HorizontalAlignment.Center,\n                    horizontalDirection: HorizontalAlignment.Center\n                })\n            }\n        );\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.removeEventListener('pointerdown', this.pointerdown);\n            this.removePointerListeners(this.cellSelectionMode);\n        });\n        this.touchManager.destroy();\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.editMode && changes.editMode.currentValue && this.formControl) {\n            // ensure when values change, form control is forced to be marked as touche.\n            this.formControl.valueChanges.pipe(takeWhile(() => this.editMode)).subscribe(() => this.formControl.markAsTouched());\n            // while in edit mode subscribe to value changes on the current form control and set to editValue\n            this.formControl.statusChanges.pipe(takeWhile(() => this.editMode)).subscribe(status => {\n                if (status === 'INVALID' && this.errorTooltip.length > 0) {\n                    this.cdr.detectChanges();\n                    const tooltip = this.errorTooltip.first;\n                    this.resizeAndRepositionOverlayById(tooltip.overlayId, this.errorTooltip.first.element.offsetWidth);\n                }\n            });\n        }\n        if (changes.value && !changes.value.firstChange) {\n            if (this.highlight) {\n                this.highlight.lastSearchInfo.searchText = this.grid.lastSearchInfo.searchText;\n                this.highlight.lastSearchInfo.caseSensitive = this.grid.lastSearchInfo.caseSensitive;\n                this.highlight.lastSearchInfo.exactMatch = this.grid.lastSearchInfo.exactMatch;\n            }\n        }\n    }\n\n\n\n    /**\n     * @hidden @internal\n     */\n    private resizeAndRepositionOverlayById(overlayId: string, newSize: number) {\n        const overlay = this.overlayService.getOverlayById(overlayId);\n        if (!overlay) return;\n        overlay.initialSize.width = newSize;\n        overlay.elementRef.nativeElement.parentElement.style.width = newSize + 'px';\n        this.overlayService.reposition(overlayId);\n    }\n\n    /**\n     * Starts/ends edit mode for the cell.\n     *\n     * ```typescript\n     * cell.setEditMode(true);\n     * ```\n     */\n    public setEditMode(value: boolean): void {\n        if (this.intRow.deleted) {\n            return;\n        }\n        if (this.editable && value) {\n            if (this.grid.crudService.cellInEditMode) {\n                this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n                this.grid.crudService.endCellEdit();\n            }\n            this.grid.crudService.enterEditMode(this);\n        } else {\n            this.grid.crudService.endCellEdit();\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Sets new value to the cell.\n     * ```typescript\n     * this.cell.update('New Value');\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    // TODO: Refactor\n    public update(val: any) {\n        if (this.intRow.deleted) {\n            return;\n        }\n\n        let cell = this.grid.crudService.cell;\n        if (!cell) {\n            cell = this.grid.crudService.createCell(this);\n        }\n        cell.editValue = val;\n        this.grid.gridAPI.update_cell(cell);\n        this.grid.crudService.endCellEdit();\n        this.cdr.markForCheck();\n    }\n\n    /**\n     *\n     * @hidden\n     * @internal\n     */\n    public pointerdown = (event: PointerEvent) => {\n        if (this.cellSelectionMode !== GridSelectionMode.multiple) {\n            this.activate(event);\n            return;\n        }\n        if (!this.platformUtil.isLeftClick(event)) {\n            event.preventDefault();\n            this.grid.navigation.setActiveNode({ rowIndex: this.rowIndex, colIndex: this.visibleColumnIndex });\n            this.selectionService.addKeyboardRange();\n            this.selectionService.initKeyboardState();\n            this.selectionService.primaryButton = false;\n            // Ensure RMB Click on edited cell does not end cell editing\n            if (!this.selected) {\n                this.grid.crudService.updateCell(true, event);\n            }\n            return;\n        } else {\n            this.selectionService.primaryButton = true;\n        }\n        this.selectionService.pointerDown(this.selectionNode, event.shiftKey, event.ctrlKey);\n        this.activate(event);\n    };\n\n    /**\n     *\n     * @hidden\n     * @internal\n     */\n    public pointerenter = (event: PointerEvent) => {\n        const isHierarchicalGrid = this.grid.type === 'hierarchical';\n        if (isHierarchicalGrid && (!this.grid.navigation?.activeNode?.gridID || this.grid.navigation.activeNode.gridID !== this.gridID)) {\n            return;\n        }\n        const dragMode = this.selectionService.pointerEnter(this.selectionNode, event);\n        if (dragMode) {\n            this.grid.cdr.detectChanges();\n        }\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public focusout = () => {\n        this.closeErrorTooltip();\n    }\n\n    private closeErrorTooltip() {\n        const tooltip = this.errorTooltip.first;\n        if (tooltip) {\n            tooltip.close();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public pointerup = (event: PointerEvent) => {\n        const isHierarchicalGrid = this.grid.type === 'hierarchical';\n        if (!this.platformUtil.isLeftClick(event) || (isHierarchicalGrid && (!this.grid.navigation?.activeNode?.gridID ||\n            this.grid.navigation.activeNode.gridID !== this.gridID))) {\n            return;\n        }\n        if (this.selectionService.pointerUp(this.selectionNode, this.grid.rangeSelected)) {\n            this.grid.cdr.detectChanges();\n        }\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public activate(event: FocusEvent | KeyboardEvent) {\n        const node = this.selectionNode;\n        let shouldEmitSelection = !this.selectionService.isActiveNode(node);\n\n        if (this.selectionService.primaryButton) {\n            const currentActive = this.selectionService.activeElement;\n            if (this.cellSelectionMode === GridSelectionMode.single && (event as any)?.ctrlKey && this.selected) {\n                this.selectionService.activeElement = null;\n                shouldEmitSelection = true;\n            } else {\n                this.selectionService.activeElement = node;\n            }\n            const cancel = this._updateCRUDStatus(event);\n            if (cancel) {\n                this.selectionService.activeElement = currentActive;\n                return;\n            }\n\n            const activeElement = this.selectionService.activeElement;\n            const row = activeElement ? this.grid.gridAPI.get_row_by_index(activeElement.row) : null;\n            if (this.grid.crudService.rowEditingBlocked && row && this.intRow.key !== row.key) {\n                return;\n            }\n\n        } else {\n            this.selectionService.activeElement = null;\n            if (this.grid.crudService.cellInEditMode && !this.editMode) {\n                this.grid.crudService.updateCell(true, event);\n            }\n        }\n\n        this.grid.navigation.setActiveNode({ row: this.rowIndex, column: this.visibleColumnIndex });\n\n        const isTargetErrorIcon = event && event.target && event.target === this.errorIcon?.el.nativeElement\n        if (this.isInvalid && !isTargetErrorIcon) {\n            this.cdr.detectChanges();\n            this.openErrorTooltip();\n            this.grid.activeNodeChange.pipe(first()).subscribe(() => {\n                this.closeErrorTooltip();\n            });\n        }\n        this.selectionService.primaryButton = true;\n        if (this.cellSelectionMode === GridSelectionMode.multiple && this.selectionService.activeElement) {\n            if (this.selectionService.isInMap(this.selectionService.activeElement) && (event as any)?.ctrlKey && !(event as any)?.shiftKey) {\n                this.selectionService.remove(this.selectionService.activeElement);\n                shouldEmitSelection = true;\n            } else {\n                this.selectionService.add(this.selectionService.activeElement, false); // pointer events handle range generation\n                this.selectionService.keyboardStateOnFocus(node, this.grid.rangeSelected, this.nativeElement);\n            }\n        }\n        if (this.grid.isCellSelectable && shouldEmitSelection) {\n            this.zone.run(() => this.grid.selected.emit({ cell: this.getCellType(), event }));\n        }\n    }\n\n    /**\n     * If the provided string matches the text in the cell, the text gets highlighted.\n     * ```typescript\n     * this.cell.highlightText('Cell Value', true);\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public highlightText(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        return this.highlight && this.column.searchable ? this.highlight.highlight(text, caseSensitive, exactMatch) : 0;\n    }\n\n    /**\n     * Clears the highlight of the text in the cell.\n     * ```typescript\n     * this.cell.clearHighLight();\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public clearHighlight() {\n        if (this.highlight && this.column.searchable) {\n            this.highlight.clearHighlight();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public calculateSizeToFit(range: any): number {\n        return this.platformUtil.getNodeSizeViaRange(range, this.nativeElement);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get searchMetadata() {\n        const meta = new Map<string, any>();\n        meta.set('pinned', this.grid.isRecordPinnedByViewIndex(this.intRow.index));\n        return meta;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _updateCRUDStatus(event?: Event) {\n        if (this.editMode) {\n            return;\n        }\n\n        let editableArgs;\n        const crud = this.grid.crudService;\n        const editableCell = this.grid.crudService.cell;\n        const editMode = !!(crud.row || crud.cell);\n\n        if (this.editable && editMode && !this.intRow.deleted) {\n            if (editableCell) {\n                editableArgs = this.grid.crudService.updateCell(false, event);\n\n                /* This check is related with the following issue #6517:\n                 * when edit cell that belongs to a column which is sorted and press tab,\n                 * the next cell in edit mode is with wrong value /its context is not updated/;\n                 * So we reapply sorting before the next cell enters edit mode.\n                 * Also we need to keep the notifyChanges below, because of the current\n                 * change detection cycle when we have editing with enabled transactions\n                 */\n                if (this.grid.sortingExpressions.length && this.grid.sortingExpressions.indexOf(editableCell.column.field)) {\n                    this.grid.cdr.detectChanges();\n                }\n\n                if (editableArgs && editableArgs.cancel) {\n                    return true;\n                }\n\n                crud.exitCellEdit(event);\n            }\n            this.grid.tbody.nativeElement.focus({ preventScroll: true });\n            this.grid.notifyChanges();\n            crud.enterEditMode(this, event);\n            return false;\n        }\n\n        if (editableCell && crud.sameRow(this.cellID.rowID)) {\n            this.grid.crudService.updateCell(true, event);\n        } else if (editMode && !crud.sameRow(this.cellID.rowID)) {\n            this.grid.crudService.endEdit(true, event);\n        }\n    }\n\n    private addPointerListeners(selection) {\n        if (selection !== GridSelectionMode.multiple) {\n            return;\n        }\n        this.nativeElement.addEventListener('pointerenter', this.pointerenter);\n        this.nativeElement.addEventListener('pointerup', this.pointerup);\n        this.nativeElement.addEventListener('focusout', this.focusout);\n    }\n\n    private removePointerListeners(selection) {\n        if (selection !== GridSelectionMode.multiple) {\n            return;\n        }\n        this.nativeElement.removeEventListener('pointerenter', this.pointerenter);\n        this.nativeElement.removeEventListener('pointerup', this.pointerup);\n        this.nativeElement.removeEventListener('focusout', this.focusout);\n    }\n\n    private getCellType(useRow?: boolean): CellType {\n        const rowID = useRow ? this.grid.createRow(this.intRow.index, this.intRow.data) : this.intRow.index;\n        return new IgxGridCell(this.grid, rowID, this.column);\n    }\n}\n","<ng-template #defaultPinnedIndicator>\n    @if (displayPinnedChip) {\n        <igx-chip\n            class=\"igx-grid__td--pinned-chip\"\n            [disabled]=\"true\"\n            [style.--ig-size]=\"1\"\n        >{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n    }\n</ng-template>\n<ng-template #defaultCell>\n    @if (column.dataType !== 'boolean' && column.dataType !== 'image' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight\n            class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"\n                formatter\n                    ? (value | columnFormatter:formatter:rowData:columnData)\n                    : column.dataType === 'number'\n                    ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n                    : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                    ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n                    : column.dataType === 'currency'\n                    ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n                    : column.dataType === 'percent'\n                    ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n                    : value\n            \"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\"\n        >{{\n            formatter\n                ? (value | columnFormatter:formatter:rowData:columnData)\n                : column.dataType === \"number\"\n                ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n                : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n                : column.dataType === 'currency'\n                ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n                : column.dataType === 'percent'\n                ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n                : value\n        }}</div>\n    }\n    @if (column.dataType === 'boolean' && !this.formatter) {\n        <igx-icon\n            family=\"default\"\n            [name]=\"value ? 'confirm' : 'close'\"\n            [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\">\n        </igx-icon>\n    }\n    @if (column.dataType === 'image') {\n        <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n    }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n    @if (column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n                (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n                (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency' ?\n                (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n                (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\"\n        >{{\n            !isEmptyAddRowCell ? value : (column.header || column.field)\n        }}</div>\n    }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n    @if (column.dataType === 'string' || column.dataType === 'image') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-input-group>\n                <input\n                    igxInput\n                    [attr.aria-describedby]=\"ariaDescribeBy\"\n                    [attr.aria-invalid]=\"isInvalid\"\n                    [igxFocus]=\"true\"\n                    [igxTextSelection]=\"true\"\n                    [formControl]=\"formControl\"\n                    (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n                    (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n                />\n            </igx-input-group>\n        </ng-container>\n    }\n    @if (column.dataType === 'number') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [igxTextSelection]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'boolean') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-checkbox\n                [checked]=\"editValue\"\n                [igxFocus]=\"true\"\n                [disableRipple]=\"true\"\n                [formControl]=\"formControl\"\n            ></igx-checkbox>\n        </ng-container>\n    }\n    @if (column.dataType === 'date') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-date-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [weekStart]=\"column.pipeArgs.weekStart\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            >\n            </igx-date-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'time') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-time-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n            ></igx-time-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'dateTime') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                type=\"text\"\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [formControl]=\"formControl\"\n                igxInput\n                [locale]=\"grid.locale\"\n                [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n                [defaultFormatType]=\"column.dataType\"\n                [displayFormat]=\"column.pipeArgs.format\"\n                [igxFocus]=\"true\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'currency') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            @if (grid.currencyPositionLeft) {\n                <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n            }\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [igxTextSelection]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            @if (!grid.currencyPositionLeft) {\n                <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n            }\n        </igx-input-group>\n    }\n    @if (column.dataType === 'percent') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [igxTextSelection]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n        </igx-input-group>\n    }\n</ng-template>\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\"></ng-container>\n\n@if (isInvalid) {\n    <igx-icon\n        family=\"default\"\n        name=\"error\"\n        #errorIcon\n        [igxTooltipTarget]=\"tooltipRef\"\n        [igxToggleOutlet]=\"grid.outlet\"\n        (mouseover)='errorShowing = true'\n        (mouseout)='errorShowing = false'>\n    </igx-icon>\n    <div [id]=\"ariaErrorMessage\"\n    igxTooltip #error #tooltipRef=\"tooltip\">\n        <div [style.width]=\"'max-content'\">\n            <ng-container *ngTemplateOutlet=\"cellValidationErrorTemplate || defaultError; context: context\"></ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultError>\n    @if (formGroup?.get(column?.field).errors?.['required']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_required_validation_error}}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['minlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['maxlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['min']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['max']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['email']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_email_validation_error }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['pattern']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n        </div>\n    }\n</ng-template>\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Inject,\n    Input,\n    NgZone,\n    OnInit,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { IgxGridCellComponent } from '../cell.component';\nimport { PlatformUtil } from '../../core/utils';\nimport { DOCUMENT, NgClass, NgTemplateOutlet, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { HammerGesturesManager } from '../../core/touch';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxOverlayService } from '../../services/public_api';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from '../common/pipes';\nimport { IgxTooltipDirective } from '../../directives/tooltip/tooltip.directive';\nimport { IgxTooltipTargetDirective } from '../../directives/tooltip/tooltip-target.directive';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxPrefixDirective } from '../../directives/prefix/prefix.directive';\nimport { IgxDateTimeEditorDirective } from '../../directives/date-time-editor/date-time-editor.directive';\nimport { IgxTimePickerComponent } from '../../time-picker/time-picker.component';\nimport { IgxDatePickerComponent } from '../../date-picker/date-picker.component';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxFocusDirective } from '../../directives/focus/focus.directive';\nimport { IgxInputDirective } from '../../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../../input-group/input-group.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxTextHighlightDirective } from '../../directives/text-highlight/text-highlight.directive';\nimport { IgxChipComponent } from '../../chips/chip.component';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-expandable-grid-cell',\n    templateUrl: 'expandable-cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [IgxChipComponent, IgxTextHighlightDirective, IgxIconComponent, NgClass, FormsModule, ReactiveFormsModule, IgxInputGroupComponent, IgxInputDirective, IgxFocusDirective, IgxCheckboxComponent, IgxDatePickerComponent, IgxTimePickerComponent, IgxDateTimeEditorDirective, IgxPrefixDirective, IgxSuffixDirective, NgTemplateOutlet, IgxTooltipTargetDirective, IgxTooltipDirective, IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe]\n})\nexport class IgxGridExpandableCellComponent extends IgxGridCellComponent implements OnInit {\n    /**\n     * @hidden\n     */\n    @Input()\n    public expanded = false;\n\n    @ViewChild('indicator', { read: ElementRef })\n    public indicator: ElementRef;\n\n    @ViewChild('indentationDiv', { read: ElementRef })\n    public indentationDiv: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultCollapsedTemplate: TemplateRef<any>;\n\n    constructor(selectionService: IgxGridSelectionService,\n                @Inject(IGX_GRID_BASE) grid: GridType,\n                @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n                cdr: ChangeDetectorRef,\n                element: ElementRef,\n                zone: NgZone,\n                touchManager: HammerGesturesManager,\n                @Inject(DOCUMENT) public document,\n                platformUtil: PlatformUtil) {\n        super(selectionService, grid, overlayService, cdr, element, zone, touchManager, platformUtil);\n    }\n\n    /**\n     * @hidden\n     */\n    public toggle(event: Event) {\n        event.stopPropagation();\n        const expansionState = this.grid.gridAPI.get_row_expansion_state(this.intRow.data);\n        this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !expansionState, event);\n    }\n\n    /**\n     * @hidden\n     */\n    public onIndicatorFocus() {\n        this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n    }\n\n    /**\n     * @hidden\n     */\n    public override calculateSizeToFit(range: any): number {\n        let leftPadding = 0;\n        if (this.indentationDiv) {\n            const indentationStyle = this.document.defaultView.getComputedStyle(this.indentationDiv.nativeElement);\n            leftPadding = parseFloat(indentationStyle.paddingLeft);\n        }\n        const contentWidth = this.platformUtil.getNodeSizeViaRange(range, this.nativeElement);\n        return contentWidth + leftPadding;\n    }\n\n    /**\n     * @hidden\n     */\n    public get iconTemplate() {\n        if (this.expanded) {\n            return this.grid.rowExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n        } else {\n            return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public get showExpanderIndicator() {\n        const isGhost = this.intRow.pinned && this.intRow.disabled;\n        return !this.editMode && (!this.intRow.pinned || isGhost);\n    }\n}\n","<ng-template #defaultPinnedIndicator>\n    @if (displayPinnedChip) {\n        <igx-chip class=\"igx-grid__td--pinned-chip\" [disabled]=\"true\" [style.--ig-size]=\"1\">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n    }\n</ng-template>\n<ng-template #defaultCell>\n    @if (column.dataType !== 'boolean' && column.dataType !== 'image' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"formatter ? (value | columnFormatter:formatter:rowData)\n                : column.dataType === 'number'\n                ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n                : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n                : column.dataType === 'currency'\n                ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n                : column.dataType === 'percent'\n                ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n                : value\"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\">\n            {{ formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === \"number\"\n                ? (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'\n                ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent'\n                ? (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value}}</div>\n    }\n\n    @if (column.dataType === 'boolean' && !this.formatter) {\n        <igx-icon\n            family=\"default\"\n            [name]=\"value ? 'confirm' : 'close'\"\n            [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\">\n        </igx-icon>\n    }\n    @if (column.dataType === 'image') {\n        <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n    }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n    @if (column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n                (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n                (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n                (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n                (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\">\n            {{ value ? value : (column.header || column.field) }}\n        </div>\n    }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n    @if (column.dataType === 'string' || column.dataType === 'image') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-input-group [style.--ig-size]=\"1\" >\n                <input\n                    igxInput\n                    [attr.aria-describedby]=\"ariaDescribeBy\"\n                    [attr.aria-invalid]=\"isInvalid\"\n                    [igxFocus]=\"true\"\n                    [formControl]=\"formControl\"\n                    (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n                    (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n                />\n            </igx-input-group>\n        </ng-container>\n    }\n    @if (column.dataType === 'number') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'boolean') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-checkbox\n                [checked]=\"editValue\"\n                [igxFocus]=\"true\"\n                [disableRipple]=\"true\"\n                [formControl]=\"formControl\"\n            ></igx-checkbox>\n        </ng-container>\n    }\n    @if (column.dataType === 'date') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-date-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [weekStart]=\"column.pipeArgs.weekStart\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            >\n            </igx-date-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'time') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-time-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            ></igx-time-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'dateTime') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                type=\"text\"\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [formControl]=\"formControl\"\n                igxInput\n                [locale]=\"grid.locale\"\n                [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n                [defaultFormatType]=\"column.dataType\"\n                [displayFormat]=\"column.pipeArgs.format\"\n                [igxFocus]=\"true\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'currency') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            @if (grid.currencyPositionLeft) {\n                <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n            }\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            @if (!grid.currencyPositionLeft) {\n                <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n            }\n        </igx-input-group>\n    }\n    @if (column.dataType === 'percent') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n        </igx-input-group>\n    }\n</ng-template>\n@if (showExpanderIndicator) {\n    <div #indicator\n         class=\"igx-grid__tree-grouping-indicator\"\n         (click)=\"toggle($event)\" (focus)=\"onIndicatorFocus()\">\n         <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit:  row }\">\n        </ng-container>\n    </div>\n}\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n@if (isInvalid) {\n    <igx-icon\n        family=\"default\"\n        name=\"error\"\n        #errorIcon\n        [igxTooltipTarget]=\"tooltipRef\"\n        [igxToggleOutlet]=\"grid.outlet\"\n        (mouseover)='errorShowing = true'\n        (mouseout)='errorShowing = false'>\n    </igx-icon>\n    <div [id]=\"ariaErrorMessage\"\n    igxTooltip #error #tooltipRef=\"tooltip\">\n        <div [style.width]=\"'max-content'\">\n            <ng-container *ngTemplateOutlet=\"cellValidationErrorTemplate || defaultError; context: context\"></ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n        <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n        <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultError>\n    @if (formGroup?.get(column?.field).errors?.['required']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_required_validation_error}}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['minlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['maxlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['min']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['max']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['email']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_email_validation_error }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['pattern']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n        </div>\n    }\n</ng-template>\n","import { Component, ChangeDetectionStrategy, forwardRef } from '@angular/core';\nimport { IgxRowDirective } from '../row.directive';\nimport { IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from '../common/pipes';\nimport { IgxGridExpandableCellComponent } from './expandable-cell.component';\nimport { IgxGridCellComponent } from '../cell.component';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxRowDragDirective } from '../row-drag.directive';\nimport { NgTemplateOutlet, NgStyle, NgClass } from '@angular/common';\n\n/* blazorIndirectRender */\n/* blazorElement */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-row',\n    templateUrl: './grid-row.component.html',\n    providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent) }],\n    imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, NgStyle, IgxCheckboxComponent, IgxGridCellComponent, NgClass, IgxGridExpandableCellComponent, IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxGridRowComponent extends IgxRowDirective {\n\n    public getContext(col, row) {\n        return {\n            $implicit: col,\n            row\n        };\n    }\n\n    public get mrlRightPinnedOffset(): string {\n        return !this.grid.isPinningToStart ?\n            - this.grid.pinnedWidth - this.grid.headerFeaturesWidth + 'px' :\n            null;\n    }\n\n    public getContextMRL(pinnedCols, row) {\n        return {\n            $implicit: pinnedCols,\n            row\n        };\n    }\n}\n","<ng-container *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"></ng-container>\n\n<ng-template #addTemp>\n    <div class=\"igx-grid__tr--inner\" [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\" (animationend)=\"animationEndHandler()\">\n        <ng-container *ngTemplateOutlet='defaultTemp'></ng-container>\n    </div>\n</ng-template>\n<ng-template #defaultTemp>\n    @if (rowDraggable) {\n        <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n            <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n        </div>\n    }\n    @if (this.showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" (click)=\"onRowSelectorClick($event)\">\n            <ng-template *ngTemplateOutlet=\"\n                this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n                context: { $implicit: { index: viewIndex, rowID: key, key, selected: selected }}\">\n            </ng-template>\n        </div>\n    }\n    @if (grid.groupingExpressions.length > 0) {\n        <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{grid.groupingExpressions.length}}\" (pointerdown)=\"$event.preventDefault()\" (click)=\"$event.stopPropagation()\"></div>\n    }\n\n\n    @if (!grid.hasColumnLayouts) {\n        @if (pinnedColumns.length > 0 && grid.isPinningToStart) {\n            @for (col of pinnedColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n                <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n            }\n        }\n        <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]=\"grid.trackColumnChanges\" #igxDirRef>\n            <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n        </ng-template>\n        @if (pinnedColumns.length > 0 && !grid.isPinningToStart) {\n            @for (col of pinnedColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n                <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n            }\n        }\n    }\n\n    @if (grid.hasColumnLayouts) {\n        @if (pinnedColumns.length > 0 && grid.isPinningToStart) {\n            <ng-container *ngTemplateOutlet=\"mrlPinnedTemplate; context: getContextMRL(pinnedColumns, this)\"></ng-container>\n        }\n        <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxTopLevel\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]=\"grid.trackColumnChanges\" #igxDirRef>\n            <div class=\"igx-grid__mrl-block\" [ngStyle]=\"{\n                'grid-template-rows':col.getGridTemplate(true),\n                'grid-template-columns':col.getGridTemplate(false)\n            }\">\n                @for (col of col.children; track trackPinnedColumn(col)) {\n                    <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n                }\n            </div>\n        </ng-template>\n        @if (pinnedColumns.length > 0 && !grid.isPinningToStart) {\n            <ng-container *ngTemplateOutlet=\"mrlPinnedTemplate; context: getContextMRL(pinnedColumns, this)\"></ng-container>\n        }\n    }\n</ng-template>\n\n<ng-template #mrlPinnedTemplate let-pinnedColumns>\n    @for (col of pinnedColumns | igxTopLevel; track trackPinnedColumn(col)) {\n        <div class=\"igx-grid__mrl-block\"\n            [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n            [class.igx-grid__td--pinned-first]=\"col.hasFirstPinnedChildColumn\"\n            [style.left]=\"mrlRightPinnedOffset\"\n            [ngStyle]=\"{\n                'grid-template-rows':col.getGridTemplate(true),\n                'grid-template-columns':col.getGridTemplate(false),\n                'z-index': col.pinned ? 1 : null\n            }\"\n        >\n            @for (col of col.children; track col) {\n                <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n            }\n        </div>\n    }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox\n            [tabindex]=\"-1\"\n            [checked]=\"selected\"\n            [readonly]=\"true\"\n            [disabled]=\"deleted\"\n            [disableRipple]=\"true\"\n            [disableTransitions]=\"grid.disableTransitions\"\n            [aria-label]=\"rowCheckboxAriaLabel\">\n        </igx-checkbox>\n    </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n    <igx-grid-cell\n        class=\"igx-grid__td igx-grid__td--fw\"\n        [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n        [class.igx-grid__td--pinned]=\"col.pinned\"\n        [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n        [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n        [class.igx-grid__td--image]=\"col.dataType === 'image'\"\n        [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n        [rowData]=\"data\"\n        [style.min-width]=\"col.resolvedWidth\"\n        [style.max-width]=\"col.resolvedWidth\"\n        [style.flex-basis]=\"col.resolvedWidth\"\n        [style.left]=\"col.rightPinnedOffset\"\n        [width]=\"col.getCellWidth()\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n        #cell>\n    </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n    <igx-expandable-grid-cell\n        [class.igx-grid__td--pinned]=\"col.pinned\"\n        class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n        [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n        [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\n        [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [expanded]=\"expanded\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [rowData]=\"data\"\n        [style.min-width]=\"col.resolvedWidth\"\n        [style.max-width]=\"col.resolvedWidth\"\n        [style.flex-basis]=\"col.resolvedWidth\"\n        [width]=\"col.getCellWidth()\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n        #cell>\n    </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n    <igx-grid-cell\n        class=\"igx-grid__td igx-grid__td--fw\"\n        [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n\n        [class.igx-grid__td--pinned]=\"col.pinned\"\n        [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n        [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [style.grid-row-end]=\"col.rowEnd\"\n        [style.grid-column-end]=\"col.colEnd\"\n        [style.grid-row-start]=\"col.rowStart\"\n        [style.grid-column-start]=\"col.colStart\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [rowData]=\"data\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n        #cell>\n    </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n    <igx-expandable-grid-cell\n        class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n        [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n\n        [class.igx-grid__td--pinned]=\"col.pinned\"\n        [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\n        [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n        [expanded]=\"expanded\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [style.grid-row-end]=\"col.rowEnd\"\n        [style.grid-column-end]=\"col.colEnd\"\n        [style.grid-row-start]=\"col.rowStart\"\n        [style.grid-column-start]=\"col.colStart\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [rowData]=\"data\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n        #cell>\n    </igx-expandable-grid-cell>\n</ng-template>\n","import { Directive, Input, Output, EventEmitter, ElementRef, OnDestroy, NgZone, OnInit, booleanAttribute } from '@angular/core';\nimport { interval, Observable, Subscription, Subject, animationFrameScheduler } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nenum DragScrollDirection {\n    NONE,\n    LEFT,\n    TOP,\n    RIGHT,\n    BOTTOM,\n    TOPLEFT,\n    TOPRIGHT,\n    BOTTOMLEFT,\n    BOTTOMRIGHT\n}\n\n/**\n * An internal directive encapsulating the drag scroll behavior in the grid.\n *\n * @hidden @internal\n */\n@Directive({\n    selector: '[igxGridDragSelect]',\n    standalone: true\n})\nexport class IgxGridDragSelectDirective implements OnInit, OnDestroy {\n\n    @Output()\n    public dragStop = new EventEmitter<boolean>();\n\n    @Output()\n    public dragScroll = new EventEmitter<{ left: number; top: number }>();\n\n    @Input({ alias: 'igxGridDragSelect', transform: booleanAttribute })\n    public get activeDrag(): boolean {\n        return this._activeDrag;\n    }\n\n    public set activeDrag(val: boolean) {\n        if (val !== this._activeDrag) {\n            this.unsubscribe();\n            this._activeDrag = val;\n        }\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    protected end$ = new Subject<any>();\n    protected lastDirection = DragScrollDirection.NONE;\n    protected _interval$: Observable<any>;\n    protected _sub: Subscription;\n\n    private _activeDrag: boolean;\n\n    constructor(private ref: ElementRef<HTMLElement>, private zone: NgZone) {\n        this._interval$ = interval(0, animationFrameScheduler).pipe(\n            takeUntil(this.end$),\n            filter(() => this.activeDrag)\n        );\n    }\n\n    public ngOnInit() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.addEventListener('pointerover', this.startDragSelection);\n            this.nativeElement.addEventListener('pointerleave', this.stopDragSelection);\n        });\n    }\n\n    public ngOnDestroy() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.removeEventListener('pointerover', this.startDragSelection);\n            this.nativeElement.removeEventListener('pointerleave', this.stopDragSelection);\n        });\n        this.unsubscribe();\n        this.end$.complete();\n    }\n\n\n    protected startDragSelection = (ev: PointerEvent) => {\n        if (!this.activeDrag) {\n            return;\n        }\n\n        const x = ev.clientX;\n        const y = ev.clientY;\n        const { direction, delta } = this._measureDimensions(x, y);\n\n        if (direction === this.lastDirection) {\n            return;\n        }\n\n        this.unsubscribe();\n        this._sub = this._interval$.subscribe(() => this.dragScroll.emit(delta));\n        this.lastDirection = direction;\n    };\n\n    protected stopDragSelection = () => {\n        if (!this.activeDrag) {\n            return;\n        }\n\n        this.dragStop.emit(false);\n        this.unsubscribe();\n        this.lastDirection = DragScrollDirection.NONE;\n    };\n\n    protected _measureDimensions(x: number, y: number): { direction: DragScrollDirection; delta: { left: number; top: number } } {\n        let direction: DragScrollDirection;\n        let delta = { left: 0, top: 0 };\n        const { left, top, width, height } = this.nativeElement.getBoundingClientRect();\n        const RATIO = 0.15;\n\n        const offsetX = Math.trunc(x - left);\n        const offsetY = Math.trunc(y - top);\n\n        const leftDirection = offsetX <= width * RATIO;\n        const rightDirection = offsetX >= width * (1 - RATIO);\n        const topDirection = offsetY <= height * RATIO;\n        const bottomDirection = offsetY >= height * (1 - RATIO);\n\n        if (topDirection && leftDirection) {\n            direction = DragScrollDirection.TOPLEFT;\n            delta = { left: -1, top: -1 };\n        } else if (topDirection && rightDirection) {\n            direction = DragScrollDirection.TOPRIGHT;\n            delta = { left: 1, top: -1 };\n        } else if (bottomDirection && leftDirection) {\n            direction = DragScrollDirection.BOTTOMLEFT;\n            delta = { left: -1, top: 1 };\n        } else if (bottomDirection && rightDirection) {\n            direction = DragScrollDirection.BOTTOMRIGHT;\n            delta = { top: 1, left: 1 };\n        } else if (topDirection) {\n            direction = DragScrollDirection.TOP;\n            delta.top = -1;\n        } else if (bottomDirection) {\n            direction = DragScrollDirection.BOTTOM;\n            delta.top = 1;\n        } else if (leftDirection) {\n            direction = DragScrollDirection.LEFT;\n            delta.left = -1;\n        } else if (rightDirection) {\n            direction = DragScrollDirection.RIGHT;\n            delta.left = 1;\n        } else {\n            direction = DragScrollDirection.NONE;\n        }\n\n        return { direction, delta };\n\n    }\n\n    protected unsubscribe() {\n        if (this._sub) {\n            this._sub.unsubscribe();\n        }\n    }\n}\n","import {\n    Component, ChangeDetectionStrategy, Input, Output, EventEmitter, ContentChild, ViewChildren,\n    QueryList, ViewChild, TemplateRef, DoCheck, AfterContentInit, HostBinding,\n    OnInit, AfterViewInit, ContentChildren, CUSTOM_ELEMENTS_SCHEMA, booleanAttribute\n} from '@angular/core';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\n\nimport { IgxGridBaseDirective } from '../grid-base.directive';\nimport { IgxGridNavigationService } from '../grid-navigation.service';\nimport { IgxGridAPIService } from './grid-api.service';\nimport { cloneArray, IBaseEventArgs } from '../../core/utils';\nimport { IGroupByRecord } from '../../data-operations/groupby-record.interface';\nimport { IgxGroupByRowTemplateDirective, IgxGridDetailTemplateDirective } from '../grid.directives';\nimport { IgxGridGroupByRowComponent } from './groupby-row.component';\nimport { IGroupByExpandState } from '../../data-operations/groupby-expand-state.interface';\nimport { IForOfState, IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { IgxGridSummaryService } from '../summaries/grid-summary.service';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { IgxForOfSyncService, IgxForOfScrollSyncService } from '../../directives/for-of/for_of.sync.service';\nimport { IgxGridMRLNavigationService } from '../grid-mrl-navigation.service';\nimport { FilterMode } from '../common/enums';\nimport { CellType, GridType, IgxGridMasterDetailContext, IgxGroupByRowSelectorTemplateContext, IgxGroupByRowTemplateContext, IGX_GRID_BASE, IGX_GRID_SERVICE_BASE, RowType } from '../common/grid.interface';\nimport { IgxGroupByRowSelectorDirective } from '../selection/row-selectors';\nimport { IgxGridCRUDService } from '../common/crud.service';\nimport { IgxGridRow, IgxGroupByRow, IgxSummaryRow } from '../grid-public-row';\nimport { IgxGridCell } from '../grid-public-cell';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { IGridGroupingStrategy } from '../common/strategy';\nimport { IgxGridValidationService } from './grid-validation.service';\nimport { IgxGridDetailsPipe } from './grid.details.pipe';\nimport { IgxGridSummaryPipe } from './grid.summary.pipe';\nimport { IgxGridGroupingPipe, IgxGridPagingPipe, IgxGridSortingPipe, IgxGridFilteringPipe } from './grid.pipes';\nimport { IgxSummaryDataPipe } from '../summaries/grid-root-summary.pipe';\nimport { IgxGridTransactionPipe, IgxHasVisibleColumnsPipe, IgxGridRowPinningPipe, IgxGridAddRowPipe, IgxGridRowClassesPipe, IgxGridRowStylesPipe, IgxStringReplacePipe } from '../common/pipes';\nimport { IgxGridColumnResizerComponent } from '../resizing/resizer.component';\nimport { IgxRowEditTabStopDirective } from '../grid.rowEdit.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { IgxSnackbarComponent } from '../../snackbar/snackbar.component';\nimport { IgxCircularProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxOverlayOutletDirective, IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxSummaryRowComponent } from '../summaries/summary-row.component';\nimport { IgxGridRowComponent } from './grid-row.component';\nimport { IgxTemplateOutletDirective } from '../../directives/template-outlet/template_outlet.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxGridDragSelectDirective } from '../selection/drag-select.directive';\nimport { IgxGridBodyDirective } from '../grid.common';\nimport { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';\nimport { IgxGridGroupByAreaComponent } from '../grouping/grid-group-by-area.component';\nimport { Observable, Subject } from 'rxjs';\n\nlet NEXT_ID = 0;\n\nexport interface IGroupingDoneEventArgs extends IBaseEventArgs {\n    expressions: Array<ISortingExpression> | ISortingExpression;\n    groupedColumns: Array<IgxColumnComponent> | IgxColumnComponent;\n    ungroupedColumns: Array<IgxColumnComponent> | IgxColumnComponent;\n}\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorIndirectRender */\n/**\n * Grid provides a way to present and manipulate tabular data.\n *\n * @igxModule IgxGridModule\n * @igxGroup Grids & Lists\n * @igxKeywords grid, table\n * @igxTheme igx-grid-theme\n * @remarks\n * The Ignite UI Grid is used for presenting and manipulating tabular data in the simplest way possible.  Once data\n * has been bound, it can be manipulated through filtering, sorting & editing operations.\n * @example\n * ```html\n * <igx-grid [data]=\"employeeData\" [autoGenerate]=\"false\">\n *   <igx-column field=\"first\" header=\"First Name\"></igx-column>\n *   <igx-column field=\"last\" header=\"Last Name\"></igx-column>\n *   <igx-column field=\"role\" header=\"Role\"></igx-column>\n * </igx-grid>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false,\n    providers: [\n        IgxGridCRUDService,\n        IgxGridNavigationService,\n        IgxGridSummaryService,\n        IgxGridSelectionService,\n        IgxGridValidationService,\n        { provide: IGX_GRID_SERVICE_BASE, useClass: IgxGridAPIService },\n        { provide: IGX_GRID_BASE, useExisting: IgxGridComponent },\n        IgxFilteringService,\n        IgxColumnResizingService,\n        IgxForOfSyncService,\n        IgxForOfScrollSyncService,\n    ],\n    selector: 'igx-grid',\n    templateUrl: './grid.component.html',\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        IgxGridGroupByAreaComponent,\n        IgxGridHeaderRowComponent,\n        IgxGridBodyDirective,\n        IgxGridDragSelectDirective,\n        IgxColumnMovingDropDirective,\n        IgxGridForOfDirective,\n        IgxTemplateOutletDirective,\n        IgxGridRowComponent,\n        IgxGridGroupByRowComponent,\n        IgxSummaryRowComponent,\n        IgxOverlayOutletDirective,\n        IgxToggleDirective,\n        IgxCircularProgressBarComponent,\n        IgxSnackbarComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxIconComponent,\n        IgxRowEditTabStopDirective,\n        IgxGridColumnResizerComponent,\n        IgxGridTransactionPipe,\n        IgxHasVisibleColumnsPipe,\n        IgxGridRowPinningPipe,\n        IgxGridAddRowPipe,\n        IgxGridRowClassesPipe,\n        IgxGridRowStylesPipe,\n        IgxSummaryDataPipe,\n        IgxGridGroupingPipe,\n        IgxGridPagingPipe,\n        IgxGridSortingPipe,\n        IgxGridFilteringPipe,\n        IgxGridSummaryPipe,\n        IgxGridDetailsPipe,\n        IgxStringReplacePipe\n    ],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxGridComponent extends IgxGridBaseDirective implements GridType, OnInit, DoCheck, AfterContentInit, AfterViewInit {\n    /**\n     * Emitted when a new chunk of data is loaded from virtualization.\n     *\n     * @example\n     * ```typescript\n     *  <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (dataPreLoad)='handleDataPreloadEvent()'></igx-grid>\n     * ```\n     */\n    @Output()\n    public dataPreLoad = new EventEmitter<IForOfState>();\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public groupingExpressionsChange = new EventEmitter<IGroupingExpression[]>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public groupingExpansionStateChange = new EventEmitter<IGroupByExpandState[]>();\n\n    /**\n     * Emitted when columns are grouped/ungrouped.\n     *\n     * @remarks\n     * The `groupingDone` event would be raised only once if several columns get grouped at once by calling\n     * the `groupBy()` or `clearGrouping()` API methods and passing an array as an argument.\n     * The event arguments provide the `expressions`, `groupedColumns` and `ungroupedColumns` properties, which contain\n     * the `ISortingExpression` and the `IgxColumnComponent` related to the grouping/ungrouping operation.\n     * Please note that `groupedColumns` and `ungroupedColumns` show only the **newly** changed columns (affected by the **last**\n     * grouping/ungrouping operation), not all columns which are currently grouped/ungrouped.\n     * columns.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (groupingDone)=\"groupingDone($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public groupingDone = new EventEmitter<IGroupingDoneEventArgs>();\n\n    /**\n     * Gets/Sets whether created groups are rendered expanded or collapsed.\n     *\n     * @remarks\n     * The default rendered state is expanded.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [groupsExpanded]=\"false\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public groupsExpanded = true;\n\n    /**\n     * Gets/Sets the template that will be rendered as a GroupBy drop area.\n     *\n     * @remarks\n     * The grid needs to have at least one groupable column in order the GroupBy area to be displayed.\n     * @example\n     * ```html\n     * <igx-grid [dropAreaTemplate]=\"dropAreaRef\">\n     * </igx-grid>\n     * <ng-template #myDropArea>\n     *      <span> Custom drop area! </span>\n     * </ng-template>\n     * ```\n     */\n    @Input()\n    public dropAreaTemplate: TemplateRef<void>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxGridDetailTemplateDirective, { read: TemplateRef })\n    public detailTemplateDirective: TemplateRef<IgxGridMasterDetailContext>;\n\n\n    /**\n     * Returns a reference to the master-detail template.\n     * ```typescript\n     * let detailTemplate = this.grid.detailTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input('detailTemplate')\n    public get detailTemplate(): TemplateRef<IgxGridMasterDetailContext> {\n        return this._detailTemplate;\n    }\n    /**\n     * Sets the master-detail template.\n     * ```html\n     * <ng-template #detailTemplate igxGridDetail let-dataItem>\n     *    <div>\n     *       <div><span class='categoryStyle'>City:</span> {{dataItem.City}}</div>\n     *       <div><span class='categoryStyle'>Address:</span> {{dataItem.Address}}</div>\n     *    </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'detailTemplate'\", {read: TemplateRef })\n     * public detailTemplate: TemplateRef<any>;\n     * this.grid.detailTemplate = this.detailTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set detailTemplate(template: TemplateRef<IgxGridMasterDetailContext>) {\n        this._detailTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'grid';\n\n    /**\n     * Gets/Sets the value of the `id` attribute.\n     *\n     * @remarks\n     * If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-grid-${NEXT_ID++}`;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('record_template', { read: TemplateRef, static: true })\n    protected recordTemplate: TemplateRef<any>;\n\n    @ViewChild('detail_template_container', { read: TemplateRef, static: true })\n    protected detailTemplateContainer: TemplateRef<any>;\n\n    @ViewChild('group_template', { read: TemplateRef, static: true })\n    protected defaultGroupTemplate: TemplateRef<any>;\n\n    @ViewChild('summary_template', { read: TemplateRef, static: true })\n    protected summaryTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxGroupByRowTemplateDirective, { read: IgxGroupByRowTemplateDirective })\n    protected groupTemplate: IgxGroupByRowTemplateDirective;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxGroupByRowSelectorDirective, { read: TemplateRef, descendants: false })\n    protected groupByRowSelectorsTemplates: QueryList<TemplateRef<IgxGroupByRowSelectorTemplateContext>>;\n\n    @ViewChildren(IgxGridGroupByRowComponent, { read: IgxGridGroupByRowComponent })\n    private _groupsRowList: QueryList<IgxGridGroupByRowComponent>;\n\n    private _groupsRecords: IGroupByRecord[] = [];\n    /**\n     * Gets the hierarchical representation of the group by records.\n     *\n     * @example\n     * ```typescript\n     * let groupRecords = this.grid.groupsRecords;\n     * ```\n     */\n    public get groupsRecords(): IGroupByRecord[] {\n        return this._groupsRecords;\n    }\n\n    /**\n     * @hidden @internal\n     * Includes children of collapsed group rows.\n     */\n    public groupingResult: any[];\n\n    /**\n     * @hidden @internal\n     */\n    public groupingMetadata: any[];\n\n    /**\n     * @hidden @internal\n     * Does not include children of collapsed group rows.\n     */\n    public groupingFlatResult: any[];\n    /**\n     * @hidden\n     */\n    protected _groupingExpressions: IGroupingExpression[] = [];\n    /**\n     * @hidden\n     */\n    protected _groupingExpandState: IGroupByExpandState[] = [];\n    /**\n     * @hidden\n     */\n    protected _groupRowTemplate: TemplateRef<IgxGroupByRowTemplateContext>;\n\n    /**\n     * @hidden\n     */\n    protected _groupStrategy: IGridGroupingStrategy;\n    /**\n     * @hidden\n     */\n    protected groupingDiffer;\n    private _data?: any[] | null;\n    private _hideGroupedColumns = false;\n    private _dropAreaMessage = null;\n    private _showGroupArea = true;\n\n    private _groupByRowSelectorTemplate: TemplateRef<IgxGroupByRowSelectorTemplateContext>;\n    private _detailTemplate;\n\n\n    /**\n     * Gets/Sets the array of data that populates the component.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    /* treatAsRef */\n    @Input()\n    public get data(): any[] | null {\n        return this._data;\n    }\n\n    public set data(value: any[] | null) {\n        const dataLoaded = (!this._data || this._data.length === 0) && value && value.length > 0;\n        const oldData = this._data;\n        this._data = value || [];\n        this.summaryService.clearSummaryCache();\n        if (!this._init) {\n            this.validation.updateAll(this._data);\n        }\n\n        if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data)) {\n            this.setupColumns();\n        }\n\n        this.cdr.markForCheck();\n        if (this.isPercentHeight) {\n            this.notifyChanges(true);\n        }\n        // check if any columns have width auto and if so recalculate their auto-size on data loaded.\n        if (dataLoaded && this._columns.some(x => (x as any)._width === 'auto')) {\n            this.recalculateAutoSizes();\n        }\n        this.checkPrimaryKeyField();\n    }\n\n    /**\n     * Gets/Sets the total number of records in the data source.\n     *\n     * @remarks\n     * This property is required for remote grid virtualization to function when it is bound to remote data.\n     * @example\n     * ```typescript\n     * const itemCount = this.grid1.totalItemCount;\n     * this.grid1.totalItemCount = 55;\n     * ```\n     */\n    @Input()\n    public set totalItemCount(count) {\n        this.verticalScrollContainer.totalItemCount = count;\n    }\n\n    public get totalItemCount() {\n        return this.verticalScrollContainer.totalItemCount;\n    }\n\n    private get _gridAPI(): IgxGridAPIService {\n        return this.gridAPI as IgxGridAPIService;\n    }\n\n    private childDetailTemplates: Map<any, any> = new Map();\n\n    /**\n     * @hidden @internal\n     */\n    public groupingPerformedSubject = new Subject<void>();\n\n    /**\n     * @hidden @internal\n     */\n    public groupingPerformed$: Observable<void> = this.groupingPerformedSubject.asObservable();\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * Gets/Sets the group by state.\n     *\n     * @example\n     * ```typescript\n     * let groupByState = this.grid.groupingExpressions;\n     * this.grid.groupingExpressions = [...];\n     * ```\n     * @remarks\n     * Supports two-way data binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(groupingExpressions)]=\"model.groupingExpressions\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get groupingExpressions(): IGroupingExpression[] {\n        return this._groupingExpressions;\n    }\n\n    public set groupingExpressions(value: IGroupingExpression[]) {\n        if (this.groupingExpressions === value) {\n            return;\n        }\n        if (value && value.length > 10) {\n            throw Error('Maximum amount of grouped columns is 10.');\n        }\n        const oldExpressions: IGroupingExpression[] = this.groupingExpressions;\n        const newExpressions: IGroupingExpression[] = value;\n        this._groupingExpressions = cloneArray(value);\n        this.groupingExpressionsChange.emit(this._groupingExpressions);\n        if (this._gridAPI.grid) {\n            /* grouping and sorting are working separate from each other */\n            this._applyGrouping();\n            this.notifyChanges();\n        }\n        if (!this._init && JSON.stringify(oldExpressions, this.stringifyCallback) !== JSON.stringify(newExpressions, this.stringifyCallback) && this._columns) {\n            const groupedCols: IgxColumnComponent[] = [];\n            const ungroupedCols: IgxColumnComponent[] = [];\n            const groupedColsArr = newExpressions.filter((obj) => !oldExpressions.some((obj2) => obj.fieldName === obj2.fieldName));\n            groupedColsArr.forEach((elem) => {\n                groupedCols.push(this.getColumnByName(elem.fieldName));\n            }, this);\n            const ungroupedColsArr = oldExpressions.filter((obj) => !newExpressions.some((obj2) => obj.fieldName === obj2.fieldName));\n            ungroupedColsArr.forEach((elem) => {\n                ungroupedCols.push(this.getColumnByName(elem.fieldName));\n            }, this);\n            this.notifyChanges();\n            const groupingDoneArgs: IGroupingDoneEventArgs = {\n                expressions: newExpressions,\n                groupedColumns: groupedCols,\n                ungroupedColumns: ungroupedCols\n            };\n            this.groupingPerformed$.pipe(take(1)).subscribe(() => {\n                this.groupingDone.emit(groupingDoneArgs);\n            });\n        }\n    }\n\n    /**\n     * Gets/Sets a list of expansion states for group rows.\n     *\n     * @remarks\n     * Includes only states that differ from the default one (controlled through groupsExpanded and states that the user has changed.\n     * Contains the expansion state (expanded: boolean) and the unique identifier for the group row (Array).\n     * Supports two-way data binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(groupingExpansionState)]=\"model.groupingExpansionState\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get groupingExpansionState() {\n        return this._groupingExpandState;\n    }\n\n    public set groupingExpansionState(value) {\n        if (value !== this._groupingExpandState) {\n            this.groupingExpansionStateChange.emit(value);\n        }\n        this._groupingExpandState = value;\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * Gets/Sets whether the grouped columns should be hidden.\n     *\n     * @remarks\n     * The default value is \"false\"\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [hideGroupedColumns]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get hideGroupedColumns() {\n        return this._hideGroupedColumns;\n    }\n\n    public set hideGroupedColumns(value: boolean) {\n        if (value) {\n            this.groupingDiffer = this.differs.find(this.groupingExpressions).create();\n        } else {\n            this.groupingDiffer = null;\n        }\n        if (this._columns && this.groupingExpressions) {\n            this._setGroupColsVisibility(value);\n        }\n\n        this._hideGroupedColumns = value;\n    }\n\n    /**\n     * Gets/Sets the grouping strategy of the grid.\n     *\n     * @remarks The default IgxGrouping extends from IgxSorting and a custom one can be used as a `sortStrategy` as well.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [groupStrategy]=\"groupStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get groupStrategy(): IGridGroupingStrategy {\n        return this._groupStrategy;\n    }\n\n    public set groupStrategy(value: IGridGroupingStrategy) {\n        this._groupStrategy = value;\n    }\n\n    /**\n     * Gets/Sets the message displayed inside the GroupBy drop area where columns can be dragged on.\n     *\n     * @remarks\n     * The grid needs to have at least one groupable column in order the GroupBy area to be displayed.\n     * @example\n     * ```html\n     * <igx-grid dropAreaMessage=\"Drop here to group!\">\n     *      <igx-column [groupable]=\"true\" field=\"ID\"></igx-column>\n     * </igx-grid>\n     * ```\n     */\n    @Input()\n    public set dropAreaMessage(value: string) {\n        this._dropAreaMessage = value;\n        this.notifyChanges();\n    }\n\n    public get dropAreaMessage(): string {\n        return this._dropAreaMessage || this.resourceStrings.igx_grid_groupByArea_message;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get groupsRowList() {\n        const res = new QueryList<any>();\n        if (!this._groupsRowList) {\n            return res;\n        }\n        const rList = this._groupsRowList.filter(item => item.element.nativeElement.parentElement !== null)\n            .sort((item1, item2) => item1.index - item2.index);\n        res.reset(rList);\n        return res;\n    }\n\n    /**\n     * Gets the group by row selector template.\n     */\n    @Input()\n    public get groupByRowSelectorTemplate(): TemplateRef<IgxGroupByRowSelectorTemplateContext> {\n        return this._groupByRowSelectorTemplate || this.groupByRowSelectorsTemplates?.first;\n    }\n\n    /**\n     * Sets the group by row selector template.\n     * ```html\n     * <ng-template #template igxGroupByRowSelector let-groupByRowContext>\n     * {{ groupByRowContext.selectedCount }} / {{ groupByRowContext.totalCount  }}\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.groupByRowSelectorTemplate = this.template;\n     * ```\n     */\n    public set groupByRowSelectorTemplate(template: TemplateRef<IgxGroupByRowSelectorTemplateContext>) {\n        this._groupByRowSelectorTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getDetailsContext(rowData, index): IgxGridDetailTemplateDirective {\n        return {\n            $implicit: rowData,\n            index\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public detailsViewFocused(container, rowIndex) {\n        this.navigation.setActiveNode({ row: rowIndex });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get hasDetails() {\n        return !!this.detailTemplate;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getRowTemplate(rowData) {\n        if (this.isGroupByRecord(rowData)) {\n            return this.defaultGroupTemplate;\n        } else if (this.isSummaryRow(rowData)) {\n            return this.summaryTemplate;\n        } else if (this.hasDetails && this.isDetailRecord(rowData)) {\n            return this.detailTemplateContainer;\n        } else {\n            return this.recordTemplate;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isDetailRecord(record) {\n        return record && record.detailsData !== undefined;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isDetailActive(rowIndex) {\n        return this.navigation.activeNode ? this.navigation.activeNode.row === rowIndex : false;\n    }\n\n    /**\n     * Gets/Sets the template reference for the group row.\n     *\n     * @example\n     * ```\n     * const groupRowTemplate = this.grid.groupRowTemplate;\n     * this.grid.groupRowTemplate = myRowTemplate;\n     * ```\n     */\n    @Input()\n    public get groupRowTemplate(): TemplateRef<IgxGroupByRowTemplateContext> {\n        return this._groupRowTemplate;\n    }\n\n    public set groupRowTemplate(template: TemplateRef<IgxGroupByRowTemplateContext>) {\n        this._groupRowTemplate = template;\n        this.notifyChanges();\n    }\n\n    /** @hidden @internal */\n    public trackChanges: (index, rec) => any;\n\n    /**\n     * Groups by a new `IgxColumnComponent` based on the provided expression, or modifies an existing one.\n     *\n     * @remarks\n     * Also allows for multiple columns to be grouped at once if an array of `ISortingExpression` is passed.\n     * The `groupingDone` event would get raised only **once** if this method gets called multiple times with the same arguments.\n     * @example\n     * ```typescript\n     * this.grid.groupBy({ fieldName: name, dir: SortingDirection.Asc, ignoreCase: false });\n     * this.grid.groupBy([\n     *     { fieldName: name1, dir: SortingDirection.Asc, ignoreCase: false },\n     *     { fieldName: name2, dir: SortingDirection.Desc, ignoreCase: true },\n     *     { fieldName: name3, dir: SortingDirection.Desc, ignoreCase: false }\n     * ]);\n     * ```\n     */\n    public groupBy(expression: IGroupingExpression | Array<IGroupingExpression>): void {\n        if (this.checkIfNoColumnField(expression)) {\n            return;\n        }\n        this.crudService.endEdit(false);\n        if (expression instanceof Array) {\n            this._gridAPI.groupBy_multiple(expression);\n        } else {\n            this._gridAPI.groupBy(expression);\n        }\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Clears grouping for particular column, array of columns or all columns.\n     *\n     * @remarks\n     * Clears all grouping in the grid, if no parameter is passed.\n     * If a parameter is provided, clears grouping for a particular column or an array of columns.\n     * @example\n     * ```typescript\n     * this.grid.clearGrouping(); //clears all grouping\n     * this.grid.clearGrouping(\"ID\"); //ungroups a single column\n     * this.grid.clearGrouping([\"ID\", \"Column1\", \"Column2\"]); //ungroups multiple columns\n     * ```\n     * @param name Name of column or array of column names to be ungrouped.\n     */\n    public clearGrouping(name?: string | Array<string>): void {\n        this._gridAPI.clear_groupby(name);\n        this.calculateGridSizes();\n        this.notifyChanges(true);\n        this.groupingPerformedSubject.next();\n    }\n\n    /**\n     * Returns if a group is expanded or not.\n     *\n     * @param group The group record.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * const expandedGroup = this.grid.isExpandedGroup(this.groupRow);\n     * ```\n     */\n    public override isExpandedGroup(group: IGroupByRecord): boolean {\n        const state: IGroupByExpandState = this._getStateForGroupRow(group);\n        return state ? state.expanded : this.groupsExpanded;\n    }\n\n    /**\n     * Toggles the expansion state of a group.\n     *\n     * @param groupRow The group record to toggle.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * const toggleExpGroup = this.grid.toggleGroup(this.groupRow);\n     * ```\n     */\n    public toggleGroup(groupRow: IGroupByRecord) {\n        this._toggleGroup(groupRow);\n        this.notifyChanges();\n    }\n\n    /**\n     * Select all rows within a group.\n     *\n     * @param groupRow: The group record which rows would be selected.\n     * @param clearCurrentSelection if true clears the current selection\n     * @example\n     * ```typescript\n     * this.grid.selectRowsInGroup(this.groupRow, true);\n     * ```\n     */\n    public selectRowsInGroup(groupRow: IGroupByRecord, clearPrevSelection?: boolean) {\n        this._gridAPI.groupBy_select_all_rows_in_group(groupRow, clearPrevSelection);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselect all rows within a group.\n     *\n     * @param groupRow The group record which rows would be deselected.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * this.grid.deselectRowsInGroup(this.groupRow);\n     * ```\n     */\n    public deselectRowsInGroup(groupRow: IGroupByRecord) {\n        this._gridAPI.groupBy_deselect_all_rows_in_group(groupRow);\n        this.notifyChanges();\n    }\n\n    /**\n     * Expands the specified group and all of its parent groups.\n     *\n     * @param groupRow The group record to fully expand.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * this.grid.fullyExpandGroup(this.groupRow);\n     * ```\n     */\n    public fullyExpandGroup(groupRow: IGroupByRecord) {\n        this._fullyExpandGroup(groupRow);\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isGroupByRecord(record: any): boolean {\n        // return record.records instance of GroupedRecords fails under Webpack\n        return record && record?.records && record.records?.length &&\n            record.expression && record.expression?.fieldName;\n    }\n\n    /**\n     * Toggles the expansion state of all group rows recursively.\n     *\n     * @example\n     * ```typescript\n     * this.grid.toggleAllGroupRows;\n     * ```\n     */\n    public toggleAllGroupRows() {\n        this.groupingExpansionState = [];\n        this.groupsExpanded = !this.groupsExpanded;\n        this.notifyChanges();\n    }\n\n    /** @hidden @internal */\n    public get hasGroupableColumns(): boolean {\n        return this._columns.some((col) => col.groupable && !col.columnGroup);\n    }\n\n    /**\n     * Returns whether the `IgxGridComponent` has group area.\n     *\n     * @example\n     * ```typescript\n     * let isGroupAreaVisible = this.grid.showGroupArea;\n     * ```\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [showGroupArea]=\"false\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get showGroupArea(): boolean {\n        return this._showGroupArea;\n    }\n    public set showGroupArea(value: boolean) {\n        this._showGroupArea = value;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isColumnGrouped(fieldName: string): boolean {\n        return this.groupingExpressions.find(exp => exp.fieldName === fieldName) ? true : false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getContext(rowData: any, rowIndex: number, pinned?: boolean): any {\n        if (this.isDetailRecord(rowData)) {\n            const cachedData = this.childDetailTemplates.get(rowData.detailsData);\n            const rowID = this.primaryKey ? rowData.detailsData[this.primaryKey] : rowData.detailsData;\n            if (cachedData) {\n                const view = cachedData.view;\n                const tmlpOutlet = cachedData.owner;\n                return {\n                    $implicit: rowData.detailsData,\n                    moveView: view,\n                    owner: tmlpOutlet,\n                    index: this.dataView.indexOf(rowData),\n                    templateID: {\n                        type: 'detailRow',\n                        id: rowID\n                    }\n                };\n            } else {\n                // child rows contain unique grids, hence should have unique templates\n                return {\n                    $implicit: rowData.detailsData,\n                    templateID: {\n                        type: 'detailRow',\n                        id: rowID\n                    },\n                    index: this.dataView.indexOf(rowData)\n                };\n            }\n        }\n        return {\n            $implicit: this.isGhostRecord(rowData) ? rowData.recordRef : rowData,\n            index: this.getDataViewIndex(rowIndex, pinned),\n            templateID: {\n                type: this.isGroupByRecord(rowData) ? 'groupRow' : this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n                id: null\n            },\n            disabled: this.isGhostRecord(rowData)\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public viewCreatedHandler(args) {\n        if (args.context.templateID.type === 'detailRow') {\n            this.childDetailTemplates.set(args.context.$implicit, args);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public viewMovedHandler(args) {\n        if (args.context.templateID.type === 'detailRow') {\n            // view was moved, update owner in cache\n            const key = args.context.$implicit;\n            const cachedData = this.childDetailTemplates.get(key);\n            cachedData.owner = args.owner;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get iconTemplate() {\n        if (this.groupsExpanded) {\n            return this.headerExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n        } else {\n            return this.headerCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngAfterContentInit() {\n        super.ngAfterContentInit();\n        if (this.allowFiltering && this.hasColumnLayouts) {\n            this.filterMode = FilterMode.excelStyleFilter;\n        }\n        if (this.groupTemplate) {\n            this._groupRowTemplate = this.groupTemplate.template;\n        }\n\n        if (this.detailTemplateDirective) {\n            this._detailTemplate = this.detailTemplateDirective;\n        }\n\n\n        if (this.hideGroupedColumns && this._columns && this.groupingExpressions) {\n            this._setGroupColsVisibility(this.hideGroupedColumns);\n        }\n        this._setupNavigationService();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n        this.verticalScrollContainer.beforeViewDestroyed.pipe(takeUntil(this.destroy$)).subscribe((view) => {\n            const rowData = view.context.$implicit;\n            if (this.isDetailRecord(rowData)) {\n                const cachedData = this.childDetailTemplates.get(rowData.detailsData);\n                if (cachedData) {\n                    const tmlpOutlet = cachedData.owner;\n                    tmlpOutlet._viewContainerRef.detach(0);\n                }\n            }\n        });\n\n        this.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions: ISortingExpression[]) => {\n            if (!this.groupingExpressions || !this.groupingExpressions.length) {\n                return;\n            }\n\n            sortingExpressions.forEach((sortExpr: ISortingExpression) => {\n                const fieldName = sortExpr.fieldName;\n                const groupingExpr = this.groupingExpressions.find(ex => ex.fieldName === fieldName);\n                if (groupingExpr) {\n                    groupingExpr.dir = sortExpr.dir;\n                }\n            });\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngOnInit() {\n        super.ngOnInit();\n        this.trackChanges = (_, rec) => (rec?.detailsData !== undefined ? rec.detailsData : rec);\n        this.groupingDone.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n            this.crudService.endEdit(false);\n            this.summaryService.updateSummaryCache(args);\n            this._headerFeaturesWidth = NaN;\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngDoCheck(): void {\n        if (this.groupingDiffer && this._columns && !this.hasColumnLayouts) {\n            const changes = this.groupingDiffer.diff(this.groupingExpressions);\n            if (changes && this._columns.length > 0) {\n                changes.forEachAddedItem((rec) => {\n                    const col = this.getColumnByName(rec.item.fieldName);\n                    if (col) {\n                        col.hidden = true;\n                    }\n                });\n                changes.forEachRemovedItem((rec) => {\n                    const col = this.getColumnByName(rec.item.fieldName);\n                    col.hidden = false;\n                });\n            }\n        }\n        super.ngDoCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataLoading(event) {\n        this.dataPreLoad.emit(event);\n    }\n\n    /**\n     *\n     * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public override getSelectedData(formatters = false, headers = false): any[] {\n        if (this.groupingExpressions.length || this.hasDetails) {\n            const source = [];\n\n            const process = (record) => {\n                if (record.expression || record.summaries || this.isDetailRecord(record)) {\n                    source.push(null);\n                    return;\n                }\n                source.push(record);\n\n            };\n\n            this.dataView.forEach(process);\n            return this.extractDataFromSelection(source, formatters, headers);\n        } else {\n            return super.getSelectedData(formatters, headers);\n        }\n    }\n\n    /**\n     * Returns the `IgxGridRow` by index.\n     *\n     * @example\n     * ```typescript\n     * const myRow = grid.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByIndex(index: number): RowType {\n        let row: RowType;\n        if (index < 0) {\n            return undefined;\n        }\n        if (this.dataView.length >= this.virtualizationState.startIndex + this.virtualizationState.chunkSize) {\n            row = this.createRow(index);\n        } else {\n            if (!(index < this.virtualizationState.startIndex) && !(index > this.virtualizationState.startIndex + this.virtualizationState.chunkSize)) {\n                row = this.createRow(index);\n            }\n        }\n\n        if (this.pagingMode === 1 && this.page !== 0) {\n            row.index = index + this.perPage * this.page;\n        }\n        return row;\n    }\n\n    /**\n     * Returns `IgxGridRow` object by the specified primary key.\n     *\n     * @remarks\n     * Requires that the `primaryKey` property is set.\n     * @example\n     * ```typescript\n     * const myRow = this.grid1.getRowByKey(\"cell5\");\n     * ```\n     * @param keyValue\n     */\n    public getRowByKey(key: any): RowType {\n        const rec = this.filteredSortedData ? this.primaryKey ?\n            this.filteredSortedData.find(record => record[this.primaryKey] === key) :\n            this.filteredSortedData.find(record => record === key) : undefined;\n        const index = this.dataView.indexOf(rec);\n        if (index < 0 || index > this.dataView.length) {\n            return undefined;\n        }\n\n        return new IgxGridRow(this, index, rec);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public allRows(): RowType[] {\n        return this.dataView.map((rec, index) => {\n            this.pagingMode === 1 && this.page !== 0 ? index = index + this.perPage * this.page : index = this.dataRowList.first.index + index;\n            return this.createRow(index);\n        });\n    }\n\n    /**\n     * Returns the collection of `IgxGridRow`s for current page.\n     *\n     * @hidden @internal\n     */\n    public dataRows(): RowType[] {\n        return this.allRows().filter(row => row instanceof IgxGridRow);\n    }\n\n    /**\n     * Returns an array of the selected `IgxGridCell`s.\n     *\n     * @example\n     * ```typescript\n     * const selectedCells = this.grid.selectedCells;\n     * ```\n     */\n    public get selectedCells(): CellType[] {\n        return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n            .reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @example\n     * ```typescript\n     * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n     * ```\n     * @param rowIndex\n     * @param columnField\n     */\n    public getCellByColumn(rowIndex: number, columnField: string): CellType {\n        const row = this.getRowByIndex(rowIndex);\n        const column = this._columns.find((col) => col.field === columnField);\n        if (row && row instanceof IgxGridRow && !row.data?.detailsData && column) {\n            if (this.pagingMode === 1 && this.page !== 0) {\n                row.index = rowIndex + this.perPage * this.page;\n            }\n            return new IgxGridCell(this, row.index, column);\n        }\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @remarks\n     * Requires that the primaryKey property is set.\n     * @example\n     * ```typescript\n     * grid.getCellByKey(1, 'index');\n     * ```\n     * @param rowSelector match any rowID\n     * @param columnField\n     */\n    public getCellByKey(rowSelector: any, columnField: string): CellType {\n        const row = this.getRowByKey(rowSelector);\n        const column = this._columns.find((col) => col.field === columnField);\n        if (row && column) {\n            return new IgxGridCell(this, row.index, column);\n        }\n    }\n\n    public override pinRow(rowID: any, index?: number): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.pinRow(rowID, index, row);\n    }\n\n    public override unpinRow(rowID: any): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.unpinRow(rowID, row);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public createRow(index: number, data?: any): RowType {\n        let row: RowType;\n\n        const dataIndex = this._getDataViewIndex(index);\n        const rec = data ?? this.dataView[dataIndex];\n\n        if (rec && this.isGroupByRecord(rec)) {\n            row = new IgxGroupByRow(this, index, rec);\n        }\n        if (rec && this.isSummaryRow(rec)) {\n            row = new IgxSummaryRow(this, index, rec.summaries);\n        }\n        // if found record is a no a groupby or summary row, return IgxGridRow instance\n        if (!row && rec) {\n            row = new IgxGridRow(this, index, rec);\n        }\n\n        return row;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override get defaultTargetBodyHeight(): number {\n        const allItems = this.totalItemCount || this.dataLength;\n        return this.renderedActualRowHeight * Math.min(this._defaultTargetRecordNumber,\n            this.paginator ? Math.min(allItems, this.perPage) : allItems);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getGroupAreaHeight(): number {\n        return this.groupArea ? this.getComputedHeight(this.groupArea.nativeElement) : 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override onColumnsAddedOrRemoved() {\n        // update grouping states\n        this.groupablePipeTrigger++;\n        if (this.groupingExpressions && this.hideGroupedColumns) {\n            this._setGroupColsVisibility(this.hideGroupedColumns);\n        }\n        super.onColumnsAddedOrRemoved();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override scrollTo(row: any | number, column: any | number): void {\n        if (this.groupingExpressions && this.groupingExpressions.length\n            && typeof (row) !== 'number') {\n            const rowIndex = this.groupingResult.indexOf(row);\n            const groupByRecord = this.groupingMetadata[rowIndex];\n            if (groupByRecord) {\n                this._fullyExpandGroup(groupByRecord);\n            }\n        }\n\n        super.scrollTo(row, column, this.groupingFlatResult);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected _getStateForGroupRow(groupRow: IGroupByRecord): IGroupByExpandState {\n        return this._gridAPI.groupBy_get_expanded_for_group(groupRow);\n    }\n\n    /**\n     * @hidden\n     */\n    protected _toggleGroup(groupRow: IGroupByRecord) {\n        this._gridAPI.groupBy_toggle_group(groupRow);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected _fullyExpandGroup(groupRow: IGroupByRecord) {\n        this._gridAPI.groupBy_fully_expand_group(groupRow);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected _applyGrouping() {\n        this._gridAPI.sort_groupBy_multiple(this._groupingExpressions);\n    }\n\n    private _setupNavigationService() {\n        if (this.hasColumnLayouts) {\n            this.navigation = new IgxGridMRLNavigationService(this.platform);\n            this.navigation.grid = this;\n        }\n    }\n\n    private checkIfNoColumnField(expression: IGroupingExpression | Array<IGroupingExpression> | any): boolean {\n        if (expression instanceof Array) {\n            for (const singleExpression of expression) {\n                if (!singleExpression.fieldName) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        return !expression.fieldName;\n    }\n\n    private _setGroupColsVisibility(value) {\n        if (this._columns.length > 0 && !this.hasColumnLayouts) {\n            this.groupingExpressions.forEach((expr) => {\n                const col = this.getColumnByName(expr.fieldName);\n                col.hidden = value;\n            });\n        }\n    }\n\n    private stringifyCallback(key: string, val: any) {\n        // Workaround for Blazor, since its wrappers inject this externalObject that cannot serialize.\n        if (key === 'externalObject') {\n            return undefined;\n        }\n        return val;\n    }\n}\n","<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n@if (showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)) {\n    <igx-grid-group-by-area #groupArea [style.flex-basis.px]=\"outerWidth\"\n        [grid]=\"this\"\n        [expressions]=\"groupingExpressions\"\n        [sortingExpressions]=\"sortingExpressions\"\n        [dropAreaTemplate]=\"dropAreaTemplate\"\n        [dropAreaMessage]=\"dropAreaMessage\"\n    >\n    </igx-grid-group-by-area>\n}\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n    [grid]=\"this\"\n    [hasMRL]=\"hasColumnLayouts\"\n    [activeDescendant]=\"activeDescendant\"\n    [width]=\"calcWidth\"\n    [pinnedColumnCollection]=\"pinnedColumns\"\n    [unpinnedColumnCollection]=\"unpinnedColumns\"\n    (keydown.meta.c)=\"copyHandler($event)\"\n    (keydown.control.c)=\"copyHandler($event)\"\n    (copy)=\"copyHandler($event)\"\n    (keydown)=\"navigation.headerNavigation($event)\"\n    (scroll)=\"preventHeaderScroll($event)\"\n    (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n    <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? null : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n        (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n        (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n        [style.height.px]=\"totalHeight\" [style.width.px]=\"calcWidth || null\" #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]=\"pinnedWidth\"></span>\n        }\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n        </ng-container>\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; 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; 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]=\"data\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            let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n            [igxForContainerSize]=\"calcHeight\"\n            [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n            [igxForTrackBy]=\"trackChanges\"\n            #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n            <ng-template\n                [igxTemplateOutlet]=\"getRowTemplate(rowData)\"\n                [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n                (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n                (viewCreated)=\"viewCreatedHandler($event)\"\n                (viewMoved)=\"viewMovedHandler($event)\">\n            </ng-template>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n        </ng-container>\n        <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\">\n            <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [disabled]=\"disabledRow\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts: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>\n            <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n            </igx-grid-row>\n        </ng-template>\n        <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n            <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n            </igx-grid-groupby-row>\n        </ng-template>\n        <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n            <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n                class=\"igx-grid__summaries--body\" #summaryRow>\n            </igx-grid-summary-row>\n        </ng-template>\n        <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n            <div detail=\"true\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)=\"detailsViewFocused(detailsContainer, rowIndex)\" #detailsContainer [attr.data-rowindex]=\"rowIndex\"\n                [ngClass]=\"{\n                'igx-grid__tr-container': true,\n                'igx-grid__tr-container--active': isDetailActive(rowIndex)\n            }\">\n                <div class=\"igx-grid__hierarchical-indent\">\n                    @if (this.groupingExpressions.length > 0) {\n                        <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n                    }\n                    <ng-template\n                        [ngTemplateOutlet]=\"detailTemplate\"\n                        [ngTemplateOutletContext]=\"getDetailsContext(rowData, rowIndex)\">\n                    </ng-template>\n                </div>\n            </div>\n        </ng-template>\n\n        <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n        <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n        <igc-trial-watermark></igc-trial-watermark>\n    </div>\n    <div igxToggle #loadingOverlay>\n        @if (shouldOverlayLoading) {\n            <igx-circular-bar [indeterminate]=\"true\">\n            </igx-circular-bar>\n        }\n    </div>\n    @if (moving && columnInDrag) {\n        <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n            id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n    }\n    <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n        <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n        <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n            <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n        </div>\n        <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n    </div>\n\n    <div class=\"igx-grid__addrow-snackbar\">\n        <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n    </div>\n\n    <div #igxBodyOverlayOutlet=\"overlay-outlet\" igxOverlayOutlet></div>\n    <div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n    <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n        @if (hasSummarizedColumns && rootSummariesEnabled) {\n            <igx-grid-summary-row [style.width.px]=\"calcWidth\"  [style.height.px]=\"summaryRowHeight\"\n                [gridID]=\"id\" role=\"row\"\n                [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n                class=\"igx-grid__summaries\" #summaryRow>\n            </igx-grid-summary-row>\n        }\n        <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n            [style.width.px]=\"scrollSize\"></div>\n    </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n    <div class=\"igx-grid__scroll-start\" [style.width.px]=\"isPinningToStart ? pinnedWidth : headerFeaturesWidth\" [style.min-width.px]=\"isPinningToStart ? pinnedWidth : headerFeaturesWidth\"></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]=\"pinnedWidth\" [style.min-width.px]=\"pinnedWidth\" [hidden]=\"pinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n    <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n    <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyFilteredGridMessage}}</span>\n        @if (showAddButton) {\n            <span>\n                <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n            </span>\n        }\n    </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyGridMessage}}</span>\n        @if (showAddButton) {\n            <span>\n                <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n            </span>\n        }\n    </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n    <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n        {{resourceStrings.igx_grid_add_row_label}}\n    </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n    <div class=\"igx-grid__loading\">\n        <igx-circular-bar [indeterminate]=\"true\">\n        </igx-circular-bar>\n    </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n    <igx-icon\n        family=\"default\"\n        name=\"unfold_less\"\n        role=\"button\"\n        [ngClass]=\"{\n            'igx-grid__group-expand-btn': true,\n            'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n        }\"\n    >\n    </igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n    <igx-icon\n        family=\"default\"\n        name=\"unfold_more\"\n        role=\"button\"\n        [ngClass]=\"{\n            'igx-grid__group-expand-btn': true,\n            'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n        }\"\n    ></igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n    <div igxToggle #rowEditingOverlay>\n        <div [className]=\"bannerClass\">\n            <ng-container\n                *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultRowEditText>\n    {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n    <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n    <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n    <div class=\"igx-banner__message\">\n        <span class=\"igx-banner__text\">\n            <ng-container\n                *ngTemplateOutlet=\"this.crudService.row?.getClassName() === 'IgxAddRow' ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n                context: { $implicit: this.crudService.row?.getClassName() !== 'IgxAddRow' ? 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;\">\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    </div>\n}\n","import { Injectable } from '@angular/core';\nimport { ColumnType } from '../../common/grid.interface';\nimport { PivotRowHeaderGroupType } from '../../pivot-grid/pivot-grid.interface';\nimport { IgxColumnResizingService } from '../resizing.service';\n\n\n/**\n * @hidden\n * @internal\n */\n@Injectable()\nexport class IgxPivotColumnResizingService extends IgxColumnResizingService {\n    /**\n     * @hidden\n     */\n    public rowHeaderGroup: PivotRowHeaderGroupType;\n\n    /**\n     * @hidden\n     */\n    public override getColumnHeaderRenderedWidth() {\n        return this.rowHeaderGroup.header.nativeElement.getBoundingClientRect().width;\n    }\n\n    protected override _handlePixelResize(diff: number, column: ColumnType) {\n        const rowDim = this.rowHeaderGroup.parent.rootDimension;\n        if (!rowDim) return;\n\n        const currentColWidth = parseFloat(column.width);\n        const colMinWidth = column.minWidthPx;\n        const colMaxWidth = column.maxWidthPx;\n        let newWidth = currentColWidth;\n        if (currentColWidth + diff < colMinWidth) {\n            newWidth = colMinWidth;\n        } else if (colMaxWidth && (currentColWidth + diff > colMaxWidth)) {\n            newWidth = colMaxWidth;\n        } else {\n            newWidth = (currentColWidth + diff);\n        }\n\n        this.rowHeaderGroup.grid.resizeRowDimensionPixels(rowDim, newWidth);\n    }\n\n    protected override _handlePercentageResize() { }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Inject } from '@angular/core';\n\nimport { GridType, IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\n\nimport { IgxGridHeaderComponent } from '../headers/grid-header.component';\nimport { IgxPivotColumnResizingService } from '../resizing/pivot-grid/pivot-resizing.service';\nimport { SortingIndexPipe } from '../headers/pipes';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { ISortingExpression, SortingDirection } from '../../data-operations/sorting-strategy';\nimport { takeUntil } from 'rxjs/operators';\nimport { PivotRowLayoutType } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-row-dimension-header',\n    templateUrl: '../headers/grid-header.component.html',\n    imports: [IgxIconComponent, NgTemplateOutlet, NgClass, SortingIndexPipe]\n})\nexport class IgxPivotRowDimensionHeaderComponent extends IgxGridHeaderComponent implements AfterViewInit {\n    private pivotGrid: PivotGridType;\n\n    constructor(\n        @Inject(IGX_GRID_BASE) grid: GridType,\n        public override colResizingService: IgxPivotColumnResizingService,\n        cdr: ChangeDetectorRef,\n        public refInstance: ElementRef<HTMLElement>\n    ) {\n        super(grid, colResizingService, cdr, refInstance);\n\n        this.pivotGrid = this.grid as PivotGridType;\n        this.pivotGrid.dimensionsSortingExpressionsChange\n            .pipe(takeUntil(this._destroy$))\n            .subscribe((_: ISortingExpression[]) => this.setSortIndex());\n    }\n\n    public ngAfterViewInit(): void {\n        this.setSortIndex();\n    }\n\n    @HostListener('click', ['$event'])\n    public override onClick(event: MouseEvent) {\n        event.preventDefault();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get selectable(): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onSortingIconClick(event) {\n        event.stopPropagation();\n        const dim = this.pivotGrid.getRowDimensionByName(this.column.field);\n        const startDirection = dim.sortDirection || SortingDirection.None;\n        const direction = startDirection + 1 > SortingDirection.Desc ?\n            SortingDirection.None : startDirection + 1;\n        this.pivotGrid.sortDimension(dim, direction);\n    }\n\n    protected override getSortDirection() {\n        const dim = this.pivotGrid.getRowDimensionByName(this.column.field);\n        this.sortDirection = dim?.sortDirection || SortingDirection.None;\n    }\n\n    protected setSortIndex() {\n        if (this.column.sortable && this.sortIconContainer) {\n            const visibleRows = this.pivotGrid.pivotUI.rowLayout === PivotRowLayoutType.Vertical ?\n            this.pivotGrid.pivotConfiguration.rows :\n            PivotUtil.flatten(this.pivotGrid.pivotConfiguration.rows);\n            const dimIndex = visibleRows.findIndex((target) => target.memberName === this.column.field);\n            const dim = visibleRows[dimIndex];\n            let newSortIndex = -1;\n            if (dim.sortDirection) {\n                let priorSortedDims = 0;\n                for (let i = 0; i < dimIndex; i++) {\n                    if (visibleRows[i].sortDirection) {\n                        priorSortedDims++;\n                    }\n                }\n\n                // Sort index starts from 1.\n                newSortIndex = priorSortedDims + 1;\n            }\n\n            this.sortIconContainer.nativeElement.setAttribute(\"data-sortIndex\", newSortIndex >= 0 ? newSortIndex : \"\");\n        }\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    Input,\n    NgZone\n} from '@angular/core';\nimport { ColumnType } from '../../common/grid.interface';\nimport { PivotRowHeaderGroupType } from '../../pivot-grid/pivot-grid.interface';\nimport { IgxPivotColumnResizingService } from './pivot-resizing.service'\nimport { IgxResizeHandleDirective } from '../resize-handle.directive';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxPivotResizeHandle]',\n    standalone: true\n})\nexport class IgxPivotResizeHandleDirective extends IgxResizeHandleDirective {\n\n    /**\n     * @hidden\n     */\n    @Input('igxPivotResizeHandle')\n    public set pivotColumn(value: ColumnType) {\n        this.column = value;\n    }\n\n    public get pivotColumn() {\n        return this.column;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input('igxPivotResizeHandleHeader')\n    public rowHeaderGroup: PivotRowHeaderGroupType;\n\n    constructor(zone: NgZone,\n        element: ElementRef,\n        public override colResizingService: IgxPivotColumnResizingService) {\n        super(zone, element, colResizingService);\n    }\n\n    /**\n     * @hidden\n     */\n    public override onDoubleClick() {\n        this._dblClick = true;\n        this.initResizeService();\n        this.rowHeaderGroup.grid.autoSizeRowDimension(this.rowHeaderGroup.parent.rootDimension);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override initResizeService(event = null) {\n        super.initResizeService(event);\n        this.colResizingService.rowHeaderGroup = this.rowHeaderGroup;\n    }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, Inject, Input, NgZone, ViewChild } from '@angular/core';\nimport { PlatformUtil } from '../../core/utils';\nimport { IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';\nimport { IgxPivotColumnResizingService } from '../resizing/pivot-grid/pivot-resizing.service';\nimport { IPivotDimension, PivotRowHeaderGroupType } from './pivot-grid.interface';\nimport { IgxPivotRowDimensionHeaderComponent } from './pivot-row-dimension-header.component';\nimport { IgxHeaderGroupStylePipe } from '../headers/pipes';\nimport { IgxPivotResizeHandleDirective } from '../resizing/pivot-grid/pivot-resize-handle.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-row-header-group',\n    templateUrl: './pivot-row-dimension-header-group.component.html',\n    imports: [IgxIconComponent, IgxPivotRowDimensionHeaderComponent, NgClass, NgStyle, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxPivotResizeHandleDirective, IgxHeaderGroupStylePipe]\n})\nexport class IgxPivotRowHeaderGroupComponent extends IgxGridHeaderGroupComponent implements PivotRowHeaderGroupType {\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.user-select')\n    public userSelect = 'none';\n\n    constructor(private cdRef: ChangeDetectorRef,\n        @Inject(IGX_GRID_BASE) public override grid: PivotGridType,\n        private elementRef: ElementRef<HTMLElement>,\n        public override colResizingService: IgxPivotColumnResizingService,\n        filteringService: IgxFilteringService,\n        platform: PlatformUtil,\n        protected zone: NgZone) {\n        super(cdRef, grid, elementRef, colResizingService, filteringService, platform);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public rowIndex: number;\n\n    @Input()\n    public set dimWidth(value: number) {\n        this.column.width = value + 'px';\n    }\n    public get dimWidth() {\n        return parseFloat(this.column.width);\n    }\n\n    public get parent() {\n        return this;\n    };\n\n    @Input()\n    public rootDimension: IPivotDimension;\n\n    @ViewChild(IgxPivotRowDimensionHeaderComponent)\n    public override header: IgxPivotRowDimensionHeaderComponent;\n\n    @HostBinding('attr.id')\n    public override get headerID() {\n        return `${this.grid.id}_-2_${this.rootDimension.memberName}_${this.visibleIndex}`;\n    }\n\n    @HostBinding('attr.title')\n    public override get title() {\n        return this.rootDimension.displayName;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get visibleIndex(): number {\n        const rows = this.grid.visibleRowDimensions;\n        return rows.indexOf(this.rootDimension);\n    }\n\n    @HostBinding('class.igx-grid-th--active')\n    public override get active() {\n        const nav = this.grid.navigation;\n        const node = nav.activeNode;\n        return node && !this.column.columnGroup ?\n            nav.isRowDimensionHeaderActive &&\n            node.row === this.rowIndex &&\n            node.column === this.visibleIndex :\n            false;\n    }\n\n    @HostBinding('class.asc')\n    public get sortAscendingStyle() {\n        return this.rootDimension.sortDirection === SortingDirection.Asc;\n    }\n\n    @HostBinding('class.desc')\n    public get sortDescendingStyle() {\n        return this.rootDimension.sortDirection === SortingDirection.Desc;\n    }\n\n    @HostBinding('class.igx-grid-th--sortable')\n    public get sortableStyle() {\n        return true;\n    }\n\n    @HostBinding('class.igx-grid-th--sorted')\n    public get sortedStyle() {\n        return this.rootDimension.sortDirection !== undefined && this.rootDimension.sortDirection !== SortingDirection.None;\n    }\n\n    protected override get activeNode() {\n        this.grid.navigation.isRowDimensionHeaderActive = true;\n        this.grid.navigation.isRowHeaderActive = false;\n        return {\n            row: this.rowIndex, column: this.visibleIndex, level: null,\n            mchCache: {\n                level: 0,\n                visibleIndex:  this.visibleIndex\n            },\n            layout: null\n        };\n    }\n\n    public override activate() {\n        this.grid.navigation.setActiveNode(this.activeNode);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override pointerdown(_event: PointerEvent): void {\n        this.activate();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onMouseDown(_event: MouseEvent): void {\n        this.activate();\n    }\n\n    public override get selectable(): boolean {\n        return false;\n    }\n}\n","<ng-template #defaultColumn>\n    <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n    <igx-icon\n        family=\"default\"\n        [name]=\"column.expanded ? 'tree_collapse' : 'tree_expand'\">\n    </igx-icon>\n</ng-template>\n\n@if (!column.columnGroup) {\n    @if (grid.hasMovableColumns) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <igx-pivot-row-dimension-header\n        role=\"columnheader\"\n        class=\"igx-grid-th--fw\"\n        [id]=\"grid.id + '_' + column.field\"\n        [ngClass]=\"column.headerClasses\"\n        [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n        [igxColumnMovingDrag]=\"column\"\n        [ghostHost]=\"grid.outlet.nativeElement\"\n        [attr.droppable]=\"true\"\n        (pointerdown)=\"pointerdown($event)\"\n        [igxColumnMovingDrop]=\"column\"\n        [column]=\"column\"\n        (keydown)=\"grid.navigation.headerNavigation($event)\"\n    >\n    </igx-pivot-row-dimension-header>\n    @if (!column.columnGroup && column.resizable) {\n        <span class=\"igx-grid-th__resize-handle\"\n            [igxPivotResizeHandle]=\"column\"\n            [igxPivotResizeHandleHeader]=\"this\"\n            [attr.draggable]=\"false\"\n            [style.cursor]=\"colResizingService.resizeCursor\">\n        </span>\n    }\n    @if (grid.hasMovableColumns) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    Inject,\n    OnChanges,\n    QueryList,\n    Renderer2,\n    ViewChild,\n    SimpleChanges,\n    ViewChildren\n} from '@angular/core';\nimport { IBaseChipEventArgs, IgxChipComponent } from '../../chips/chip.component';\nimport { IgxChipsAreaComponent } from '../../chips/chips-area.component';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { ISelectionEventArgs } from '../../drop-down/drop-down.common';\nimport { IgxDropDownComponent } from '../../drop-down/drop-down.component';\nimport { AbsoluteScrollStrategy, AutoPositionStrategy, OverlaySettings, PositionSettings, VerticalAlignment } from '../../services/public_api';\nimport { ColumnType, IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';\nimport { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';\nimport { DropPosition } from '../moving/moving.service';\nimport { IPivotAggregator, IPivotDimension, IPivotValue, PivotDimensionType } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\nimport { IgxGridTopLevelColumns } from '../common/pipes';\nimport { IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe } from '../headers/pipes';\nimport { IgxExcelStyleSearchComponent } from '../filtering/excel-style/excel-style-search.component';\nimport { IgxGridExcelStyleFilteringComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective } from '../filtering/excel-style/excel-style-filtering.component';\nimport { IgxDropDownItemComponent } from '../../drop-down/drop-down-item.component';\nimport { IgxDropDownItemNavigationDirective } from '../../drop-down/drop-down-navigation.directive';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxBadgeComponent } from '../../badge/badge.component';\nimport { IgxPrefixDirective } from '../../directives/prefix/prefix.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxDropDirective } from '../../directives/drag-drop/drag-drop.directive';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport { IgxPivotRowHeaderGroupComponent } from './pivot-row-header-group.component';\nimport { IgxPivotRowDimensionHeaderGroupComponent } from './pivot-row-dimension-header-group.component';\n\n/**\n *\n * For all intents & purposes treat this component as what a <thead> usually is in the default <table> element.\n *\n * This container holds the pivot grid header elements and their behavior/interactions.\n *\n * @hidden @internal\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-header-row',\n    templateUrl: './pivot-header-row.component.html',\n    imports: [IgxDropDirective, IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent,\n        IgxPrefixDirective, IgxBadgeComponent, IgxSuffixDirective, IgxDropDownItemNavigationDirective,\n        NgTemplateOutlet, IgxGridHeaderGroupComponent, NgClass, NgStyle, IgxGridForOfDirective,\n        IgxDropDownComponent, IgxDropDownItemComponent, IgxGridExcelStyleFilteringComponent,\n        IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective,\n        IgxExcelStyleSearchComponent, IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe, IgxGridTopLevelColumns,\n        IgxPivotRowHeaderGroupComponent]\n})\nexport class IgxPivotHeaderRowComponent extends IgxGridHeaderRowComponent implements OnChanges {\n    public aggregateList: IPivotAggregator[] = [];\n\n    public value: IPivotValue;\n    public filterDropdownDimensions: Set<any> = new Set<any>();\n    public filterAreaDimensions: Set<any> = new Set<any>();\n    private _dropPos = DropPosition.AfterDropTarget;\n    private valueData: Map<string, IPivotAggregator[]>;\n    private _subMenuPositionSettings: PositionSettings = {\n        verticalStartPoint: VerticalAlignment.Bottom,\n        closeAnimation: undefined\n    };\n    private _subMenuOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new AutoPositionStrategy(this._subMenuPositionSettings),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('esf') public esf: any;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('filterAreaHidden', { static: false }) public filterArea;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('filterIcon') public filtersButton;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('dropdownChips') public dropdownChips;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('pivotFilterContainer') public pivotFilterContainer;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('pivotRowContainer') public pivotRowContainer;\n\n    /**\n    * @hidden\n    * @internal\n    */\n    @ViewChildren('notifyChip')\n    public notificationChips: QueryList<IgxChipComponent>;\n\n    /**\n    * @hidden\n    * @internal\n    * The virtualized part of the header row containing the unpinned header groups.\n    */\n    @ViewChildren('headerVirtualContainer', { read: IgxGridForOfDirective })\n    public headerContainers: QueryList<IgxGridForOfDirective<ColumnType, ColumnType[]>>;\n\n    /**\n    * @hidden\n    * @internal\n    */\n    @ViewChildren('rowDimensionHeaders')\n    public rowDimensionHeaders: QueryList<IgxPivotRowDimensionHeaderGroupComponent>;\n\n    public override get headerForOf() {\n        return this.headerContainers?.last;\n    }\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public override grid: PivotGridType,\n        ref: ElementRef<HTMLElement>,\n        cdr: ChangeDetectorRef,\n        protected renderer: Renderer2,\n    ) {\n        super(ref, cdr);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    * Default is a single empty level since default depth is 1\n    */\n    public columnDimensionsByLevel: any[] = [[]];\n\n    /**\n    * @hidden @internal\n    */\n    public get isFiltersButton(): boolean {\n        let chipsWidth = 0;\n        this.filterDropdownDimensions.clear();\n        this.filterAreaDimensions.clear();\n        if (this.filterArea?.chipsList && this.filterArea.chipsList.length !== 0) {\n            const styles = getComputedStyle(this.pivotFilterContainer.nativeElement);\n            const containerPaddings = parseFloat(styles.paddingLeft) + parseFloat(styles.paddingRight);\n            chipsWidth += containerPaddings + (this.filtersButton && this.filterArea?.chipsList.length > 1 ? this.filtersButton.el.nativeElement.getBoundingClientRect().width : 0);\n            this.filterArea.chipsList.forEach(chip => {\n                const dim = this.grid.filterDimensions.find(x => x.memberName === chip.id);\n                if (dim) {\n                    // 8 px margin between chips\n                    const currentChipWidth = chip.nativeElement.getBoundingClientRect().width + 8;\n                    if (chipsWidth + currentChipWidth < this.grid.pivotRowWidths) {\n                        this.filterAreaDimensions.add(dim);\n                    } else {\n                        this.filterDropdownDimensions.add(dim);\n                    }\n                    chipsWidth += currentChipWidth;\n                }\n            });\n            return this.filterDropdownDimensions.size > 0;\n        }\n        return false;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public get totalDepth() {\n        const columnDimensions = this.grid.columnDimensions;\n        if (columnDimensions.length === 0) {\n            return 1;\n        }\n        let totalDepth = columnDimensions.map(x => PivotUtil.getDimensionDepth(x) + 1).reduce((acc, val) => acc + val);\n        if (this.grid.hasMultipleValues) {\n            totalDepth += 1;\n        }\n        return totalDepth;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public get maxContainerHeight() {\n        return this.totalDepth * this.grid.renderedRowHeight;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public calcHeight(col: ColumnType, index: number) {\n        return !col.columnGroup && col.level < this.totalDepth && col.level === index ? (this.totalDepth - col.level) * this.grid.rowHeight : this.grid.rowHeight;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public isDuplicateOfExistingParent(col: ColumnType, lvl: number) {\n        const parentCollection = lvl > 0 ? this.columnDimensionsByLevel[lvl - 1] : [];\n        const duplicate = parentCollection.indexOf(col) !== -1;\n\n        return duplicate;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public isMultiRow(col: ColumnType, lvl: number) {\n        const isLeaf = !col.columnGroup;\n        return isLeaf && lvl !== this.totalDepth - 1;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public populateColumnDimensionsByLevel() {\n        const res = [];\n        for (let i = 0; i < this.totalDepth; i++) {\n            res[i] = [];\n        }\n        const cols = this.unpinnedColumnCollection;\n        // populate column dimension matrix recursively\n        this.populateDimensionRecursively(cols.filter(x => x.level === 0), 0, res);\n        this.columnDimensionsByLevel = res;\n    }\n\n    protected populateDimensionRecursively(currentLevelColumns: ColumnType[], level = 0, res: any[]) {\n        currentLevelColumns.forEach(col => {\n            if (res[level]) {\n                res[level].push(col);\n                if (col.columnGroup && col.children.length > 0) {\n                    const visibleColumns = col.children.toArray().filter(x => !x.hidden);\n                    this.populateDimensionRecursively(visibleColumns, level + 1, res);\n                } else if (level < this.totalDepth - 1) {\n                    for (let i = level + 1; i <= this.totalDepth - 1; i++) {\n                        res[i].push(col);\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.unpinnedColumnCollection) {\n            this.populateColumnDimensionsByLevel();\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onDimDragStart(event, area) {\n        this.cdr.detectChanges();\n        for (const chip of this.notificationChips) {\n            const parent = chip.nativeElement.parentElement;\n            if (area.chipsList.toArray().indexOf(chip) === -1 &&\n                parent.children.length > 0 &&\n                parent.children.item(0).id !== 'empty') {\n                chip.nativeElement.hidden = false;\n                parent.parentElement.scrollTo({ left: chip.nativeElement.offsetLeft });\n            }\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onDimDragEnd() {\n        for (const chip of this.notificationChips) {\n            chip.nativeElement.hidden = true;\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public getAreaHeight(area: IgxChipsAreaComponent) {\n        const chips = area.chipsList;\n        return chips && chips.length > 0 ? chips.first.nativeElement.offsetHeight : 0;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public rowRemoved(event: IBaseChipEventArgs) {\n        const row = this.grid.pivotConfiguration.rows.find(x => x.memberName === event.owner.id);\n        this.grid.toggleDimension(row);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public columnRemoved(event: IBaseChipEventArgs) {\n        const col = this.grid.pivotConfiguration.columns.find(x => x.memberName === event.owner.id);\n        this.grid.toggleDimension(col);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public valueRemoved(event: IBaseChipEventArgs) {\n        const value = this.grid.pivotConfiguration.values.find(x => x.member === event.owner.id || x.displayName === event.owner.id);\n        this.grid.toggleValue(value);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public filterRemoved(event: IBaseChipEventArgs) {\n        const filter = this.grid.pivotConfiguration.filters.find(x => x.memberName === event.owner.id);\n        this.grid.toggleDimension(filter);\n        if (this.filterDropdownDimensions.size > 0) {\n            this.onFiltersAreaDropdownClick({ target: this.filtersButton.el.nativeElement }, undefined, false);\n        } else {\n            this.grid.filteringService.hideESF();\n        }\n    }\n\n    public onFiltersSelectionChanged(event?: IBaseChipEventArgs) {\n        this.dropdownChips.chipsList.forEach(chip => {\n            if (chip.id !== event.owner.id) {\n                chip.selected = false\n            }\n        });\n        this.onFiltersAreaDropdownClick({ target: this.filtersButton.el.nativeElement }, this.grid.filterDimensions.find(dim => dim.memberName === event.owner.id), false);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onFilteringIconPointerDown(event) {\n        event.stopPropagation();\n        event.preventDefault();\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onFilteringIconClick(event, dimension) {\n        event.stopPropagation();\n        event.preventDefault();\n        const dim = dimension;\n        const col = this.grid.dimensionDataColumns.find(x => x.field === dim.memberName || x.field === dim.member);\n        this.grid.filteringService.toggleFilterDropdown(event.target, col);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onSummaryClick(eventArgs, value: IPivotValue, dropdown: IgxDropDownComponent, chip: IgxChipComponent) {\n        this._subMenuOverlaySettings.target = eventArgs.currentTarget;\n        this.updateDropDown(value, dropdown, chip);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onFiltersAreaDropdownClick(event, dimension?, shouldReattach = true) {\n        const dim = dimension || this.filterDropdownDimensions.values().next().value;\n        const col = this.grid.dimensionDataColumns.find(x => x.field === dim.memberName || x.field === dim.member);\n        if (shouldReattach) {\n            this.dropdownChips.chipsList.forEach(chip => {\n                chip.selected = false\n            });\n            this.dropdownChips.chipsList.first.selected = true;\n        }\n        this.grid.filteringService.toggleFiltersESF(this.esf, event.target, col, shouldReattach);\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onAggregationChange(event: ISelectionEventArgs) {\n        if (!this.isSelected(event.newSelection.value)) {\n            this.value.aggregate = event.newSelection.value;\n            this.grid.pipeTrigger++;\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public isSelected(val: IPivotAggregator) {\n        return this.value.aggregate.key === val.key;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onChipSort(_event, dimension: IPivotDimension) {\n        if (dimension.sortable === undefined || dimension.sortable) {\n            const startDirection = dimension.sortDirection || SortingDirection.None;\n            const direction = startDirection + 1 > SortingDirection.Desc ?\n                SortingDirection.None : startDirection + 1;\n            this.grid.sortDimension(dimension, direction);\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onDimDragOver(event, dimension?: PivotDimensionType) {\n        if (!event.dragChip || !event.dragChip.data?.pivotArea) return;\n        const typeMismatch = dimension !== undefined ? this.grid.pivotConfiguration.values.find(x => x.member === event.dragChip.id\n            || x.displayName === event.dragChip.id) :\n            !this.grid.pivotConfiguration.values.find(x => x.member === event.dragChip.id || x.displayName === event.dragChip.id);\n        if (typeMismatch) {\n            // cannot drag between dimensions and value\n            return;\n        }\n        // if we are in the left half of the chip, drop on the left\n        // else drop on the right of the chip\n        const clientRect = event.owner.nativeElement.getBoundingClientRect();\n        const pos = clientRect.width / 2;\n\n        this._dropPos = event.originalEvent.offsetX > pos ? DropPosition.AfterDropTarget : DropPosition.BeforeDropTarget;\n        if (this._dropPos === DropPosition.AfterDropTarget) {\n            event.owner.nativeElement.previousElementSibling.style.visibility = 'hidden';\n            event.owner.nativeElement.nextElementSibling.style.visibility = '';\n        } else {\n            event.owner.nativeElement.nextElementSibling.style.visibility = 'hidden';\n            event.owner.nativeElement.previousElementSibling.style.visibility = '';\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onDimDragLeave(event) {\n        event.owner.nativeElement.previousElementSibling.style.visibility = 'hidden';\n        event.owner.nativeElement.nextElementSibling.style.visibility = 'hidden';\n        this._dropPos = DropPosition.AfterDropTarget;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onAreaDragLeave(event, area) {\n        const dataChips = area.chipsList.toArray().filter(x => this.notificationChips.toArray().indexOf(x) === -1);\n        dataChips.forEach(element => {\n            if (element.nativeElement.previousElementSibling) {\n                element.nativeElement.previousElementSibling.style.visibility = 'hidden';\n            }\n            if (element.nativeElement.nextElementSibling) {\n                element.nativeElement.nextElementSibling.style.visibility = 'hidden';\n            }\n        });\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onValueDrop(event, area) {\n        if (!(event.dragChip && event.dragChip.data?.pivotArea) && !(event.dragData?.chip && !!event.dragData.chip.data.pivotArea)) return;\n        //values can only be reordered\n        const values = this.grid.pivotConfiguration.values;\n        const dragId = event.dragChip?.id || event.dragData?.chip.id;\n        const chipsArray = area.chipsList.toArray();\n        let chipIndex = chipsArray.indexOf(event.owner) !== -1 ? chipsArray.indexOf(event.owner) : chipsArray.length;\n        chipIndex = this._dropPos === DropPosition.AfterDropTarget ? chipIndex + 1 : chipIndex;\n        const value = values.find(x => x.member === dragId || x.displayName === dragId);\n        if (value) {\n            const dragChipIndex = chipsArray.indexOf(event.dragChip || event.dragData.chip);\n            this.grid.moveValue(value, dragChipIndex >= chipIndex ? chipIndex : chipIndex - 1);\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public onDimDrop(event, area, dimensionType: PivotDimensionType) {\n        if (!(event.dragChip && event.dragChip.data?.pivotArea) && !(event.dragData?.chip && !!event.dragData.chip.data.pivotArea)) return;\n        const dragId = event.dragChip?.id || event.dragData?.chip.id;\n        const currentDim = this.grid.getDimensionsByType(dimensionType);\n        const chipsArray = area.chipsList.toArray();\n        const chip = chipsArray.find(x => x.id === dragId);\n        const isNewChip = chip === undefined;\n        const isReorder = event.owner.id !== undefined;\n        //const chipIndex = chipsArray.indexOf(event.owner) !== -1 ? chipsArray.indexOf(event.owner) : chipsArray.length;\n        const chipIndex = currentDim.findIndex(x => x.memberName === event.owner.id) !== -1 ?\n            currentDim.findIndex(x => x.memberName === event.owner.id) : currentDim.length;\n        const targetIndex = this._dropPos === DropPosition.AfterDropTarget ? chipIndex + 1 : chipIndex;\n        if (isNewChip) {\n            // chip moved from an external collection\n            const dim = this.grid.allDimensions.find(x => x && x.memberName === dragId);\n            if (!dim) {\n                // you have dragged something that is not a dimension\n                return;\n            }\n            this.grid.moveDimension(dim, dimensionType, targetIndex);\n        } else if (isReorder) {\n            // chip from same collection, reordered.\n            const newDim = currentDim.find(x => x.memberName === dragId);\n            const dragChipIndex = currentDim.findIndex(x => x.memberName === dragId);\n            this.grid.moveDimension(newDim, dimensionType, dragChipIndex > chipIndex ? targetIndex : targetIndex - 1);\n        }\n        this.grid.pipeTrigger++;\n        this.grid.dimensionsChange.emit({ dimensions: currentDim, dimensionCollectionType: dimensionType });\n        // clean states\n        this.onDimDragEnd();\n        this.onAreaDragLeave(event, area);\n    }\n\n    protected updateDropDown(value: IPivotValue, dropdown: IgxDropDownComponent, chip: IgxChipComponent) {\n        this.value = value;\n        dropdown.width = chip.nativeElement.clientWidth + 'px';\n        this.aggregateList = PivotUtil.getAggregateList(value, this.grid);\n        this.cdr.detectChanges();\n        dropdown.open(this._subMenuOverlaySettings);\n    }\n\n    protected getRowDimensionColumn(dim: IPivotDimension): ColumnType {\n        return this.grid.dimensionDataColumns ? this.grid.dimensionDataColumns.find((col) => col.field === dim.memberName) : null;\n    }\n}\n","<div>\n    <div class=\"igx-grid-thead__wrapper igx-grid-thead__wrapper--pivot\" role=\"row\" [style.width.px]=\"width\">\n        <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n            <div class='igx-grid__tr-pivot--filter-container'>\n                @if (grid.pivotUI.showConfiguration) {\n                    <div #pivotFilterContainer\n                         class=\"igx-grid__tr-pivot igx-grid__tr-pivot--filter\" [style.min-width.px]=\"grid.pivotRowWidths - 1\"\n                         [style.max-width.px]=\"grid.pivotRowWidths - 1\" (igxDragLeave)=\"onAreaDragLeave($event, filterArea)\"\n                         igxDrop (dropped)=\"onDimDrop($event, filterArea, 2)\" (pointerdown)=\"$event.preventDefault()\">\n                        <!-- Filter area -->\n                        <igx-chips-area #filterArea droppable='true'>\n                            @if (grid.filterDimensions.length === 0) {\n                                <span id='empty' igxDrop (dropped)=\"onDimDrop($event, filterArea, 2)\"\n                                  class='igx-grid__pivot-empty-chip-area'>{{grid.resourceStrings.igx_grid_pivot_empty_filter_drop_area}}</span>\n                            }\n                            @for (filter of this.filterAreaDimensions; track filter; let last = $last) {\n                                <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                  [style.height.px]='getAreaHeight(filterArea)'></span>\n                                <igx-chip [id]=\"filter.memberName\" [draggable]=\"true\" [data]=\"{ pivotArea: 'filter' }\"\n                                      [removable]=\"true\" (remove)=\"filterRemoved($event)\" (dragOver)=\"onDimDragOver($event, 2)\"\n                                      (dragLeave)=\"onDimDragLeave($event)\" (dragDrop)=\"onDimDrop($event, filterArea, 2)\"\n                                      (moveStart)='onDimDragStart($event, filterArea)' (moveEnd)='onDimDragEnd()'>\n                                    <igx-icon\n                                        family=\"default\"\n                                        name=\"filter_list\"\n                                        igxPrefix\n                                        (pointerdown)='onFilteringIconPointerDown($event)'\n                                        (click)='onFilteringIconClick($event, filter)'>\n                                    </igx-icon>\n                                    {{filter.displayName || filter.memberName}}\n                                </igx-chip>\n                                @if (last) {\n                                    <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                      [style.height.px]='getAreaHeight(filterArea)'></span>\n                                }\n                            }\n                            <igx-chip igxDrop (dragDrop)=\"onDimDrop($event, filterArea, 2)\" #notifyChip [hidden]='true'>\n                                {{grid.resourceStrings.igx_grid_pivot_filter_drop_chip}}\n                            </igx-chip>\n                        </igx-chips-area>\n                        @if (isFiltersButton && grid.filterDimensions.length !== 0) {\n                            <div class=\"igx-grid__pivot-filter-toggle\">\n                                <igx-icon\n                                    family=\"default\"\n                                    name=\"filter_list\"\n                                    #filterIcon\n                                    (pointerdown)='onFilteringIconPointerDown($event)'\n                                    (click)='onFiltersAreaDropdownClick($event)'>\n                                </igx-icon>\n                                <igx-badge value=\"{{this.filterDropdownDimensions.size}}\"></igx-badge>\n                            </div>\n                        }\n                    </div>\n                }\n                <div class='igx-grid__tr-pivot--drop-row-area'>\n                    @if (grid.pivotUI.showConfiguration && grid.pivotUI.showRowHeaders) {\n                        <div #pivotRowContainer [style.width.px]=\"grid.pivotRowWidths - 1\"\n                            class=\"igx-grid__tr-pivot igx-grid__tr-pivot--small-row-area\" igxDrop\n                            (igxDragLeave)=\"onAreaDragLeave($event, rowArea)\"\n                            (dropped)=\"onDimDrop($event, rowArea, 0)\">\n                            <igx-chips-area #rowArea droppable='true'>\n                                @if (grid.rowDimensions.length === 0) {\n                                    <span id='empty' igxDrop (dropped)=\"onDimDrop($event, rowArea, 0)\"\n                                        class='igx-grid__pivot-empty-chip-area'>{{grid.resourceStrings.igx_grid_pivot_empty_row_drop_area}}</span>\n                                }\n                                @for (row of grid.rowDimensions; track row.memberName; let last = $last) {\n                                    <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                    [style.height.px]='getAreaHeight(rowArea)'></span>\n                                    <igx-chip [draggable]=\"true\" [id]=\"row.memberName\" [data]=\"{ pivotArea: 'row' }\"\n                                            [removable]=\"true\" (remove)=\"rowRemoved($event)\" (dragLeave)=\"onDimDragLeave($event)\"\n                                            (dragDrop)=\"onDimDrop($event, rowArea, 0)\" (dragOver)=\"onDimDragOver($event, 0)\"\n                                            (moveStart)='onDimDragStart($event, rowArea)' (moveEnd)='onDimDragEnd()'\n                                            (click)=\"onChipSort($event, row)\">\n                                        <igx-icon igxPrefix family=\"default\" name=\"table_rows\"></igx-icon>\n                                        <igx-icon\n                                            family=\"default\"\n                                            name=\"filter_list\"\n                                            igxPrefix\n                                            (pointerdown)='onFilteringIconPointerDown($event)'\n                                            (click)='onFilteringIconClick($event, row)'>\n                                        </igx-icon>\n                                        {{ row.displayName || row.memberName}}\n                                        @if (row.sortDirection) {\n                                            <igx-icon\n                                                family=\"default\"\n                                                [name]=\"row.sortDirection < 2 ? 'sort_asc' : 'sort_desc'\"\n                                                igxSuffix>\n                                            </igx-icon>\n                                        }\n                                    </igx-chip>\n                                    @if (last) {\n                                        <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                        [style.height.px]='getAreaHeight(rowArea)'></span>\n                                    }\n                                }\n                                <igx-chip igxDrop (dragDrop)=\"onDimDrop($event, rowArea, 0)\" #notifyChip [hidden]='true'>\n                                    {{grid.resourceStrings.igx_grid_pivot_row_drop_chip}}\n                                </igx-chip>\n                            </igx-chips-area>\n                        </div>\n                    }\n                </div>\n            </div>\n\n            <div class=\"igx-grid__tr-pivot-group\">\n                @if (grid.pivotUI.showConfiguration) {\n                    <div #pivotColumnContainer class=\"igx-grid__tr-pivot\"\n                         (dropped)=\"onDimDrop($event, colArea, 1)\" igxDrop (igxDragLeave)=\"onAreaDragLeave($event, colArea)\">\n                        <!-- Columns area -->\n                        <igx-chips-area #colArea droppable='true'>\n                            @if (grid.columnDimensions.length === 0) {\n                                <span id='empty' (dropped)=\"onDimDrop($event, colArea, 1)\" igxDrop\n                                    class='igx-grid__pivot-empty-chip-area'>\n                                {{grid.resourceStrings.igx_grid_pivot_empty_column_drop_area}}</span>\n                            }\n                            @for (col of grid.columnDimensions; track col.memberName; let last = $last) {\n                                <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                  [style.height.px]='getAreaHeight(colArea)'></span>\n                                <igx-chip [draggable]=\"true\" [id]=\"col.memberName\" [data]=\"{ pivotArea: 'column' }\"\n                                      [removable]=\"true\" (remove)=\"columnRemoved($event)\" (dragOver)=\"onDimDragOver($event, 1)\"\n                                      (dragLeave)=\"onDimDragLeave($event)\" (dragDrop)=\"onDimDrop($event, colArea, 1)\"\n                                      (moveStart)='onDimDragStart($event, colArea)' (moveEnd)='onDimDragEnd()'\n                                      (click)=\"onChipSort($event, col)\">\n                                    <igx-icon\n                                        family=\"default\"\n                                        name=\"view_column\"\n                                        igxPrefix>\n                                    </igx-icon>\n                                    <igx-icon\n                                        family=\"default\"\n                                        name=\"filter_list\"\n                                        igxPrefix\n                                        (pointerdown)='onFilteringIconPointerDown($event)'\n                                        (click)='onFilteringIconClick($event, col)'>\n                                    </igx-icon>\n                                    {{col.displayName || col.memberName}}\n                                    @if (col.sortDirection) {\n                                        <igx-icon\n                                            family=\"default\"\n                                            [name]=\"col.sortDirection < 2 ? 'sort_asc' : 'sort_desc'\"\n                                            igxSuffix>\n                                        </igx-icon>\n                                    }\n                                </igx-chip>\n                                @if (last) {\n                                    <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                      [style.height.px]='getAreaHeight(colArea)'></span>\n                                }\n                            }\n                            <igx-chip igxDrop (dragDrop)=\"onDimDrop($event, colArea, 1)\" #notifyChip [hidden]='true'>\n                                {{grid.resourceStrings.igx_grid_pivot_column_drop_chip}}\n                            </igx-chip>\n                        </igx-chips-area>\n                    </div>\n                }\n\n                @if (grid.pivotUI.showConfiguration) {\n                    <div #pivotValueContainer class=\"igx-grid__tr-pivot\"\n                         (pointerdown)=\"$event.preventDefault()\" (dropped)=\"onValueDrop($event, valueArea)\" igxDrop\n                         (igxDragLeave)=\"onAreaDragLeave($event, valueArea)\">\n                        <!-- Value area -->\n                        <igx-chips-area #valueArea droppable='true'>\n                            @if (grid.values.length === 0) {\n                                <span id='empty' (dropped)=\"onValueDrop($event, valueArea)\" igxDrop\n                                class='igx-grid__pivot-empty-chip-area'>{{grid.resourceStrings.igx_grid_pivot_empty_value_drop_area}}</span>\n                            }\n                            @for (value of grid.values; track value.member; let last = $last) {\n                                <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                  [style.height.px]='getAreaHeight(valueArea)'></span>\n                                <igx-chip #currChip [draggable]=\"true\" [id]=\"value.displayName || value.member\" [data]=\"{ pivotArea: 'value' }\"\n                                      [removable]=\"true\" (remove)=\"valueRemoved($event)\"\n                                      (dragLeave)=\"onDimDragLeave($event)\" (dragOver)=\"onDimDragOver($event)\"\n                                      (dragDrop)=\"onValueDrop($event, valueArea)\">\n                                    <div class=\"igx-grid__tr-pivot-toggle-icons\" igxPrefix\n                                         (click)='onSummaryClick($event, value, dropdown, currChip)'\n                                         (pointerdown)='$event.stopPropagation()' [igxDropDownItemNavigation]=\"dropdown\">\n                                        <igx-icon family=\"default\" name=\"functions\"></igx-icon>\n                                        <igx-icon family=\"default\" name=\"arrow_drop_down\"></igx-icon>\n                                    </div>\n                                    <ng-container *ngTemplateOutlet=\"grid.valueChipTemplate ? grid.valueChipTemplate : valueChipDefaultTemplate; context: { $implicit: value }\"></ng-container>\n                                </igx-chip>\n                                @if (last) {\n                                    <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                      [style.height.px]='getAreaHeight(valueArea)'></span>\n                                }\n                            }\n                            <igx-chip igxDrop (dragDrop)=\"onValueDrop($event, valueArea)\" #notifyValueChip [hidden]='true'>\n                                {{grid.resourceStrings.igx_grid_pivot_value_drop_chip}}\n                            </igx-chip>\n                        </igx-chips-area>\n                    </div>\n                }\n            </div>\n        </div>\n    </div>\n    <div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n         [attr.aria-activedescendant]=\"activeDescendant\" [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n        <!-- Column headers area -->\n        <div class=\"igx-grid__tr\" role=\"row\" [style.width.px]=\"width\">\n            @if (!grid.pivotUI.showRowHeaders || grid.rowDimensions.length === 0) {\n                <div #pivotContainer class=\"igx-grid__tr-pivot igx-grid__tr-pivot--row-area\"\n                    [style.width.px]=\"grid.pivotRowWidths - 1\" (igxDragLeave)=\"onAreaDragLeave($event, rowArea)\" igxDrop\n                    (dropped)=\"onDimDrop($event, rowArea, 0)\" (pointerdown)=\"$event.preventDefault()\">\n                    <!-- Row area -->\n                    <igx-chips-area #rowArea droppable='true'>\n                        @if (grid.pivotUI.showConfiguration || grid.rowDimensions.length === 0) {\n                            @if (grid.rowDimensions.length === 0) {\n                                <span id='empty' igxDrop (dropped)=\"onDimDrop($event, rowArea, 0)\"\n                                class='igx-grid__pivot-empty-chip-area'>{{grid.resourceStrings.igx_grid_pivot_empty_row_drop_area}}</span>\n                            }\n                            @for (row of grid.rowDimensions; track row.memberName; let last = $last) {\n                                <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                    [style.height.px]='getAreaHeight(rowArea)'></span>\n                                <igx-chip [draggable]=\"true\" [id]=\"row.memberName\" [data]=\"{ pivotArea: 'row' }\"\n                                        [removable]=\"true\" (remove)=\"rowRemoved($event)\" (dragLeave)=\"onDimDragLeave($event)\"\n                                        (dragDrop)=\"onDimDrop($event, rowArea, 0)\" (dragOver)=\"onDimDragOver($event, 0)\"\n                                        (moveStart)='onDimDragStart($event, rowArea)' (moveEnd)='onDimDragEnd()'\n                                        (click)=\"onChipSort($event, row)\">\n                                    <igx-icon igxPrefix family=\"default\" name=\"table_rows\"></igx-icon>\n                                    <igx-icon\n                                        family=\"default\"\n                                        name=\"filter_list\"\n                                        igxPrefix\n                                        (pointerdown)='onFilteringIconPointerDown($event)'\n                                        (click)='onFilteringIconClick($event, row)'>\n                                    </igx-icon>\n                                    {{ row.displayName || row.memberName}}\n                                    @if (row.sortDirection) {\n                                        <igx-icon\n                                            family=\"default\"\n                                            [name]=\"row.sortDirection < 2 ? 'sort_asc' : 'sort_desc'\"\n                                            igxSuffix>\n                                        </igx-icon>\n                                    }\n                                </igx-chip>\n                                @if (last) {\n                                    <span class=\"igx-grid__tr-pivot--chip_drop_indicator\"\n                                        [style.height.px]='getAreaHeight(rowArea)'></span>\n                                }\n                            }\n                            <igx-chip igxDrop (dragDrop)=\"onDimDrop($event, rowArea, 0)\" #notifyChip [hidden]='true'>\n                                {{grid.resourceStrings.igx_grid_pivot_row_drop_chip}}\n                            </igx-chip>\n                        }\n                    </igx-chips-area>\n                </div>\n            }\n\n            @if (grid.pivotUI.showRowHeaders && grid.visibleRowDimensions.length > 0) {\n                <div class=\"igx-grid__tr igx-grid__tr-header-row\" role=\"row\" [style.width.px]=\"grid.pivotRowWidths - 1\">\n                    @for (dim of grid.visibleRowDimensions; track dim; let colIndex = $index; let isLast = $last) {\n                        @if (getRowDimensionColumn(dim); as dimCol) {\n                            <igx-pivot-row-header-group #rowDimensionHeaders\n                                [ngClass]=\"dimCol.headerGroupClasses\"\n                                [ngStyle]=\"dimCol.headerGroupStyles | igxHeaderGroupStyle:dimCol:grid.pipeTrigger\"\n                                [style.min-width]=\"grid.rowDimensionWidthToPixels(this.grid.visibleRowDimensions[colIndex]) | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                                [style.flex-basis]=\"grid.rowDimensionWidthToPixels(this.grid.visibleRowDimensions[colIndex]) | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                                [column]=\"dimCol\"\n                                [rootDimension]=\"grid.visibleRowDimensions[colIndex]\"\n                                [dimWidth]=\"grid.rowDimensionWidthToPixels(this.grid.visibleRowDimensions[colIndex])\"\n                                [rowIndex]=\"-1\" >\n                            </igx-pivot-row-header-group>\n                        }\n                    }\n                </div>\n            }\n\n            <!-- Pinned columns collection from the start -->\n            @if (pinnedColumnCollection.length && grid.isPinningToStart) {\n                @for (column of pinnedColumnCollection | igxTopLevel; track column) {\n                    <igx-grid-header-group [ngClass]=\"column.headerGroupClasses\"\n                        [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\" [column]=\"column\"\n                        [style.min-width]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                        [style.flex-basis]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                        (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n                    </igx-grid-header-group>\n                }\n            }\n            <div class=\"igx-grid-thead--virtualizationWrapper\" [style.max-height.px]='maxContainerHeight' (click)=\"grid.navigation.focusOutRowHeader($event)\">\n                @for (dimLevelColumns of columnDimensionsByLevel; track $index; let i = $index) {\n                    <div class=\"igx-grid-thead__group igx-grid-thead--virtualizationContainer\" [style.height.px]='totalDepth > 1 ? grid.rowHeight : undefined' [style.width.px]='grid.unpinnedWidth'>\n                        <ng-template igxGridFor #headerVirtualContainer let-column\n                            [igxGridForOf]=\"dimLevelColumns\" [igxGridForOfUniqueSizeCache] = 'true' [igxForScrollContainer]=\"grid.parentVirtDir\"\n                            [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForTrackBy]=\"grid.trackColumnChanges\"\n                            [igxForSizePropName]=\"'calcPixelWidth'\" [igxForScrollOrientation]=\"'horizontal'\">\n                            <igx-grid-header-group [ngClass]=\"column.headerGroupClasses\"\n                                [style.height.px]='totalDepth > 1 ? calcHeight(column, i) : undefined'\n                                [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\" [column]=\"column\"\n                                [style.min-width]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                                [style.flex-basis]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                                [class.igx-grid__tr-pivot--columnDimensionLeaf] = 'isDuplicateOfExistingParent(column, i)'\n                                [class.igx-grid__tr-pivot--columnMultiRowSpan] = 'isMultiRow(column, i)'\n                            >\n                            </igx-grid-header-group>\n                        </ng-template>\n                    </div>\n                }\n            </div>\n\n            <!-- Pinned columns collection at the end -->\n            @if (pinnedColumnCollection.length && !grid.isPinningToStart) {\n                @for (column of pinnedColumnCollection | igxTopLevel; track column) {\n                    <igx-grid-header-group [ngClass]=\"column.headerGroupClasses\"\n                        [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\" [column]=\"column\"\n                        [style.min-width]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                        [style.flex-basis]=\"column.resolvedWidth | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                        [style.left]=\"column.rightPinnedOffset\" (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n                    </igx-grid-header-group>\n                }\n            }\n        </div>\n    </div>\n</div>\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\">\n</div>\n\n<igx-drop-down #dropdown (selectionChanging)='onAggregationChange($event)'>\n    @for (item of aggregateList; track item.key) {\n        <igx-drop-down-item [selected]='isSelected(item)' [value]='item'>\n            {{ item.label }}\n        </igx-drop-down-item>\n    }\n</igx-drop-down>\n\n<div [hidden]='true'>\n    <igx-grid-excel-style-filtering [maxHeight]='grid.excelStyleFilterMaxHeight' [minHeight]='grid.excelStyleFilterMinHeight' #esf>\n        <div igxExcelStyleColumnOperations>\n            <igx-chips-area #dropdownChips>\n                @for (filter of this.filterDropdownDimensions; track filter) {\n                    <igx-chip [id]=\"filter.memberName\"\n                        [removable]=\"true\" (remove)=\"filterRemoved($event)\"\n                        (chipClick)='onFiltersSelectionChanged($event)' [selectable]='true' [selected]='filter === this.filterDropdownDimensions.values().next().value'>\n                        {{filter.displayName || filter.memberName}}\n                    </igx-chip>\n                }\n            </igx-chips-area>\n        </div>\n        <igx-excel-style-filter-operations>\n            <igx-excel-style-search></igx-excel-style-search>\n        </igx-excel-style-filter-operations>\n    </igx-grid-excel-style-filtering>\n</div>\n\n<div style=\"visibility: hidden; position: absolute; top: -10000px\">\n    <igx-chips-area #filterAreaHidden droppable='true'>\n        @for (filter of grid.filterDimensions; track filter) {\n            <igx-chip\n                [id]=\"filter.memberName\"\n                [draggable]=\"true\"\n                [removable]=\"true\"\n                (remove)=\"filterRemoved($event)\">\n                <igx-icon family=\"default\" name=\"filter_list\" igxPrefix></igx-icon>\n                {{filter.displayName || filter.memberName}}\n            </igx-chip>\n        }\n    </igx-chips-area>\n</div>\n\n<ng-template #valueChipDefaultTemplate let-value>\n    {{value.aggregate.key}}({{value.displayName || value.member}})\n</ng-template>\n","\nimport { ColumnType, PivotGridType } from '../grids/common/grid.interface';\nimport { DEFAULT_PIVOT_KEYS, IPivotDimension, IPivotDimensionStrategy, IPivotGridRecord, IPivotKeys, IPivotValue, PivotDimensionType } from '../grids/pivot-grid/pivot-grid.interface';\nimport { PivotUtil } from '../grids/pivot-grid/pivot-util';\nimport { FilteringStrategy, IgxFilterItem } from './filtering-strategy';\nimport { cloneArray } from '../core/utils';\nimport { IFilteringExpressionsTree } from './filtering-expressions-tree';\nimport { IDataCloneStrategy } from './data-clone-strategy';\n\n/* csSuppress */\nexport class NoopPivotDimensionsStrategy implements IPivotDimensionStrategy {\n    private static _instance: NoopPivotDimensionsStrategy = null;\n\n    public static instance(): NoopPivotDimensionsStrategy {\n        return this._instance || (this._instance = new NoopPivotDimensionsStrategy());\n    }\n\n    public process(collection: any[], _: IPivotDimension[], __: IPivotValue[]): any[] {\n        return collection;\n    }\n}\n\n\nexport class PivotRowDimensionsStrategy implements IPivotDimensionStrategy {\n    private static _instance: PivotRowDimensionsStrategy = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new PivotRowDimensionsStrategy());\n    }\n\n    public process(\n        collection: any,\n        rows: IPivotDimension[],\n        values: IPivotValue[],\n        cloneStrategy: IDataCloneStrategy,\n        pivotKeys: IPivotKeys = DEFAULT_PIVOT_KEYS\n    ): IPivotGridRecord[] {\n        let hierarchies;\n        let data: IPivotGridRecord[];\n        const prevRowDims = [];\n        const currRows = cloneArray(rows, true);\n        PivotUtil.assignLevels(currRows);\n\n        if (currRows.length === 0) {\n            hierarchies = PivotUtil.getFieldsHierarchy(collection, [{ memberName: '', enabled: true }], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n            // generate flat data from the hierarchies\n            data = PivotUtil.processHierarchy(hierarchies, pivotKeys, 0, true);\n            return data;\n        }\n\n        for (const row of currRows) {\n            if (!data) {\n                // build hierarchies - groups and subgroups\n                hierarchies = PivotUtil.getFieldsHierarchy(collection, [row], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n                // generate flat data from the hierarchies\n                data = PivotUtil.processHierarchy(hierarchies, pivotKeys, 0, true);\n                prevRowDims.push(row);\n            } else {\n                PivotUtil.processGroups(data, row, pivotKeys, cloneStrategy);\n            }\n        }\n        return data;\n    }\n}\n\nexport class PivotColumnDimensionsStrategy implements IPivotDimensionStrategy {\n    private static _instance: PivotRowDimensionsStrategy = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new PivotColumnDimensionsStrategy());\n    }\n\n    public process(\n        collection: IPivotGridRecord[],\n        columns: IPivotDimension[],\n        values: IPivotValue[],\n        cloneStrategy: IDataCloneStrategy,\n        pivotKeys: IPivotKeys = DEFAULT_PIVOT_KEYS\n    ): any[] {\n        const res = this.processHierarchy(collection, columns, values, pivotKeys, cloneStrategy);\n        return res;\n    }\n\n    private processHierarchy(collection: IPivotGridRecord[], columns: IPivotDimension[], values, pivotKeys, cloneStrategy) {\n        const result: IPivotGridRecord[] = [];\n        collection.forEach(rec => {\n            // apply aggregations based on the created groups and generate column fields based on the hierarchies\n            this.groupColumns(rec, columns, values, pivotKeys, cloneStrategy);\n            result.push(rec);\n        });\n        return result;\n    }\n\n    private groupColumns(rec: IPivotGridRecord, columns, values, pivotKeys, cloneStrategy) {\n        const children = rec.children;\n        if (children && children.size > 0) {\n            children.forEach((childRecs) => {\n                if (childRecs) {\n                    childRecs.forEach(child => {\n                        this.groupColumns(child, columns, values, pivotKeys, cloneStrategy);\n                    })\n                }\n            });\n        }\n        this.applyAggregates(rec, columns, values, pivotKeys, cloneStrategy);\n    }\n\n    private applyAggregates(rec, columns, values, pivotKeys, cloneStrategy) {\n        const leafRecords = this.getLeafs(rec.records, pivotKeys);\n        const hierarchy = PivotUtil.getFieldsHierarchy(leafRecords, columns, PivotDimensionType.Column, pivotKeys, cloneStrategy);\n        PivotUtil.applyAggregations(rec, hierarchy, values, pivotKeys)\n    }\n\n    private getLeafs(records, pivotKeys) {\n        let leafs = [];\n        for (const rec of records) {\n            if (rec[pivotKeys.records]) {\n                leafs = leafs.concat(this.getLeafs(rec[pivotKeys.records], pivotKeys));\n            } else {\n                leafs.push(rec);\n            }\n        }\n        return leafs;\n    }\n}\n\nexport class DimensionValuesFilteringStrategy extends FilteringStrategy {\n\n    /**\n     * Creates a new instance of FormattedValuesFilteringStrategy.\n     *\n     * @param fields An array of column field names that should be formatted.\n     * If omitted the values of all columns which has formatter will be formatted.\n     */\n    constructor(private fields?: string[]) {\n        super();\n    }\n\n    protected override getFieldValue(rec: any, fieldName: string, _isDate = false, _isTime = false,\n        grid?: PivotGridType): any {\n        const allDimensions = grid.allDimensions;\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n        const dim :IPivotDimension = PivotUtil.flatten(enabledDimensions).find(x => x.memberName === fieldName);\n        const value = dim.childLevel ? this._getDimensionValueHierarchy(dim, rec).map(x => `[` + x +`]`).join('.') : PivotUtil.extractValueFromDimension(dim, rec);\n        return value;\n    }\n\n    public override getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {\n        const grid = (column.grid as any);\n        const enabledDimensions = grid.allDimensions.filter(x => x && x.enabled);\n        const data = column.grid.gridAPI.filterDataByExpressions(tree);\n        const dim = enabledDimensions.find(x => x.memberName === column.field);\n        const allValuesHierarchy = PivotUtil.getFieldsHierarchy(\n            data,\n            [dim],\n            PivotDimensionType.Column,\n            grid.pivotKeys,\n            grid.pivotValueCloneStrategy\n        );\n        const isNoop = grid.pivotConfiguration.columnStrategy instanceof NoopPivotDimensionsStrategy || grid.pivotConfiguration.rowStrategy instanceof NoopPivotDimensionsStrategy;\n        const items: IgxFilterItem[] = !isNoop ? this._getFilterItems(allValuesHierarchy, grid.pivotKeys) : [{value : ''}];\n        return Promise.resolve(items);\n    }\n\n    private _getFilterItems(hierarchy: Map<string, any>, pivotKeys: IPivotKeys) : IgxFilterItem[] {\n        const items:  IgxFilterItem[] = [];\n        hierarchy.forEach((value) => {\n            const val = value.value;\n            const path = val.split(pivotKeys.columnDimensionSeparator);\n            const hierarchicalValue = path.length > 1 ? path.map(x => `[` + x +`]`).join('.') : val;\n            const text = path[path.length -1];\n            items.push({\n                value: hierarchicalValue,\n                label: text,\n                children: this._getFilterItems(value.children, pivotKeys)\n            });\n        });\n        return items;\n    }\n\n    private _getDimensionValueHierarchy(dim: IPivotDimension, rec: any) : string[] {\n        let path = [];\n        const value = PivotUtil.extractValueFromDimension(dim, rec);\n        path.push(value);\n        if (dim.childLevel) {\n            const childVals = this._getDimensionValueHierarchy(dim.childLevel, rec);\n            path = path.concat(childVals);\n        }\n        return path;\n    }\n}\n","import { IActiveNode, IgxGridNavigationService } from '../grid-navigation.service';\nimport { Injectable } from '@angular/core';\nimport { IgxPivotGridComponent } from './pivot-grid.component';\nimport { HEADER_KEYS, ROW_COLLAPSE_KEYS, ROW_EXPAND_KEYS } from '../../core/utils';\nimport { PivotUtil } from './pivot-util';\nimport { IgxPivotRowDimensionMrlRowComponent } from './pivot-row-dimension-mrl-row.component';\nimport { IMultiRowLayoutNode } from '../public_api';\nimport { SortingDirection } from '../../data-operations/sorting-strategy';\nimport { take, timeout } from 'rxjs/operators';\nimport { IPivotDimension, IPivotGridRecord, PivotSummaryPosition } from './pivot-grid.interface';\n\n@Injectable()\nexport class IgxPivotGridNavigationService extends IgxGridNavigationService {\n    public override grid: IgxPivotGridComponent;\n    public isRowHeaderActive = false;\n    public isRowDimensionHeaderActive = false;\n\n    public get lastRowDimensionsIndex() {\n        return this.grid.visibleRowDimensions.length - 1;\n    }\n\n    public get lastRowDimensionMRLRowIndex() {\n        return this.grid.verticalRowDimScrollContainers.first.igxGridForOf.length - 1;\n    }\n\n    public focusOutRowHeader() {\n        this.isRowHeaderActive = false;\n        this.isRowDimensionHeaderActive = false;\n    }\n\n    public override async handleNavigation(event: KeyboardEvent) {\n        if (this.isRowHeaderActive) {\n            const key = event.key.toLowerCase();\n            const ctrl = event.ctrlKey;\n            if (!HEADER_KEYS.has(key)) {\n                return;\n            }\n            event.preventDefault();\n\n            const newActiveNode: IActiveNode = {\n                row: this.activeNode.row,\n                column: this.activeNode.column,\n                level: null,\n                mchCache: null,\n                layout: this.activeNode.layout\n            }\n\n            if (event.altKey) {\n                this.handleAlt(key, event);\n                return;\n            }\n\n            let verticalContainer;\n            if (this.grid.hasHorizontalLayout) {\n                let newPosition = {\n                    row: this.activeNode.row,\n                    column: this.activeNode.column,\n                    layout: this.activeNode.layout\n                };\n                verticalContainer = this.grid.verticalRowDimScrollContainers.first;\n                if (key.includes('left')) {\n                    newPosition = await this.getNextHorizontalPosition(true, ctrl);\n                }\n                if (key.includes('right')) {\n                    newPosition = await this.getNextHorizontalPosition(false, ctrl);\n                }\n                if (key.includes('up') || key === 'home') {\n                    newPosition = await this.getNextVerticalPosition(true, ctrl || key === 'home', key === 'home');\n                }\n\n                if (key.includes('down') || key === 'end') {\n                    newPosition = await this.getNextVerticalPosition(false, ctrl || key === 'end', key === 'end');\n                }\n\n                newActiveNode.row = newPosition.row;\n                newActiveNode.column = newPosition.column;\n                newActiveNode.layout = newPosition.layout;\n            } else {\n                if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n                    newActiveNode.column = ctrl || key === 'home' ? 0 : this.activeNode.column - 1;\n                }\n                if ((key.includes('right') || key === 'end') && this.activeNode.column < this.lastRowDimensionsIndex) {\n                    newActiveNode.column = ctrl || key === 'end' ? this.lastRowDimensionsIndex : this.activeNode.column + 1;\n                }\n\n                verticalContainer = this.grid.verticalRowDimScrollContainers.toArray()[newActiveNode.column];\n                if (key.includes('up')) {\n                    if (ctrl) {\n                        newActiveNode.row = 0;\n                    } else if (this.activeNode.row > 0) {\n                        newActiveNode.row = this.activeNode.row - 1;\n                    } else {\n                        newActiveNode.row = -1;\n                        newActiveNode.column = newActiveNode.layout ? newActiveNode.layout.colStart - 1 : 0;\n                        newActiveNode.layout = null;\n                        this.isRowDimensionHeaderActive = true;\n                        this.isRowHeaderActive = false;\n                        this.grid.theadRow.nativeElement.focus();\n                    }\n                }\n\n                if (key.includes('down') && this.activeNode.row < this.findLastDataRowIndex()) {\n                    newActiveNode.row = ctrl ? verticalContainer.igxForOf.length - 1 : Math.min(this.activeNode.row + 1, verticalContainer.igxForOf.length - 1);\n                }\n\n                if (key.includes('left') || key.includes('right')) {\n                    const prevRIndex = this.activeNode.row;\n                    const prevScrContainer = this.grid.verticalRowDimScrollContainers.toArray()[this.activeNode.column];\n                    const src = prevScrContainer.getScrollForIndex(prevRIndex);\n                    newActiveNode.row = this.activeNode.mchCache && this.activeNode.mchCache.level === newActiveNode.column ?\n                        this.activeNode.mchCache.visibleIndex :\n                        verticalContainer.getIndexAtScroll(src);\n                    newActiveNode.mchCache = {\n                        visibleIndex: this.activeNode.row,\n                        level: this.activeNode.column\n                    };\n                }\n            }\n\n            this.setActiveNode(newActiveNode);\n            if (!this.grid.hasHorizontalLayout && verticalContainer.isIndexOutsideView(newActiveNode.row)) {\n                verticalContainer.scrollTo(newActiveNode.row);\n            }\n        } else {\n            super.handleNavigation(event);\n        }\n    }\n\n    public override handleAlt(key: string, event: KeyboardEvent): void {\n        event.preventDefault();\n\n        let rowData, dimIndex;\n        if (!this.grid.hasHorizontalLayout) {\n            dimIndex = this.activeNode.column;\n            const scrContainer = this.grid.verticalRowDimScrollContainers.toArray()[dimIndex];\n            rowData = scrContainer.igxGridForOf[this.activeNode.row];\n        } else {\n            const mrlRow = this.grid.rowDimensionMrlRowsCollection.find(mrl => mrl.rowIndex === this.activeNode.row);\n            rowData = mrlRow.rowGroup[this.activeNode.layout.rowStart - 1];\n            dimIndex = this.activeNode.layout.colStart - 1;\n        }\n        const dimension = this.grid.visibleRowDimensions[dimIndex];\n        const expansionRowKey = PivotUtil.getRecordKey(rowData, dimension);\n        const isExpanded = this.grid.expansionStates.get(expansionRowKey) ?? true;\n\n        let prevCellLayout;\n        if (this.grid.hasHorizontalLayout) {\n            const parentRow = this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === this.activeNode.row);\n            prevCellLayout = this.getNextVerticalColumnIndex(\n                parentRow,\n                Math.min(parentRow.rowGroup.length, this.activeNode.layout.rowStart),\n                this.activeNode.layout.colStart);\n        }\n\n        if (ROW_EXPAND_KEYS.has(key) && !isExpanded) {\n            this.grid.gridAPI.set_row_expansion_state(expansionRowKey, true, event)\n        } else if (ROW_COLLAPSE_KEYS.has(key) && isExpanded) {\n            this.grid.gridAPI.set_row_expansion_state(expansionRowKey, false, event)\n        }\n\n        if ((ROW_EXPAND_KEYS.has(key) && !isExpanded) || (ROW_COLLAPSE_KEYS.has(key) && isExpanded)) {\n            this.onRowToggle(!isExpanded, dimension, rowData, prevCellLayout);\n        }\n        this.updateActiveNodeLayout();\n        this.grid.notifyChanges();\n    }\n\n    public updateActiveNodeLayout() {\n        if (this.grid.hasHorizontalLayout) {\n            const mrlRow = this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === this.activeNode.row);\n            const activeCell = mrlRow.contentCells.toArray()[this.activeNode.column];\n            this.activeNode.layout = activeCell.layout;\n        }\n    }\n\n    /** Update active cell when toggling row expand when horizontal summaries have position set to top */\n    public onRowToggle(newExpandState: boolean, dimension: IPivotDimension, rowData: IPivotGridRecord, prevCellLayout: IMultiRowLayoutNode){\n        if (this.grid.hasHorizontalLayout &&\n            rowData.totalRecordDimensionName !== dimension.memberName &&\n            dimension.horizontalSummary && this.grid.pivotUI.horizontalSummariesPosition === PivotSummaryPosition.Top) {\n            const maxActiveRow = Math.min(this.lastRowDimensionMRLRowIndex, this.activeNode.row);\n            const parentRowUpdated = this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === maxActiveRow);\n            const maxRowEnd = parentRowUpdated.rowGroup.length + 1;\n            const nextRowStart = Math.max(1, this.activeNode.layout.rowStart + (!newExpandState ? -1 : 1));\n            const curValidRowStart = Math.min(parentRowUpdated.rowGroup.length, nextRowStart);\n            // Get current cell layout, because the actineNode the rowStart might be different, based on where we come from(might be smaller cell).\n\n            const curCellLayout = this.getNextVerticalColumnIndex(parentRowUpdated, curValidRowStart, this.activeNode.layout.colStart);\n            const nextBlock = (!newExpandState && prevCellLayout.rowStart === 1) || (newExpandState &&  prevCellLayout.rowEnd >= maxRowEnd);\n            this.activeNode.row += nextBlock ? (!newExpandState ? -1 : 1) : 0;\n            this.activeNode.column = curCellLayout.columnVisibleIndex;\n            this.activeNode.layout = curCellLayout;\n        }\n    }\n\n    public override async headerNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        const ctrl = event.ctrlKey;\n        if (!HEADER_KEYS.has(key)) {\n            return;\n        }\n\n        if (this.isRowDimensionHeaderActive) {\n            event.preventDefault();\n\n            const newActiveNode: IActiveNode = {\n                row: this.activeNode.row,\n                column: this.activeNode.column,\n                level: null,\n                mchCache: this.activeNode.mchCache,\n                layout: null\n            }\n\n            if (ctrl) {\n                const dimIndex = this.activeNode.column;\n                const dim = this.grid.visibleRowDimensions[dimIndex];\n                if (this.activeNode.row === -1) {\n                    if (key.includes('down') || key.includes('up')) {\n                        let newSortDirection = SortingDirection.None;\n                        if (key.includes('down')) {\n                            newSortDirection = (dim.sortDirection === SortingDirection.Desc) ? SortingDirection.None : SortingDirection.Desc;\n                        } else if (key.includes('up')) {\n                            newSortDirection = (dim.sortDirection === SortingDirection.Asc) ? SortingDirection.None : SortingDirection.Asc;\n                        }\n                        this.grid.sortDimension(dim, newSortDirection);\n                        return;\n                    }\n                }\n            }\n            if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n                newActiveNode.column = ctrl || key === 'home' ? 0 : this.activeNode.column - 1;\n            }\n            if ((key.includes('right') || key === 'end') && this.activeNode.column < this.lastRowDimensionsIndex) {\n                newActiveNode.column = ctrl || key === 'end' ? this.lastRowDimensionsIndex : this.activeNode.column + 1;\n            } else if (key.includes('right')) {\n                this.isRowDimensionHeaderActive = false;\n                newActiveNode.column = 0;\n                newActiveNode.level = this.activeNode.mchCache?.level || 0;\n                newActiveNode.mchCache = this.activeNode.mchCache || {\n                    level: 0,\n                    visibleIndex: 0\n                };\n            }\n\n            if (key.includes('down')) {\n                if (this.grid.hasHorizontalLayout) {\n                    this.activeNode.row = 0;\n                    this.activeNode.layout = {\n                        rowStart: 1,\n                        rowEnd: 2,\n                        colStart: newActiveNode.column + 1,\n                        colEnd: newActiveNode.column + 2,\n                        columnVisibleIndex: newActiveNode.column\n                    };\n\n                    const newPosition = await this.getNextVerticalPosition(true, ctrl || key === 'home', key === 'home');\n                    newActiveNode.row = 0;\n                    newActiveNode.column = newPosition.column;\n                    newActiveNode.layout = newPosition.layout;\n                } else {\n                    const verticalContainer = this.grid.verticalRowDimScrollContainers.toArray()[newActiveNode.column];\n                    newActiveNode.row = ctrl ? verticalContainer.igxForOf.length - 1 : 0;\n                }\n\n                this.isRowDimensionHeaderActive = false;\n                this.isRowHeaderActive = true;\n                this.grid.rowDimensionContainer.toArray()[this.grid.hasHorizontalLayout ? 0 : newActiveNode.column].nativeElement.focus();\n            }\n\n            this.setActiveNode(newActiveNode);\n        } else if (key.includes('left') && this.activeNode.column === 0 && this.grid.pivotUI.showRowHeaders) {\n            this.isRowDimensionHeaderActive = true;\n            const newActiveNode: IActiveNode = {\n                row: this.activeNode.row,\n                column: this.lastRowDimensionsIndex,\n                level: null,\n                mchCache: this.activeNode.mchCache,\n                layout: null\n            }\n\n            this.setActiveNode(newActiveNode);\n        } else {\n            super.headerNavigation(event);\n        }\n    }\n\n    public override focusTbody(event) {\n        if (!this.activeNode || this.activeNode.row === null || this.activeNode.row === undefined) {\n            this.activeNode = this.lastActiveNode;\n        } else {\n            super.focusTbody(event);\n        }\n    }\n\n    public async getNextVerticalPosition(previous, ctrl, homeEnd) {\n        const parentRow = this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === this.activeNode.row);\n        const maxRowEnd = parentRow.rowGroup.length + 1;\n        const curValidRowStart = Math.min(parentRow.rowGroup.length, this.activeNode.layout.rowStart);\n        // Get current cell layout, because the actineNode the rowStart might be different, based on where we come from(might be smaller cell).\n        const curCellLayout = this.getNextVerticalColumnIndex(parentRow, curValidRowStart, this.activeNode.layout.colStart);\n        const nextBlock = (previous && curCellLayout.rowStart === 1) || (!previous && curCellLayout.rowEnd === maxRowEnd);\n        if (nextBlock &&\n            ((previous && this.activeNode.row === 0) ||\n            (!previous && this.activeNode.row === this.lastRowDimensionMRLRowIndex))) {\n            if (previous && this.grid.pivotUI.showRowHeaders) {\n                this.isRowDimensionHeaderActive = true;\n                this.isRowHeaderActive = false;\n                this.grid.theadRow.nativeElement.focus();\n                return  { row: -1, column: this.activeNode.layout.colStart - 1, layout: this.activeNode.layout };\n            }\n            return { row: this.activeNode.row, column: this.activeNode.column, layout: this.activeNode.layout };\n        }\n\n        const nextMRLRowIndex = previous ?\n            (ctrl ? 0 : this.activeNode.row - 1) :\n            (ctrl ? this.lastRowDimensionMRLRowIndex : this.activeNode.row + 1) ;\n        let nextRow = nextBlock || ctrl ? this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === nextMRLRowIndex) : parentRow;\n        if (!nextRow) {\n            const nextDataViewIndex = previous ?\n                (ctrl ? 0 : parentRow.rowGroup[curCellLayout.rowStart - 1].dataIndex - 1) :\n                (ctrl ? this.grid.dataView.length - 1 : parentRow.rowGroup[curCellLayout.rowEnd - 2].dataIndex + 1);\n            await this.scrollToNextHorizontalDimRow(nextDataViewIndex);\n            nextRow = nextBlock || ctrl ? this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === nextMRLRowIndex) : parentRow;\n        }\n\n        const nextRowStart = nextBlock ?\n            (previous ? nextRow.rowGroup.length : 1) :\n            (previous ? curCellLayout.rowStart - 1 : curCellLayout.rowEnd);\n        const maxColEnd = Math.max(...nextRow.contentCells.map(cell => cell.layout.colEnd));\n        const nextColumnLayout = this.getNextVerticalColumnIndex(\n            nextRow,\n            ctrl ? (previous ? 1 : nextRow.rowGroup.length) : nextRowStart,\n            homeEnd ? (previous ? 1 : maxColEnd - 1) : this.activeNode.layout.colStart\n        );\n\n        const nextDataViewIndex = previous ?\n            nextRow.rowGroup[nextColumnLayout.rowStart - 1].dataIndex:\n            nextRow.rowGroup[nextColumnLayout.rowEnd - 2].dataIndex;\n        await this.scrollToNextHorizontalDimRow(nextDataViewIndex);\n\n        return {\n            row: nextBlock || ctrl ? nextMRLRowIndex : this.activeNode.row,\n            column: nextColumnLayout.columnVisibleIndex,\n            layout: {\n                rowStart: nextColumnLayout.rowStart,\n                rowEnd: nextColumnLayout.rowEnd,\n                colStart: homeEnd ? nextColumnLayout.colStart : this.activeNode.layout.colStart,\n                colEnd: nextColumnLayout.colEnd,\n                columnVisibleIndex: nextColumnLayout.columnVisibleIndex\n            } as IMultiRowLayoutNode\n        };\n    }\n\n    public async getNextHorizontalPosition(previous, ctrl) {\n        const parentRow = this.grid.rowDimensionMrlRowsCollection.find(row => row.rowIndex === this.activeNode.row);\n        const maxColEnd = Math.max(...parentRow.contentCells.map(cell => cell.layout.colEnd));\n        // Get current cell layout, because the actineNode the rowStart might be different, based on where we come from(might be smaller cell).\n        const curCellLayout = this.getNextVerticalColumnIndex(parentRow, this.activeNode.layout.rowStart, this.activeNode.layout.colStart);\n\n        if ((previous && curCellLayout.colStart === 1) || (!previous && curCellLayout.colEnd === maxColEnd)) {\n            return { row: this.activeNode.row, column: this.activeNode.column, layout: this.activeNode.layout };\n        }\n\n        const nextColStartNormal = curCellLayout.colStart + (previous ? -1 : curCellLayout.colEnd - curCellLayout.colStart);\n        const nextColumnLayout = this.getNextVerticalColumnIndex(\n            parentRow,\n            this.activeNode.layout.rowStart,\n            ctrl ? (previous ? 1 : maxColEnd - 1) : nextColStartNormal\n        );\n\n        const nextDataViewIndex = parentRow.rowGroup[nextColumnLayout.rowStart - 1].dataIndex\n        await this.scrollToNextHorizontalDimRow(nextDataViewIndex);\n\n        return {\n            row: this.activeNode.row,\n            column: nextColumnLayout.columnVisibleIndex,\n            layout: {\n                rowStart: this.activeNode.layout.rowStart,\n                rowEnd: nextColumnLayout.rowEnd,\n                colStart: nextColumnLayout.colStart,\n                colEnd: nextColumnLayout.colEnd,\n                columnVisibleIndex: nextColumnLayout.columnVisibleIndex\n            } as IMultiRowLayoutNode\n        };\n    }\n\n    private async scrollToNextHorizontalDimRow(nextDataViewIndex: number) {\n        const verticalContainer = this.grid.verticalScrollContainer;\n        if (verticalContainer.isIndexOutsideView(nextDataViewIndex)) {\n            verticalContainer.scrollTo(nextDataViewIndex);\n            await new Promise((resolve) => {\n                this.grid.gridScroll.pipe(take(1), timeout({ first: 10000 })).subscribe({\n                    next: (value) => resolve(value),\n                    error: (err) => resolve(err)\n                });\n            });\n        }\n    }\n\n\n    private getNextVerticalColumnIndex(nextRow: IgxPivotRowDimensionMrlRowComponent, newRowStart, newColStart) {\n        const nextCell = nextRow.contentCells.find(cell => {\n            return cell.layout.rowStart <= newRowStart && newRowStart < cell.layout.rowEnd &&\n                cell.layout.colStart <= newColStart && newColStart < cell.layout.colEnd;\n        });\n        return nextCell.layout;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { IFilteringOperation } from '../../data-operations/filtering-condition';\nimport { FilteringLogic } from '../../data-operations/filtering-expression.interface';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { DimensionValuesFilteringStrategy } from '../../data-operations/pivot-strategy';\nimport { ColumnType } from '../common/grid.interface';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxPivotGridComponent } from './pivot-grid.component';\nimport { PivotUtil } from './pivot-util';\n\n@Injectable()\nexport class IgxPivotFilteringService extends IgxFilteringService {\n    private filtersESFId;\n\n    public override clearFilter(field: string): void {\n        this.clear_filter(field);\n    }\n\n    public override clear_filter(fieldName: string) {\n        super.clear_filter(fieldName);\n        const grid = this.grid as IgxPivotGridComponent;\n        const allDimensions = grid.allDimensions;\n        const allDimensionsFlat = PivotUtil.flatten(allDimensions);\n        const dim = allDimensionsFlat.find(x => x.memberName === fieldName);\n        dim.filter = undefined;\n        grid.filteringPipeTrigger++;\n        if (allDimensions.indexOf(dim) !== -1) {\n            // update columns\n            (grid as any).setupColumns();\n        }\n    }\n    protected override filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase: boolean) {\n        super.filter_internal(fieldName, term, conditionOrExpressionsTree, ignoreCase);\n        const grid = this.grid as IgxPivotGridComponent;\n        const config = grid.pivotConfiguration;\n        const allDimensions = PivotUtil.flatten(config.rows.concat(config.columns).concat(config.filters).filter(x => x !== null && x !== undefined));\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n        const dim = enabledDimensions.find(x => x.memberName === fieldName || x.member === fieldName);\n        const filteringTree = dim.filter || new FilteringExpressionsTree(FilteringLogic.And);\n        const fieldFilterIndex = filteringTree.findIndex(fieldName);\n        if (fieldFilterIndex > -1) {\n            filteringTree.filteringOperands.splice(fieldFilterIndex, 1);\n        }\n\n        this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);\n        dim.filter = filteringTree;\n        grid.filteringPipeTrigger++;\n        grid.filterStrategy = grid.filterStrategy ?? new DimensionValuesFilteringStrategy();\n        if (allDimensions.indexOf(dim) !== -1) {\n            // update columns\n            (grid as any).setupColumns();\n        }\n    }\n\n    public toggleFiltersESF(dropdown: any, element: HTMLElement, column: ColumnType, shouldReattach: boolean) {\n        const filterIcon = column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';\n        const filterIconTarget = element.querySelector(`.${filterIcon}`) as HTMLElement || element;\n\n        const { id, ref } = (this.grid as IgxPivotGridComponent).createFilterESF(dropdown, column, {\n            ...this._filterMenuOverlaySettings,\n            ...{ target: filterIconTarget }\n        }, shouldReattach);\n\n        this.filtersESFId = id;\n\n        if (shouldReattach) {\n            this._overlayService.opening\n                .pipe(\n                    first(overlay => overlay.id === id),\n                    takeUntil(this.destroy$)\n                )\n                .subscribe(() => this.lastActiveNode = this.grid.navigation.activeNode);\n\n            this._overlayService.closed\n                .pipe(\n                    first(overlay => overlay.id === id),\n                    takeUntil(this.destroy$)\n                )\n                .subscribe(() => {\n                    this._overlayService.detach(id);\n                    ref?.destroy();\n                    this.grid.navigation.activeNode = this.lastActiveNode;\n                    this.grid.theadRow.nativeElement.focus();\n                });\n\n            this.grid.columnPinned.pipe(first()).subscribe(() => ref?.destroy());\n            this._overlayService.show(id);\n        }\n    }\n\n    public hideESF() {\n        this._overlayService.hide(this.filtersESFId);\n    }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Inject, Input, NgZone, ViewChild } from '@angular/core';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';\nimport { IgxPivotColumnResizingService } from '../resizing/pivot-grid/pivot-resizing.service';\nimport { IPivotDimension, PivotRowHeaderGroupType } from './pivot-grid.interface';\nimport { IgxPivotRowDimensionHeaderComponent } from './pivot-row-dimension-header.component';\nimport { IgxHeaderGroupStylePipe } from '../headers/pipes';\nimport { IgxPivotResizeHandleDirective } from '../resizing/pivot-grid/pivot-resize-handle.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IMultiRowLayoutNode } from '../common/types';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-row-dimension-header-group',\n    templateUrl: './pivot-row-dimension-header-group.component.html',\n    imports: [IgxIconComponent, IgxPivotRowDimensionHeaderComponent, NgClass, NgStyle, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxPivotResizeHandleDirective, IgxHeaderGroupStylePipe]\n})\nexport class IgxPivotRowDimensionHeaderGroupComponent extends IgxGridHeaderGroupComponent implements PivotRowHeaderGroupType {\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.user-select')\n    public userSelect = 'none';\n\n    constructor(private cdRef: ChangeDetectorRef,\n        @Inject(IGX_GRID_BASE) public override grid: PivotGridType,\n        private elementRef: ElementRef<HTMLElement>,\n        public override colResizingService: IgxPivotColumnResizingService,\n        filteringService: IgxFilteringService,\n        platform: PlatformUtil,\n        protected zone: NgZone) {\n        super(cdRef, grid, elementRef, colResizingService, filteringService, platform);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public rowIndex: number;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public colIndex: number;\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public layout: IMultiRowLayoutNode;\n\n    /**\n    * @hidden\n    * @internal\n    */\n    @Input()\n    public parent: any;\n\n    @ViewChild(IgxPivotRowDimensionHeaderComponent)\n    public override header: IgxPivotRowDimensionHeaderComponent;\n\n    @HostBinding('attr.id')\n    public override get headerID() {\n        return `${this.grid.id}_-2_${this.rowIndex}_${this.visibleIndex}`;\n    }\n\n    @HostBinding('attr.title')\n    public override get title() {\n        return this.column.header;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        if (this.grid.rowSelection === 'none') {\n            return;\n        }\n        event?.stopPropagation();\n        const key = this.parent.getRowDimensionKey(this.column as IgxColumnComponent);\n        if (this.grid.selectionService.isRowSelected(key)) {\n            this.grid.selectionService.deselectRow(key, event);\n        } else {\n            this.grid.selectionService.selectRowById(key, true, event);\n        }\n\n        this.zone.run(() => {});\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get visibleIndex(): number {\n        if (this.grid.hasHorizontalLayout) {\n            return this.colIndex;\n        }\n\n        const field = this.column.field;\n        const rows = this.grid.rowDimensions;\n        const rootDimension = this.findRootDimension(field);\n        return rows.indexOf(rootDimension);\n    }\n\n    @HostBinding('class.igx-grid-th--active')\n    public override get active() {\n        const nav = this.grid.navigation;\n        const node = nav.activeNode;\n        return node && !this.column.columnGroup ?\n            nav.isRowHeaderActive &&\n            node.row === this.rowIndex &&\n            node.column === this.visibleIndex :\n            false;\n    }\n\n    protected override get activeNode() {\n        this.grid.navigation.isRowHeaderActive = true;\n        this.grid.navigation.isRowDimensionHeaderActive = false;\n        return {\n            row: this.rowIndex, column: this.visibleIndex, level: null,\n            mchCache: null,\n            layout: this.layout || null\n        };\n    }\n\n    private findRootDimension(field: string): IPivotDimension {\n        const rows = this.grid.rowDimensions;\n        let tempRow;\n        let result = null;\n        rows.forEach(row => {\n            tempRow = row;\n            do {\n                if (tempRow.memberName === field) {\n                    result = row;\n                }\n                tempRow = tempRow.childLevel;\n            } while (tempRow)\n        });\n        return result;\n    }\n\n\n    public override activate() {\n        this.grid.navigation.isRowHeader = true;\n        this.grid.navigation.setActiveNode(this.activeNode);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override pointerdown(_event: PointerEvent): void {\n        this.activate();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override onMouseDown(_event: MouseEvent): void {\n        this.activate();\n    }\n\n    public override get selectable(): boolean {\n        return false;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    createComponent,\n    ElementRef,\n    EnvironmentInjector,\n    HostBinding,\n    Inject,\n    Injector,\n    Input,\n    OnChanges,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef\n} from '@angular/core';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';\nimport { IPivotDimension, IPivotDimensionData, IPivotGridGroupRecord } from './pivot-grid.interface';\nimport { IgxPivotRowDimensionHeaderGroupComponent } from './pivot-row-dimension-header-group.component';\nimport { PivotUtil } from './pivot-util';\nimport { IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe } from '../headers/pipes';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { IMultiRowLayoutNode } from '../common/types';\n\n/**\n *\n * For all intents & purposes treat this component as what a <thead> usually is in the default <table> element.\n *\n * This container holds the pivot grid header elements and their behavior/interactions.\n *\n * @hidden @internal\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-row-dimension-content',\n    templateUrl: './pivot-row-dimension-content.component.html',\n    imports: [IgxPivotRowDimensionHeaderGroupComponent, NgClass, NgStyle, IgxIconComponent, IgxHeaderGroupWidthPipe, IgxHeaderGroupStylePipe]\n})\nexport class IgxPivotRowDimensionContentComponent extends IgxGridHeaderRowComponent implements OnChanges {\n    @HostBinding('style.grid-row-start')\n    public get rowStart(): string {\n        return this.layout ? `${this.layout.rowStart}` : \"\";\n    }\n\n    @HostBinding('style.grid-row-end')\n    public get rowsEnd(): string {\n        return this.layout ? `${this.layout.rowEnd}` : \"\";\n    }\n\n    @HostBinding('style.grid-column-start')\n    public get colStart(): string {\n        return this.layout ? `${this.layout.colStart}` : \"\";\n    }\n\n    @HostBinding('style.grid-column-end')\n    public get colEnd(): string {\n        return this.layout ? `${this.layout.colEnd}` : \"\";\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public rowIndex: number;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public colIndex: number;\n\n    @Input()\n    public layout: IMultiRowLayoutNode;\n\n    @Input()\n    public dimension: IPivotDimension;\n\n    @Input()\n    public rootDimension: IPivotDimension;\n\n    @Input()\n    public rowData: IPivotGridGroupRecord;\n\n    /**\n    * @hidden @internal\n    */\n    @ViewChild('headerTemplate', { read: TemplateRef, static: true })\n    public headerTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('headerDefaultTemplate', { read: TemplateRef, static: true })\n    public headerTemplateDefault: TemplateRef<any>;\n\n    @ViewChildren(IgxPivotRowDimensionHeaderGroupComponent)\n    public headerGroups: QueryList<IgxPivotRowDimensionHeaderGroupComponent>\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public override grid: PivotGridType,\n        ref: ElementRef<HTMLElement>,\n        protected injector: Injector,\n        protected envInjector: EnvironmentInjector,\n        cdr: ChangeDetectorRef,\n        protected viewRef: ViewContainerRef\n    ) {\n        super(ref, cdr);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowDimensionData: IPivotDimensionData;\n\n    public get rowDimensionColumn() {\n        return this.rowDimensionData?.column;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.rowData) {\n            // generate new rowDimension on row data change\n            this.rowDimensionData = null;\n            this.viewRef.clear();\n            this.extractFromDimensions();\n            this.viewRef.clear();\n        }\n        if (changes.width && this.rowDimensionData) {\n            const data = this.rowDimensionData;\n            data.column.width = this.grid.rowDimensionWidthToPixels(this.rootDimension) + 'px';\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public toggleRowDimension(event) {\n        this.grid.toggleRow(this.getRowDimensionKey());\n        this.grid.navigation.onRowToggle(this.getExpandState(), this.dimension, this.rowData, this.layout);\n        event?.stopPropagation();\n    }\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getRowDimensionKey() {\n        const dimData = this.rowDimensionData;\n        const key = PivotUtil.getRecordKey(this.rowData, dimData.dimension);\n        return key;\n    }\n\n    public getExpandState() {\n        return this.grid.gridAPI.get_row_expansion_state(this.getRowDimensionKey());\n    }\n\n    public getLevel() {\n        return this.grid.hasHorizontalLayout ? 0 : this.dimension.level;\n    }\n\n    protected getHeaderWidthFromDimension() {\n        if (this.grid.hasHorizontalLayout) {\n            return this.width === -1 ? 'fit-content' : this.width;\n        }\n        return this.grid.rowDimensionWidth(this.rootDimension);\n    }\n\n    protected extractFromDimensions() {\n        if (this.dimension && this.rowData) {\n            const col = this.extractFromDimension(this.dimension, this.rowData);\n            const prevDims = [];\n            this.rowDimensionData = {\n                column: col,\n                dimension: this.dimension,\n                prevDimensions: prevDims\n            };\n        }\n    }\n\n    protected extractFromDimension(dim: IPivotDimension, rowData: IPivotGridGroupRecord) {\n        const field = dim.memberName;\n        const header = rowData?.dimensionValues.get(field);\n        const col = this._createColComponent(field, header, dim);\n        return col;\n    }\n\n    protected _createColComponent(field: string, header: string, dim: IPivotDimension) {\n        const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector});\n        ref.instance.field = field;\n        ref.instance.header = header;\n        ref.instance.width = this.grid.rowDimensionWidthToPixels(this.rootDimension) + 'px';\n        ref.instance.resizable = this.grid.rowDimensionResizing;\n        (ref as any).instance._vIndex = this.grid.columns.length + this.rowIndex + this.rowIndex * this.grid.pivotConfiguration.rows.length;\n\n\n        if (header && dim.childLevel && (!this.rowData.totalRecordDimensionName || this.rowData.totalRecordDimensionName !== dim.memberName)) {\n            ref.instance.headerTemplate = this.headerTemplate;\n        } else {\n            ref.instance.headerTemplate = this.headerTemplateDefault;\n        }\n        return ref.instance;\n    }\n}\n","<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" [style.width.px]=\"width\"\n    [class.igx-grid__tr--mrl]=\"hasMRL\">\n    <div class=\"igx-grid__tr igx-grid__tr-header-row\" role=\"row\" [style.width.px]=\"width\">\n            <igx-pivot-row-dimension-header-group [ngClass]=\"rowDimensionColumn.headerGroupClasses\"\n                [ngStyle]=\"rowDimensionColumn.headerGroupStyles | igxHeaderGroupStyle:rowDimensionColumn:grid.pipeTrigger\" [column]=\"rowDimensionColumn\"\n                [style.min-width]=\"getHeaderWidthFromDimension() | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                [style.width]=\"getHeaderWidthFromDimension() | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                [style.flex-basis]=\"getHeaderWidthFromDimension() | igxHeaderGroupWidth:grid.defaultHeaderGroupMinWidth:hasMRL\"\n                [rowIndex]=\"rowIndex\"\n                [colIndex]=\"colIndex\"\n                [layout]=\"layout\"\n                [parent]='this'>\n            </igx-pivot-row-dimension-header-group>\n    </div>\n</div>\n\n<ng-template #headerTemplate let-column>\n    <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel()}}'>\n        <igx-icon\n            family=\"default\"\n            [name]=\"getExpandState() ? 'tree_collapse' : 'tree_expand'\"\n            [attr.draggable]=\"false\"\n            (click)=\"toggleRowDimension($event)\"\n            >\n        </igx-icon>\n        {{column.header}}\n    </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n    <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel()}}' style=\"--component-size: 3\">\n        <!--Using the igx-icon as a sizable spacer spacer here-->\n        <igx-icon style='flex-shrink: 0;' [attr.draggable]=\"false\"></igx-icon>\n        {{column.header}}\n    </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { IgxGridColumnResizerComponent } from '../resizer.component';\nimport { IgxPivotColumnResizingService } from './pivot-resizing.service';\nimport { IgxColumnResizerDirective } from '../resizer.directive';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-grid-column-resizer',\n    templateUrl: '../resizer.component.html',\n    imports: [IgxColumnResizerDirective]\n})\nexport class IgxPivotGridColumnResizerComponent extends IgxGridColumnResizerComponent {\n    constructor(public override colResizingService: IgxPivotColumnResizingService) {\n        super(colResizingService);\n    }\n}\n","import { parseDate } from '../core/utils';\nimport { PivotGridType } from '../grids/common/grid.interface';\nimport { IPivotGridRecord } from '../grids/pivot-grid/pivot-grid.interface';\nimport { PivotUtil } from '../grids/pivot-grid/pivot-util';\nimport { GridColumnDataType } from './data-util';\nimport { DefaultSortingStrategy, SortingDirection } from './sorting-strategy';\n\nexport class DefaultPivotGridRecordSortingStrategy extends DefaultSortingStrategy {\n    protected static override _instance: DefaultPivotGridRecordSortingStrategy = null;\n    public static override instance(): DefaultPivotGridRecordSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n    public override sort(data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean,\n        _grid?: PivotGridType) {\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n        const cmpFunc = (obj1, obj2) => this.compareObjects(obj1, obj2, fieldName, reverse, ignoreCase, this.getFieldValue, isDate, isTime);\n        return this.arraySort(data, cmpFunc);\n    }\n\n    protected getFieldValue(obj: IPivotGridRecord, key: string, _isDate = false, _isTime = false): any {\n        return obj.aggregationValues.get(key);\n    }\n}\n\n\nexport class DefaultPivotSortingStrategy extends DefaultSortingStrategy {\n    protected static override _instance: DefaultPivotSortingStrategy = null;\n    protected dimension;\n    public static override instance(): DefaultPivotSortingStrategy {\n        return this._instance || (this._instance = new this());\n    }\n    public override sort(data: any[],\n        fieldName: string,\n        dir: SortingDirection,\n        ignoreCase: boolean,\n        valueResolver: (obj: any, key: string, isDate?: boolean) => any,\n        isDate?: boolean,\n        isTime?: boolean,\n        grid?: PivotGridType) {\n        const key = fieldName;\n        const allDimensions = grid.allDimensions;\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n        this.dimension = PivotUtil.flatten(enabledDimensions).find(x => x.memberName === key);\n        const reverse = (dir === SortingDirection.Desc ? -1 : 1);\n        const cmpFunc = (obj1, obj2) => this.compareObjects(obj1, obj2, key, reverse, ignoreCase, this.getFieldValue, isDate, isTime);\n        return this.arraySort(data, cmpFunc);\n    }\n\n    protected getFieldValue(obj: any, key: string, _isDate = false, isTime = false): any {\n        let resolvedValue = PivotUtil.extractValueFromDimension(this.dimension, obj) || obj[0];\n        const formatAsDate = this.dimension.dataType === GridColumnDataType.Date || this.dimension.dataType === GridColumnDataType.DateTime;\n        if (formatAsDate) {\n            const date = parseDate(resolvedValue);\n            resolvedValue = isTime && date ?\n                new Date().setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()) : date;\n\n        }\n        return resolvedValue;\n    }\n}\n","import { DefaultPivotSortingStrategy } from '../../data-operations/pivot-sort-strategy';\nimport { ISortingExpression, SortingDirection } from '../../data-operations/sorting-strategy';\nimport { IPivotDimension } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\n\nexport class PivotSortUtil {\n    public static generateDimensionSortingExpressions(dimensions: IPivotDimension[]): ISortingExpression[] {\n        const expressions: ISortingExpression[] = [];\n        PivotUtil.flatten(dimensions).forEach(x => {\n            if (x.sortDirection) {\n                expressions.push({\n                    dir: x.sortDirection,\n                    fieldName: x.memberName,\n                    strategy: DefaultPivotSortingStrategy.instance()\n                });\n            } else {\n                expressions.push({\n                    dir: SortingDirection.None,\n                    fieldName: x.memberName,\n                    strategy: DefaultPivotSortingStrategy.instance()\n                });\n            }\n        });\n        return expressions;\n    }\n}","import { Directive, TemplateRef } from '@angular/core';\nimport { IgxPivotGridValueTemplateContext } from './pivot-grid.interface';\nimport { IgxColumnTemplateContext } from '../common/grid.interface';\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxPivotValueChip]',\n    standalone: true\n})\nexport class IgxPivotValueChipTemplateDirective {\n    constructor(public template: TemplateRef<IgxPivotGridValueTemplateContext>) { }\n    public static ngTemplateContextGuard(_directive: IgxPivotValueChipTemplateDirective,\n        context: unknown): context is IgxPivotGridValueTemplateContext {\n        return true;\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxPivotRowDimensionHeader]',\n    standalone: true\n})\nexport class IgxPivotRowDimensionHeaderTemplateDirective {\n    constructor(public template: TemplateRef<IgxColumnTemplateContext>) { }\n    public static ngTemplateContextGuard(_directive: IgxPivotRowDimensionHeaderTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { cloneArray, resolveNestedPath } from '../../core/utils';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { DefaultPivotGridRecordSortingStrategy } from '../../data-operations/pivot-sort-strategy';\nimport { FilterUtil, IFilteringStrategy } from '../../data-operations/filtering-strategy';\nimport {\n    DimensionValuesFilteringStrategy, PivotColumnDimensionsStrategy,\n    PivotRowDimensionsStrategy\n} from '../../data-operations/pivot-strategy';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { GridBaseAPIService } from '../api.service';\nimport { GridType, IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IGridSortingStrategy } from '../common/strategy';\nimport { IgxGridBaseDirective } from '../grid-base.directive';\nimport { DEFAULT_PIVOT_KEYS, IPivotConfiguration, IPivotDimension, IPivotGridColumn, IPivotGridGroupRecord, IPivotGridHorizontalGroup, IPivotGridRecord, IPivotKeys, IPivotValue } from './pivot-grid.interface';\nimport { PivotSortUtil } from './pivot-sort-util';\nimport { PivotUtil } from './pivot-util';\nimport { IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridRow',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotRowPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid?: PivotGridType) { }\n\n    public transform(\n        collection: any,\n        config: IPivotConfiguration,\n        cloneStrategy: IDataCloneStrategy,\n        _: Map<any, boolean>,\n        _pipeTrigger?: number,\n        __?\n    ): IPivotGridRecord[] {\n        const pivotKeys = config.pivotKeys || DEFAULT_PIVOT_KEYS;\n        const enabledRows = config.rows?.filter(x => x.enabled) || [];\n        const enabledColumns = config.columns?.filter(x => x.enabled) || [];\n        const enabledValues = config.values?.filter(x => x.enabled) || [];\n        if (enabledRows.length === 0 && enabledColumns.length === 0 && enabledValues.length === 0) {\n            // nothing to group and aggregate by ...\n            return [];\n        }\n        const rowStrategy = config.rowStrategy || PivotRowDimensionsStrategy.instance();\n        const data = cloneArray(collection, true);\n        return rowStrategy.process(data, enabledRows, config.values, cloneStrategy, pivotKeys);\n    }\n}\n\n/**\n * @hidden\n * Transforms generic array data into IPivotGridRecord[]\n */\n@Pipe({\n    name: 'pivotGridAutoTransform',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotAutoTransform implements PipeTransform {\n    public transform(\n        collection: any[],\n        config: IPivotConfiguration,\n        _pipeTrigger?: number,\n        __?,\n    ): IPivotGridRecord[] {\n        let needsTransformation = false;\n        if (collection.length > 0) {\n            needsTransformation = !this.isPivotRecord(collection[0]);\n        }\n\n        if (!needsTransformation) return collection;\n\n        const res = this.processCollectionToPivotRecord(config, collection);\n        return res;\n    }\n\n    protected isPivotRecord(arg: IPivotGridRecord): arg is IPivotGridRecord {\n        return !!(arg as IPivotGridRecord).aggregationValues;\n    }\n\n    protected processCollectionToPivotRecord(config: IPivotConfiguration, collection: any[]): IPivotGridRecord[] {\n        const pivotKeys: IPivotKeys = config.pivotKeys || DEFAULT_PIVOT_KEYS;\n        const enabledRows = config.rows.filter(x => x.enabled);\n        const allFlat: IPivotDimension[] = PivotUtil.flatten(enabledRows);\n        const result: IPivotGridRecord[] = [];\n        for (const rec of collection) {\n            const pivotRec: IPivotGridRecord = {\n                dimensionValues: new Map<string, string>(),\n                aggregationValues: new Map<string, string>(),\n                children: new Map<string, IPivotGridRecord[]>(),\n                dimensions: []\n            };\n            const keys = Object.keys(rec)\n            for (const key of keys) {\n                const dim = allFlat.find(x => x.memberName === key);\n                if (dim) {\n                    //field has matching dimension\n                    pivotRec.dimensions.push(dim);\n                    pivotRec.dimensionValues.set(key, rec[key]);\n                } else if (key.indexOf(pivotKeys.rowDimensionSeparator + pivotKeys.records) !== -1) {\n                    // field that contains child collection\n                    const dimKey = key.slice(0, key.indexOf(pivotKeys.rowDimensionSeparator + pivotKeys.records));\n                    const childData = rec[key];\n                    const childPivotData = this.processCollectionToPivotRecord(config, childData);\n                    pivotRec.children.set(dimKey, childPivotData);\n                } else {\n                    // an aggregation\n                    pivotRec.aggregationValues.set(key, rec[key]);\n                }\n            }\n            const flattened = PivotUtil.flatten(config.rows);\n            pivotRec.dimensions.sort((x, y) => flattened.indexOf(x) - flattened.indexOf(y));\n            result.push(pivotRec);\n        }\n        return result;\n    }\n\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridRowExpansion',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotRowExpansionPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid?: PivotGridType) { }\n\n    public transform(\n        collection: IPivotGridRecord[],\n        config: IPivotConfiguration,\n        expansionStates: Map<any, boolean>,\n        defaultExpand: boolean,\n        _pipeTrigger?: number,\n        __?,\n    ): IPivotGridRecord[] {\n        const enabledRows = config.rows?.filter(x => x.enabled) || [];\n        const data = collection ? cloneArray(collection, true) : [];\n        const horizontalRowDimensions = [];\n        for (const row of enabledRows) {\n            if (this.grid?.hasHorizontalLayout) {\n                PivotUtil.flattenGroupsHorizontally(\n                    data,\n                    row,\n                    expansionStates,\n                    defaultExpand,\n                    horizontalRowDimensions,\n                    this.grid.pivotUI.horizontalSummariesPosition\n            );\n            } else {\n                PivotUtil.flattenGroups(data, row, expansionStates, defaultExpand);\n            }\n        }\n\n        let finalData = data;\n        if (this.grid?.hasHorizontalLayout) {\n            const allRowDims = PivotUtil.flatten(this.grid.rowDimensions);\n            this.grid.visibleRowDimensions = allRowDims.filter((rowDim) => horizontalRowDimensions.some(targetDim => targetDim.memberName === rowDim.memberName));\n        } else {\n            if (this.grid) {\n                this.grid.visibleRowDimensions = enabledRows;\n            }\n            finalData = enabledRows.length > 0 ?\n            finalData.filter(x => x.dimensions.length === enabledRows.length) : finalData;\n        }\n\n        if (this.grid) {\n            this.grid.setFilteredSortedData(finalData, false);\n        }\n        return finalData;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridCellMerging',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotCellMergingPipe implements PipeTransform {\n    constructor(@Inject(IGX_GRID_BASE) private grid: PivotGridType) { }\n    public transform(\n        collection: IPivotGridRecord[],\n        config: IPivotConfiguration,\n        dim: IPivotDimension,\n        _pipeTrigger?: number\n    ): IPivotGridGroupRecord[] {\n        if (collection.length === 0 || config.rows.length === 0) return collection;\n        const data: IPivotGridGroupRecord[] = collection ? cloneArray(collection, true) : [];\n        const res: IPivotGridGroupRecord[] = [];\n\n        let groupData: IPivotGridGroupRecord[] = [];\n        let prevId;\n        const enabledRows = this.grid.hasHorizontalLayout ? (this.grid as any).visibleRowDimensions :  config.rows?.filter(x => x.enabled);\n        const dimIndex = enabledRows.indexOf(dim);\n        for (const rec of data) {\n            let currentDim;\n            if (this.grid.hasHorizontalLayout) {\n                currentDim = dim;\n                rec.dimensions = enabledRows;\n            } else {\n                currentDim = rec.dimensions[dimIndex];\n            }\n\n            const id = PivotUtil.getRecordKey(rec, currentDim);\n            if (groupData.length > 0 && prevId !== id) {\n                const h = groupData.length > 1 ? groupData.length * this.grid.renderedRowHeight : undefined;\n                groupData[0].height = h;\n                groupData[0].rowSpan = groupData.length;\n                res.push(groupData[0]);\n                groupData = [];\n            }\n            groupData.push(rec);\n            prevId = id;\n        }\n        if (groupData.length > 0) {\n            const h = groupData.length > 1 ? groupData.length * this.grid.rowHeight + (groupData.length - 1) + 1 : undefined;\n            groupData[0].height = h;\n            groupData[0].rowSpan = groupData.length;\n            res.push(groupData[0]);\n        }\n        return res;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: \"pivotGridHorizontalRowGrouping\",\n    standalone: true\n})\nexport class IgxPivotGridHorizontalRowGrouping implements PipeTransform {\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n    public transform(\n        collection: IPivotGridRecord[],\n        config: IPivotConfiguration,\n        _pipeTrigger?: number,\n        _regroupTrigger?: number\n    ): IPivotGridRecord[][] {\n        if (collection.length === 0 || config.rows.length === 0) return null;\n        const data: IPivotGridRecord[] = collection ? cloneArray(collection, true) : [];\n        const res: IPivotGridRecord[][] = [];\n\n        const groupDim = config.rows.filter(dim => dim.enabled)[0];\n        let curGroup = [];\n        let curGroupValue = data[0].dimensionValues.get(groupDim.memberName);\n        for (const [index, curRec] of data.entries()) {\n            curRec.dataIndex = index;\n            const curRecValue = curRec.dimensionValues.get(groupDim.memberName);\n            if (curGroup.length === 0 || curRecValue === curGroupValue) {\n                curGroup.push(curRec);\n            } else {\n                curGroup[\"height\"] = this.grid.renderedRowHeight * curGroup.length;\n                res.push(curGroup);\n                curGroup = [curRec];\n                curGroupValue = curRecValue;\n            }\n        }\n        res.push(curGroup);\n\n        return res;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: \"pivotGridHorizontalRowCellMerging\",\n    standalone: true\n})\nexport class IgxPivotGridHorizontalRowCellMerging implements PipeTransform {\n    constructor(@Inject(IGX_GRID_BASE) private grid: PivotGridType) { }\n    public transform(\n        collection: IPivotGridRecord[],\n        config: IPivotConfiguration,\n        _pipeTrigger?: number\n    ): IPivotGridHorizontalGroup[] {\n        if (collection.length === 0 || config.rows.length === 0) return [{\n            colStart: 1,\n            colSpan: 1,\n            rowStart: 1,\n            rowSpan: 1,\n            records: collection\n        }];\n        const data: IPivotGridRecord[] = collection ? cloneArray(collection, true) : [];\n        const res: IPivotGridHorizontalGroup[] = [];\n\n        // Merge vertically for each row dimension.\n        const verticalMergeGroups: IPivotGridHorizontalGroup[][] = [ ...data.map(_ => []) ];\n        for (let dimIndex = 0; dimIndex < this.grid.visibleRowDimensions.length; dimIndex++) {\n            const curDim = this.grid.visibleRowDimensions[dimIndex];\n            let curGroup: IPivotGridHorizontalGroup = {\n                colStart: dimIndex + 1,\n                colSpan: 1,\n                rowStart: 1,\n                rowSpan: 1,\n                value: data[0].dimensionValues.get(curDim.memberName),\n                rootDimension: curDim,\n                dimensions: [curDim],\n                records: [data[0]]\n            };\n            for(let i = 1; i < data.length; i++) {\n                const curRec = data[i];\n                const curRecValue = curRec.dimensionValues.get(curDim.memberName);\n                const previousRowCell = verticalMergeGroups[i][verticalMergeGroups[i].length - 1];\n                if (curRecValue === curGroup.value && !previousRowCell) {\n                    // If previousRowCell is non existing, its merged so we can push in this vertigal group as well.\n                    curGroup.rowSpan++;\n                    curGroup.records.push(curRec);\n                } else {\n                    verticalMergeGroups[curGroup.rowStart - 1].push(curGroup);\n                    curGroup = {\n                        colStart: dimIndex + 1,\n                        colSpan: 1,\n                        rowStart: curGroup.rowStart + curGroup.rowSpan,\n                        rowSpan: 1,\n                        value: curRec.dimensionValues.get(curDim.memberName),\n                        rootDimension: curDim,\n                        dimensions: [curDim],\n                        records: [curRec]\n                    };\n                }\n            }\n\n            verticalMergeGroups[curGroup.rowStart - 1].push(curGroup);\n        }\n\n        // Merge rows in a single array\n        const sortedGroups = verticalMergeGroups.reduce((prev, cur) => prev.concat(...cur), []);\n\n        // Horizontally merge any groups that can be merged or have been\n        res.push(sortedGroups[0]);\n        let prevGroup = sortedGroups[0];\n        for (let i = 1; i < sortedGroups.length; i++) {\n            const curGroup = sortedGroups[i];\n            if (curGroup.value && prevGroup.value !== curGroup.value) {\n                prevGroup = curGroup;\n                res.push(curGroup);\n            } else {\n                prevGroup.dimensions.push(curGroup.rootDimension);\n                prevGroup.colSpan++;\n            }\n        }\n\n        return res;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridColumn',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotColumnPipe implements PipeTransform {\n\n    public transform(\n        collection: IPivotGridRecord[],\n        config: IPivotConfiguration,\n        cloneStrategy: IDataCloneStrategy,\n        _: Map<any, boolean>,\n        _pipeTrigger?: number,\n        __?\n    ): IPivotGridRecord[] {\n        const pivotKeys = config.pivotKeys || DEFAULT_PIVOT_KEYS;\n        const enabledColumns = config.columns?.filter(x => x.enabled) || [];\n        const enabledValues = config.values?.filter(x => x.enabled) || [];\n\n        const colStrategy = config.columnStrategy || PivotColumnDimensionsStrategy.instance();\n        const data = cloneArray(collection, true);\n        return colStrategy.process(data, enabledColumns, enabledValues, cloneStrategy, pivotKeys);\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridFilter',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotGridFilterPipe implements PipeTransform {\n    constructor(private gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>) { }\n    public transform(collection: any[],\n        config: IPivotConfiguration,\n        filterStrategy: IFilteringStrategy,\n        advancedExpressionsTree: IFilteringExpressionsTree,\n        _filterPipeTrigger: number,\n        _pipeTrigger: number): any[] {\n        const expressionsTree = PivotUtil.buildExpressionTree(config);\n\n        const state = {\n            expressionsTree,\n            strategy: filterStrategy || new DimensionValuesFilteringStrategy(),\n            advancedExpressionsTree\n        };\n\n        if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n            return collection;\n        }\n\n        const result = FilterUtil.filter(cloneArray(collection, true), state, this.gridAPI.grid);\n\n        return result;\n    }\n}\n\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridColumnSort',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotGridColumnSortingPipe implements PipeTransform {\n    public transform(\n        collection: IPivotGridRecord[],\n        expressions: ISortingExpression[],\n        sorting: IGridSortingStrategy,\n        _pipeTrigger: number\n    ): IPivotGridRecord[] {\n        let result: IPivotGridRecord[];\n\n        if (!expressions.length) {\n            result = collection;\n        } else {\n            for (const expr of expressions) {\n                expr.strategy = DefaultPivotGridRecordSortingStrategy.instance();\n            }\n            result = PivotUtil.sort(cloneArray(collection, true), expressions, sorting);\n        }\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'pivotGridSort',\n    pure: true,\n    standalone: true\n})\nexport class IgxPivotGridSortingPipe implements PipeTransform {\n    constructor(private gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>) { }\n    public transform(collection: any[], config: IPivotConfiguration, sorting: IGridSortingStrategy, _pipeTrigger: number): any[] {\n        let result: any[];\n        const allDimensions = config.rows || [];\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n        const expressions = PivotSortUtil.generateDimensionSortingExpressions(enabledDimensions);\n        if (!expressions.length) {\n            result = collection;\n        } else {\n            result = DataUtil.sort(cloneArray(collection, true), expressions, sorting, this.gridAPI.grid);\n        }\n\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: \"filterPivotItems\",\n    standalone: true\n})\nexport class IgxFilterPivotItemsPipe implements PipeTransform {\n    public transform(\n        collection: (IPivotDimension | IPivotValue)[],\n        filterCriteria: string,\n        _pipeTrigger: number\n    ): any[] {\n        if (!collection) {\n            return collection;\n        }\n        let copy = collection.slice(0);\n        if (filterCriteria && filterCriteria.length > 0) {\n            const filterFunc = (c) => {\n                const filterText = c.member || c.memberName;\n                if (!filterText) {\n                    return false;\n                }\n                return (\n                    filterText\n                        .toLocaleLowerCase()\n                        .indexOf(filterCriteria.toLocaleLowerCase()) >= 0 ||\n                    (c.children?.some(filterFunc) ?? false)\n                );\n            };\n            copy = collection.filter(filterFunc);\n        }\n        return copy;\n    }\n}\n\nexport interface GridStyleCSSProperty {\n    [prop: string]: any;\n}\n\n@Pipe({\n    name: 'igxPivotCellStyleClasses',\n    standalone: true\n})\nexport class IgxPivotGridCellStyleClassesPipe implements PipeTransform {\n\n    public transform(cssClasses: GridStyleCSSProperty, _: any, rowData: IPivotGridRecord, columnData: IPivotGridColumn, index: number, __: number): string {\n        if (!cssClasses) {\n            return '';\n        }\n\n        const result = [];\n\n        for (const cssClass of Object.keys(cssClasses)) {\n            const callbackOrValue = cssClasses[cssClass];\n            const apply = typeof callbackOrValue === 'function' ?\n                callbackOrValue(rowData, columnData, resolveNestedPath(rowData, columnData.field), index) : callbackOrValue;\n            if (apply) {\n                result.push(cssClass);\n            }\n        }\n\n        return result.join(' ');\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    forwardRef,\n    HostBinding, Inject, Input, ViewContainerRef\n} from '@angular/core';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IgxRowDirective } from '../row.directive';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { IPivotGridColumn, IPivotGridRecord } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\nimport { IgxPivotGridCellStyleClassesPipe } from './pivot-grid.pipes';\nimport { IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from '../common/pipes';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { IgxGridCellComponent } from '../cell.component';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-row',\n    templateUrl: './pivot-row.component.html',\n    providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }],\n    imports: [IgxGridForOfDirective, IgxGridCellComponent, NgClass, NgStyle, IgxCheckboxComponent, IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe, IgxPivotGridCellStyleClassesPipe]\n})\nexport class IgxPivotRowComponent extends IgxRowDirective {\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('attr.aria-selected')\n    public override get selected(): boolean {\n        let isSelected = false;\n        for (const rowDim of this.data.dimensions) {\n            const key = PivotUtil.getRecordKey(this.data, rowDim);\n            if (this.selectionService.isPivotRowSelected(key)) {\n                isSelected = true;\n            }\n        }\n        return isSelected;\n    }\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public override grid: PivotGridType,\n        selectionService: IgxGridSelectionService,\n        element: ElementRef<HTMLElement>,\n        cdr: ChangeDetectorRef,\n        protected viewRef: ViewContainerRef\n    ) {\n        super(grid, selectionService, element, cdr);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get viewIndex(): number {\n        return this.index;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override disabled = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get addRowUI(): any {\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get inEditMode(): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override set pinned(_value: boolean) {\n    }\n\n    public override get pinned(): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override delete() {\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override beginAddRow() {\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override update(_value: any) {\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override pin() {\n        return false;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public override unpin() {\n        return false;\n    }\n\n    /**\n    *  The pivot record data passed to the row component.\n    *\n    * ```typescript\n    * // get the pivot row data for the first selected row\n    * let selectedRowData = this.grid.selectedRows[0].data;\n    * ```\n    */\n    @Input()\n    public override get data(): IPivotGridRecord {\n        return this._data;\n    }\n\n    public override set data(v: IPivotGridRecord) {\n        this._data = v;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get pivotAggregationData() {\n        const aggregations = this.data.aggregationValues;\n        const obj = {};\n        aggregations.forEach((value, key) => {\n            obj[key] = value;\n        });\n        return obj;\n    }\n\n    public getCellClass(col: IgxColumnComponent) {\n        const values = this.grid.values;\n        if (values.length === 1) {\n            return values[0].styles;\n        }\n        const colName = col.field.split(this.grid.pivotKeys.columnDimensionSeparator);\n        const measureName = colName[colName.length - 1];\n        return values.find(v => v.member === measureName)?.styles;\n    }\n\n    public override isCellActive(visibleColumnIndex) {\n        const nav = this.grid.navigation\n        const node = nav.activeNode;\n        return node && Object.keys(node).length !== 0 ?\n            !nav.isRowHeaderActive &&\n            !nav.isRowDimensionHeaderActive &&\n            super.isCellActive(visibleColumnIndex) :\n            false;\n    }\n\n    public getColumnData(col: IgxColumnComponent) : IPivotGridColumn {\n        const path = col.field.split(this.grid.pivotKeys.columnDimensionSeparator);\n        const keyValueMap = new Map<string, string>();\n        const colDimensions = PivotUtil.flatten(this.grid.columnDimensions);\n        for (const dim of colDimensions) {\n            keyValueMap.set(dim.memberName, path.shift());\n        }\n        let pivotValue;\n        if (this.grid.hasMultipleValues) {\n            pivotValue = this.grid.values.find(x => x.member === path.shift());\n        } else {\n            pivotValue = this.grid.values ? this.grid.values[0] : undefined;\n        }\n        return {\n            field: col.field,\n            dimensions: this.grid.columnDimensions,\n            dimensionValues: keyValueMap,\n            value: pivotValue\n        };\n    }\n}\n","<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n    [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n    [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n    [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n    <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n        [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n\n        [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n        [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n        [ngClass]=\"this.getCellClass(col) | igxPivotCellStyleClasses:data[col.field]:data:getColumnData(col):viewIndex:grid.pipeTrigger\"\n        [ngStyle]=\"col.cellStyles | igxCellStyles:pivotAggregationData[col.field]:pivotAggregationData:col.field:viewIndex:grid.pipeTrigger\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n        [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n        [rowData]=\"data\" [columnData]='getColumnData(col)'\n        [style.min-width]=\"col.resolvedWidth\" [style.max-width]=\"col.resolvedWidth\"\n        [style.flex-basis]=\"col.resolvedWidth\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"pivotAggregationData[col.field] | dataMapper:col.field:grid.pipeTrigger:pivotAggregationData[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n        (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n    </igx-grid-cell>\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n            [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n        </igx-checkbox>\n    </div>\n</ng-template>\n\n","import { GridResourceStringsEN, IGridResourceStrings } from '../../core/i18n/grid-resources';\nimport { getCurrentResourceStrings } from '../../core/i18n/resources';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport { IPivotDimension } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\n\nexport interface IPivotDateDimensionOptions {\n    /** Enables/Disables total value of all periods. */\n    total?: boolean;\n    /** Enables/Disables dimensions per year from provided periods. */\n    years?: boolean;\n    /*/** Enables/Disables dimensions per quarter from provided periods. */\n    quarters?: boolean;\n    /** Enables/Disables dimensions per month from provided periods. */\n    months?: boolean;\n    /** Enabled/Disables dimensions for the full date provided */\n    fullDate?: boolean;\n}\n\n/* blazorAlternateBaseType: PivotDimension */\n/* alternateBaseType: PivotDimension */\n// Equals to pretty much this configuration:\n// {\n//     member: () => 'All Periods',\n//     enabled: true,\n//     fieldName: 'AllPeriods',\n//     childLevel: {\n//         fieldName: 'Years',\n//         member: (rec) => {\n//             const recordValue = rec['Date'];\n//             return recordValue ? (new Date(recordValue)).getFullYear().toString() : rec['Years'];\n//         },\n//         enabled: true,\n//         childLevel: {\n//                 member: (rec) => {\n//                     const recordValue = rec['Date'];\n//                     return recordValue ? new Date(recordValue).toLocaleString('default', { month: 'long' }) : rec['Months'];\n//                 },\n//                 enabled: true,\n//                 fieldName: 'Months',\n//                 childLevel: {\n//                         member: 'Date',\n//                         fieldName:'Date',\n//                         enabled: true\n//                     }\n//             }\n//     }\n// },\nexport class IgxPivotDateDimension implements IPivotDimension {\n    /** Enables/Disables a particular dimension from pivot structure. */\n    public enabled = true;\n\n    /**\n     * Gets/Sets data type\n     */\n    public dataType?: GridColumnDataType;\n\n    /* blazorSuppress */\n    /** Default options. */\n    public defaultOptions = {\n        total: true,\n        years: true,\n        months: true,\n        fullDate: true\n    };\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    public set resourceStrings(value: IGridResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    public get resourceStrings(): IGridResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Gets/Sets the base dimension that is used by this class to determine the other dimensions and their values.\n     * Having base dimension set is required in order for the Date Dimensions to show.\n     */\n    public get baseDimension(): IPivotDimension {\n        return this._baseDimension;\n    }\n    public set baseDimension(value: IPivotDimension) {\n        this._baseDimension = value;\n        this.initialize(this.baseDimension, this.options);\n    }\n\n    /**\n     * Gets/Sets the options for the predefined date dimensions whether to show quarter, years and etc.\n     */\n    public get options(): IPivotDateDimensionOptions {\n        return this._options;\n    }\n    public set options(value: IPivotDateDimensionOptions) {\n        this._options = value;\n        if (this.baseDimension) {\n            this.initialize(this.baseDimension, this.options);\n        }\n    }\n\n    /** @hidden @internal */\n    public childLevel?: IPivotDimension;\n    /** @hidden @internal */\n    public memberName = 'AllPeriods';\n    public displayName: string;\n    private _resourceStrings = getCurrentResourceStrings(GridResourceStringsEN);\n    private _baseDimension: IPivotDimension;\n    private _options: IPivotDateDimensionOptions = {};\n    private _monthIntl = new Intl.DateTimeFormat('default', { month: 'long' });\n\n\n    /**\n     * Creates additional pivot date dimensions based on a provided dimension describing date data:\n     *\n     * @param inDateDimension Base dimension that is used by this class to determine the other dimensions and their values.\n     * @param inOptions Options for the predefined date dimensions whether to show quarter, years and etc.\n     * @example\n     * ```typescript\n     * // Displays only years as parent dimension to the base dimension provided.\n     * new IgxPivotDateDimension({ memberName: 'Date', enabled: true }, { total: false, months: false });\n     * ```\n     */\n    constructor(inBaseDimension: IPivotDimension = null, inOptions: IPivotDateDimensionOptions = {}) {\n        this._baseDimension = inBaseDimension;\n        this._options = inOptions;\n        if (this.baseDimension && this.options) {\n            this.initialize(this.baseDimension, this.options);\n        }\n    }\n\n    protected initialize(inBaseDimension, inOptions) {\n        const options = { ...this.defaultOptions, ...inOptions };\n\n        this.dataType = GridColumnDataType.Date;\n        inBaseDimension.dataType = GridColumnDataType.Date;\n\n        this.enabled = inBaseDimension.enabled;\n        this.displayName = inBaseDimension.displayName || this.resourceStrings.igx_grid_pivot_date_dimension_total;\n\n        const baseDimension = options.fullDate ? inBaseDimension : null;\n        const monthDimensionDef: IPivotDimension = {\n            memberName: 'Months',\n            memberFunction: (rec) => {\n                const recordValue = PivotUtil.extractValueFromDimension(inBaseDimension, rec);\n                return recordValue ? this._monthIntl.format(new Date(recordValue)) : rec['Months'];\n            },\n            enabled: true,\n            childLevel: baseDimension\n        };\n        const monthDimension = options.months ? monthDimensionDef : baseDimension;\n\n        const quarterDimensionDef: IPivotDimension = {\n            memberName: 'Quarters',\n            memberFunction: (rec) => {\n                const recordValue = PivotUtil.extractValueFromDimension(inBaseDimension, rec);\n                return recordValue ? `Q` + Math.ceil((new Date(recordValue).getMonth() + 1) / 3) : rec['Quarters'];\n            },\n            enabled: true,\n            childLevel: monthDimension\n        };\n        const quarterDimension = options.quarters ? quarterDimensionDef : monthDimension;\n\n        const yearsDimensionDef: IPivotDimension = {\n            memberName: 'Years',\n            memberFunction: (rec) => {\n                const recordValue = PivotUtil.extractValueFromDimension(inBaseDimension, rec);\n                return recordValue ? (new Date(recordValue)).getFullYear().toString() : rec['Years'];\n            },\n            enabled: true,\n            childLevel: quarterDimension\n        };\n        const yearsDimension = options.years ? yearsDimensionDef : quarterDimension;\n        this.childLevel = yearsDimension;\n\n        if (!options.total) {\n            this.memberName = yearsDimension.memberName;\n            this.memberFunction = yearsDimension.memberFunction;\n            this.childLevel = yearsDimension.childLevel;\n            this.displayName = yearsDimension.displayName;\n        }\n    }\n\n    /** @hidden @internal */\n    public memberFunction = (_data) => this.resourceStrings.igx_grid_pivot_date_dimension_total;\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EnvironmentInjector,\n    HostBinding,\n    Inject,\n    Injector,\n    Input,\n    QueryList,\n    ViewChildren,\n    ViewContainerRef\n} from '@angular/core';\nimport { IGX_GRID_BASE, PivotGridType } from '../common/grid.interface';\nimport { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';\nimport { IPivotDimension, IPivotDimensionData, IPivotGridHorizontalGroup, IPivotGridRecord } from './pivot-grid.interface';\nimport { IgxPivotRowDimensionContentComponent } from './pivot-row-dimension-content.component';\nimport { IgxPivotGridHorizontalRowCellMerging } from './pivot-grid.pipes';\nimport { PivotUtil } from './pivot-util';\n\n/**\n *\n * For all intents & purposes treat this component as what a <thead> usually is in the default <table> element.\n *\n * This container holds the pivot grid header elements and their behavior/interactions.\n *\n * @hidden @internal\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-row-dimension-mrl-row',\n    templateUrl: './pivot-row-dimension-mrl-row.component.html',\n    imports: [IgxPivotRowDimensionContentComponent, IgxPivotGridHorizontalRowCellMerging]\n})\nexport class IgxPivotRowDimensionMrlRowComponent extends IgxGridHeaderRowComponent {\n\n    @HostBinding('class.igx-grid__tbody-pivot-dimension')\n    public pivotDim = true;\n\n    @HostBinding('class.igx-grid__mrl-block')\n    public mrlBlock =  true;\n\n    @HostBinding('style.grid-template-rows')\n    public get rowsTemplate(): string {\n        return this.getRowMRLTemplate(true, this.rowGroup);\n    }\n\n    @HostBinding('style.grid-template-columns')\n    public get colsTemplate(): string {\n        return this.getRowMRLTemplate(false, this.rowGroup);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public rowIndex: number;\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public rowGroup: IPivotGridRecord[];\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public groupedData: IPivotGridRecord[][];\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxPivotRowDimensionContentComponent)\n    public contentCells: QueryList<IgxPivotRowDimensionContentComponent>\n\n    constructor(\n        @Inject(IGX_GRID_BASE) public override grid: PivotGridType,\n        ref: ElementRef<HTMLElement>,\n        protected injector: Injector,\n        protected envInjector: EnvironmentInjector,\n        cdr: ChangeDetectorRef,\n        protected viewRef: ViewContainerRef\n    ) {\n        super(ref, cdr);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowDimensionData: IPivotDimensionData;\n\n    protected getRowMRLTemplate(forRows: boolean, rows: IPivotGridRecord[]) {\n        if (forRows) {\n            return `repeat(${rows.length},1fr)`;\n        } else if (this.grid.visibleRowDimensions && this.grid.dimensionDataColumns) {\n            const res = [];\n            this.grid.visibleRowDimensions.forEach(dim => {\n                res.push(this.grid.rowDimensionWidth(dim));\n            });\n            return  res.join(' ');\n        }\n    }\n\n    public rowDimensionWidthCombined(dims: IPivotDimension[]) {\n        let resWidth = 0;\n        for (const dim of (dims || [])) {\n            const rowDimWidth = this.grid.rowDimensionWidth(dim);\n            if (rowDimWidth === 'fit-content') {\n                return -1;\n            } else {\n                resWidth += parseFloat(rowDimWidth);\n            }\n        }\n        return resWidth;\n    }\n\n    protected getGroupKey(group: IPivotGridHorizontalGroup) {\n        const rec = group.records[0];\n        const key = PivotUtil.getRecordKey(rec, group.rootDimension);\n        return key;\n    }\n}\n","@for (\n    cell of rowGroup | pivotGridHorizontalRowCellMerging:grid.pivotConfiguration:grid.pipeTrigger;\n    track getGroupKey(cell); let cellIndex = $index\n) {\n    <igx-pivot-row-dimension-content role=\"row\" class=\"igx-grid-thead\"\n        [grid]=\"grid\"\n        [dimension]=\"cell.rootDimension\"\n        [rootDimension]=\"cell.rootDimension\"\n        [rowIndex]=\"rowIndex\"\n        [colIndex]=\"cellIndex\"\n        [rowData]=\"cell.records[0]\"\n        [width]=\"rowDimensionWidthCombined(cell.dimensions)\"\n        [layout]=\"{\n            rowStart: cell.rowStart,\n            rowEnd: cell.rowStart + cell.rowSpan,\n            colStart: cell.colStart,\n            colEnd: cell.colStart + cell.colSpan,\n            columnVisibleIndex: cellIndex\n        }\">\n    </igx-pivot-row-dimension-content>\n}\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    IterableDiffers,\n    LOCALE_ID,\n    NgZone,\n    OnInit,\n    Output,\n    Optional,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef,\n    Injector,\n    ContentChild,\n    createComponent,\n    EnvironmentInjector,\n    CUSTOM_ELEMENTS_SCHEMA,\n    booleanAttribute,\n    OnChanges,\n    SimpleChanges\n} from '@angular/core';\nimport { DOCUMENT, NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\n\nimport { first, take, takeUntil} from 'rxjs/operators';\nimport { IgxGridBaseDirective } from '../grid-base.directive';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { IgxForOfSyncService, IgxForOfScrollSyncService } from '../../directives/for-of/for_of.sync.service';\nimport { ColumnType, GridType, IGX_GRID_BASE, IgxColumnTemplateContext, RowType } from '../common/grid.interface';\nimport { IgxGridCRUDService } from '../common/crud.service';\nimport { IgxGridSummaryService } from '../summaries/grid-summary.service';\nimport { DEFAULT_PIVOT_KEYS, IDimensionsChange, IgxPivotGridValueTemplateContext, IPivotConfiguration, IPivotConfigurationChangedEventArgs, IPivotDimension, IPivotValue, IValuesChange, PivotDimensionType, IPivotUISettings, PivotRowLayoutType, PivotSummaryPosition } from './pivot-grid.interface';\nimport { IgxPivotHeaderRowComponent } from './pivot-header-row.component';\nimport { IgxColumnGroupComponent } from '../columns/column-group.component';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { PivotUtil } from './pivot-util';\nimport { FilterMode, GridPagingMode, GridSummaryCalculationMode, GridSummaryPosition, Size } from '../common/enums';\nimport { WatchChanges } from '../watch-changes';\nimport { OverlaySettings } from '../../services/public_api';\nimport {\n    IGridEditEventArgs,\n    ICellPosition,\n    IColumnMovingEndEventArgs, IColumnMovingEventArgs, IColumnMovingStartEventArgs,\n    IColumnVisibilityChangedEventArgs,\n    IGridEditDoneEventArgs,\n    IGridToolbarExportEventArgs,\n    IPinColumnCancellableEventArgs,\n    IPinColumnEventArgs,\n    IPinRowEventArgs,\n    IRowDataCancelableEventArgs,\n    IRowDataEventArgs,\n    IRowDragEndEventArgs,\n    IRowDragStartEventArgs\n} from '../common/events';\nimport { IgxGridRowComponent } from '../grid/grid-row.component';\nimport { DropPosition } from '../moving/moving.service';\nimport { DimensionValuesFilteringStrategy, NoopPivotDimensionsStrategy } from '../../data-operations/pivot-strategy';\nimport { IgxGridExcelStyleFilteringComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective } from '../filtering/excel-style/excel-style-filtering.component';\nimport { IgxPivotGridNavigationService } from './pivot-grid-navigation.service';\nimport { IgxPivotColumnResizingService } from '../resizing/pivot-grid/pivot-resizing.service';\nimport { IgxFlatTransactionFactory, IgxOverlayService, State, Transaction, TransactionService } from '../../services/public_api';\nimport { cloneArray, PlatformUtil, resizeObservable } from '../../core/utils';\nimport { IgxPivotFilteringService } from './pivot-filtering.service';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { IgxGridTransaction } from '../common/types';\nimport { GridBaseAPIService } from '../api.service';\nimport { IForOfDataChangingEventArgs, IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxPivotRowDimensionContentComponent } from './pivot-row-dimension-content.component';\nimport { IgxPivotGridColumnResizerComponent } from '../resizing/pivot-grid/pivot-resizer.component';\nimport { ISortingExpression, SortingDirection } from '../../data-operations/sorting-strategy';\nimport { PivotSortUtil } from './pivot-sort-util';\nimport { IFilteringStrategy } from '../../data-operations/filtering-strategy';\nimport { IgxPivotRowDimensionHeaderTemplateDirective, IgxPivotValueChipTemplateDirective } from './pivot-grid.directives';\nimport { IFilteringOperation } from '../../data-operations/filtering-condition';\nimport { IgxGridValidationService } from '../grid/grid-validation.service';\nimport { IgxPivotRowPipe, IgxPivotRowExpansionPipe, IgxPivotAutoTransform, IgxPivotColumnPipe, IgxPivotGridFilterPipe, IgxPivotGridSortingPipe, IgxPivotGridColumnSortingPipe, IgxPivotCellMergingPipe, IgxPivotGridHorizontalRowGrouping } from './pivot-grid.pipes';\nimport { IgxGridRowClassesPipe, IgxGridRowStylesPipe } from '../common/pipes';\nimport { IgxExcelStyleSearchComponent } from '../filtering/excel-style/excel-style-search.component';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxSnackbarComponent } from '../../snackbar/snackbar.component';\nimport { IgxCircularProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxToggleDirective, IgxOverlayOutletDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxPivotRowComponent } from './pivot-row.component';\nimport { IgxTemplateOutletDirective } from '../../directives/template-outlet/template_outlet.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxGridDragSelectDirective } from '../selection/drag-select.directive';\nimport { IgxGridBodyDirective } from '../grid.common';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { DefaultDataCloneStrategy, IDataCloneStrategy } from '../../data-operations/data-clone-strategy';\nimport { IgxTextHighlightService } from '../../directives/text-highlight/text-highlight.service';\nimport { IgxPivotRowHeaderGroupComponent } from './pivot-row-header-group.component';\nimport { IgxPivotDateDimension } from './pivot-grid-dimensions';\nimport { IgxPivotRowDimensionMrlRowComponent } from './pivot-row-dimension-mrl-row.component';\n\nlet NEXT_ID = 0;\nconst MINIMUM_COLUMN_WIDTH = 200;\nconst MINIMUM_COLUMN_WIDTH_SUPER_COMPACT = 104;\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorAdditionalDependency: PivotDateDimension */\n/* blazorIndirectRender */\n/**\n * Pivot Grid provides a way to present and manipulate data in a pivot table view.\n *\n * @igxModule IgxPivotGridModule\n * @igxGroup Grids & Lists\n * @igxKeywords pivot, grid, table\n * @igxTheme igx-grid-theme\n * @remarks\n * The Ignite UI Pivot Grid is used for grouping and aggregating simple flat data into a pivot table.  Once data\n * has been bound and the dimensions and values configured it can be manipulated via sorting and filtering.\n * @example\n * ```html\n * <igx-pivot-grid [data]=\"data\" [pivotConfiguration]=\"configuration\">\n * </igx-pivot-grid>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false,\n    selector: 'igx-pivot-grid',\n    templateUrl: 'pivot-grid.component.html',\n    providers: [\n        IgxGridCRUDService,\n        IgxGridValidationService,\n        IgxGridSummaryService,\n        IgxGridSelectionService,\n        IgxColumnResizingService,\n        GridBaseAPIService,\n        { provide: IGX_GRID_BASE, useExisting: IgxPivotGridComponent },\n        { provide: IgxFilteringService, useClass: IgxPivotFilteringService },\n        IgxPivotGridNavigationService,\n        IgxPivotColumnResizingService,\n        IgxForOfSyncService,\n        IgxForOfScrollSyncService\n    ],\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        IgxPivotHeaderRowComponent,\n        IgxGridBodyDirective,\n        IgxGridDragSelectDirective,\n        IgxColumnMovingDropDirective,\n        IgxGridForOfDirective,\n        IgxTemplateOutletDirective,\n        IgxPivotRowComponent,\n        IgxToggleDirective,\n        IgxCircularProgressBarComponent,\n        IgxSnackbarComponent,\n        IgxOverlayOutletDirective,\n        IgxPivotGridColumnResizerComponent,\n        IgxIconComponent,\n        IgxPivotRowDimensionContentComponent,\n        IgxGridExcelStyleFilteringComponent,\n        IgxExcelStyleColumnOperationsTemplateDirective,\n        IgxExcelStyleFilterOperationsTemplateDirective,\n        IgxExcelStyleSearchComponent,\n        IgxGridRowClassesPipe,\n        IgxGridRowStylesPipe,\n        IgxPivotRowPipe,\n        IgxPivotRowExpansionPipe,\n        IgxPivotAutoTransform,\n        IgxPivotColumnPipe,\n        IgxPivotGridFilterPipe,\n        IgxPivotGridSortingPipe,\n        IgxPivotGridColumnSortingPipe,\n        IgxPivotCellMergingPipe,\n        IgxPivotGridHorizontalRowGrouping,\n        IgxPivotRowDimensionMrlRowComponent\n    ],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxPivotGridComponent extends IgxGridBaseDirective implements OnInit, AfterContentInit,\n    GridType, AfterViewInit, OnChanges {\n\n    /**\n     * Emitted when the dimension collection is changed via the grid chip area.\n     *\n     * @remarks\n     * Returns the new dimension collection and its type:\n     * @example\n     * ```html\n     * <igx-pivot-grid #grid [data]=\"localData\" [height]=\"'305px'\"\n     *              (dimensionsChange)=\"dimensionsChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public dimensionsChange = new EventEmitter<IDimensionsChange>();\n\n    /**\n     * Emitted when any of the pivotConfiguration properties is changed via the grid chip area.\n     *\n     * @example\n     * ```html\n     * <igx-pivot-grid #grid [data]=\"localData\" [height]=\"'305px'\"\n     *              (pivotConfigurationChanged)=\"configurationChanged($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public pivotConfigurationChange = new EventEmitter<IPivotConfigurationChangedEventArgs>();\n\n\n    /**\n     * Emitted when the dimension is initialized.\n     * @remarks\n     * Emits the dimension that is about to be initialized.\n     * @example\n     * ```html\n     * <igx-pivot-grid #grid [data]=\"localData\" [height]=\"'305px'\"\n     *              (dimensionInit)=\"dimensionInit($event)\"></igx-pivot-grid>\n     * ```\n     */\n    @Output()\n    public dimensionInit = new EventEmitter<IPivotDimension>();\n\n    /**\n     * Emitted when the value is initialized.\n     * @remarks\n     * Emits the value that is about to be initialized.\n     * @example\n     * ```html\n     * <igx-pivot-grid #grid [data]=\"localData\" [height]=\"'305px'\"\n     *              (valueInit)=\"valueInit($event)\"></igx-pivot-grid>\n     * ```\n     */\n    @Output()\n    public valueInit = new EventEmitter<IPivotValue>();\n\n\n    /**\n     * Emitted when a dimension is sorted.\n     *\n     * @example\n     * ```html\n     * <igx-pivot-grid #grid [data]=\"localData\" [height]=\"'305px'\"\n     *              (dimensionsSortingExpressionsChange)=\"dimensionsSortingExpressionsChange($event)\"></igx-pivot-grid>\n     * ```\n     */\n    @Output()\n    public dimensionsSortingExpressionsChange = new EventEmitter<ISortingExpression[]>();\n\n    /**\n     * Emitted when the values collection is changed via the grid chip area.\n     *\n     * @remarks\n     * Returns the new dimension\n     * @example\n     * ```html\n     * <igx-pivot-grid #grid [data]=\"localData\" [height]=\"'305px'\"\n     *              (valuesChange)=\"valuesChange($event)\"></igx-grid>\n     * ```\n    */\n    @Output()\n    public valuesChange = new EventEmitter<IValuesChange>();\n\n\n    /**\n     * Gets the sorting expressions generated for the dimensions.\n     *\n     * @example\n     * ```typescript\n     * const expressions = this.grid.dimensionsSortingExpressions;\n     * ```\n     */\n    public get dimensionsSortingExpressions() {\n        const allEnabledDimensions = this.rowDimensions.concat(this.columnDimensions);\n        const dimensionsSortingExpressions = PivotSortUtil.generateDimensionSortingExpressions(allEnabledDimensions);\n        return dimensionsSortingExpressions;\n    }\n\n    /** @hidden @internal */\n    @ViewChild(IgxPivotHeaderRowComponent, { static: true })\n    public override theadRow: IgxPivotHeaderRowComponent;\n\n    /**\n    * @hidden @internal\n    */\n    @ContentChild(IgxPivotValueChipTemplateDirective, { read: IgxPivotValueChipTemplateDirective })\n    protected valueChipTemplateDirective: IgxPivotValueChipTemplateDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxPivotRowDimensionHeaderTemplateDirective, { read: IgxPivotRowDimensionHeaderTemplateDirective })\n    protected rowDimensionHeaderDirective: IgxPivotRowDimensionHeaderTemplateDirective;\n\n    /**\n     * Gets/Sets a custom template for the value chips.\n     *\n     * @example\n     * ```html\n     * <igx-pivot-grid [valueChipTemplate]=\"myTemplate\"><igx-pivot-grid>\n     * ```\n     */\n    @Input()\n    public valueChipTemplate: TemplateRef<IgxPivotGridValueTemplateContext>;\n\n    @Input()\n    public rowDimensionHeaderTemplate: TemplateRef<IgxColumnTemplateContext>;\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /* @tsTwoWayProperty (true, \"PivotConfigurationChange\", \"Detail.PivotConfiguration\", false) */\n    /**\n     * Gets/Sets the pivot configuration with all related dimensions and values.\n     *\n     * @example\n     * ```html\n     * <igx-pivot-grid [pivotConfiguration]=\"config\"></igx-pivot-grid>\n     * ```\n     */\n    @Input()\n    public set pivotConfiguration(value: IPivotConfiguration) {\n        this._pivotConfiguration = value;\n        this.emitInitEvents(this._pivotConfiguration);\n        this.filteringExpressionsTree = PivotUtil.buildExpressionTree(value);\n        if (!this._init) {\n            this.setupColumns();\n        }\n        this.notifyChanges(true);\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor */\n    public get pivotConfiguration() {\n        return this._pivotConfiguration || { rows: null, columns: null, values: null, filters: null };\n    }\n\n    /**\n     * Gets/Sets whether to auto-generate the pivot configuration based on the provided data.\n     *\n     * @remarks\n     * The default value is false. When set to true, it will override all dimensions and values in the pivotConfiguration.\n     * @example\n     * ```html\n     * <igx-pivot-grid [data]=\"Data\" [autoGenerateConfig]=\"true\"></igx-pivot-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public autoGenerateConfig = false;\n\n    @Input()\n    /**\n     * Gets/Sets the pivot ui settings for the pivot grid - chips and their\n     * corresponding containers for row, filter, column dimensions and values\n     * as well as headers for the row dimensions values.\n     * @example\n     * ```html\n     * <igx-pivot-grid [pivotUI]=\"{ showRowHeaders: true }\"></igx-pivot-grid>\n     * ```\n     */\n    public set pivotUI(value: IPivotUISettings) {\n        this._pivotUI = Object.assign(this._pivotUI, value || {});\n        this.pipeTrigger++;\n        this.notifyChanges(true);\n    }\n\n    public get pivotUI() {\n        return this._pivotUI;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'grid';\n\n\n    /**\n     * Enables a super compact theme for the component.\n     * @remarks\n     * Overrides the grid size option if one is set.\n     * @example\n     * ```html\n     * <igx-pivot-grid [superCompactMode]=\"true\"></igx-pivot-grid>\n     * ```\n     */\n    @HostBinding('class.igx-grid__pivot--super-compact')\n    @Input()\n    public get superCompactMode() {\n        return this._superCompactMode;\n    }\n\n    public set superCompactMode(value) {\n        this._superCompactMode = value;\n    }\n\n    /** @hidden @internal */\n    public override get gridSize() {\n        if (this.superCompactMode) {\n            return Size.Small;\n        }\n        return super.gridSize;\n    }\n\n\n    /**\n     * Gets/Sets the values clone strategy of the pivot grid when assigning them to different dimensions.\n     *\n     * @example\n     * ```html\n     *  <igx-pivot-grid #grid [data]=\"localData\" [pivotValueCloneStrategy]=\"customCloneStrategy\"></igx-pivot-grid>\n     * ```\n     * @hidden @internal\n     */\n    @Input()\n    public get pivotValueCloneStrategy(): IDataCloneStrategy {\n        return this._pivotValueCloneStrategy;\n    }\n\n    public set pivotValueCloneStrategy(strategy: IDataCloneStrategy) {\n        if (strategy) {\n            this._pivotValueCloneStrategy = strategy;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('record_template', { read: TemplateRef, static: true })\n    public recordTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('headerTemplate', { read: TemplateRef, static: true })\n    public headerTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren('rowDimensionContainer', { read: ElementRef })\n    public rowDimensionContainer: QueryList<ElementRef<any>>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxPivotGridColumnResizerComponent)\n    public override resizeLine: IgxPivotGridColumnResizerComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxGridExcelStyleFilteringComponent, { read: IgxGridExcelStyleFilteringComponent })\n    public override excelStyleFilteringComponents: QueryList<IgxGridExcelStyleFilteringComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxPivotRowDimensionContentComponent)\n    protected rowDimensionContentCollection: QueryList<IgxPivotRowDimensionContentComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    public override get minColumnWidth() {\n        if (this.superCompactMode) {\n            return MINIMUM_COLUMN_WIDTH_SUPER_COMPACT;\n        } else {\n            return MINIMUM_COLUMN_WIDTH;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren('verticalRowDimScrollContainer', { read: IgxGridForOfDirective })\n    public verticalRowDimScrollContainers: QueryList<IgxGridForOfDirective<any, any[]>>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxPivotRowDimensionMrlRowComponent)\n    public rowDimensionMrlRowsCollection: QueryList<IgxPivotRowDimensionMrlRowComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override addRowEmptyTemplate: TemplateRef<void>;\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override autoGenerateExclude: string[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override snackbarDisplayTime = 6000;\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override cellEdit = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override cellEditDone = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override cellEditEnter = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override cellEditExit = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override columnMovingStart = new EventEmitter<IColumnMovingStartEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override columnMoving = new EventEmitter<IColumnMovingEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override columnMovingEnd = new EventEmitter<IColumnMovingEndEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override columnPin = new EventEmitter<IPinColumnCancellableEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override columnPinned = new EventEmitter<IPinColumnEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowAdd = new EventEmitter<IRowDataCancelableEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowAdded = new EventEmitter<IRowDataEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowDeleted = new EventEmitter<IRowDataEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowDelete = new EventEmitter<IRowDataCancelableEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowDragStart = new EventEmitter<IRowDragStartEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowDragEnd = new EventEmitter<IRowDragEndEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowEditEnter = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowEdit = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowEditDone = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowEditExit = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowPinning = new EventEmitter<IPinRowEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public override rowPinned = new EventEmitter<IPinRowEventArgs>();\n\n    /** @hidden @internal */\n    public columnGroupStates = new Map<string, boolean>();\n    /** @hidden @internal */\n    public dimensionDataColumns: any[];\n    /** @hidden @internal */\n    public get pivotKeys() {\n        return this.pivotConfiguration.pivotKeys || DEFAULT_PIVOT_KEYS;\n    }\n    /** @hidden @internal */\n    public override get type(): GridType[\"type\"] {\n        return 'pivot';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override dragRowID = null;\n\n    /**\n    * @hidden @internal\n    */\n    public override get rootSummariesEnabled(): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowDimensionResizing = true;\n\n    private _emptyRowDimension: IPivotDimension = { memberName: '', enabled: true, level: 0 };\n    /**\n     * @hidden @internal\n     */\n    public get emptyRowDimension(): IPivotDimension {\n        return this._emptyRowDimension;\n    }\n\n    protected _pivotValueCloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy();\n    protected override _defaultExpandState = false;\n    protected override _filterStrategy: IFilteringStrategy = new DimensionValuesFilteringStrategy();\n    protected regroupTrigger = 0;\n    private _data;\n    private _pivotConfiguration: IPivotConfiguration = { rows: null, columns: null, values: null, filters: null };\n    private p_id = `igx-pivot-grid-${NEXT_ID++}`;\n    private _superCompactMode = false;\n    private _pivotUI: IPivotUISettings = {\n        showConfiguration: true,\n        showRowHeaders: false,\n        rowLayout: PivotRowLayoutType.Vertical,\n        horizontalSummariesPosition: PivotSummaryPosition.Bottom\n    };\n    private _sortableColumns = true;\n    private _visibleRowDimensions: IPivotDimension[] = [];\n    private _shouldUpdateSizes = false;\n\n    /**\n    * Gets/Sets the default expand state for all rows.\n    */\n    @Input({ transform: booleanAttribute })\n    public get defaultExpandState() {\n        return this._defaultExpandState;\n    }\n\n    public set defaultExpandState(val: boolean) {\n        this._defaultExpandState = val;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get pagingMode() {\n        return;\n    }\n\n    public override set pagingMode(_val: GridPagingMode) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public override get hideRowSelectors() {\n        return;\n    }\n\n    public override set hideRowSelectors(_value: boolean) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override autoGenerate = true;\n\n    /**\n     * @hidden @internal\n     */\n    public override get actionStrip() {\n        return undefined as any;\n    }\n\n    /**\n     * @hidden @internal\n     * @deprecated in version 18.2.0. This property is no longer supported.\n     */\n    public override get shouldGenerate(): boolean {\n        return false;\n    }\n\n    public override set shouldGenerate(value: boolean) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override moving = false;\n\n    /**\n     * @hidden @internal\n     */\n    public override toolbarExporting = new EventEmitter<IGridToolbarExportEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    @Input({ transform: booleanAttribute })\n    public override get rowDraggable(): boolean {\n        return;\n    }\n\n\n    public override set rowDraggable(_val: boolean) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input({ transform: booleanAttribute })\n    public override get allowAdvancedFiltering() {\n        return false;\n    }\n\n    public override set allowAdvancedFiltering(_value) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get filterMode() {\n        return FilterMode.quickFilter;\n    }\n\n    public override set filterMode(_value: FilterMode) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input({ transform: booleanAttribute })\n    public override get allowFiltering() {\n        return false;\n    }\n\n    public override set allowFiltering(_value) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get page(): number {\n        return 0;\n    }\n\n    public override set page(_val: number) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get perPage(): number {\n        return;\n    }\n\n    public override set perPage(_val: number) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get pinnedColumns(): IgxColumnComponent[] {\n        return [];\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override get unpinnedColumns(): IgxColumnComponent[] {\n        return super.unpinnedColumns;\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override get unpinnedDataView(): any[] {\n        return super.unpinnedDataView;\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override get unpinnedWidth() {\n        return super.unpinnedWidth;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get pinnedWidth() {\n        return super.pinnedWidth;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override set summaryRowHeight(_value: number) {\n    }\n\n    public override get summaryRowHeight(): number {\n        return 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get transactions(): TransactionService<Transaction, State> {\n        return this._transactions;\n    }\n\n\n\n    /**\n     * @hidden @internal\n     */\n    public override get dragIndicatorIconTemplate(): TemplateRef<any> {\n        return;\n    }\n\n    public override set dragIndicatorIconTemplate(_val: TemplateRef<any>) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public override get rowEditable(): boolean {\n        return;\n    }\n\n    public override set rowEditable(_val: boolean) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get pinning() {\n        return {};\n    }\n    public override set pinning(_value) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get summaryPosition() {\n        return;\n    }\n\n    public override set summaryPosition(_value: GridSummaryPosition) {\n    }\n\n    /**\n     * @hidden @interal\n     */\n    @Input()\n    public override get summaryCalculationMode() {\n        return;\n    }\n\n    public override set summaryCalculationMode(_value: GridSummaryCalculationMode) {\n    }\n\n    /**\n     * @hidden @interal\n     */\n    @Input({ transform: booleanAttribute })\n    public override get showSummaryOnCollapse() {\n        return;\n    }\n\n    public override set showSummaryOnCollapse(_value: boolean) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get hiddenColumnsCount() {\n        return null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get pinnedColumnsCount() {\n        return null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input({ transform: booleanAttribute })\n    public override get batchEditing(): boolean {\n        return;\n    }\n\n    public override set batchEditing(_val: boolean) {\n    }\n\n    /* csSuppress */\n    public override get selectedRows(): any[] {\n        if (this.selectionService.getSelectedRows().length === 0) {\n            return [];\n        }\n        const selectedRowIds = [];\n        this.dataView.forEach(record => {\n            const prev = [];\n            for (const dim of this.rowDimensions) {\n                let currDim = dim;\n                let shouldBreak = false;\n                do {\n                    const key = PivotUtil.getRecordKey(record, currDim);\n                    if (this.selectionService.isPivotRowSelected(key) && !selectedRowIds.find(x => x === record)) {\n                        selectedRowIds.push(record);\n                        shouldBreak = true;\n                        break;\n                    }\n                    currDim = currDim.childLevel;\n                } while (currDim);\n                prev.push(dim);\n                if (shouldBreak) {\n                    break;\n                }\n            }\n\n        });\n\n        return selectedRowIds;\n    }\n\n    constructor(\n        validationService: IgxGridValidationService,\n        selectionService: IgxGridSelectionService,\n        colResizingService: IgxPivotColumnResizingService,\n        gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>,\n        transactionFactory: IgxFlatTransactionFactory,\n        elementRef: ElementRef<HTMLElement>,\n        zone: NgZone,\n        @Inject(DOCUMENT) document,\n        cdr: ChangeDetectorRef,\n        differs: IterableDiffers,\n        viewRef: ViewContainerRef,\n        injector: Injector,\n        envInjector: EnvironmentInjector,\n        public override navigation: IgxPivotGridNavigationService,\n        filteringService: IgxFilteringService,\n        textHighlightService: IgxTextHighlightService,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n        summaryService: IgxGridSummaryService,\n        @Inject(LOCALE_ID) localeId: string,\n        platform: PlatformUtil,\n        @Optional() @Inject(IgxGridTransaction) _diTransactions?: TransactionService<Transaction, State>\n    ) {\n        super(\n            validationService,\n            selectionService,\n            colResizingService,\n            gridAPI,\n            transactionFactory,\n            elementRef,\n            zone,\n            document,\n            cdr,\n            differs,\n            viewRef,\n            injector,\n            envInjector,\n            navigation,\n            filteringService,\n            textHighlightService,\n            overlayService,\n            summaryService,\n            localeId,\n            platform,\n            _diTransactions);\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        // pivot grid always generates columns automatically.\n        this.autoGenerate = true;\n        super.ngOnInit();\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        // ignore any user defined columns and auto-generate based on pivot config.\n        this.updateColumns([]);\n        Promise.resolve().then(() => {\n            if (this.autoGenerateConfig) {\n                this.generateConfig();\n            }\n            this.setupColumns();\n        });\n        if (this.valueChipTemplateDirective) {\n            this.valueChipTemplate = this.valueChipTemplateDirective.template;\n        }\n        if (this.rowDimensionHeaderDirective) {\n            this.rowDimensionHeaderTemplate = this.rowDimensionHeaderDirective.template;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngAfterViewInit() {\n        Promise.resolve().then(() => {\n            super.ngAfterViewInit();\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.superCompactMode && !changes.superCompactMode.isFirstChange()) {\n            this._shouldUpdateSizes = true;\n            resizeObservable(this.verticalScrollContainer.displayContainer).pipe(take(1), takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n        }\n    }\n\n    /**\n     * Notifies for dimension change.\n     */\n    public notifyDimensionChange(regenerateColumns = false) {\n        if (regenerateColumns) {\n            this.setupColumns();\n        }\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Gets the full list of dimensions.\n     *\n     * @example\n     * ```typescript\n     * const dimensions = this.grid.allDimensions;\n     * ```\n     */\n    public get allDimensions() {\n        const config = this._pivotConfiguration;\n        if (!config) return [];\n        return (config.rows || []).concat((config.columns || [])).concat(config.filters || []).filter(x => x !== null && x !== undefined);\n    }\n\n    protected get allVisibleDimensions() {\n        const config = this._pivotConfiguration;\n        if (!config) return [];\n        const uniqueVisibleRowDims = this.visibleRowDimensions.filter(dim => !config.rows.find(configRow => configRow.memberName === dim.memberName));\n        const rows = (config.rows || []).concat(...uniqueVisibleRowDims);\n        return rows.concat((config.columns || [])).concat(config.filters || []).filter(x => x !== null && x !== undefined);\n    }\n\n    protected override get shouldResize(): boolean {\n        if (!this.dataRowList.first?.cells || this.dataRowList.first.cells.length === 0) {\n            return false;\n        }\n        const isSizePropChanged = super.shouldResize;\n        if (isSizePropChanged || this._shouldUpdateSizes) {\n            this._shouldUpdateSizes = false;\n            return true;\n        }\n        return false;\n    }\n\n    /** @hidden @internal */\n    public createFilterESF(dropdown: any, column: ColumnType, options: OverlaySettings, shouldReatach: boolean) {\n        options.outlet = this.outlet;\n        if (dropdown) {\n            dropdown.initialize(column, this.overlayService);\n            if (shouldReatach) {\n                const id = this.overlayService.attach(dropdown.element, options);\n                dropdown.overlayComponentId = id;\n                return { id, ref: undefined };\n            }\n            return { id: dropdown.overlayComponentId, ref: undefined };\n        }\n    }\n\n    /** @hidden */\n    public override featureColumnsWidth() {\n        return this.pivotRowWidths || 0;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets/Sets the value of the `id` attribute.\n     *\n     * @remarks\n     * If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-pivot-grid [id]=\"'igx-pivot-1'\" [data]=\"Data\"></igx-pivot-grid>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this.p_id;\n    }\n    /* blazorSuppress */\n    public set id(value: string) {\n        this.p_id = value;\n    }\n\n    /* treatAsRef */\n    /* blazorAlternateType: object */\n    /**\n     * Gets/Sets the array of data that populates the component.\n     * ```html\n     * <igx-pivot-grid [data]=\"Data\"></igx-pivot-grid>\n     * ```\n     */\n    @Input()\n    public set data(value: any[] | null) {\n        this._data = value || [];\n        if (!this._init) {\n            if (this.autoGenerateConfig) {\n                this.generateConfig();\n            }\n            this.setupColumns();\n            this.reflow();\n        }\n        this.cdr.markForCheck();\n        if (this.height === null || this.height.indexOf('%') !== -1) {\n            // If the height will change based on how much data there is, recalculate sizes in igxForOf.\n            this.notifyChanges(true);\n        }\n    }\n\n    /* treatAsRef */\n    /* blazorAlternateType: object */\n    /**\n     * Returns an array of data set to the component.\n     * ```typescript\n     * let data = this.grid.data;\n     * ```\n     */\n    public get data(): any[] | null {\n        return this._data;\n    }\n\n    /**\n     * @hidden\n     */\n    public getContext(rowData, rowIndex): any {\n        return {\n            $implicit: rowData,\n            templateID: {\n                type: 'dataRow',\n                id: null\n            },\n            index: this.getDataViewIndex(rowIndex, false)\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get pivotRowWidths() {\n        return this.visibleRowDimensions.length ? this.visibleRowDimensions.reduce((accumulator, dim) => accumulator + this.rowDimensionWidthToPixels(dim), 0) :\n            this.rowDimensionWidthToPixels(this.emptyRowDimension);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowDimensionWidth(dim): string {\n        const isAuto = dim.width && dim.width.indexOf('auto') !== -1;\n        if (isAuto) {\n            return dim.autoWidth ? dim.autoWidth + 'px' : 'fit-content';\n        } else {\n            return this.rowDimensionWidthToPixels(dim) + 'px';\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowDimensionWidthToPixels(dim: IPivotDimension): number {\n        if (!dim?.width) {\n            return MINIMUM_COLUMN_WIDTH;\n        }\n        const isPercent = dim.width && dim.width.indexOf('%') !== -1;\n        const isAuto = dim.width && dim.width.indexOf('auto') !== -1;\n        if (isPercent) {\n            return Math.round(parseFloat(dim.width) / 100 * this.calcWidth);\n        } else if (isAuto) {\n            return dim.autoWidth;\n        } else {\n            return parseInt(dim.width, 10);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public reverseDimensionWidthToPercent(width: number): number {\n        return (width * 100 / this.calcWidth);\n    }\n\n    /** @hidden @internal */\n    public get pivotContentCalcWidth() {\n        const totalDimWidth = this.rowDimensions.length > 0 ?\n            this.rowDimensions.map((dim) => this.rowDimensionWidthToPixels(dim)).reduce((prev, cur) => prev + cur) :\n            0;\n        return this.calcWidth - totalDimWidth;\n    }\n\n    /** @hidden @internal */\n    public get pivotPinnedWidth() {\n        return !this._init ? (this.isPinningToStart ? this.pinnedWidth : this.headerFeaturesWidth) : 0;\n    }\n\n    /** @hidden @internal */\n    public get pivotUnpinnedWidth() {\n        return this.unpinnedWidth || 0;\n    }\n\n    /** @hidden @internal */\n    public get rowDimensions() {\n        return this.pivotConfiguration.rows?.filter(x => x.enabled) || [];\n    }\n\n    /** @hidden @internal */\n    public set visibleRowDimensions(value: IPivotDimension[]) {\n        this._visibleRowDimensions = value;\n    }\n\n    public get visibleRowDimensions() {\n        return this._visibleRowDimensions || this.rowDimensions;\n    }\n\n    /** @hidden @internal */\n    public get columnDimensions() {\n        return this.pivotConfiguration.columns?.filter(x => x.enabled) || [];\n    }\n\n    /** @hidden @internal */\n    public get filterDimensions() {\n        return this.pivotConfiguration.filters?.filter(x => x.enabled) || [];\n    }\n\n    /** @hidden @internal */\n    public get values() {\n        return this.pivotConfiguration.values?.filter(x => x.enabled) || [];\n    }\n\n    public toggleColumn(col: IgxColumnComponent) {\n        const state = this.columnGroupStates.get(col.field);\n        const newState = !state;\n        this.columnGroupStates.set(col.field, newState);\n        this.toggleRowGroup(col, newState);\n        this.reflow();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isRecordPinnedByIndex(_rowIndex: number) {\n        return null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override toggleColumnVisibility(_args: IColumnVisibilityChangedEventArgs) {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override expandAll() {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override collapseAll() {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override expandRow(_rowID: any) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override collapseRow(_rowID: any) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get pinnedRows(): IgxGridRowComponent[] {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @Input()\n    public override get totalRecords(): number {\n        return;\n    }\n\n    public override set totalRecords(_total: number) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override moveColumn(_column: IgxColumnComponent, _target: IgxColumnComponent, _pos: DropPosition = DropPosition.AfterDropTarget) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override addRow(_data: any): void {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override deleteRow(_rowSelector: any): any {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override updateCell(_value: any, _rowSelector: any, _column: string): void {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override updateRow(_value: any, _rowSelector: any): void {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override enableSummaries(..._rest) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override disableSummaries(..._rest) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override pinColumn(_columnName: string | IgxColumnComponent, _index?): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override unpinColumn(_columnName: string | IgxColumnComponent, _index?): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override pinRow(_rowID: any, _index?: number, _row?: RowType): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override unpinRow(_rowID: any, _row?: RowType): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get pinnedRowHeight() {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get hasEditableColumns(): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get hasSummarizedColumns(): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get hasMovableColumns(): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get pinnedDataView(): any[] {\n        return [];\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override openAdvancedFilteringDialog(_overlaySettings?: OverlaySettings) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override closeAdvancedFilteringDialog(_applyChanges: boolean) {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override endEdit(_commit = true, _event?: Event): boolean {\n        return;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override beginAddRowById(_rowID: any, _asChild?: boolean): void {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override beginAddRowByIndex(_index: number): void {\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override clearSearch() { }\n\n    /**\n    * @hidden @internal\n    */\n    public override refreshSearch(_updateActiveInfo?: boolean, _endEdit = true): number {\n        return 0;\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override findNext(_text: string, _caseSensitive?: boolean, _exactMatch?: boolean): number {\n        return 0;\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override findPrev(_text: string, _caseSensitive?: boolean, _exactMatch?: boolean): number {\n        return 0;\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override getNextCell(currRowIndex: number, curVisibleColIndex: number,\n        callback: (IgxColumnComponent) => boolean = null): ICellPosition {\n        return super.getNextCell(currRowIndex, curVisibleColIndex, callback);\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override getPreviousCell(currRowIndex: number, curVisibleColIndex: number,\n        callback: (IgxColumnComponent) => boolean = null): ICellPosition {\n        return super.getPreviousCell(currRowIndex, curVisibleColIndex, callback);\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override getPinnedWidth(takeHidden = false) {\n        return super.getPinnedWidth(takeHidden);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get totalHeight() {\n        return this.calcHeight;\n    }\n\n    public getColumnGroupExpandState(col: IgxColumnComponent) {\n        const state = this.columnGroupStates.get(col.field);\n        // columns are expanded by default?\n        return state !== undefined && state !== null ? state : false;\n    }\n\n    public toggleRowGroup(col: IgxColumnComponent, newState: boolean) {\n        if (!col) return;\n        if (this.hasMultipleValues) {\n            const parentCols = col.parent ? col.parent.children.toArray() : this._autoGeneratedCols.filter(x => x.level === 0);\n            const siblingCol = parentCols.filter(x => x.header === col.header && x !== col)[0];\n            const currIndex = parentCols.indexOf(col);\n            const siblingIndex = parentCols.indexOf(siblingCol);\n            if (currIndex < siblingIndex) {\n                // clicked on the full hierarchy header\n                this.resolveToggle(col, newState);\n                siblingCol.headerTemplate = this.headerTemplate;\n            } else {\n                // clicked on summary parent column that contains just the measures\n                col.headerTemplate = undefined;\n                this.resolveToggle(siblingCol, newState);\n            }\n        } else {\n            const parentCols = col.parent ? col.parent.children : this._autoGeneratedCols.filter(x => x.level === 0);\n            const fieldColumn = parentCols.filter(x => x.header === col.header && !x.columnGroup)[0];\n            const groupColumn = parentCols.filter(x => x.header === col.header && x.columnGroup)[0];\n            this.resolveToggle(groupColumn, newState);\n            if (newState) {\n                fieldColumn.headerTemplate = this.headerTemplate;\n            } else {\n                fieldColumn.headerTemplate = undefined;\n            }\n        }\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override setupColumns() {\n        super.setupColumns();\n    }\n\n    /**\n    * @hidden @internal\n    */\n    public override dataRebinding(event: IForOfDataChangingEventArgs) {\n        if (this.hasHorizontalLayout) {\n            this.dimensionDataColumns = this.generateDimensionColumns();\n        }\n\n        super.dataRebinding(event);\n    }\n\n    /**\n     * Auto-sizes row dimension cells.\n     *\n     * @remarks\n     * Only sizes based on the dimension cells in view.\n     * @example\n     * ```typescript\n     * this.grid.autoSizeRowDimension(dimension);\n     * ```\n     * @param dimension The row dimension to size.\n     */\n    public autoSizeRowDimension(dimension: IPivotDimension) {\n        if (this.getDimensionType(dimension) === PivotDimensionType.Row) {\n            const relatedDims: string[] = PivotUtil.flatten([dimension]).map((x: IPivotDimension) => x.memberName);\n            const contentCollection =  this.getContentCollection(dimension);\n            const content = contentCollection.filter(x => relatedDims.indexOf(x.dimension.memberName) !== -1);\n            const headers = content.map(x => x.headerGroups.toArray()).flat().map(x => x.header && x.header.refInstance);\n            if (this.pivotUI.showRowHeaders) {\n                const dimensionHeader = this.theadRow.rowDimensionHeaders.find(x => x.column.field === dimension.memberName);\n                headers.push(dimensionHeader);\n            }\n            const autoWidth = this.getLargesContentWidth(headers);\n            if (dimension.width === \"auto\") {\n                dimension.autoWidth = parseFloat(autoWidth);\n            } else {\n                dimension.width = autoWidth;\n            }\n            this.pipeTrigger++;\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * Inserts dimension in target collection by type at specified index or at the collection's end.\n     *\n     * @example\n     * ```typescript\n     * this.grid.insertDimensionAt(dimension, PivotDimensionType.Row, 1);\n     * ```\n     * @param dimension The dimension that will be added.\n     * @param targetCollectionType The target collection type to add to. Can be Row, Column or Filter.\n     * @param index The index in the collection at which to add.\n     * This parameter is optional. If not set it will add it to the end of the collection.\n     */\n    public insertDimensionAt(dimension: IPivotDimension, targetCollectionType: PivotDimensionType, index?: number) {\n        const targetCollection = this.getDimensionsByType(targetCollectionType);\n        if (index !== undefined) {\n            targetCollection.splice(index, 0, dimension);\n        } else {\n            targetCollection.push(dimension);\n        }\n        if (targetCollectionType === PivotDimensionType.Column) {\n            this.setupColumns();\n        }\n        this.pipeTrigger++;\n        this.dimensionsChange.emit({ dimensions: targetCollection, dimensionCollectionType: targetCollectionType });\n        if (targetCollectionType === PivotDimensionType.Filter) {\n            this.dimensionDataColumns = this.generateDimensionColumns();\n            this.reflow();\n        }\n        this.pivotConfigurationChange.emit({ pivotConfiguration: this.pivotConfiguration });\n    }\n\n    /**\n     * Move dimension from its currently collection to the specified target collection by type at specified index or at the collection's end.\n     *\n     * @example\n     * ```typescript\n     * this.grid.moveDimension(dimension, PivotDimensionType.Row, 1);\n     * ```\n     * @param dimension The dimension that will be moved.\n     * @param targetCollectionType The target collection type to move it to. Can be Row, Column or Filter.\n     * @param index The index in the collection at which to add.\n     * This parameter is optional. If not set it will add it to the end of the collection.\n     */\n    public moveDimension(dimension: IPivotDimension, targetCollectionType: PivotDimensionType, index?: number) {\n        const prevCollectionType = this.getDimensionType(dimension);\n        if (prevCollectionType === null) return;\n        // remove from old collection\n        this._removeDimensionInternal(dimension);\n        // add to target\n        this.insertDimensionAt(dimension, targetCollectionType, index);\n\n        if (prevCollectionType === PivotDimensionType.Column) {\n            this.setupColumns();\n        }\n    }\n\n    /**\n     * Removes dimension from its currently collection.\n     * @remarks\n     * This is different than toggleDimension that enabled/disables the dimension.\n     * This completely removes the specified dimension from the collection.\n     * @example\n     * ```typescript\n     * this.grid.removeDimension(dimension);\n     * ```\n     * @param dimension The dimension to be removed.\n     */\n    public removeDimension(dimension: IPivotDimension) {\n        const prevCollectionType = this.getDimensionType(dimension);\n        this._removeDimensionInternal(dimension);\n        if (prevCollectionType === PivotDimensionType.Column) {\n            this.setupColumns();\n        }\n        if (prevCollectionType === PivotDimensionType.Filter) {\n            this.reflow();\n        }\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Toggles the dimension's enabled state on or off.\n     * @remarks\n     * The dimension remains in its current collection. This just changes its enabled state.\n     * @example\n     * ```typescript\n     * this.grid.toggleDimension(dimension);\n     * ```\n     * @param dimension The dimension to be toggled.\n     */\n    public toggleDimension(dimension: IPivotDimension) {\n        const dimType = this.getDimensionType(dimension);\n        if (dimType === null) return;\n        const collection = this.getDimensionsByType(dimType);\n        dimension.enabled = !dimension.enabled;\n        if (dimType === PivotDimensionType.Column) {\n            this.setupColumns();\n        }\n        if (!dimension.enabled && dimension.filter) {\n            this.filteringService.clearFilter(dimension.memberName);\n        }\n        this.pipeTrigger++;\n        this.dimensionsChange.emit({ dimensions: collection, dimensionCollectionType: dimType });\n        this.cdr.detectChanges();\n        if (dimType === PivotDimensionType.Filter) {\n            this.reflow();\n        }\n        this.pivotConfigurationChange.emit({ pivotConfiguration: this.pivotConfiguration });\n    }\n\n    /**\n     * Inserts value at specified index or at the end.\n     *\n     * @example\n     * ```typescript\n     * this.grid.insertValueAt(value, 1);\n     * ```\n     * @param value The value definition that will be added.\n     * @param index The index in the collection at which to add.\n     * This parameter is optional. If not set it will add it to the end of the collection.\n     */\n    public insertValueAt(value: IPivotValue, index?: number) {\n        if (!this.pivotConfiguration.values) {\n            this.pivotConfiguration.values = [];\n        }\n        const values = this.pivotConfiguration.values;\n        if (index !== undefined) {\n            values.splice(index, 0, value);\n        } else {\n            values.push(value);\n        }\n        this.setupColumns();\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n        this.valuesChange.emit({ values });\n        this.pivotConfigurationChange.emit({ pivotConfiguration: this.pivotConfiguration });\n    }\n\n    /**\n     * Move value from its currently at specified index or at the end.\n     *\n     * @example\n     * ```typescript\n     * this.grid.moveValue(value, 1);\n     * ```\n     * @param value The value that will be moved.\n     * @param index The index in the collection at which to add.\n     * This parameter is optional. If not set it will add it to the end of the collection.\n     */\n    public moveValue(value: IPivotValue, index?: number) {\n        if (this.pivotConfiguration.values.indexOf(value) === -1) return;\n        // remove from old index\n        this.removeValue(value);\n        // add to new\n        this.insertValueAt(value, index);\n    }\n\n    /**\n     * Removes value from collection.\n     * @remarks\n     * This is different than toggleValue that enabled/disables the value.\n     * This completely removes the specified value from the collection.\n     * @example\n     * ```typescript\n     * this.grid.removeValue(dimension);\n     * ```\n     * @param value The value to be removed.\n     */\n    public removeValue(value: IPivotValue,) {\n        const values = this.pivotConfiguration.values;\n        const currentIndex = values.indexOf(value);\n        if (currentIndex !== -1) {\n            values.splice(currentIndex, 1);\n            this.setupColumns();\n            this.pipeTrigger++;\n            this.valuesChange.emit({ values });\n            this.pivotConfigurationChange.emit({ pivotConfiguration: this.pivotConfiguration });\n        }\n    }\n\n    /**\n     * Toggles the value's enabled state on or off.\n     * @remarks\n     * The value remains in its current collection. This just changes its enabled state.\n     * @example\n     * ```typescript\n     * this.grid.toggleValue(value);\n     * ```\n     * @param value The value to be toggled.\n     */\n    public toggleValue(value: IPivotValue) {\n        if (this.pivotConfiguration.values.indexOf(value) === -1) return;\n        value.enabled = !value.enabled;\n        this.setupColumns();\n        this.pipeTrigger++;\n        this.valuesChange.emit({ values: this.pivotConfiguration.values });\n        this.reflow();\n        this.pivotConfigurationChange.emit({ pivotConfiguration: this.pivotConfiguration });\n    }\n\n    /**\n     * Sort the dimension and its children in the provided direction.\n     * @example\n     * ```typescript\n     * this.grid.sortDimension(dimension, SortingDirection.Asc);\n     * ```\n     * @param value The value to be toggled.\n     */\n    public sortDimension(dimension: IPivotDimension, sortDirection: SortingDirection) {\n        const dimensionType = this.getDimensionType(dimension);\n        dimension.sortDirection = sortDirection;\n        // apply same sort direction to children.\n        let dim = dimension;\n        if (this.pivotUI.rowLayout === PivotRowLayoutType.Vertical) {\n            while (dim.childLevel) {\n                dim.childLevel.sortDirection = dimension.sortDirection;\n                dim = dim.childLevel;\n            }\n        }\n\n        this.pipeTrigger++;\n        this.dimensionsSortingExpressionsChange.emit(this.dimensionsSortingExpressions);\n        if (dimensionType === PivotDimensionType.Column) {\n            this.setupColumns();\n        }\n        this.cdr.detectChanges();\n        this.pivotConfigurationChange.emit({ pivotConfiguration: this.pivotConfiguration });\n    }\n\n    /**\n     * Filters a single `IPivotDimension`.\n     *\n     * @example\n     * ```typescript\n     * public filter() {\n     *      const set = new Set();\n     *      set.add('Value 1');\n     *      set.add('Value 2');\n     *      this.grid1.filterDimension(this.pivotConfigHierarchy.rows[0], set, IgxStringFilteringOperand.instance().condition('in'));\n     * }\n     * ```\n     */\n    public filterDimension(dimension: IPivotDimension, value: any, conditionOrExpressionTree?: IFilteringOperation | IFilteringExpressionsTree) {\n        this.filteringService.filter(dimension.memberName, value, conditionOrExpressionTree);\n        const dimensionType = this.getDimensionType(dimension);\n        if (dimensionType === PivotDimensionType.Column) {\n            this.setupColumns();\n        }\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getRowDimensionByName(memberName: string) {\n        const visibleRows = this.pivotUI.rowLayout === PivotRowLayoutType.Vertical ?\n         this.pivotConfiguration.rows :\n         PivotUtil.flatten(this.pivotConfiguration.rows);\n        const dimIndex = visibleRows.findIndex((target) => target.memberName === memberName);\n        const dim = visibleRows[dimIndex];\n        return dim;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getDimensionsByType(dimension: PivotDimensionType) {\n        switch (dimension) {\n            case PivotDimensionType.Row:\n                if (!this.pivotConfiguration.rows) {\n                    this.pivotConfiguration.rows = [];\n                }\n                return this.pivotConfiguration.rows;\n            case PivotDimensionType.Column:\n                if (!this.pivotConfiguration.columns) {\n                    this.pivotConfiguration.columns = [];\n                }\n                return this.pivotConfiguration.columns;\n            case PivotDimensionType.Filter:\n                if (!this.pivotConfiguration.filters) {\n                    this.pivotConfiguration.filters = [];\n                }\n                return this.pivotConfiguration.filters;\n            default:\n                return null;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public resizeRowDimensionPixels(dimension: IPivotDimension, newWidth: number) {\n        const isPercentageWidth = dimension.width && typeof dimension.width === 'string' && dimension.width.indexOf('%') !== -1;\n        if (isPercentageWidth) {\n            dimension.width = this.reverseDimensionWidthToPercent(newWidth).toFixed(2) + '%';\n        } else {\n            dimension.width = newWidth + 'px';\n        }\n\n        // Notify the grid to reflow, to update if horizontal scrollbar needs to be rendered/removed.\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /*\n    * @hidden\n    * @internal\n    */\n    protected _removeDimensionInternal(dimension) {\n        const prevCollectionType = this.getDimensionType(dimension);\n        if (prevCollectionType === null) return;\n        const prevCollection = this.getDimensionsByType(prevCollectionType);\n        const currentIndex = prevCollection.indexOf(dimension);\n        prevCollection.splice(currentIndex, 1);\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    protected getDimensionType(dimension: IPivotDimension): PivotDimensionType {\n        return PivotUtil.flatten(this.pivotConfiguration.rows).indexOf(dimension) !== -1 ? PivotDimensionType.Row :\n            PivotUtil.flatten(this.pivotConfiguration.columns).indexOf(dimension) !== -1 ? PivotDimensionType.Column :\n                (!!this.pivotConfiguration.filters && PivotUtil.flatten(this.pivotConfiguration.filters).indexOf(dimension) !== -1) ?\n                    PivotDimensionType.Filter : null;\n    }\n\n    protected getPivotRowHeaderContentWidth(headerGroup: IgxPivotRowHeaderGroupComponent) {\n        const headerSizes = this.getHeaderCellWidth(headerGroup.header.refInstance.nativeElement);\n        return headerSizes.width + headerSizes.padding;\n    }\n\n    protected getLargesContentWidth(contents: ElementRef[]): string {\n        const largest = new Map<number, number>();\n        if (contents.length > 0) {\n            const cellsContentWidths = [];\n            contents.forEach((elem) => {\n                elem instanceof IgxPivotRowHeaderGroupComponent ?\n                    cellsContentWidths.push(this.getPivotRowHeaderContentWidth(elem)) :\n                    cellsContentWidths.push(this.getHeaderCellWidth(elem.nativeElement).width);\n            });\n            const index = cellsContentWidths.indexOf(Math.max(...cellsContentWidths));\n            const cellStyle = this.document.defaultView.getComputedStyle(contents[index].nativeElement);\n            const cellPadding = parseFloat(cellStyle.paddingLeft) + parseFloat(cellStyle.paddingRight) +\n                parseFloat(cellStyle.borderLeftWidth) + parseFloat(cellStyle.borderRightWidth);\n            largest.set(Math.max(...cellsContentWidths), cellPadding);\n        }\n        const largestCell = Math.max(...Array.from(largest.keys()));\n        const width = Math.ceil(largestCell + largest.get(largestCell));\n\n        if (Number.isNaN(width)) {\n            return null;\n        } else {\n            return width + 'px';\n        }\n    }\n\n    /** @hidden @internal */\n    public get hasHorizontalLayout() {\n        return this.pivotUI.rowLayout === PivotRowLayoutType.Horizontal;\n    }\n\n    /**\n    * @hidden\n    */\n    public get hasMultipleValues() {\n        return this.values.length > 1;\n    }\n\n    /**\n    * @hidden\n    */\n    public get excelStyleFilterMaxHeight() {\n        // max 10 rows, row size depends on grid size\n        const maxHeight = this.renderedRowHeight * 10;\n        return `${maxHeight}px`;\n    }\n\n    /**\n    * @hidden\n    */\n    public get excelStyleFilterMinHeight(): string {\n        // min 5 rows, row size depends on grid size\n        const minHeight = this.renderedRowHeight * 5;\n        return `${minHeight}px`;\n    }\n\n    /** @hidden @internal */\n    public override get activeDescendant() {\n        const activeElem = this.navigation.activeNode;\n        if ((this.navigation as IgxPivotGridNavigationService).isRowHeaderActive ||\n            (this.navigation as IgxPivotGridNavigationService).isRowDimensionHeaderActive) {\n            if (!activeElem || !Object.keys(activeElem).length) {\n                return this.id;\n            }\n\n            return `${this.id}_${activeElem.row}_${activeElem.column}`;\n        }\n\n        return super.activeDescendant;\n    }\n\n    protected resolveToggle(groupColumn: IgxColumnComponent, state: boolean) {\n        if (!groupColumn) return;\n        groupColumn.hidden = state;\n        this.columnGroupStates.set(groupColumn.field, state);\n        const childrenTotal = this.hasMultipleValues ?\n            groupColumn.children.filter(x => x.columnGroup && x.children.filter(y => !y.columnGroup).length === this.values.length) :\n            groupColumn.children.filter(x => !x.columnGroup);\n        const childrenSubgroups = this.hasMultipleValues ?\n            groupColumn.children.filter(x => x.columnGroup && x.children.filter(y => !y.columnGroup).length === 0) :\n            groupColumn.children.filter(x => x.columnGroup);\n        childrenTotal.forEach(group => {\n            const newState = this.columnGroupStates.get(group.field) || state;\n            if (newState) {\n                group.headerTemplate = this.headerTemplate;\n            } else {\n                group.headerTemplate = undefined;\n            }\n        });\n        if (!groupColumn.hidden && childrenSubgroups.length > 0) {\n            childrenSubgroups.forEach(group => {\n                const newState = this.columnGroupStates.get(group.field) || state;\n                this.resolveToggle(group, newState);\n            });\n        }\n    }\n\n    protected override buildDataView(data: any[]) {\n        this._dataView = data;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getDataBasedBodyHeight(): number {\n        const dvl = this.dataView?.length || 0;\n        return dvl < this._defaultTargetRecordNumber ? 0 : this.defaultTargetBodyHeight;\n    }\n\n    protected override horizontalScrollHandler(event) {\n        const scrollLeft = event.target.scrollLeft;\n        this.theadRow.headerContainers.forEach(headerForOf => {\n            headerForOf.onHScroll(scrollLeft);\n        });\n        super.horizontalScrollHandler(event);\n    }\n\n    protected override verticalScrollHandler(event) {\n        this.verticalRowDimScrollContainers.forEach(x => {\n            x.onScroll(event);\n        });\n        super.verticalScrollHandler(event);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override autogenerateColumns() {\n        let columns = [];\n        const data = this.gridAPI.filterDataByExpressions(this.filteringExpressionsTree);\n        this.dimensionDataColumns = this.generateDimensionColumns();\n        const flattenedColumnsWithSorting = PivotUtil.flatten(this.columnDimensions).filter(dim => dim.sortDirection);\n        const expressions = flattenedColumnsWithSorting.length > 0 ? PivotSortUtil.generateDimensionSortingExpressions(flattenedColumnsWithSorting) : [];\n        let sortedData = data;\n        if (expressions.length > 0) {\n            sortedData = DataUtil.sort(cloneArray(data), expressions, this.sortStrategy, this);\n        }\n        let fieldsMap;\n        if (this.pivotConfiguration.columnStrategy && this.pivotConfiguration.columnStrategy instanceof NoopPivotDimensionsStrategy) {\n            const fields = this.generateDataFields(sortedData);\n            if (fields.length === 0) return;\n            const rowFields = PivotUtil.flatten(this.pivotConfiguration.rows).map(x => x.memberName);\n            const keyFields = Object.values(this.pivotKeys);\n            const filteredFields = fields.filter(x => rowFields.indexOf(x) === -1 && keyFields.indexOf(x) === -1 &&\n                x.indexOf(this.pivotKeys.rowDimensionSeparator + this.pivotKeys.level) === -1 &&\n                x.indexOf(this.pivotKeys.rowDimensionSeparator + this.pivotKeys.records) === -1);\n            fieldsMap = this.generateFromData(filteredFields);\n        } else {\n            fieldsMap = PivotUtil.getFieldsHierarchy(\n                sortedData,\n                this.columnDimensions,\n                PivotDimensionType.Column,\n                this.pivotKeys,\n                this.pivotValueCloneStrategy\n            );\n        }\n        columns = this.generateColumnHierarchy(fieldsMap, sortedData);\n        this._autoGeneratedCols = columns;\n        // reset expansion states if any are stored.\n        this.columnGroupStates.forEach((value, key) => {\n            if (value) {\n                const primaryColumn = columns.find(x => x.field === key && x.headerTemplate === this.headerTemplate);\n                const groupSummaryColumn = columns.find(x => x.field === key && x.headerTemplate !== this.headerTemplate);\n                this.toggleRowGroup(primaryColumn, value);\n                if (groupSummaryColumn) {\n                    groupSummaryColumn.headerTemplate = this.headerTemplate;\n                }\n            }\n        });\n\n        this.updateColumns(columns);\n        this.pipeTrigger++;\n        this.reflow();\n    }\n\n    protected generateDimensionColumns(): IgxColumnComponent[] {\n        const columns = [];\n        this.allVisibleDimensions.forEach((dim) => {\n            const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n            ref.instance.field = dim.memberName;\n            ref.instance.header = dim.displayName || dim.memberName;\n            ref.instance.headerTemplate = this.rowDimensionHeaderTemplate;\n            ref.instance.resizable = this.rowDimensionResizing;\n            ref.instance.sortable = dim.sortable === undefined ? true : dim.sortable;\n            ref.instance.width = this.rowDimensionWidth(dim);\n            ref.changeDetectorRef.detectChanges();\n            columns.push(ref.instance);\n        });\n        return columns;\n    }\n\n    protected override calculateGridSizes(recalcFeatureWidth = true) {\n        super.calculateGridSizes(recalcFeatureWidth);\n        if (this.hasDimensionsToAutosize) {\n            this.cdr.detectChanges();\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                requestAnimationFrame(() => {\n                    this.autoSizeDimensionsInView();\n                });\n            });\n        }\n    }\n\n    protected getContentCollection(dimenstion: IPivotDimension) {\n        let contentCollection;\n        if (this.hasHorizontalLayout) {\n            const allMrlContents = this.rowDimensionMrlRowsCollection.map(mrlRow => mrlRow.contentCells.toArray()).flat();\n            contentCollection = allMrlContents.filter(cell => cell.rootDimension === dimenstion);\n        } else {\n            contentCollection = this.rowDimensionContentCollection.toArray();\n        }\n        return contentCollection;\n    }\n\n    protected autoSizeDimensionsInView() {\n        if (!this.hasDimensionsToAutosize) return;\n        for (const dim of this.visibleRowDimensions) {\n            if (dim.width === 'auto') {\n                const contentWidths = [];\n                const relatedDims = PivotUtil.flatten([dim]).map(x => x.memberName);\n                const contentCollection = this.getContentCollection(dim);\n                const content = contentCollection.filter(x => relatedDims.indexOf(x.dimension.memberName) !== -1);\n                const headers = content.map(x => x.headerGroups.toArray()).flat().map(x => x.header && x.header.refInstance);\n                headers.forEach((header) => contentWidths.push(header?.nativeElement?.offsetWidth || 0));\n                if (this.pivotUI.showRowHeaders) {\n                    const dimensionHeader = this.theadRow.rowDimensionHeaders.find(x => x.column.field === dim.memberName);\n                    contentWidths.push(parseFloat(this.getLargesContentWidth([dimensionHeader])));\n                }\n                const max = Math.max(...contentWidths);\n                if (max === 0) {\n                    // cells not in DOM yet...\n                    continue;\n                }\n                const maxSize = Math.ceil(Math.max(...contentWidths));\n                dim.autoWidth = maxSize;\n            }\n        }\n\n        if (this.isColumnWidthSum) {\n            this.calcWidth = this.getColumnWidthSum();\n        }\n    }\n\n    /** @hidden @internal */\n    public get hasDimensionsToAutosize() {\n        return this.rowDimensions.some(x => x.width === 'auto' && !x.autoWidth);\n    }\n\n    protected generateFromData(fields: string[]) {\n        const separator = this.pivotKeys.columnDimensionSeparator;\n        const dataArr = fields.map(x => x.split(separator)).sort(x => x.length);\n        const hierarchy = new Map<string, any>();\n        const columnDimensions =  PivotUtil.flatten(this.columnDimensions);\n        dataArr.forEach(arr => {\n            let currentHierarchy = hierarchy;\n            const path = [];\n            let index = 0;\n            for (const val of arr) {\n                path.push(val);\n                const newPath = path.join(separator);\n                let targetHierarchy = currentHierarchy.get(newPath);\n                if (!targetHierarchy) {\n                    const currentColumnDimension = columnDimensions[index];\n                    currentHierarchy.set(newPath, { value: newPath, expandable: !!currentColumnDimension.childLevel, children: new Map<string, any>(), dimension: currentColumnDimension });\n                    targetHierarchy = currentHierarchy.get(newPath);\n                }\n                currentHierarchy = targetHierarchy.children;\n                index++;\n            }\n        });\n        return hierarchy;\n    }\n\n    protected generateColumnHierarchy(fields: Map<string, any>, data, parent = null): IgxColumnComponent[] {\n        let columns = [];\n        if (fields.size === 0) {\n            this.values.forEach((value) => {\n                const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n                ref.instance.header = value.displayName;\n                ref.instance.field = value.member;\n                ref.instance.parent = parent;\n                ref.instance.sortable = true;\n                ref.instance.dataType = value.dataType || this.resolveDataTypes(data.length ? data[0][value.member] : null);\n                ref.instance.formatter = value.formatter;\n                columns.push(ref.instance);\n            });\n            return columns;\n        }\n        const currentFields = fields;\n        currentFields.forEach((value) => {\n            let shouldGenerate = true;\n            if (data.length === 0) {\n                shouldGenerate = false;\n            }\n            if (shouldGenerate && (value.children == null || value.children.length === 0 || value.children.size === 0)) {\n                const col = this.createColumnForDimension(value, data, parent, this.hasMultipleValues);\n                columns.push(col);\n                if (this.hasMultipleValues) {\n                    const measureChildren = this.getMeasureChildren(data, col, false, value.dimension.width);\n                    col.children.reset(measureChildren);\n                    columns = columns.concat(measureChildren);\n                }\n\n            } else if (shouldGenerate) {\n                const col = this.createColumnForDimension(value, data, parent, true);\n                if (value.expandable) {\n                    col.headerTemplate = this.headerTemplate;\n                }\n                const children = this.generateColumnHierarchy(value.children, data, col);\n                const filteredChildren = children.filter(x => x.level === col.level + 1);\n                columns.push(col);\n                if (this.hasMultipleValues) {\n                    let measureChildren = this.getMeasureChildren(data, col, true, value.dimension.width);\n                    const nestedChildren = filteredChildren;\n                    //const allChildren = children.concat(measureChildren);\n                    col.children.reset(nestedChildren);\n                    columns = columns.concat(children);\n                    if (value.dimension.childLevel) {\n                        const sibling = this.createColumnForDimension(value, data, parent, true);\n                        columns.push(sibling);\n\n                        measureChildren = this.getMeasureChildren(data, sibling, false, value.dimension?.width);\n                        sibling.children.reset(measureChildren);\n                        columns = columns.concat(measureChildren);\n                    }\n\n                } else {\n                    col.children.reset(filteredChildren);\n                    columns = columns.concat(children);\n                    if (value.dimension.childLevel) {\n                        const sibling = this.createColumnForDimension(value, data, parent, false);\n                        columns.push(sibling);\n                    }\n                }\n            }\n        });\n\n        return columns;\n    }\n\n\n    protected generateConfig() {\n        if (!this.data) return;\n\n        const data = this.data;\n        const fields = this.generateDataFields(data);\n        const columnDimensions: IPivotDimension[] = [];\n        const rowDimensions: IPivotDimension[] = [];\n        const values: IPivotValue[] = [];\n        let isFirstDate = true;\n        fields.forEach((field) => {\n            const dataType = this.resolveDataTypes(data[0][field]);\n            switch (dataType) {\n                case \"number\":\n                    {\n                        const value: IPivotValue = {\n                            member: field,\n                            displayName: field,\n                            dataType: dataType,\n                            aggregate: {\n                                key: 'sum',\n                                label: 'Sum',\n                                aggregatorName: \"SUM\"\n                            },\n                            enabled: true\n                        };\n                        values.push(value);\n                        break;\n                }\n            case \"date\":\n            {\n                const dimension: IPivotDimension = new IgxPivotDateDimension(\n                    {\n                        memberName: field,\n                        enabled: isFirstDate,\n                        dataType: dataType\n                    }\n                )\n                rowDimensions.push(dimension);\n                isFirstDate = false;\n                break;\n            }\n                default: {\n                    const dimension: IPivotDimension = {\n                        memberName: field,\n                        enabled: false,\n                        dataType: dataType\n                    };\n                    columnDimensions.push(dimension);\n                    break;\n                }\n            }\n        });\n        const config: IPivotConfiguration = {\n            columns: columnDimensions,\n            rows: rowDimensions,\n            values: values\n        };\n        this.pivotConfiguration = config;\n    }\n\n    protected createColumnForDimension(value: any, data: any, parent: ColumnType, isGroup: boolean) {\n        const key = value.value;\n        const ref = isGroup ?\n            createComponent(IgxColumnGroupComponent, { environmentInjector: this.envInjector, elementInjector: this.injector }) :\n            createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n        ref.instance.header = parent != null ? key.split(parent.header + this.pivotKeys.columnDimensionSeparator)[1] : key;\n        ref.instance.field = key;\n        ref.instance.parent = parent;\n        if (value.dimension.width) {\n            ref.instance.width = value.dimension.width;\n        }\n        const valueDefinition = this.values[0];\n        ref.instance.dataType = valueDefinition?.dataType || this.resolveDataTypes(data[0][valueDefinition?.member]);\n        ref.instance.formatter = valueDefinition?.formatter;\n        ref.instance.sortable = true;\n        ref.changeDetectorRef.detectChanges();\n        return ref.instance;\n    }\n\n    protected resolveColumnDimensionWidth(dim: IPivotDimension) {\n        if (dim.width) {\n            return dim.width;\n        }\n        return this.minColumnWidth + 'px';\n    }\n\n    protected getMeasureChildren(data, parent, hidden, parentWidth) {\n        const cols = [];\n        const count = this.values.length;\n        const childWidth = parseInt(parentWidth, 10) / count;\n        const isPercent = parentWidth && parentWidth.indexOf('%') !== -1;\n        const isAuto = parentWidth && parentWidth.indexOf('auto') !== -1;\n        this.values.forEach(val => {\n            const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n            ref.instance.header = val.displayName || val.member;\n            ref.instance.field = parent.field + this.pivotKeys.columnDimensionSeparator + val.member;\n            ref.instance.parent = parent;\n            if (parentWidth) {\n                ref.instance.width = isAuto ? 'auto' : isPercent ? childWidth + '%' : childWidth + 'px';\n            }\n            ref.instance.hidden = hidden;\n            ref.instance.sortable = this._sortableColumns;\n            ref.instance.dataType = val.dataType || this.resolveDataTypes(data[0][val.member]);\n            ref.instance.formatter = val.formatter;\n            ref.changeDetectorRef.detectChanges();\n            cols.push(ref.instance);\n        });\n        return cols;\n    }\n\n    /**\n    * @hidden @internal\n    */\n    @ViewChild('emptyPivotGridTemplate', { read: TemplateRef, static: true })\n    public defaultEmptyPivotGridTemplate: TemplateRef<any>;\n\n    /**\n     * Gets/Sets a custom template when pivot grid is empty.\n     *\n     * @example\n     * ```html\n     * <igx-pivot-grid [emptyPivotGridTemplate]=\"myTemplate\"><igx-pivot-grid>\n     * ```\n     */\n    @Input()\n    public emptyPivotGridTemplate: TemplateRef<void>;\n\n    /**\n    * @hidden @internal\n    */\n    public override get template(): TemplateRef<any> {\n        const allEnabledDimensions = this.rowDimensions.concat(this.columnDimensions);\n        if (allEnabledDimensions.length === 0 && this.values.length === 0) {\n            // no enabled values and dimensions\n            return this.emptyPivotGridTemplate || this.defaultEmptyPivotGridTemplate;\n        }\n        return super.template;\n    }\n\n    private emitInitEvents(pivotConfig: IPivotConfiguration) {\n        const dimensions = PivotUtil.flatten(this.allDimensions);\n        dimensions.forEach(dim => {\n            this.dimensionInit.emit(dim);\n        });\n        const values = pivotConfig?.values;\n        values?.forEach(val => {\n            this.valueInit.emit(val);\n        });\n    }\n\n    protected rowDimensionByName(memberName: string) {\n        return this.visibleRowDimensions.find((rowDim) => rowDim.memberName === memberName);\n    }\n\n    protected calculateResizerTop() {\n        return this.pivotUI.showRowHeaders ?\n            (this.theadRow.pivotFilterContainer?.nativeElement.offsetHeight || 0) + (this.theadRow.pivotRowContainer?.nativeElement.offsetHeight || 0) :\n            this.theadRow.nativeElement.offsetHeight;\n    }\n\n    protected override updateDefaultRowHeight() {\n        super.updateDefaultRowHeight();\n        if (this.hasHorizontalLayout) {\n            // Trigger pipes to recalc heights for the horizontal layout mrl rows.\n            this.regroupTrigger++;\n        }\n    }\n}\n","<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Grid table head row area -->\n<igx-pivot-header-row class=\"igx-grid-thead igx-grid-thead--pivot\" tabindex=\"0\"\n    [grid]=\"this\"\n    [hasMRL]=\"hasColumnLayouts\"\n    [activeDescendant]=\"activeDescendant\"\n    [width]=\"calcWidth\"\n    [pinnedColumnCollection]=\"pinnedColumns\"\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>\n</igx-pivot-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n    <ng-container *ngTemplateOutlet=\"rowDimensions.length ? (hasHorizontalLayout ? horizontalRowDimensionsTemplate : defaultRowDimensionsTemplate) : emptyRowDimensionsTemplate; context: this\"></ng-container>\n    <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? null : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n        (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n        (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n        [style.height.px]=\"totalHeight\" [style.width.px]=\"pivotContentCalcWidth || null\" #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n        @if (hasMovableColumns && columnInDrag && pinnedColumns.length <= 0) {\n            <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n            class=\"igx-grid__scroll-on-drag-left\"></span>\n        }\n        @if (hasMovableColumns && columnInDrag && pinnedColumns.length > 0) {\n            <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n            class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedWidth\"></span>\n        }\n        <ng-template igxGridFor let-rowData [igxGridForOf]=\"data\n        | pivotGridFilter:pivotConfiguration:filterStrategy:advancedFilteringExpressionsTree:filteringPipeTrigger:pipeTrigger\n        | pivotGridSort:pivotConfiguration:sortStrategy:pipeTrigger\n        | pivotGridRow:pivotConfiguration:pivotValueCloneStrategy:expansionStates:pipeTrigger:sortingExpressions\n        | pivotGridColumn:pivotConfiguration:pivotValueCloneStrategy:expansionStates:pipeTrigger:sortingExpressions\n        | pivotGridAutoTransform:pivotConfiguration:pipeTrigger\n        | pivotGridColumnSort:sortingExpressions:sortStrategy:pipeTrigger\n        | pivotGridRowExpansion:pivotConfiguration:expansionStates:defaultExpandState:pipeTrigger\"\n            let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n            [igxForContainerSize]=\"calcHeight\"\n            [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n            [igxGridForOfVariableSizes]=\"false\"\n            #verticalScrollContainer (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n            <ng-template\n                [igxTemplateOutlet]=\"recordTemplate\"\n                [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n                (cachedViewLoaded)=\"cachedViewLoaded($event)\">\n            </ng-template>\n        </ng-template>\n        <ng-template #record_template let-rowIndex=\"index\" let-rowData>\n            <igx-pivot-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n            </igx-pivot-row>\n        </ng-template>\n\n        <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n        <igc-trial-watermark></igc-trial-watermark>\n    </div>\n    <div igxToggle #loadingOverlay>\n        @if (shouldOverlayLoading) {\n            <igx-circular-bar [indeterminate]=\"true\">\n            </igx-circular-bar>\n        }\n    </div>\n    @if (hasMovableColumns && columnInDrag) {\n        <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n        id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n    }\n    <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n        <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\" isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n        <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n            <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n        </div>\n        <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n    </div>\n\n    <div class=\"igx-grid__addrow-snackbar\">\n        <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n    </div>\n\n    <div #igxBodyOverlayOutlet=\"overlay-outlet\" igxOverlayOutlet></div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n    <div class=\"igx-grid__scroll-start\" [style.width.px]=\"pivotPinnedWidth\" [style.min-width.px]=\"pivotPinnedWidth\"></div>\n    <div class=\"igx-grid__scroll-main\" [style.width.px]=\"pivotUnpinnedWidth\">\n        <ng-template igxGridFor [igxGridForOf]=\"EMPTY_DATA\" #scrollContainer>\n        </ng-template>\n    </div>\n    <div class=\"igx-grid__scroll-end\" [style.width.px]=\"pivotPinnedWidth\" [style.min-width.px]=\"pivotPinnedWidth\" [hidden]=\"pivotPinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" #tfoot>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n    <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyFilteredGridMessage}}</span>\n    </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyGridMessage}}</span>\n    </span>\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@if (colResizingService.showResizer) {\n    <igx-pivot-grid-column-resizer [restrictResizerTop]=\"calculateResizerTop()\"></igx-pivot-grid-column-resizer>\n}\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n\n<ng-template #headerTemplate let-column>\n    <div class=\"igx-grid__tr--header\">\n        <igx-icon\n            family=\"default\"\n            [name]=\"getColumnGroupExpandState(column) ? 'tree_expand' : 'tree_collapse'\"\n            [attr.draggable]=\"false\"\n            (click)=\"toggleColumn(column)\">\n        </igx-icon>\n        {{column.header}}\n    </div>\n</ng-template>\n\n<ng-template #defaultRowDimensionsTemplate>\n    @for (dim of rowDimensions; track dim.memberName; let dimIndex = $index) {\n        <div tabindex=\"0\" [style.height.px]=\"totalHeight\" #rowDimensionContainer role=\"rowgroup\" class=\"igx-grid__tbody-pivot-dimension\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\">\n            <ng-template igxGridFor let-rowData\n                [igxGridForOf]=\"dataView | pivotGridCellMerging:pivotConfiguration:dim:pipeTrigger\"\n                let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n                [igxForContainerSize]=\"calcHeight\"\n                [igxForItemSize]=\"renderedRowHeight\"\n                [igxForSizePropName]=\"'height'\"\n                #verticalRowDimScrollContainer\n            >\n                <igx-pivot-row-dimension-content\n                    role=\"row\" class=\"igx-grid-thead\" [grid]=\"this\"\n                    [dimension]=\"rowData.dimensions[dimIndex]\"\n                    [rootDimension]=\"dim\"\n                    [style.height.px]=\"renderedRowHeight * (rowData.rowSpan || 1)\"\n                    [rowIndex]=\"rowIndex\" [rowData]=\"rowData\"\n                    [width]=\"rowDimensionWidthToPixels(dim)\">\n                </igx-pivot-row-dimension-content>\n            </ng-template>\n        </div>\n    }\n</ng-template>\n\n<ng-template #horizontalRowDimensionsTemplate>\n    <div tabindex=\"0\" class=\"igx-grid__tbody-pivot-mrl-dimension\" #rowDimensionContainer [style.height.px]=\"totalHeight\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\">\n        @if (dataView | pivotGridHorizontalRowGrouping:pivotConfiguration:pipeTrigger:regroupTrigger; as groupedData) {\n            <ng-template #verticalRowDimScrollContainer role=\"rowgroup\" igxGridFor let-rowGroup let-rowIndex=\"index\"\n                [igxGridForOf]=\"groupedData\"\n                [igxForScrollOrientation]=\"'vertical'\"\n                [igxForScrollContainer]=\"verticalScroll\"\n                [igxForContainerSize]=\"calcHeight\"\n                [igxForItemSize]=\"renderedRowHeight\"\n                [igxForSizePropName]=\"'height'\"\n            >\n                <igx-pivot-row-dimension-mrl-row [rowIndex]=\"rowIndex\" [rowGroup]=\"rowGroup\" [groupedData]=\"groupedData\" [style.height.px]=\"renderedRowHeight * rowGroup.length\"></igx-pivot-row-dimension-mrl-row>\n            </ng-template>\n        }\n    </div>\n</ng-template>\n\n<ng-template #emptyRowDimensionsTemplate>\n    @if (columnDimensions.length > 0 || values.length > 0) {\n        <div tabindex=\"0\" #rowDimensionContainer role=\"rowgroup\" class=\"igx-grid__tbody-pivot-dimension\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\">\n            <igx-pivot-row-dimension-content role=\"row\" class=\"igx-grid-thead\" [grid]=\"this\"\n                [dimension]=\"emptyRowDimension\"\n                [rootDimension]=\"emptyRowDimension\"\n                [rowIndex]=\"0\" [rowData]=\"dataView[0]\"\n                [width]=\"rowDimensionWidthToPixels(emptyRowDimension)\">\n            </igx-pivot-row-dimension-content>\n        </div>\n    }\n</ng-template>\n\n<ng-template #emptyPivotGridTemplate>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{resourceStrings.igx_grid_pivot_empty_message}}</span>\n    </span>\n</ng-template>\n\n<div [hidden]=\"true\">\n    <igx-grid-excel-style-filtering [maxHeight]=\"excelStyleFilterMaxHeight\" [minHeight]=\"excelStyleFilterMinHeight\">\n        <div igxExcelStyleColumnOperations [hidden]=\"true\"></div>\n        <igx-excel-style-filter-operations>\n            <igx-excel-style-search></igx-excel-style-search>\n        </igx-excel-style-filter-operations>\n    </igx-grid-excel-style-filtering>\n</div>\n\n@if (platform.isElements) {\n    <div #sink style=\"display: none;\">\n        <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n    </div>\n}\n","import { Directive, Optional, Input, Host, ViewContainerRef, Inject, createComponent, EnvironmentInjector, Injector } from '@angular/core';\nimport { IExpressionTree, IFilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';\nimport { IgxColumnComponent } from './columns/column.component';\nimport { IgxColumnGroupComponent } from './columns/column-group.component';\nimport { IGroupingExpression } from '../data-operations/grouping-expression.interface';\nimport { IPagingState } from '../data-operations/paging-state.interface';\nimport { GridColumnDataType } from '../data-operations/data-util';\nimport { IGroupByExpandState } from '../data-operations/groupby-expand-state.interface';\nimport { IGroupingState } from '../data-operations/groupby-state.interface';\nimport { IgxGridComponent } from './grid/grid.component';\nimport { IgxHierarchicalGridComponent } from './hierarchical-grid/hierarchical-grid.component';\nimport { GridSelectionRange } from './common/types';\nimport { ISortingExpression } from '../data-operations/sorting-strategy';\nimport { ColumnType, FieldType, GridType, IGX_GRID_BASE, IPinningConfig } from './common/grid.interface';\nimport { IgxPivotGridComponent } from './pivot-grid/pivot-grid.component';\nimport { IPivotConfiguration, IPivotDimension } from './pivot-grid/pivot-grid.interface'\nimport { PivotUtil } from './pivot-grid/pivot-util';\nimport { IgxPivotDateDimension } from './pivot-grid/pivot-grid-dimensions';\nimport { cloneArray, cloneValue } from '../core/utils';\nimport { IgxColumnLayoutComponent } from './columns/column-layout.component';\nimport { recreateTreeFromFields } from '../data-operations/expressions-tree-util';\n\nexport interface IGridState {\n    columns?: IColumnState[];\n    filtering?: IFilteringExpressionsTree;\n    advancedFiltering?: IFilteringExpressionsTree;\n    paging?: IPagingState;\n    moving?: boolean;\n    sorting?: ISortingExpression[];\n    groupBy?: IGroupingState;\n    cellSelection?: GridSelectionRange[];\n    /* blazorPrimitiveValue */\n    rowSelection?: any[];\n    columnSelection?: string[];\n    /* blazorPrimitiveValue */\n    rowPinning?: any[];\n    pinningConfig?: IPinningConfig;\n    /* blazorPrimitiveValue */\n    expansion?: any[];\n    rowIslands?: IGridStateCollection[];\n    id?: string;\n    pivotConfiguration?: IPivotConfiguration;\n}\n\n/* marshalByValue */\nexport interface IGridStateCollection {\n    id: string;\n    parentRowID: any;\n    state: IGridState;\n}\n\nexport interface IGridStateOptions {\n    columns?: boolean;\n    filtering?: boolean;\n    advancedFiltering?: boolean;\n    sorting?: boolean;\n    groupBy?: boolean;\n    paging?: boolean;\n    cellSelection?: boolean;\n    rowSelection?: boolean;\n    columnSelection?: boolean;\n    rowPinning?: boolean;\n    pinningConfig?: boolean;\n    expansion?: boolean;\n    rowIslands?: boolean;\n    moving?: boolean;\n    pivotConfiguration?: boolean;\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\nexport interface IColumnState {\n    pinned: boolean;\n    sortable: boolean;\n    filterable: boolean;\n    editable: boolean;\n    sortingIgnoreCase: boolean;\n    filteringIgnoreCase: boolean;\n    headerClasses: string;\n    headerGroupClasses: string;\n    maxWidth: string;\n    groupable: boolean;\n    hidden: boolean;\n    dataType: GridColumnDataType;\n    hasSummary: boolean;\n    field: string;\n    width: any;\n    header: string;\n    resizable: boolean;\n    searchable: boolean;\n    columnGroup: boolean;\n    // mrl props\n    columnLayout?: boolean;\n    rowStart?: number,\n    rowEnd?: number,\n    colStart?: number;\n    colEnd?: number,\n    /**\n     * @deprecated\n     */\n    parent?: any;\n    key: string;\n    parentKey: string;\n    disableHiding: boolean;\n    disablePinning: boolean;\n    collapsible?: boolean;\n    expanded?: boolean;\n    visibleWhenCollapsed?: boolean;\n}\n\nexport type GridFeatures = keyof IGridStateOptions;\n\ninterface Feature {\n    getFeatureState: (context: IgxGridStateBaseDirective) => IGridState;\n    restoreFeatureState: (context: IgxGridStateBaseDirective, state: IColumnState[] | IPagingState | boolean | ISortingExpression[] |\n        IGroupingState | IFilteringExpressionsTree | GridSelectionRange[] | IPinningConfig | IPivotConfiguration | any[]) => void;\n}\n\n/* blazorElement */\n/* wcElementTag: igc-grid-state-base-directive */\n/* blazorIndirectRender */\n@Directive()\nexport class IgxGridStateBaseDirective {\n\n    private featureKeys: GridFeatures[] = [];\n    private state: IGridState;\n    private currGrid: GridType;\n    protected _options: IGridStateOptions = {\n        columns: true,\n        filtering: true,\n        advancedFiltering: true,\n        sorting: true,\n        groupBy: true,\n        paging: true,\n        cellSelection: true,\n        rowSelection: true,\n        columnSelection: true,\n        rowPinning: true,\n        expansion: true,\n        moving: true,\n        rowIslands: true,\n        pivotConfiguration: true\n    };\n    private FEATURES = {\n        sorting:  {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const sortingState = context.currGrid.sortingExpressions;\n                sortingState.forEach(s => {\n                    delete s.strategy;\n                    delete s.owner;\n                });\n                return { sorting: sortingState };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: ISortingExpression[]): void => {\n                context.currGrid.sortingExpressions = state;\n            }\n        },\n        filtering: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const filteringState = context.currGrid.filteringExpressionsTree;\n                if (filteringState) {\n                    delete filteringState.owner;\n                    for (const item of filteringState.filteringOperands) {\n                        delete (item as IFilteringExpressionsTree).owner;\n                    }\n                }\n                return { filtering: filteringState };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IFilteringExpressionsTree): void => {\n                const filterTree = context.createExpressionsTreeFromObject(state);\n                context.currGrid.filteringExpressionsTree = filterTree as IFilteringExpressionsTree;\n            }\n        },\n        advancedFiltering: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const filteringState = context.currGrid.advancedFilteringExpressionsTree;\n                let advancedFiltering: any;\n                if (filteringState) {\n                    delete filteringState.owner;\n                    for (const item of filteringState.filteringOperands) {\n                        delete (item as IFilteringExpressionsTree).owner;\n                    }\n                    advancedFiltering = filteringState;\n                } else {\n                    advancedFiltering = {};\n                }\n                return { advancedFiltering };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IFilteringExpressionsTree): void => {\n                const filterTree = context.createExpressionsTreeFromObject(state);\n                context.currGrid.advancedFilteringExpressionsTree = filterTree as IFilteringExpressionsTree;\n            }\n        },\n        columns: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const gridColumns: IColumnState[] = context.currGrid.columns.map((c) => ({\n                    pinned: c.pinned,\n                    sortable: c.sortable,\n                    filterable: c.filterable,\n                    editable: c.editable,\n                    sortingIgnoreCase: c.sortingIgnoreCase,\n                    filteringIgnoreCase: c.filteringIgnoreCase,\n                    headerClasses: c.headerClasses,\n                    headerGroupClasses: c.headerGroupClasses,\n                    maxWidth: c.maxWidth,\n                    groupable: c.groupable,\n                    hidden: c.hidden,\n                    dataType: c.dataType,\n                    hasSummary: c.hasSummary,\n                    field: c.field,\n                    width: c.width,\n                    header: c.header,\n                    resizable: c.resizable,\n                    searchable: c.searchable,\n                    selectable: c.selectable,\n                    key: c.columnGroup ? this.getColumnGroupKey(c) : c.field,\n                    parentKey: c.parent ? this.getColumnGroupKey(c.parent) : undefined,\n                    columnGroup: c.columnGroup,\n                    columnLayout: c.columnLayout || undefined,\n                    rowStart: c.parent?.columnLayout ? c.rowStart : undefined,\n                    rowEnd: c.parent?.columnLayout ? c.rowEnd : undefined,\n                    colStart: c.parent?.columnLayout ? c.colStart : undefined,\n                    colEnd: c.parent?.columnLayout ? c.colEnd : undefined,\n                    disableHiding: c.disableHiding,\n                    disablePinning: c.disablePinning,\n                    collapsible: c.columnGroup ? c.collapsible : undefined,\n                    expanded: c.columnGroup ? c.expanded : undefined,\n                    visibleWhenCollapsed: c.parent?.columnGroup ? (c as IgxColumnComponent).visibleWhenCollapsed : undefined\n                }));\n                return { columns: gridColumns };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IColumnState[]): void => {\n                const newColumns = [];\n                state.forEach((colState) => {\n                    const hasColumnGroup = colState.columnGroup;\n                    const hasColumnLayouts = colState.columnLayout;\n                    delete colState.columnGroup;\n                    delete colState.columnLayout;\n                    if (hasColumnGroup) {\n                        let ref1: IgxColumnGroupComponent = context.currGrid.columns.find(x => x.columnGroup && (colState.key ? this.getColumnGroupKey(x) === colState.key : x.header === colState.header)) as IgxColumnGroupComponent;\n                        if (!ref1) {\n                            const component = hasColumnLayouts ?\n                            createComponent(IgxColumnLayoutComponent, { environmentInjector: this.envInjector, elementInjector: this.injector }) :\n                            createComponent(IgxColumnGroupComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n                            ref1 = component.instance;\n                            component.changeDetectorRef.detectChanges();\n                        } else {\n                            ref1.children.reset([]);\n                        }\n                        Object.assign(ref1, colState);\n                        ref1.grid = context.currGrid;\n                        if (colState.parent || colState.parentKey) {\n                            const columnGroup: IgxColumnGroupComponent = newColumns.find(e => e.columnGroup && (e.key ? e.key === colState.parentKey : e.header === ref1.parent));\n                            columnGroup.children.reset([...columnGroup.children.toArray(), ref1]);\n                            ref1.parent = columnGroup;\n                        }\n                        ref1.cdr.detectChanges();\n                        newColumns.push(ref1);\n                    } else {\n                        let ref: IgxColumnComponent = context.currGrid.columns.find(x => !x.columnGroup && x.field === colState.field) as IgxColumnComponent;\n                        if (!ref) {\n                            const component = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector});\n                            ref = component.instance;\n                            component.changeDetectorRef.detectChanges();\n                        }\n\n                        Object.assign(ref, colState);\n                        ref.grid = context.currGrid;\n                        if (colState.parent || colState.parentKey) {\n                            const columnGroup: IgxColumnGroupComponent = newColumns.find(e =>  e.columnGroup && (e.key ? e.key === colState.parentKey : e.header === ref.parent));\n                            if (columnGroup) {\n                                ref.parent = columnGroup;\n                                columnGroup.children.reset([...columnGroup.children.toArray(), ref]);\n                            }\n                        }\n                        ref.cdr.detectChanges();\n                        newColumns.push(ref);\n                    }\n                });\n                context.currGrid.updateColumns(newColumns);\n                newColumns.forEach(col => {\n                    (context.currGrid as any).columnInit.emit(col);\n                });\n            }\n        },\n        groupBy: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const grid = context.currGrid as IgxGridComponent;\n                const groupingExpressions = grid.groupingExpressions;\n                groupingExpressions.forEach(expr => {\n                    delete expr.strategy;\n                });\n                const expansionState = grid.groupingExpansionState;\n                const groupsExpanded = grid.groupsExpanded;\n\n                return { groupBy: { expressions: groupingExpressions, expansion: expansionState, defaultExpanded: groupsExpanded}  };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IGroupingState): void => {\n                const grid = context.currGrid as IgxGridComponent;\n                grid.groupingExpressions = state.expressions as IGroupingExpression[];\n                state.expansion.forEach(exp => {\n                    exp.hierarchy.forEach(h => {\n                        const dataType = grid.columns.find(c => c.field === h.fieldName).dataType;\n                        if (dataType.includes(GridColumnDataType.Date) || dataType.includes(GridColumnDataType.Time)) {\n                            h.value = h.value ? new Date(Date.parse(h.value)) : h.value;\n                        }\n                    });\n                });\n                if (grid.groupsExpanded !== state.defaultExpanded) {\n                    grid.toggleAllGroupRows();\n                }\n                grid.groupingExpansionState = state.expansion as IGroupByExpandState[];\n            }\n        },\n        paging: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const pagingState = context.currGrid.pagingState;\n                return { paging: pagingState };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IPagingState): void => {\n                if (!context.currGrid.paginator) {\n                    return;\n                }\n                if (context.currGrid.perPage !== state.recordsPerPage) {\n                    context.currGrid.perPage = state.recordsPerPage;\n                    context.currGrid.cdr.detectChanges();\n                }\n                context.currGrid.page = state.index;\n            }\n        },\n        moving: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                return { moving: context.currGrid.moving };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: boolean): void => {\n                context.currGrid.moving = state;\n            }\n        },\n        rowSelection: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const selection = context.currGrid.selectionService.getSelectedRows();\n                return { rowSelection: selection };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: any[]): void => {\n                context.currGrid.selectRows(state, true);\n            }\n        },\n        cellSelection: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const selection = context.currGrid.getSelectedRanges().map(range =>\n                    ({ rowStart: range.rowStart, rowEnd: range.rowEnd, columnStart: range.columnStart, columnEnd: range.columnEnd }));\n                return { cellSelection: selection };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: GridSelectionRange[]): void => {\n                state.forEach(r => {\n                    const range = { rowStart: r.rowStart, rowEnd: r.rowEnd, columnStart: r.columnStart, columnEnd: r.columnEnd};\n                    context.currGrid.selectRange(range);\n                });\n            }\n        },\n        columnSelection: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const selection = context.currGrid.selectedColumns().map(c => c.field);\n                return { columnSelection: selection };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: string[]): void => {\n                context.currGrid.deselectAllColumns();\n                context.currGrid.selectColumns(state);\n            }\n        },\n        rowPinning: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const pinned = context.currGrid.pinnedRows?.map(x => x.key);\n                return { rowPinning: pinned };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: any[]): void => {\n                // clear current state.\n                context.currGrid.pinnedRows.forEach(row => row.unpin());\n                state.forEach(rowID => context.currGrid.pinRow(rowID));\n            }\n        },\n        pinningConfig: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => ({ pinningConfig: context.currGrid.pinning }),\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IPinningConfig): void => {\n                context.currGrid.pinning = state;\n            }\n        },\n        expansion: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const expansionStates = Array.from(context.currGrid.expansionStates);\n                return { expansion: expansionStates };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: any[]): void => {\n                const expansionStates = new Map<any, boolean>(state);\n                context.currGrid.expansionStates = expansionStates;\n            }\n        },\n        rowIslands: {\n            getFeatureState(context: IgxGridStateBaseDirective): IGridState {\n                const childGridStates: IGridStateCollection[] = [];\n                const rowIslands = (context.currGrid as any).allLayoutList;\n                if (rowIslands) {\n                    rowIslands.forEach(rowIsland => {\n                        const childGrids = rowIsland.rowIslandAPI.getChildGrids();\n                        childGrids.forEach(chGrid => {\n                            const parentRowID = this.getParentRowID(chGrid);\n                            context.currGrid = chGrid;\n                            if (context.currGrid) {\n                                const childGridState = context.buildState(context.featureKeys) as IGridState;\n                                childGridStates.push({ id: `${rowIsland.id}`, parentRowID, state: childGridState });\n                            }\n                        });\n                    });\n                }\n                context.currGrid = context.grid;\n                return { rowIslands: childGridStates };\n            },\n            restoreFeatureState(context: IgxGridStateBaseDirective, state: any): void {\n                const rowIslands = (context.currGrid as any).allLayoutList;\n                if (rowIslands) {\n                    rowIslands.forEach(rowIsland => {\n                        const childGrids = rowIsland.rowIslandAPI.getChildGrids();\n                        childGrids.forEach(chGrid => {\n                            const parentRowID = this.getParentRowID(chGrid);\n                            context.currGrid = chGrid;\n                            const childGridState = state.find(st => st.id === rowIsland.id && st.parentRowID === parentRowID);\n                            if (childGridState && context.currGrid) {\n                                context.restoreGridState(childGridState.state, context.featureKeys);\n                            }\n                        });\n                    });\n                }\n                context.currGrid = context.grid;\n            },\n            /**\n             * Traverses the hierarchy up to the root grid to return the ID of the expanded row.\n             */\n            getParentRowID: (grid: IgxHierarchicalGridComponent) => {\n                let childGrid;\n                while (grid.parent) {\n                    childGrid = grid;\n                    grid = grid.parent;\n                }\n                return grid.gridAPI.getParentRowId(childGrid);\n            }\n        },\n        pivotConfiguration: {\n            getFeatureState(context: IgxGridStateBaseDirective): IGridState {\n                const config = (context.currGrid as IgxPivotGridComponent).pivotConfiguration;\n                if (!config || !(context.currGrid instanceof IgxPivotGridComponent)) {\n                    return { pivotConfiguration: undefined };\n                }\n                const configCopy = cloneValue(config);\n                configCopy.rows = cloneArray(config.rows, true);\n                configCopy.columns = cloneArray(config.columns, true);\n                configCopy.filters = cloneArray(config.filters, true);\n                const dims =  [...(configCopy.rows || []), ...(configCopy.columns || []), ...(configCopy.filters || [])];\n                const dateDimensions = dims.filter(x => context.isDateDimension(x));\n                dateDimensions?.forEach(dim => {\n                    // do not serialize the grid resource strings. This would pollute the object with unnecessary data.\n                    (dim as IgxPivotDateDimension).resourceStrings = {};\n                });\n                return { pivotConfiguration: configCopy };\n            },\n            restoreFeatureState(context: IgxGridStateBaseDirective, state: any): void {\n                const config: IPivotConfiguration = state;\n                if (!config || !(context.currGrid instanceof IgxPivotGridComponent)) {\n                    return;\n                }\n                context.restoreValues(config, context.currGrid as IgxPivotGridComponent);\n                context.restoreDimensions(config);\n                (context.currGrid as IgxPivotGridComponent).pivotConfiguration = config;\n            },\n\n\n        }\n    };\n\n    /**\n     *  An object with options determining if a certain feature state should be saved.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * public options = {selection: false, advancedFiltering: false};\n     * ```\n     */\n    @Input()\n    public get options(): IGridStateOptions {\n       return this._options;\n    }\n\n    public set options(value: IGridStateOptions) {\n        Object.assign(this._options, value);\n        if (!(this.grid instanceof IgxGridComponent)) {\n            delete this._options.groupBy;\n        } else {\n            delete this._options.rowIslands;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(\n        @Host() @Optional() @Inject(IGX_GRID_BASE) public grid: GridType,\n        protected viewRef: ViewContainerRef, protected envInjector: EnvironmentInjector,  protected injector: Injector) { }\n\n    /**\n     * Gets the state of a feature or states of all grid features, unless a certain feature is disabled through the `options` property.\n     *\n     * @param `serialize` determines whether the returned object will be serialized to JSON string. Default value is true.\n     * @param `feature` string or array of strings determining the features to be added in the state. If skipped, all features are added.\n     * @returns Returns the serialized to JSON string IGridState object, or the non-serialized IGridState object.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * let state = this.state.getState(); // returns string\n     * let state = this.state(false) // returns `IGridState` object\n     * ```\n     */\n    protected getStateInternal(serialize = true, features?: GridFeatures | GridFeatures[]): IGridState | string  {\n        let state: IGridState | string;\n        this.currGrid = this.grid;\n        this.state = state = this.buildState(features) as IGridState;\n        if (serialize) {\n            state = JSON.stringify(state, this.stringifyCallback) as string;\n        }\n        return state;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Restores grid features' state based on the IGridState object passed as an argument.\n     *\n     * @param IGridState object to restore state from.\n     * @returns\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * this.state.setState(gridState);\n     * ```\n     */\n    protected setStateInternal(state: IGridState, features?: GridFeatures | GridFeatures[]) {\n        this.state = state;\n        this.currGrid = this.grid;\n        this.restoreGridState(state, features);\n        this.grid.cdr.detectChanges(); // TODO\n    }\n\n    /**\n     * Builds an IGridState object.\n     */\n    private buildState(keys?: GridFeatures | GridFeatures[]): IGridState {\n        this.applyFeatures(keys);\n        let gridState = {} as IGridState;\n        this.featureKeys.forEach(f => {\n            if (this.options[f]) {\n                if (!(this.grid instanceof IgxGridComponent) && f === 'groupBy') {\n                    return;\n                }\n                const feature = this.getFeature(f);\n                const featureState: IGridState = feature?.getFeatureState(this);\n                gridState = Object.assign(gridState, featureState);\n            }\n        });\n        return gridState;\n    }\n\n    /**\n     * The method that calls corresponding methods to restore features from the passed IGridState object.\n     */\n    private restoreGridState(state: IGridState, features?: GridFeatures | GridFeatures[]) {\n        this.applyFeatures(features);\n        this.restoreFeatures(state);\n    }\n\n    private restoreFeatures(state: IGridState) {\n        this.featureKeys.forEach(f => {\n            if (this.options[f]) {\n                const featureState = state[f];\n                if (f === 'moving' || featureState) {\n                    const feature = this.getFeature(f);\n                    feature.restoreFeatureState(this, featureState);\n                }\n            }\n        });\n    }\n\n    /**\n     * Returns a collection of all grid features.\n     */\n    private applyFeatures(keys?: GridFeatures | GridFeatures[]) {\n        this.featureKeys = [];\n        if (!keys) {\n            for (const key of Object.keys(this.options)) {\n                this.featureKeys.push(key as GridFeatures);\n            }\n        } else if (Array.isArray(keys)) {\n            this.featureKeys = [...keys as GridFeatures[]];\n        } else {\n            this.featureKeys.push(keys);\n        }\n    }\n\n    /**\n     * This method restores complex objects in the pivot dimensions\n     * Like the IgxPivotDateDimension and filters.\n     */\n    private restoreDimensions(config: IPivotConfiguration) {\n        const collections = [config.rows, config.columns, config.filters];\n        for (const collection of collections) {\n            for (let index = 0; index < collection?.length; index++) {\n                const dim = collection[index];\n                if (this.isDateDimension(dim)) {\n                   this.restoreDateDimension(dim as IgxPivotDateDimension);\n                }\n                // restore complex filters\n                if (dim.filter) {\n                    dim.filter = this.createExpressionsTreeFromObject(dim.filter) as IFilteringExpressionsTree;\n                }\n            }\n        }\n    }\n\n\n    /**\n     * This method restores the IgxPivotDateDimension with its default functions and resource strings.\n     */\n    private restoreDateDimension(dim: IgxPivotDateDimension) {\n        const dateDim = new IgxPivotDateDimension((dim as any)._baseDimension, (dim as any)._options);\n        // restore functions and resource strings\n        dim.resourceStrings = dateDim.resourceStrings;\n        dim.memberFunction = dateDim.memberFunction;\n        let currDim: IPivotDimension = dim;\n        let originDim: IPivotDimension = dateDim;\n        while (currDim.childLevel) {\n            currDim = currDim.childLevel;\n            originDim = originDim.childLevel;\n            currDim.memberFunction = originDim.memberFunction;\n        }\n    }\n\n    /**\n     * Returns if this is a IgxPivotDateDimension.\n     */\n    private isDateDimension(dim: IPivotDimension) {\n        return (dim as any)._baseDimension;\n    }\n\n    /**\n     * This method restores complex objects in the pivot values.\n     * Like the default aggregator methods.\n     */\n    private restoreValues(config: IPivotConfiguration, grid: IgxPivotGridComponent) {\n        // restore aggregator func if it matches the default aggregators key and label\n        const values = config.values;\n        for (const value of values) {\n            const aggregateList = value.aggregateList;\n            const aggregators = PivotUtil.getAggregatorsForValue(value, grid);\n            value.aggregate.aggregator = aggregators.find(x => x.key === value.aggregate.key && x.label === value.aggregate.label)?.aggregator;\n            if (aggregateList) {\n                for (const ag of aggregateList) {\n                    ag.aggregator = aggregators.find(x => x.key === ag.key && x.label === ag.label)?.aggregator;\n                }\n            }\n        }\n    }\n\n    /**\n     * This method builds a rehydrated IExpressionTree from a provided object.\n     */\n    private createExpressionsTreeFromObject(exprTreeObject: IExpressionTree): IExpressionTree {\n        if (!exprTreeObject || !exprTreeObject.filteringOperands) {\n            return null;\n        }\n\n        if (this.currGrid instanceof IgxPivotGridComponent) {\n            return recreateTreeFromFields(exprTreeObject, this.currGrid.allDimensions.map(d => ({ dataType: d.dataType, field: d.memberName })) as FieldType[]) as IExpressionTree;\n        }\n\n        return recreateTreeFromFields(exprTreeObject, this.currGrid.columns) as IExpressionTree;\n    }\n\n    protected stringifyCallback(key: string, val: any) {\n        if (key === 'searchVal' && val instanceof Set) {\n            return Array.from(val);\n        }\n        return val;\n    }\n\n    private getColumnGroupKey(columnGroup: ColumnType) : string {\n        return columnGroup.childColumns.map(x => x.columnGroup ? x.level + \"_\" + this.getColumnGroupKey(x) : x.field).sort().join(\"_\");\n    }\n\n    private getFeature(key: string): Feature {\n        const feature: Feature = this.FEATURES[key];\n        return feature;\n    }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { GridFeatures, IGridState, IGridStateOptions, IgxGridStateBaseDirective } from './state-base.directive';\n\n@Directive({\n    selector: '[igxGridState]',\n    standalone: true\n})\nexport class IgxGridStateDirective extends IgxGridStateBaseDirective {\n    private static ngAcceptInputType_options: IGridStateOptions | '';\n\n    /**\n     *  An object with options determining if a certain feature state should be saved.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * public options = {selection: false, advancedFiltering: false};\n     * ```\n     */\n    @Input('igxGridState')\n    public override get options(): IGridStateOptions {\n        return super.options;\n    }\n\n    public override set options(value: IGridStateOptions) {\n        super.options = value;\n    }\n\n    /**\n     * Gets the state of a feature or states of all grid features, unless a certain feature is disabled through the `options` property.\n     *\n     * @param `serialize` determines whether the returned object will be serialized to JSON string. Default value is true.\n     * @param `feature` string or array of strings determining the features to be added in the state. If skipped, all features are added.\n     * @returns Returns the serialized to JSON string IGridState object, or the non-serialized IGridState object.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * let state = this.state.getState(); // returns string\n     * let state = this.state(false) // returns `IGridState` object\n     * ```\n     */\n    public getState(serialize = true, features?: GridFeatures | GridFeatures[]): IGridState | string  {\n        return super.getStateInternal(serialize, features);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Restores grid features' state based on the IGridState object passed as an argument.\n     *\n     * @param IGridState object to restore state from.\n     * @returns\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * this.state.setState(gridState);\n     * ```\n     */\n    public setState(state: IGridState | string, features?: GridFeatures | GridFeatures[]) {\n        if (typeof state === 'string') {\n            state = JSON.parse(state) as IGridState;\n            this.stateParsed.emit(state)\n        }\n        return super.setStateInternal(state, features);\n    }\n\n    /**\n     *  Event emitted when set state is called with a string.\n     * Returns the parsed state object so that it can be further modified before applying to the grid.\n     * ```typescript\n     * this.state.stateParsed.subscribe(parsedState => parsedState.sorting.forEach(x => x.strategy = NoopSortingStrategy.instance()});\n     * ```\n     */\n    @Output()\n    public stateParsed = new EventEmitter<IGridState>();\n}\n","import { Component, Directive, HostBinding, TemplateRef } from '@angular/core';\nimport { GridType } from '../common/grid.interface';\n\n@Directive({ \n    selector: '[excelText],excel-text',\n    standalone: true\n})\nexport class IgxExcelTextDirective { }\n\n@Directive({ \n    selector: '[csvText],csv-text',\n    standalone: true\n})\nexport class IgxCSVTextDirective { }\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-title */\n/* blazorAlternateBaseType: GridToolbarContent */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/**\n * Provides a way to template the title portion of the toolbar in the grid.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * <igx-grid-toolbar-title>My custom title</igx-grid-toolbar-title>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-title', template: '<ng-content></ng-content>',\n    standalone: true\n})\nexport class IgxGridToolbarTitleComponent {\n    /**\n     * Host `class.igx-grid-toolbar__title` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid-toolbar__title')\n    public cssClass = 'igx-grid-toolbar__title';\n}\n\n/* blazorElement */\n/* blazorIndirectRender */\n/* blazorAlternateBaseType: GridToolbarContent */\n/* wcElementTag: igc-grid-toolbar-actions */\n/* singleInstanceIdentifier */\n/**\n * Provides a way to template the action portion of the toolbar in the grid.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * <igx-grid-toolbar-actions>\n *  <some-toolbar-action-here />\n * </igx-grid-toolbar-actions>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-actions', template: '<ng-content></ng-content>',\n    standalone: true\n})\nexport class IgxGridToolbarActionsComponent {\n    /**\n     * Host `class.igx-grid-toolbar__actions` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid-toolbar__actions')\n    public cssClass = 'igx-grid-toolbar__actions';\n }\n\nexport interface IgxGridToolbarTemplateContext {\n    $implicit: GridType;\n}\n\n@Directive({\n    selector: '[igxGridToolbar]',\n    standalone: true\n})\nexport class IgxGridToolbarDirective {\n    constructor(public template: TemplateRef<IgxGridToolbarTemplateContext>) {}\n\n    public static ngTemplateContextGuard(_dir: IgxGridToolbarDirective,\n        ctx: unknown): ctx is IgxGridToolbarTemplateContext {\n        return true\n    }\n}\n","import { Component, Inject, Input, OnInit } from '@angular/core';\nimport { IgxToolbarToken } from './token';\nimport { OverlaySettings } from '../../services/overlay/utilities';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { isTree } from '../../data-operations/expressions-tree-util';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-advanced-filtering */\n/* blazorIndirectRender */\n/* blazorAlternateBaseType: GridToolbarBaseAction */\n/* jsonAPIManageItemInMarkup */\n/* singleInstanceIdentifier */\n/**\n * Provides a pre-configured button to open the advanced filtering dialog of the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * <igx-grid-toolbar-advanced-filtering></igx-grid-toolbar-advanced-filtering>\n * <igx-grid-toolbar-advanced-filtering>Custom text</igx-grid-toolbar-advanced-filtering>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-advanced-filtering',\n    templateUrl: './grid-toolbar-advanced-filtering.component.html',\n    imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent]\n})\nexport class IgxGridToolbarAdvancedFilteringComponent implements OnInit {\n    protected numberOfColumns: number;\n    /**\n     * Returns the grid containing this component.\n     * @hidden @internal\n     */\n    public get grid() {\n        return this.toolbar.grid;\n    }\n\n    @Input()\n    public overlaySettings: OverlaySettings;\n\n    constructor( @Inject(IgxToolbarToken) private toolbar: IgxToolbarToken) { }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit(): void {\n        // Initial value\n        this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;\n\n        // Subscribing for future updates\n        this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {\n            this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;\n        });\n    }\n\n    protected extractUniqueFieldNamesFromFilterTree(filteringTree?: IFilteringExpressionsTree) : string[] {\n        const columnNames = [];\n        if (!filteringTree) return columnNames;\n        filteringTree.filteringOperands.forEach((expr) => {\n            if (isTree(expr)) {\n                columnNames.push(...this.extractUniqueFieldNamesFromFilterTree(expr));\n            } else {\n                columnNames.push(expr.fieldName);\n            }\n        });\n        return [...new Set(columnNames)];\n    }\n}\n","<button igxButton=\"outlined\" type=\"button\" name=\"btnAdvancedFiltering\" igxRipple\n    [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n    (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n    class=\"igx-grid-toolbar__adv-filter\">\n    <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n    <span #ref>\n        <ng-content></ng-content>\n    </span>\n    <!-- D.P. fix(elements): Angular trims child nodes, native doesn't leaving white space when other items project\n    textContent (avoids layout trash of innerText) should avoid wiping the default text without user set one -->\n    @if (!ref.textContent.trim()) {\n        <span>{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n    }\n    @if (grid?.advancedFilteringExpressionsTree) {\n        <span class=\"igx-adv-filter--column-number\"> ({{ numberOfColumns }}) </span>\n    }\n</button>\n","import {\n    Component,\n    ContentChild,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    OnDestroy,\n    booleanAttribute\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { IgxIconService } from '../../icon/icon.service';\nimport { pinLeft, unpinLeft } from '@igniteui/material-icons-extended';\nimport { IgxGridToolbarActionsComponent } from './common';\nimport { GridServiceType, GridType, IGX_GRID_SERVICE_BASE } from '../common/grid.interface';\nimport { IgxToolbarToken } from './token';\nimport { IgxLinearProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxGridToolbarAdvancedFilteringComponent } from './grid-toolbar-advanced-filtering.component';\nimport { NgTemplateOutlet } from '@angular/common';\n\n/* blazorElement */\n/* mustUseNGParentAnchor */\n/* wcElementTag: igc-grid-toolbar */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/* contentParent: GridBaseDirective */\n/* contentParent: RowIsland */\n/* contentParent: HierarchicalGrid */\n/* jsonAPIManageItemInMarkup */\n/**\n * Provides a context-aware container component for UI operations for the grid components.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxPivotGridComponent\n *\n */\n@Component({\n    selector: 'igx-grid-toolbar',\n    templateUrl: './grid-toolbar.component.html',\n    providers: [{ provide: IgxToolbarToken, useExisting: IgxGridToolbarComponent }],\n    imports: [IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent, NgTemplateOutlet, IgxLinearProgressBarComponent]\n})\nexport class IgxGridToolbarComponent implements OnDestroy {\n\n    /**\n     * When enabled, shows the indeterminate progress bar.\n     *\n     * @remarks\n     * By default this will be toggled, when the default exporter component is present\n     * and an exporting is in progress.\n     */\n    @Input({ transform: booleanAttribute })\n    public showProgress = false;\n\n    /**\n     * Gets/sets the grid component for the toolbar component.\n     *\n     * @deprecated since version 17.1.0. No longer required to be set for the Hierarchical Grid child grid template\n     *\n     * @remarks\n     * Usually you should not set this property in the context of the default grid/tree grid.\n     * The only grids that demands this to be set are the hierarchical child grids. For additional\n     * information check the toolbar topic.\n     */\n    @Input()\n    public get grid() {\n        if (this._grid) {\n            return this._grid;\n        }\n        return this.api.grid;\n    }\n\n    public set grid(value: GridType) {\n        this._grid = value;\n    }\n\n    /** Returns the native DOM element of the toolbar component */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxGridToolbarActionsComponent)\n    public hasActions: IgxGridToolbarActionsComponent;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid-toolbar')\n    public defaultStyle = true;\n\n    protected _grid: GridType;\n    protected sub: Subscription;\n\n    constructor(\n        @Inject(IGX_GRID_SERVICE_BASE) private api: GridServiceType,\n        private iconService: IgxIconService,\n        private element: ElementRef<HTMLElement>\n    ) {\n        this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons');\n        this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons');\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy() {\n        this.sub?.unsubscribe();\n    }\n}\n","<ng-content select=\"[igxGridToolbarTitle],igx-grid-toolbar-title,igc-grid-toolbar-title\"></ng-content>\n\n<div class=\"igx-grid-toolbar__custom-content\">\n    <ng-content></ng-content>\n</div>\n\n<ng-template #actions>\n    <ng-content select=\"[igxGridToolbarActions],igx-grid-toolbar-actions,igc-grid-toolbar-actions\"></ng-content>\n</ng-template>\n@if (!hasActions) {\n    <igx-grid-toolbar-actions>\n        @if (grid?.allowAdvancedFiltering) {\n            <igx-grid-toolbar-advanced-filtering></igx-grid-toolbar-advanced-filtering>\n        }\n    </igx-grid-toolbar-actions>\n}\n<ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n@if (showProgress) {\n    <div class=\"igx-grid-toolbar__progress-bar\">\n        <igx-linear-bar [indeterminate]=\"true\"></igx-linear-bar>\n    </div>\n}\n","import { Directive, Input, EventEmitter, OnDestroy, Output, Inject, booleanAttribute } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { first, takeUntil } from 'rxjs/operators';\n\nimport { AbsoluteScrollStrategy } from '../../services/overlay/scroll/absolute-scroll-strategy';\nimport { ColumnDisplayOrder } from '../common/enums';\nimport { IColumnToggledEventArgs } from '../common/events';\nimport { IgxColumnActionsComponent } from '../column-actions/column-actions.component';\nimport { IgxToggleDirective, ToggleViewCancelableEventArgs, ToggleViewEventArgs } from '../../directives/toggle/toggle.directive';\nimport { HorizontalAlignment, OverlaySettings, VerticalAlignment } from '../../services/overlay/utilities';\nimport { IgxToolbarToken } from './token';\nimport { ConnectedPositioningStrategy } from '../../services/overlay/position/connected-positioning-strategy';\n\n/* blazorInclude */\n/* blazorElement */\n/* blazorIndirectRender */\n/* blazorAlternateBaseType: GridToolbarBaseAction */\n/**\n * Base class for the pinning/hiding column and exporter actions.\n *\n * @hidden @internal\n */\n@Directive()\nexport abstract class BaseToolbarDirective implements OnDestroy {\n    /**\n     * Sets the height of the column list in the dropdown.\n     */\n    @Input()\n    public columnListHeight: string;\n\n    /**\n     * Title text for the column action component\n     */\n    @Input()\n    public title: string;\n\n    /**\n     * The placeholder text for the search input.\n     */\n    @Input()\n    public prompt: string;\n\n    /**\n     * Sets overlay settings\n     */\n    @Input()\n    public set overlaySettings(overlaySettings: OverlaySettings) {\n        this._overlaySettings = overlaySettings;\n    }\n\n    /**\n     * Returns overlay settings\n     */\n    public get overlaySettings(): OverlaySettings {\n        return this._overlaySettings;\n    }\n    /**\n     * Emits an event before the toggle container is opened.\n     */\n    @Output()\n    public opening = new EventEmitter<ToggleViewCancelableEventArgs>();\n    /**\n     * Emits an event after the toggle container is opened.\n     */\n\n    @Output()\n    public opened = new EventEmitter<ToggleViewEventArgs>();\n    /**\n     * Emits an event before the toggle container is closed.\n     */\n\n    @Output()\n    public closing = new EventEmitter<ToggleViewEventArgs>();\n    /**\n     * Emits an event after the toggle container is closed.\n     */\n\n    @Output()\n    public closed = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Emits when after a column's checked state is changed\n     */\n    @Output()\n    public columnToggle = new EventEmitter<IColumnToggledEventArgs>();\n\n    private $destroy = new Subject<void>();\n    private $sub: Subscription;\n\n    private _overlaySettings: OverlaySettings = {\n        positionStrategy: new ConnectedPositioningStrategy({\n            horizontalDirection: HorizontalAlignment.Left,\n            horizontalStartPoint: HorizontalAlignment.Right,\n            verticalDirection: VerticalAlignment.Bottom,\n            verticalStartPoint: VerticalAlignment.Bottom\n        }),\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnEscape: true,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * Returns the grid containing this component.\n     * @hidden @internal\n     */\n    public get grid() {\n        return this.toolbar.grid;\n    }\n\n    constructor(@Inject(IgxToolbarToken) protected toolbar: IgxToolbarToken) { }\n\n    /** @hidden @internal **/\n    public ngOnDestroy() {\n        this.$destroy.next();\n        this.$destroy.complete();\n    }\n\n    /** @hidden @internal */\n    public toggle(anchorElement: HTMLElement, toggleRef: IgxToggleDirective, actions?: IgxColumnActionsComponent): void {\n        if (actions) {\n            this._setupListeners(toggleRef, actions);\n            const setHeight = () =>\n                actions.columnsAreaMaxHeight = actions.columnsAreaMaxHeight !== '100%'\n                    ? actions.columnsAreaMaxHeight :\n                    this.columnListHeight ??\n                    `${Math.max(this.grid.calcHeight * 0.5, 200)}px`;\n            toggleRef.opening.pipe(first()).subscribe(setHeight);\n        }\n        toggleRef.toggle({\n            ...this.overlaySettings, ...{\n                target: anchorElement, outlet: this.grid.outlet,\n                excludeFromOutsideClick: [anchorElement]\n            }\n        });\n\n    }\n\n    /** @hidden @internal */\n    public focusSearch(columnActions: HTMLElement) {\n        columnActions.querySelector('input')?.focus();\n    }\n\n    private _setupListeners(toggleRef: IgxToggleDirective, actions?: IgxColumnActionsComponent) {\n        if (actions) {\n            if (!this.$sub || this.$sub.closed) {\n                this.$sub = actions.columnToggled.pipe(takeUntil(this.$destroy)).subscribe((event) => this.columnToggle.emit(event));\n            }\n        }\n        /** The if statement prevents emitting open and close events twice  */\n        if (toggleRef.collapsed) {\n            toggleRef.opening.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.opening.emit(event));\n            toggleRef.opened.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.opened.emit(event));\n        } else {\n            toggleRef.closing.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.closing.emit(event));\n            toggleRef.closed.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.closed.emit(event));\n        }\n    }\n}\n\n/* blazorElement */\n/* blazorIndirectRender */\n/**\n * @hidden @internal\n * Base class for pinning/hiding column actions\n */\n@Directive()\nexport abstract class BaseToolbarColumnActionsDirective extends BaseToolbarDirective {\n    @Input({ transform: booleanAttribute })\n    public hideFilter = false;\n\n    @Input()\n    public filterCriteria = '';\n\n    @Input()\n    public columnDisplayOrder: ColumnDisplayOrder = ColumnDisplayOrder.DisplayOrder;\n\n    @Input()\n    public columnsAreaMaxHeight = '100%';\n\n    @Input()\n    public uncheckAllText: string;\n\n    @Input()\n    public checkAllText: string;\n\n    @Input()\n    public indentetion = 30;\n\n    @Input()\n    public buttonText: string;\n\n    protected columnActionsUI: IgxColumnActionsComponent;\n\n    public checkAll() {\n        this.columnActionsUI.checkAllColumns();\n    }\n\n    public uncheckAll() {\n        this.columnActionsUI.uncheckAllColumns();\n    }\n}\n","import { Component, Input, Output, EventEmitter, Inject, booleanAttribute } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { BaseToolbarDirective } from './grid-toolbar.base';\nimport { IgxExcelTextDirective, IgxCSVTextDirective } from './common';\nimport {\n    CsvFileTypes,\n    IgxBaseExporter,\n    IgxCsvExporterOptions,\n    IgxCsvExporterService,\n    IgxExcelExporterOptions,\n    IgxExcelExporterService\n} from '../../services/public_api';\nimport { IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { GridType } from '../common/grid.interface';\nimport { IgxToolbarToken } from './token';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\n\n\nexport type IgxExporterOptions = IgxCsvExporterOptions | IgxExcelExporterOptions;\n\n/* jsonAPIComplexObject */\n/* wcAlternateName: ExporterEventArgs */\nexport interface IgxExporterEvent {\n    exporter: IgxBaseExporter;\n    /* alternateType: ExporterOptionsBase */\n    options: IgxExporterOptions;\n    grid: GridType;\n    cancel: boolean;\n}\n\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-exporter */\n/* blazorIndirectRender */\n/* jsonAPIManageItemInMarkup */\n/* singleInstanceIdentifier */\n/**\n * Provides a pre-configured exporter component for the grid.\n *\n * @remarks\n * This component still needs the actual exporter service(s) provided in the DI chain\n * in order to export something.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n */\n@Component({\n    selector: 'igx-grid-toolbar-exporter',\n    templateUrl: './grid-toolbar-exporter.component.html',\n    imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent, IgxToggleDirective, IgxExcelTextDirective, IgxCSVTextDirective]\n})\nexport class IgxGridToolbarExporterComponent extends BaseToolbarDirective {\n\n    /**\n     * Show entry for CSV export.\n     */\n    @Input({ transform: booleanAttribute })\n    public exportCSV = true;\n\n    /**\n     * Show entry for Excel export.\n     */\n    @Input({ transform: booleanAttribute })\n    public exportExcel = true;\n\n    /**\n     * The name for the exported file.\n     */\n    @Input()\n    public filename = 'ExportedData';\n\n    /**\n     * Emitted when starting an export operation. Re-emitted additionally\n     * by the grid itself.\n     */\n    @Output()\n    public exportStarted = new EventEmitter<IgxExporterEvent>();\n\n    /**\n     * Emitted on successful ending of an export operation.\n     */\n    @Output()\n    public exportEnded = new EventEmitter<void>();\n\n    /**\n     * Indicates whether there is an export in progress.\n     */\n    protected isExporting = false;\n\n    constructor(\n        @Inject(IgxToolbarToken) toolbar: IgxToolbarToken,\n        private excelExporter: IgxExcelExporterService,\n        private csvExporter: IgxCsvExporterService,\n    ) {\n        super(toolbar);\n    }\n\n    protected exportClicked(type: 'excel' | 'csv', toggleRef?: IgxToggleDirective) {\n        toggleRef?.close();\n        this.export(type);\n    }\n\n    /* alternateName: exportGrid */\n    /**\n     * Export the grid's data\n     * @param type File type to export\n     */\n    public export(type: 'excel' | 'csv'): void {\n        let options: IgxExporterOptions;\n        let exporter: IgxBaseExporter;\n\n        switch (type) {\n            case 'csv':\n                options = new IgxCsvExporterOptions(this.filename, CsvFileTypes.CSV);\n                exporter = this.csvExporter;\n                break;\n            case 'excel':\n                options = new IgxExcelExporterOptions(this.filename);\n                exporter = this.excelExporter;\n        }\n\n        const args = { exporter, options, grid: this.grid, cancel: false } as IgxExporterEvent;\n\n        this.exportStarted.emit(args);\n        this.grid.toolbarExporting.emit(args);\n        this.isExporting = true;\n        this.toolbar.showProgress = true;\n\n        if (args.cancel) {\n            return;\n        }\n\n        exporter.exportEnded.pipe(first()).subscribe(() => {\n            this.exportEnded.emit();\n            this.isExporting = false;\n            this.toolbar.showProgress = false;\n        });\n\n        exporter.export(this.grid, options);\n    }\n}\n","<button [title]=\"grid?.resourceStrings.igx_grid_toolbar_exporter_button_tooltip\" [disabled]=\"isExporting\"\n    igxButton=\"outlined\" type=\"button\" igxRipple #btn (click)=\"toggle(btn, toggleRef)\">\n\n    <igx-icon family=\"default\" name=\"file_download\"></igx-icon>\n    <span #ref>\n        <ng-content></ng-content>\n    </span>\n    @if (!ref.textContent.trim()) {\n        <span>\n            {{ grid?.resourceStrings.igx_grid_toolbar_exporter_button_label }}\n        </span>\n    }\n    <igx-icon family=\"default\" name=\"arrow_drop_down\"></igx-icon>\n</button>\n\n<div class=\"igx-grid-toolbar__dropdown\" id=\"btnExport\">\n    <ul class=\"igx-grid-toolbar__dd-list\" igxToggle #toggleRef=\"toggle\">\n        @if (exportExcel) {\n            <li #btnExportExcel id=\"btnExportExcel\"\n                class=\"igx-grid-toolbar__dd-list-items\" igxRipple (click)=\"exportClicked('excel', toggleRef)\">\n                <span #excel>\n                    <ng-content select=[excelText],excel-text></ng-content>\n                </span>\n                @if (!excel.childNodes.length) {\n                    <excel-text>\n                        {{ grid?.resourceStrings.igx_grid_toolbar_exporter_excel_entry_text}}\n                    </excel-text>\n                }\n            </li>\n        }\n\n        @if (exportCSV) {\n            <li #btnExportCsv id=\"btnExportCsv\" class=\"igx-grid-toolbar__dd-list-items\"\n                igxRipple (click)=\"exportClicked('csv', toggleRef)\">\n                <span #csv>\n                    <ng-content select=[csvText],csv-text></ng-content>\n                </span>\n                @if (!csv.childNodes.length) {\n                    <csv-text>\n                        {{ grid?.resourceStrings.igx_grid_toolbar_exporter_csv_entry_text }}\n                    </csv-text>\n                }\n            </li>\n        }\n    </ul>\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { IgxColumnActionsComponent } from '../column-actions/column-actions.component';\nimport { IgxColumnHidingDirective } from '../column-actions/column-hiding.directive';\nimport { BaseToolbarColumnActionsDirective } from './grid-toolbar.base';\nimport { IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { AsyncPipe } from '@angular/common';\n\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-hiding */\n/* blazorIndirectRender */\n/* jsonAPIManageItemInMarkup */\n/* singleInstanceIdentifier */\n/**\n * Provides a pre-configured column hiding component for the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n *  <igx-grid-toolbar-hiding></igx-grid-toolbar-hiding>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-hiding',\n    templateUrl: './grid-toolbar-hiding.component.html',\n    imports: [IgxButtonDirective, IgxIconComponent, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxToggleDirective, AsyncPipe]\n})\nexport class IgxGridToolbarHidingComponent extends BaseToolbarColumnActionsDirective {\n\n    @ViewChild(IgxColumnHidingDirective, {read: IgxColumnActionsComponent})\n    private set content(content: IgxColumnActionsComponent) {\n        this.columnActionsUI = content;\n    }\n}\n","@if (grid.rendered$ | async) {\n    <button\n        [title]=\"grid?.resourceStrings.igx_grid_toolbar_hiding_button_tooltip\"\n        #btn\n        igxButton=\"outlined\"\n        type=\"button\"\n        name=\"btnColumnHiding\" (click)=\"toggle(btn, ref, actions)\">\n        <igx-icon\n            family=\"default\"\n            [name]=\"!grid.hiddenColumnsCount ? 'show' : 'hide'\">\n        </igx-icon>\n        <span>{{ grid.hiddenColumnsCount }}</span>\n        <span>{{ buttonText }}</span>\n    </button>\n    <igx-column-actions #actions igxColumnHiding igxToggle (opened)=\"focusSearch(ref.element)\" #ref=\"toggle\"\n        [grid]=\"grid\" [title]=\"title || grid?.resourceStrings.igx_grid_toolbar_hiding_title\"\n        [filterColumnsPrompt]=\"prompt || grid?.resourceStrings.igx_grid_toolbar_actions_filter_prompt\"\n        [hideFilter]=\"hideFilter\" [filterCriteria]=\"filterCriteria\" [columnDisplayOrder]=\"columnDisplayOrder\" [columnsAreaMaxHeight]=\"columnsAreaMaxHeight\"\n        [uncheckAllText]=\"uncheckAllText\" [checkAllText]=\"checkAllText\" [indentation]=\"indentetion\">\n    </igx-column-actions>\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { IgxColumnActionsComponent } from '../column-actions/column-actions.component';\nimport { IgxColumnPinningDirective } from '../column-actions/column-pinning.directive';\nimport { BaseToolbarColumnActionsDirective } from './grid-toolbar.base';\nimport { IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { AsyncPipe } from '@angular/common';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-pinning */\n/* singleInstanceIdentifier */\n/* blazorIndirectRender */\n/* jsonAPIManageItemInMarkup */\n/**\n * Provides a pre-configured column pinning component for the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n *  <igx-grid-toolbar-pinning></igx-grid-toolbar-pinning>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-pinning',\n    templateUrl: './grid-toolbar-pinning.component.html',\n    imports: [IgxButtonDirective, IgxIconComponent, IgxColumnActionsComponent, IgxColumnPinningDirective, IgxToggleDirective, AsyncPipe]\n})\nexport class IgxGridToolbarPinningComponent extends BaseToolbarColumnActionsDirective {\n\n    @ViewChild(IgxColumnPinningDirective, {read: IgxColumnActionsComponent})\n    private set content(content: IgxColumnActionsComponent) {\n        this.columnActionsUI = content;\n    }\n}\n","@if (grid.rendered$ | async) {\n    <button\n        [title]=\"grid?.resourceStrings.igx_grid_toolbar_pinning_button_tooltip\"\n        #btn\n        igxButton=\"outlined\"\n        type=\"button\"\n        name=\"btnColumnPinning\" (click)=\"toggle(btn, ref, actions)\">\n        <igx-icon\n            family=\"default\"\n            [name]=\"!grid.pinnedColumnsCount ? 'unpin' : 'pin'\">\n        </igx-icon>\n        <span>{{ grid.pinnedColumnsCount }}</span>\n        <span>{{ buttonText }}</span>\n    </button>\n    <igx-column-actions #actions igxColumnPinning igxToggle (opened)=\"focusSearch(ref.element)\" #ref=\"toggle\"\n        [grid]=\"grid\" [title]=\"title || grid?.resourceStrings.igx_grid_toolbar_pinning_title\"\n        [filterColumnsPrompt]=\"prompt || grid?.resourceStrings.igx_grid_toolbar_actions_filter_prompt\"\n        [hideFilter]=\"hideFilter\" [filterCriteria]=\"filterCriteria\" [columnDisplayOrder]=\"columnDisplayOrder\" [columnsAreaMaxHeight]=\"columnsAreaMaxHeight\"\n        [uncheckAllText]=\"uncheckAllText\" [checkAllText]=\"checkAllText\" [indentation]=\"indentetion\">\n    </igx-column-actions>\n}\n","// import { IgxCSVTextDirective, IgxExcelTextDirective, IgxGridToolbarActionsComponent, IgxGridToolbarDirective, IgxGridToolbarTitleComponent } from './common';\n// import { IgxGridToolbarAdvancedFilteringComponent } from './grid-toolbar-advanced-filtering.component';\n// import { IgxGridToolbarExporterComponent } from './grid-toolbar-exporter.component';\n// import { IgxGridToolbarHidingComponent } from './grid-toolbar-hiding.component';\n// import { IgxGridToolbarPinningComponent } from './grid-toolbar-pinning.component';\n// import { IgxGridToolbarComponent } from './grid-toolbar.component';\n\nexport * from './grid-toolbar.component';\nexport * from './common';\nexport * from './grid-toolbar-advanced-filtering.component';\nexport * from './grid-toolbar-exporter.component';\nexport * from './grid-toolbar-hiding.component';\nexport * from './grid-toolbar-pinning.component';\n\n/* NOTE: Grid toolbar directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_TOOLBAR_DIRECTIVES = [\n//     IgxCSVTextDirective,\n//     IgxExcelTextDirective,\n//     IgxGridToolbarActionsComponent,\n//     IgxGridToolbarAdvancedFilteringComponent,\n//     IgxGridToolbarComponent,\n//     IgxGridToolbarExporterComponent,\n//     IgxGridToolbarHidingComponent,\n//     IgxGridToolbarPinningComponent,\n//     IgxGridToolbarTitleComponent,\n//     IgxGridToolbarDirective\n// ] as const;\n","import {\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective\n} from './column-actions/public_api';\nimport {\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent\n} from './columns/public_api';\nimport { IgxAdvancedFilteringDialogComponent } from './filtering/advanced-filtering/advanced-filtering-dialog.component';\nimport {\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n} from './filtering/excel-style/public_api';\nimport { IgxGridFooterComponent } from './grid-footer/grid-footer.component';\nimport { IgxExcelStyleHeaderIconDirective, IgxHeaderCollapsedIndicatorDirective, IgxHeaderExpandedIndicatorDirective, IgxRowCollapsedIndicatorDirective, IgxRowExpandedIndicatorDirective, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective } from './grid.directives';\nimport {\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent\n} from './headers/public_api';\nimport { IgxDragIndicatorIconDirective, IgxRowDragGhostDirective } from './row-drag.directive';\nimport { IgxRowDirective } from './row.directive';\nimport {\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective\n} from './selection/public_api';\nimport { IgxGridStateDirective } from './state.directive';\nimport {\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective\n} from './toolbar/public_api';\n\nexport { IgxRowDirective } from './row.directive';\nexport * from './grid.directives';\nexport * from './grid-public-row';\nexport * from './grid-public-cell';\nexport {\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective\n} from './row-drag.directive';\nexport {\n    IgxRowEditTextDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTabStopDirective\n} from './grid.rowEdit.directive';\nexport { IGridState, IColumnState, IGridStateCollection, IGridStateOptions, GridFeatures } from './state-base.directive';\nexport * from './state.directive';\nexport * from './columns/public_api';\nexport * from './headers/public_api';\nexport * from './common/public_api';\nexport * from './grid-footer/grid-footer.component';\nexport { IgxAdvancedFilteringDialogComponent } from './filtering/advanced-filtering/advanced-filtering-dialog.component';\nexport * from './filtering/excel-style/public_api';\nexport * from './selection/public_api';\nexport * from './summaries/grid-summary';\nexport * from './column-actions/public_api';\nexport * from './toolbar/public_api';\n\n/*\nexport * from './api.service';\n\n// export * from './common/shared.module';\nexport * from './columns/interfaces';\n// export * from './headers/headers.module';\n// export * from './filtering/base/filtering.module';\nexport * from './grid-base.directive';\nexport * from './grid.common';\n// export * from './grid-common.module';\n//\n// export * from './toolbar/toolbar.module';\nexport * from './grid/grid-validation.service';\n\nexport { IgxGridCellComponent } from './cell.component';\n\nexport * from './resizing/resize.module';\n// export * from './summaries/summary.module';\nexport * from './grouping/tree-grid-group-by-area.component';\nexport * from './grouping/grid-group-by-area.component';\nexport * from './grouping/group-by-area.directive';\nexport { DropPosition } from './moving/moving.service';\n*/\n\n/* NOTE: Common grid directives collection for reuse\n    Import `IGX_GRID_DIRECTIVES` or `IGX_TREE_GRID_DIRECTIVES` or `IGX_HIERARCHICAL_GRID_DIRECTIVES` instead of `IGX_GRID_COMMON_DIRECTIVES`\n*/\nexport const IGX_GRID_COMMON_DIRECTIVES = [\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n] as const;\n","import { Directive, TemplateRef } from '@angular/core';\nimport { CancelableEventArgs, IBaseEventArgs } from '../core/utils';\n\nexport interface IPageEventArgs extends IBaseEventArgs {\n    previous: number;\n    current: number;\n}\n\nexport interface IPageCancellableEventArgs extends CancelableEventArgs {\n    current: number;\n    next: number;\n}\n\n@Directive({\n    selector: '[igxPaginator]',\n    standalone: true\n})\nexport class IgxPaginatorDirective {\n\n    constructor(public template: TemplateRef<any>) { }\n}\n","export interface IPaginatorResourceStrings {\n    igx_paginator_label?: string;\n    igx_paginator_pager_text?: string;\n    igx_paginator_first_page_button_text?: string;\n    igx_paginator_previous_page_button_text?: string;\n    igx_paginator_last_page_button_text?: string;\n    igx_paginator_next_page_button_text?: string;\n}\n\nexport const PaginatorResourceStringsEN: IPaginatorResourceStrings = {\n    igx_paginator_label: 'Items per page',\n    igx_paginator_pager_text: 'of',\n    igx_paginator_first_page_button_text: 'Go to first page',\n    igx_paginator_previous_page_button_text: 'Previous page',\n    igx_paginator_last_page_button_text: 'Go to last page',\n    igx_paginator_next_page_button_text: 'Next page',\n};\n","import { ChangeDetectorRef, Component, ContentChild, Directive, ElementRef, EventEmitter, Host, HostBinding, Input, Output, forwardRef } from '@angular/core';\nimport { IPageCancellableEventArgs, IPageEventArgs } from './paginator-interfaces';\nimport { IPaginatorResourceStrings, PaginatorResourceStringsEN } from '../core/i18n/paginator-resources';\nimport { OverlaySettings } from '../services/overlay/utilities';\nimport { IgxSelectItemComponent } from '../select/select-item.component';\nimport { FormsModule } from '@angular/forms';\nimport { IgxSelectComponent } from '../select/select.component';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { IgxIconButtonDirective } from '../directives/button/icon-button.directive';\nimport { IgxPaginatorToken } from './token';\n\n@Directive({\n    selector: '[igxPaginatorContent],igx-paginator-content',\n    standalone: true\n})\nexport class IgxPaginatorContentDirective {\n    /**\n     * @internal\n     * @hidden\n     */\n    @HostBinding('class.igx-paginator-content')\n    public cssClass = 'igx-paginator-content';\n}\n\n/* blazorElement */\n/* mustUseNGParentAnchor */\n/* wcElementTag: igc-paginator */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/* contentParent: GridBaseDirective */\n/* contentParent: RowIsland */\n/* contentParent: HierarchicalGrid */\n/* jsonAPIManageCollectionInMarkup */\n/**\n * Paginator component description\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxPivotGridComponent, *\n */\n@Component({\n    selector: 'igx-paginator',\n    templateUrl: 'paginator.component.html',\n    imports: [forwardRef(() => IgxPageSizeSelectorComponent), forwardRef(() => IgxPageNavigationComponent)],\n    providers: [\n        { provide: IgxPaginatorToken, useExisting: IgxPaginatorComponent }\n    ]\n})\n// switch IgxPaginatorToken to extends once density is dropped\nexport class IgxPaginatorComponent implements IgxPaginatorToken {\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxPaginatorContentDirective)\n    public customContent: IgxPaginatorContentDirective;\n\n    /**\n     * Emitted when `perPage` property value of the paginator is changed.\n     *\n     * @example\n     * ```html\n     * <igx-paginator (perPageChange)=\"onPerPageChange($event)\"></igx-paginator>\n     * ```\n     * ```typescript\n     * public onPerPageChange(perPage: number) {\n     *   this.perPage = perPage;\n     * }\n     * ```\n     */\n    @Output()\n    public perPageChange = new EventEmitter<number>();\n\n    /**\n     * Emitted after the current page is changed.\n     *\n     * @example\n     * ```html\n     * <igx-paginator (pageChange)=\"onPageChange($event)\"></igx-paginator>\n     * ```\n     * ```typescript\n     * public onPageChange(page: number) {\n     *   this.currentPage = page;\n     * }\n     * ```\n     */\n    @Output()\n    public pageChange = new EventEmitter<number>();\n\n    /**\n     * Emitted before paging is performed.\n     *\n     * @remarks\n     * Returns an object consisting of the current and next pages.\n     * @example\n     * ```html\n     * <igx-paginator (paging)=\"pagingHandler($event)\"></igx-paginator>\n     * ```\n     */\n    @Output()\n    public paging = new EventEmitter<IPageCancellableEventArgs>();\n\n    /**\n     * Emitted after paging is performed.\n     *\n     * @remarks\n     * Returns an object consisting of the previous and current pages.\n     * @example\n     * ```html\n     * <igx-paginator (pagingDone)=\"pagingDone($event)\"></igx-paginator>\n     * ```\n     */\n    @Output()\n    public pagingDone = new EventEmitter<IPageEventArgs>();\n\n    /**\n     * Total pages calculated from totalRecords and perPage\n     */\n    public totalPages: number;\n    protected _page = 0;\n    protected _totalRecords: number;\n    protected _selectOptions = [5, 10, 15, 25, 50, 100, 500];\n    protected _perPage = 15;\n\n    private _resourceStrings = getCurrentResourceStrings(PaginatorResourceStringsEN);\n    private _overlaySettings: OverlaySettings = {};\n    private defaultSelectValues = [5, 10, 15, 25, 50, 100, 500];\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-paginator')\n    public cssClass = 'igx-paginator';\n\n    /**\n     * Gets/Sets the current page of the paginator.\n     * The default is 0.\n     * ```typescript\n     * let page = this.paginator.page;\n     * ```\n     *\n     * @memberof IgxPaginatorComponent\n     */\n    @Input()\n    public get page() {\n        return this._page;\n    }\n\n    public set page(value: number) {\n        if (this._page === value || value < 0 || value > this.totalPages) {\n            return;\n        }\n        const cancelEventArgs: IPageCancellableEventArgs = { current: this._page, next: value, cancel: false };\n        const eventArgs: IPageEventArgs = { previous: this._page, current: value };\n\n        this.paging.emit(cancelEventArgs);\n        if (cancelEventArgs.cancel) {\n            return;\n        }\n        this._page = value;\n        this.pageChange.emit(this._page);\n\n        this.pagingDone.emit(eventArgs);\n    }\n\n    /**\n     * Gets/Sets the number of visible items per page in the paginator.\n     * The default is 15.\n     * ```typescript\n     * let itemsPerPage = this.paginator.perPage;\n     * ```\n     *\n     * @memberof IgxPaginatorComponent\n     */\n    @Input()\n    public get perPage() {\n        return this._perPage;\n    }\n\n    public set perPage(value: number) {\n        if (value < 0 || this.perPage === value) {\n            return;\n        }\n        this._perPage = Number(value);\n        this.perPageChange.emit(this._perPage);\n        this._selectOptions = this.sortUniqueOptions(this.defaultSelectValues, this._perPage);\n        this.totalPages = Math.ceil(this.totalRecords / this._perPage);\n        if (this.totalPages !== 0 && this.page >= this.totalPages) {\n            this.page = this.totalPages - 1;\n        }\n    }\n\n    /**\n     * Sets the total records.\n     * ```typescript\n     * let totalRecords = this.paginator.totalRecords;\n     * ```\n     *\n     * @memberof IgxPaginatorComponent\n     */\n    @Input()\n    public get totalRecords() {\n        return this._totalRecords;\n    }\n\n    public set totalRecords(value: number) {\n        this._totalRecords = value;\n        this.totalPages = Math.ceil(this.totalRecords / this.perPage);\n        if (this.page > this.totalPages) {\n            this.page = 0;\n        }\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Sets custom options in the select of the paginator\n     * ```typescript\n     * let options = this.paginator.selectOptions;\n     * ```\n     *\n     * @memberof IgxPaginatorComponent\n     */\n    @Input()\n    public get selectOptions() {\n        return this._selectOptions;\n    }\n\n    public set selectOptions(value: Array<number>) {\n        this._selectOptions = this.sortUniqueOptions(value, this._perPage);\n        this.defaultSelectValues = [...value];\n    }\n\n    /**\n     * Sets custom OverlaySettings.\n     * ```html\n     * <igx-paginator [overlaySettings] = \"customOverlaySettings\"></igx-paginator>\n     * ```\n     */\n    @Input()\n    public get overlaySettings(): OverlaySettings {\n        return this._overlaySettings;\n    }\n\n    public set overlaySettings(value: OverlaySettings) {\n        this._overlaySettings = Object.assign({}, this._overlaySettings, value);\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IPaginatorResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): IPaginatorResourceStrings {\n        return this._resourceStrings;\n    }\n\n    constructor(private elementRef: ElementRef, private cdr: ChangeDetectorRef) { }\n\n    /**\n     * Returns if the current page is the last page.\n     * ```typescript\n     * const lastPage = this.paginator.isLastPage;\n     * ```\n     */\n    public get isLastPage(): boolean {\n        return this.page + 1 >= this.totalPages;\n    }\n\n    /**\n     * Returns if the current page is the first page.\n     * ```typescript\n     * const lastPage = this.paginator.isFirstPage;\n     * ```\n     */\n    public get isFirstPage(): boolean {\n        return this.page === 0;\n    }\n\n\n    /**\n     * Returns if the first pager buttons should be disabled\n     * @hidden\n     * @deprecated in version 18.1.0. Use the `isFirstPage` property instead.\n     */\n    public get isFirstPageDisabled(): boolean {\n        return this.isFirstPage;\n    }\n\n    /**\n     * Returns if the last pager buttons should be disabled\n     * @hidden\n     * @deprecated in version 18.1.0. Use the `isLastPage` property instead.\n     */\n    public get isLastPageDisabled(): boolean {\n        return this.isLastPage;\n    }\n\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * Goes to the next page of the `IgxPaginatorComponent`, if the paginator is not already at the last page.\n     * ```typescript\n     * this.paginator.nextPage();\n     * ```\n     *\n     * @memberof IgxPaginatorComponent\n     */\n    public nextPage(): void {\n        if (!this.isLastPage) {\n            this.page += 1;\n        }\n    }\n    /**\n     * Goes to the previous page of the `IgxPaginatorComponent`, if the paginator is not already at the first page.\n     * ```typescript\n     * this.paginator.previousPage();\n     * ```\n     *\n     * @memberof IgxPaginatorComponent\n     */\n    public previousPage(): void {\n        if (!this.isFirstPage) {\n            this.page -= 1;\n        }\n    }\n    /**\n     * Goes to the desired page index.\n     * ```typescript\n     * this.paginator.paginate(1);\n     * ```\n     *\n     * @param val\n     * @memberof IgxPaginatorComponent\n     */\n    public paginate(val: number): void {\n        if (val < 0 || val > this.totalPages - 1) {\n            return;\n        }\n        this.page = val;\n    }\n\n    private sortUniqueOptions(values: Array<number>, newOption: number): number[] {\n        return Array.from(new Set([...values, newOption])).sort((a, b) => a - b);\n    }\n}\n\n\n@Component({\n    selector: 'igx-page-size',\n    templateUrl: 'page-size-selector.component.html',\n    imports: [IgxSelectComponent, FormsModule, IgxSelectItemComponent]\n})\nexport class IgxPageSizeSelectorComponent {\n    /**\n     * @internal\n     * @hidden\n     */\n    @HostBinding('class.igx-page-size')\n    public cssClass = 'igx-page-size';\n\n    constructor(@Host() public paginator: IgxPaginatorComponent) { }\n}\n\n\n@Component({\n    selector: 'igx-page-nav',\n    templateUrl: 'pager.component.html',\n    imports: [IgxRippleDirective, IgxIconComponent, IgxIconButtonDirective]\n})\nexport class IgxPageNavigationComponent {\n    /**\n     * @internal\n     * @hidden\n     */\n    @HostBinding('class.igx-page-nav')\n    public cssClass = 'igx-page-nav';\n\n    /**\n     * Sets the `role` attribute of the element.\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'navigation';\n\n    constructor(\n        @Host()\n        public paginator: IgxPaginatorComponent) { }\n}\n","<ng-content select=\"[igxPaginatorContent],igx-paginator-content\"></ng-content>\n\n@if (!customContent) {\n    <igx-page-size></igx-page-size>\n}\n@if (!customContent) {\n    <igx-page-nav></igx-page-nav>\n}\n","<label class=\"igx-page-size__label\">{{ paginator.resourceStrings.igx_paginator_label }}</label>\n<div class=\"igx-page-size__select\">\n    <igx-select [overlaySettings]=\"paginator.overlaySettings\" [(ngModel)]=\"paginator.perPage\" type=\"border\">\n        @for (val of paginator.selectOptions; track val) {\n            <igx-select-item [value]=\"val\">\n                {{ val }}\n            </igx-select-item>\n        }\n    </igx-select>\n</div>\n","<button\n    [title]=\"paginator.resourceStrings.igx_paginator_first_page_button_text\"\n    [disabled]=\"paginator.isFirstPage\"\n    [attr.aria-disabled]=\"paginator.isFirstPage\"\n    (click)=\"paginator.paginate(0)\"\n    igxIconButton=\"flat\"\n    igxRipple\n    [igxRippleCentered]=\"true\"\n    type=\"button\"\n>\n    <igx-icon family=\"default\" name=\"first_page\"></igx-icon>\n</button>\n<button\n    [title]=\"paginator.resourceStrings.igx_paginator_previous_page_button_text\"\n    [disabled]=\"paginator.isFirstPage\"\n    [attr.aria-disabled]=\"paginator.isFirstPage\"\n    (click)=\"paginator.previousPage()\"\n    igxIconButton=\"flat\"\n    igxRipple\n    [igxRippleCentered]=\"true\"\n    type=\"button\"\n>\n    <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n</button>\n<div class=\"igx-page-nav__text\" aria-current=\"page\">\n    <span>{{ paginator.page + 1 }}</span>\n    <span\n        >&nbsp;{{\n            paginator.resourceStrings.igx_paginator_pager_text\n        }}&nbsp;</span\n    >\n    <span>{{ paginator.totalPages || 1 }}</span>\n</div>\n<button\n    [title]=\"paginator.resourceStrings.igx_paginator_next_page_button_text\"\n    [disabled]=\"paginator.isLastPage\"\n    [attr.aria-disabled]=\"paginator.isLastPage\"\n    (click)=\"paginator.nextPage()\"\n    igxRipple\n    [igxRippleCentered]=\"true\"\n    igxIconButton=\"flat\"\n    type=\"button\"\n>\n    <igx-icon family=\"default\" name=\"next\"></igx-icon>\n</button>\n<button\n    [title]=\"paginator.resourceStrings.igx_paginator_last_page_button_text\"\n    [disabled]=\"paginator.isLastPage\"\n    [attr.aria-disabled]=\"paginator.isLastPage\"\n    (click)=\"paginator.paginate(paginator.totalPages - 1)\"\n    igxIconButton=\"flat\"\n    igxRipple\n    [igxRippleCentered]=\"true\"\n    type=\"button\"\n>\n    <igx-icon family=\"default\" name=\"last_page\"></igx-icon>\n</button>\n\n","import { IgxPaginatorDirective } from './paginator-interfaces';\nimport { IgxPageNavigationComponent, IgxPageSizeSelectorComponent, IgxPaginatorComponent, IgxPaginatorContentDirective } from './paginator.component';\n\nexport * from './paginator.component';\nexport * from './paginator-interfaces';\n\n/* NOTE: Paginator directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_PAGINATOR_DIRECTIVES = [\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n] as const;\n","import { IgxRowAddTextDirective, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTextDirective } from '../public_api';\nimport { IgxGridComponent } from './grid.component';\nimport { IgxGridDetailTemplateDirective, IgxGroupByRowTemplateDirective } from '../grid.directives';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n    NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\n \nimport {\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxRowExpandedIndicatorDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective,\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n} from \"../public_api\";\nimport {\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n} from '../../paginator/public_api';\n\nexport * from './grid.component';\n\n/* NOTE: Grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_GRID_DIRECTIVES = [\n    IgxGridComponent,\n    IgxGroupByRowTemplateDirective,\n    IgxGridDetailTemplateDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTextDirective,\n    IgxRowEditTabStopDirective,\n    // IGX_GRID_COMMON_DIRECTIVES:\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective,\n    // IGX_GRID_VALIDATION_DIRECTIVES:\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective,\n    // IGX_PAGINATOR_DIRECTIVES:\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n] as const;\n","import { useAnimation } from \"@angular/animations\";\nimport {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    Renderer2,\n    booleanAttribute\n} from \"@angular/core\";\nimport { first } from \"rxjs/operators\";\nimport { SortingDirection } from \"../../data-operations/sorting-strategy\";\nimport { IDragBaseEventArgs, IDragGhostBaseEventArgs, IDragMoveEventArgs, IDropBaseEventArgs, IDropDroppedEventArgs, IgxDropDirective, IgxDragDirective, IgxDragHandleDirective } from \"../../directives/drag-drop/drag-drop.directive\";\nimport { ISelectionEventArgs } from \"../../drop-down/drop-down.common\";\nimport { IgxDropDownComponent } from \"../../drop-down/drop-down.component\";\nimport {\n    AbsoluteScrollStrategy,\n    AutoPositionStrategy,\n    OverlaySettings,\n    PositionSettings,\n    VerticalAlignment\n} from \"../../services/public_api\";\nimport { ColumnType, PivotGridType } from \"../common/grid.interface\";\nimport {\n    IPivotAggregator,\n    IPivotDimension,\n    IPivotValue,\n    PivotDimensionType\n} from \"./pivot-grid.interface\";\nimport { PivotUtil } from './pivot-util';\nimport { IgxFilterPivotItemsPipe } from \"./pivot-grid.pipes\";\nimport { IgxDropDownItemComponent } from \"../../drop-down/drop-down-item.component\";\nimport { IgxDropDownItemNavigationDirective } from \"../../drop-down/drop-down-navigation.directive\";\nimport { IgxExpansionPanelBodyComponent } from \"../../expansion-panel/expansion-panel-body.component\";\nimport { IgxChipComponent } from \"../../chips/chip.component\";\nimport { IgxExpansionPanelTitleDirective } from \"../../expansion-panel/expansion-panel.directives\";\nimport { IgxExpansionPanelHeaderComponent } from \"../../expansion-panel/expansion-panel-header.component\";\nimport { IgxExpansionPanelComponent } from \"../../expansion-panel/expansion-panel.component\";\nimport { IgxAccordionComponent } from \"../../accordion/accordion.component\";\nimport { IgxCheckboxComponent } from \"../../checkbox/checkbox.component\";\nimport { IgxListItemComponent } from \"../../list/list-item.component\";\nimport { IgxListComponent } from \"../../list/list.component\";\nimport { IgxInputDirective } from \"../../directives/input/input.directive\";\nimport { IgxPrefixDirective } from \"../../directives/prefix/prefix.directive\";\nimport { IgxIconComponent } from \"../../icon/icon.component\";\nimport { IgxInputGroupComponent } from \"../../input-group/input-group.component\";\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\nimport { Size } from '../common/enums';\n\ninterface IDataSelectorPanel {\n    name: string;\n    i18n: string;\n    type?: PivotDimensionType;\n    dataKey: string;\n    icon: string;\n    itemKey: string;\n    displayKey?: string;\n    sortable: boolean;\n    dragChannels: string[];\n}\n\n/* blazorIndirectRender\n   blazorComponent */\n/* wcElementTag: igc-pivot-data-selector */\n/**\n * Pivot Data Selector provides means to configure the pivot state of the Pivot Grid via a vertical panel UI\n *\n * @igxModule IgxPivotGridModule\n * @igxGroup Grids & Lists\n * @igxKeywords data selector, pivot, grid\n * @igxTheme pivot-data-selector-theme\n * @remarks\n * The Ignite UI Data Selector has a searchable list with the grid data columns,\n * there are also four expandable areas underneath for filters, rows, columns, and values\n * is used for grouping and aggregating simple flat data into a pivot table.\n * @example\n * ```html\n * <igx-pivot-grid #grid1 [data]=\"data\" [pivotConfiguration]=\"configuration\">\n * </igx-pivot-grid>\n * <igx-pivot-data-selector [grid]=\"grid1\"></igx-pivot-data-selector>\n * ```\n */\n@Component({\n    selector: \"igx-pivot-data-selector\",\n    templateUrl: \"./pivot-data-selector.component.html\",\n    imports: [IgxInputGroupComponent, IgxIconComponent, IgxPrefixDirective, IgxInputDirective, IgxListComponent, IgxListItemComponent, IgxCheckboxComponent, IgxAccordionComponent, IgxExpansionPanelComponent, IgxExpansionPanelHeaderComponent, IgxDropDirective, IgxExpansionPanelTitleDirective, IgxChipComponent, IgxExpansionPanelBodyComponent, IgxDragDirective, IgxDropDownItemNavigationDirective, IgxDragHandleDirective, IgxDropDownComponent, IgxDropDownItemComponent, IgxFilterPivotItemsPipe]\n})\nexport class IgxPivotDataSelectorComponent {\n\n    /**\n     * Gets/sets whether the columns panel is expanded\n     * Get\n     * ```typescript\n     *  const columnsPanelState: boolean = this.dataSelector.columnsExpanded;\n     * ```\n     * Set\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [columnsExpanded]=\"columnsPanelState\"></igx-pivot-data-selector>\n     * ```\n     *\n     * Two-way data binding:\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [(columnsExpanded)]=\"columnsPanelState\"></igx-pivot-data-selector>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public columnsExpanded = true;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public columnsExpandedChange = new EventEmitter<boolean>();\n\n    /**\n     * Gets/sets whether the rows panel is expanded\n     * Get\n     * ```typescript\n     *  const rowsPanelState: boolean = this.dataSelector.rowsExpanded;\n     * ```\n     * Set\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [rowsExpanded]=\"rowsPanelState\"></igx-pivot-data-selector>\n     * ```\n     *\n     * Two-way data binding:\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [(rowsExpanded)]=\"rowsPanelState\"></igx-pivot-data-selector>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public rowsExpanded = true;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public rowsExpandedChange = new EventEmitter<boolean>();\n\n    /**\n     * Gets/sets whether the filters panel is expanded\n     * Get\n     * ```typescript\n     *  const filtersPanelState: boolean = this.dataSelector.filtersExpanded;\n     * ```\n     * Set\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [filtersExpanded]=\"filtersPanelState\"></igx-pivot-data-selector>\n     * ```\n     *\n     * Two-way data binding:\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [(filtersExpanded)]=\"filtersPanelState\"></igx-pivot-data-selector>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public filtersExpanded = true;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public filtersExpandedChange = new EventEmitter<boolean>();\n\n    /**\n     * Gets/sets whether the values panel is expanded\n     * Get\n     * ```typescript\n     *  const valuesPanelState: boolean = this.dataSelector.valuesExpanded;\n     * ```\n     * Set\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [valuesExpanded]=\"valuesPanelState\"></igx-pivot-data-selector>\n     * ```\n     *\n     * Two-way data binding:\n     * ```html\n     * <igx-pivot-data-selector [grid]=\"grid1\" [(valuesExpanded)]=\"valuesPanelState\"></igx-pivot-data-selector>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public valuesExpanded = true;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public valuesExpandedChange = new EventEmitter<boolean>();\n\n    private _grid: PivotGridType;\n    private _dropDelta = 0;\n\n    /** @hidden @internal **/\n    @HostBinding(\"class.igx-pivot-data-selector\")\n    public cssClass = \"igx-pivot-data-selector\";\n\n    @HostBinding(\"style.--ig-size\")\n    protected get size(): Size {\n        return this.grid?.gridSize;\n    }\n\n    /** @hidden @internal **/\n    public dimensions: IPivotDimension[];\n\n    private _subMenuPositionSettings: PositionSettings = {\n        verticalStartPoint: VerticalAlignment.Bottom,\n        closeAnimation: undefined,\n    };\n\n    private _subMenuOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new AutoPositionStrategy(\n            this._subMenuPositionSettings\n        ),\n        scrollStrategy: new AbsoluteScrollStrategy(),\n    };\n\n    /* blazorSuppress */\n    public animationSettings = {\n        closeAnimation: useAnimation(fadeOut, {\n            params: {\n                duration: \"0ms\",\n            },\n        }),\n        openAnimation: useAnimation(fadeIn, {\n            params: {\n                duration: \"0ms\",\n            },\n        }),\n    };\n\n    /** @hidden @internal */\n    public aggregateList: IPivotAggregator[] = [];\n    /** @hidden @internal */\n    public value: IPivotValue;\n    /** @hidden @internal */\n    public ghostText: string;\n    /** @hidden @internal */\n    public ghostWidth: number;\n    /** @hidden @internal */\n    public dropAllowed: boolean;\n    /** @hidden @internal */\n    public get dims(): IPivotDimension[] {\n        return this._grid?.allDimensions || [];\n    }\n    /** @hidden @internal */\n    public get values(): IPivotValue[] {\n        return this._grid?.pivotConfiguration.values || [];\n    }\n\n    constructor(private renderer: Renderer2, private cdr: ChangeDetectorRef) { }\n\n    /**\n     * @hidden @internal\n     */\n    public _panels: IDataSelectorPanel[] = [\n        {\n            name: \"Filters\",\n            i18n: 'igx_grid_pivot_selector_filters',\n            type: PivotDimensionType.Filter,\n            dataKey: \"filterDimensions\",\n            icon: \"filter_list\",\n            itemKey: \"memberName\",\n            displayKey: 'displayName',\n            sortable: false,\n            dragChannels: [\"Filters\", \"Columns\", \"Rows\"]\n        },\n        {\n            name: \"Columns\",\n            i18n: 'igx_grid_pivot_selector_columns',\n            type: PivotDimensionType.Column,\n            dataKey: \"columnDimensions\",\n            icon: \"view_column\",\n            itemKey: \"memberName\",\n            displayKey: 'displayName',\n            sortable: true,\n            dragChannels: [\"Filters\", \"Columns\", \"Rows\"]\n        },\n        {\n            name: \"Rows\",\n            i18n: 'igx_grid_pivot_selector_rows',\n            type: PivotDimensionType.Row,\n            dataKey: \"rowDimensions\",\n            icon: \"table_rows\",\n            itemKey: \"memberName\",\n            displayKey: 'displayName',\n            sortable: true,\n            dragChannels: [\"Filters\", \"Columns\", \"Rows\"]\n        },\n        {\n            name: \"Values\",\n            i18n: 'igx_grid_pivot_selector_values',\n            type: null,\n            dataKey: \"values\",\n            icon: \"functions\",\n            itemKey: \"member\",\n            displayKey: 'displayName',\n            sortable: false,\n            dragChannels: [\"Values\"]\n        },\n    ];\n\n\n    /* treatAsRef */\n    /**\n     * Sets the grid.\n     */\n    @Input()\n    public set grid(value: PivotGridType) {\n        this._grid = value;\n    }\n\n    /* treatAsRef */\n    /**\n     * Returns the grid.\n     */\n    public get grid(): PivotGridType {\n        return this._grid;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onItemSort(\n        _: Event,\n        dimension: IPivotDimension,\n        dimensionType: PivotDimensionType\n    ) {\n        if (\n            !this._panels.find(\n                (panel: IDataSelectorPanel) => panel.type === dimensionType\n            ).sortable\n        )\n            return;\n\n        const startDirection = dimension.sortDirection || SortingDirection.None;\n        const direction = startDirection + 1 > SortingDirection.Desc ?\n            SortingDirection.None : startDirection + 1;\n        this.grid.sortDimension(dimension, direction);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onFilteringIconPointerDown(event: PointerEvent) {\n        event.stopPropagation();\n        event.preventDefault();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onFilteringIconClick(event: MouseEvent, dimension: IPivotDimension) {\n        event.stopPropagation();\n        event.preventDefault();\n\n        let dim = dimension;\n        let col: ColumnType;\n\n        while (dim) {\n            col = this.grid.dimensionDataColumns.find(\n                (x) => x.field === dim.memberName\n            );\n            if (col) {\n                break;\n            } else {\n                dim = dim.childLevel;\n            }\n        }\n\n        this.grid.filteringService.toggleFilterDropdown(event.target, col);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected getDimensionState(dimensionType: PivotDimensionType) {\n        switch (dimensionType) {\n            case PivotDimensionType.Row:\n                return this.grid.rowDimensions;\n            case PivotDimensionType.Column:\n                return this.grid.columnDimensions;\n            case PivotDimensionType.Filter:\n                return this.grid.filterDimensions;\n            default:\n                return null;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected moveValueItem(itemId: string) {\n        const aggregation = this.grid.pivotConfiguration.values;\n        const valueIndex =\n            aggregation.findIndex((x) => x.member === itemId) !== -1\n                ? aggregation?.findIndex((x) => x.member === itemId)\n                : aggregation.length;\n        const newValueIndex =\n            valueIndex + this._dropDelta < 0 ? 0 : valueIndex + this._dropDelta;\n\n        const aggregationItem = aggregation.find(\n            (x) => x.member === itemId || x.displayName === itemId\n        );\n\n        if (aggregationItem) {\n            this.grid.moveValue(aggregationItem, newValueIndex);\n            this.grid.valuesChange.emit({\n                values: this.grid.pivotConfiguration.values,\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onItemDropped(\n        event: IDropDroppedEventArgs,\n        dimensionType: PivotDimensionType\n    ) {\n        if (!this.dropAllowed) {\n            return;\n        }\n\n        const dimension = this.grid.getDimensionsByType(dimensionType);\n        const dimensionState = this.getDimensionState(dimensionType);\n        const itemId = event.drag.element.nativeElement.id;\n        const targetId = event.owner.element.nativeElement.id;\n        const dimensionItem = dimension?.find((x) => x.memberName === itemId);\n        const itemIndex =\n            dimension?.findIndex((x) => x?.memberName === itemId) !== -1\n                ? dimension?.findIndex((x) => x.memberName === itemId)\n                : dimension?.length;\n        const dimensions = this.grid.allDimensions.filter((x) => x && x.memberName === itemId);\n\n        const reorder =\n            dimensionState?.findIndex((item) => item.memberName === itemId) !==\n            -1;\n\n        let targetIndex =\n            targetId !== \"\"\n                ? dimension?.findIndex((x) => x.memberName === targetId)\n                : dimension?.length;\n\n        if (!dimension) {\n            this.moveValueItem(itemId);\n        }\n\n        if (reorder) {\n            targetIndex =\n                itemIndex + this._dropDelta < 0\n                    ? 0\n                    : itemIndex + this._dropDelta;\n        }\n\n        if (dimensionItem) {\n            this.grid.moveDimension(dimensionItem, dimensionType, targetIndex);\n        } else {\n            const newDim = dimensions.find((x) => x.memberName === itemId);\n            this.grid.moveDimension(newDim, dimensionType, targetIndex);\n        }\n\n        this.grid.dimensionsChange.emit({\n            dimensions: dimension,\n            dimensionCollectionType: dimensionType,\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected updateDropDown(\n        value: IPivotValue,\n        dropdown: IgxDropDownComponent\n    ) {\n        this.value = value;\n        dropdown.width = \"200px\";\n        this.aggregateList = PivotUtil.getAggregateList(value, this.grid);\n        this.cdr.detectChanges();\n        dropdown.open(this._subMenuOverlaySettings);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onSummaryClick(\n        event: MouseEvent,\n        value: IPivotValue,\n        dropdown: IgxDropDownComponent\n    ) {\n        this._subMenuOverlaySettings.target =\n            event.currentTarget as HTMLElement;\n\n        if (dropdown.collapsed) {\n            this.updateDropDown(value, dropdown);\n        } else {\n            // close for previous chip\n            dropdown.close();\n            dropdown.closed.pipe(first()).subscribe(() => {\n                this.updateDropDown(value, dropdown);\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onAggregationChange(event: ISelectionEventArgs) {\n        if (!this.isSelected(event.newSelection.value)) {\n            this.value.aggregate = event.newSelection.value;\n            this.grid.pipeTrigger++;\n            this.grid.cdr.markForCheck();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isSelected(val: IPivotAggregator) {\n        return this.value.aggregate.key === val.key;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ghostCreated(event: IDragGhostBaseEventArgs, value: string) {\n        const { width: itemWidth } =\n            event.owner.element.nativeElement.getBoundingClientRect();\n        this.ghostWidth = itemWidth;\n        this.ghostText = value;\n        this.renderer.setStyle(\n            event.owner.element.nativeElement,\n            \"position\",\n            \"absolute\"\n        );\n        this.renderer.setStyle(\n            event.owner.element.nativeElement,\n            \"visibility\",\n            \"hidden\"\n        );\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public toggleItem(item: IPivotDimension | IPivotValue) {\n        if (item as IPivotValue) {\n            this.grid.toggleValue(item as IPivotValue);\n        }\n\n        if (item as IPivotDimension) {\n            this.grid.toggleDimension(item as IPivotDimension);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onPanelEntry(event: IDropBaseEventArgs, panel: string) {\n        this.dropAllowed = event.dragData.gridID === this.grid.id && event.dragData.selectorChannels?.some(\n            (channel: string) => channel === panel\n        );\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onItemDragMove(event: IDragMoveEventArgs) {\n        const clientRect =\n            event.owner.element.nativeElement.getBoundingClientRect();\n        this._dropDelta = Math.round(\n            (event.nextPageY - event.startY) / clientRect.height\n        );\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onItemDragEnd(event: IDragBaseEventArgs) {\n        this.renderer.setStyle(\n            event.owner.element.nativeElement,\n            \"position\",\n            \"static\"\n        );\n        this.renderer.setStyle(\n            event.owner.element.nativeElement,\n            \"visibility\",\n            \"visible\"\n        );\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onItemDragOver(event: IDropBaseEventArgs) {\n        if (this.dropAllowed) {\n            this.renderer.addClass(\n                event.owner.element.nativeElement,\n                \"igx-drag--push\"\n            );\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onItemDragLeave(event: IDropBaseEventArgs) {\n        if (this.dropAllowed) {\n            this.renderer.removeClass(\n                event.owner.element.nativeElement,\n                \"igx-drag--push\"\n            );\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getPanelCollapsed(panelType: PivotDimensionType): boolean {\n        switch (panelType) {\n            case PivotDimensionType.Column:\n                return !this.columnsExpanded;\n            case PivotDimensionType.Filter:\n                return !this.filtersExpanded;\n            case PivotDimensionType.Row:\n                return !this.rowsExpanded;\n            default:\n                return !this.valuesExpanded;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public onCollapseChange(value: boolean, panelType: PivotDimensionType): void {\n        switch (panelType) {\n            case PivotDimensionType.Column:\n                this.columnsExpanded = !value;\n                this.columnsExpandedChange.emit(this.columnsExpanded);\n                break;\n            case PivotDimensionType.Filter:\n                this.filtersExpanded = !value;\n                this.filtersExpandedChange.emit(this.filtersExpanded);\n                break;\n            case PivotDimensionType.Row:\n                this.rowsExpanded = !value;\n                this.rowsExpandedChange.emit(this.rowsExpanded);\n                break;\n            default:\n                this.valuesExpanded = !value;\n                this.valuesExpandedChange.emit(this.valuesExpanded)\n        }\n    }\n}\n","<div class=\"igx-pivot-data-selector__filter\">\n    <igx-input-group type=\"box\">\n        <igx-icon family=\"default\" name=\"search\" igxPrefix></igx-icon>\n        <input\n            #input\n            igxInput\n            tabindex=\"0\"\n            placeholder=\"Search\"\n            autocomplete=\"off\"\n        />\n    </igx-input-group>\n    <igx-list>\n        @for (\n            item of dims | filterPivotItems: input.value:grid?.pipeTrigger;\n            track item.memberName\n        ) {\n            <igx-list-item [id]=\"item.memberName\">\n                <igx-checkbox\n                    [aria-labelledby]=\"item.memberName\"\n                    [disableRipple]=\"true\"\n                    [checked]=\"item.enabled\"\n                    (click)=\"toggleItem(item)\"\n                ></igx-checkbox>\n                <span>{{ item.displayName || item.memberName }}</span>\n            </igx-list-item>\n        }\n        @for (\n            item of values | filterPivotItems: input.value:grid?.pipeTrigger;\n            track item\n        ) {\n            <igx-list-item [id]=\"item.member\">\n                <igx-checkbox\n                    [aria-labelledby]=\"item.member\"\n                    [disableRipple]=\"true\"\n                    [checked]=\"item.enabled\"\n                    (click)=\"toggleItem(item)\"\n                ></igx-checkbox>\n                <span>{{ item.displayName || item.member }}</span>\n            </igx-list-item>\n        }\n    </igx-list>\n</div>\n\n<igx-accordion>\n    @for (panel of _panels; track panel) {\n        <igx-expansion-panel\n            [animationSettings]=\"animationSettings\"\n            [collapsed]=\"getPanelCollapsed(panel.type)\"\n            (collapsedChange)=\"onCollapseChange($event, panel.type)\"\n        >\n            <igx-expansion-panel-header\n                iconPosition=\"left\"\n                [disabled]=\"false\"\n                igxDrop\n                (enter)=\"onPanelEntry($event, panel.name)\"\n                (dropped)=\"onItemDropped($event, panel.type)\"\n            >\n                <igx-expansion-panel-title class=\"igx-pivot-data-selector__header\">\n                    <h6 class=\"igx-pivot-data-selector__header-title\">\n                        {{ grid?.resourceStrings[panel.i18n] }}\n                    </h6>\n                    <div class=\"igx-pivot-data-selector__header-extra\">\n                        <igx-icon family=\"default\" [name]=\"panel.icon\"></igx-icon>\n                        <igx-chip>{{ this.grid ? this.grid[panel.dataKey].length : 0 }}</igx-chip>\n                    </div>\n                </igx-expansion-panel-title>\n            </igx-expansion-panel-header>\n            <igx-expansion-panel-body\n                igxDrop\n                (enter)=\"onPanelEntry($event, panel.name)\"\n                (dropped)=\"onItemDropped($event, panel.type)\"\n            >\n                @if (this.grid && this.grid[panel.dataKey].length > 0) {\n                    <igx-list>\n                        @for (\n                            item of this.grid[panel.dataKey];\n                            track (item.memberName || item.member)\n                        ) {\n                            <igx-list-item\n                                igxDrop\n                                [igxDrag]=\"{ gridID: grid.id, selectorChannels: panel.dragChannels }\"\n                                [ghostTemplate]=\"itemGhost\"\n                                (ghostCreate)=\"ghostCreated($event, item[panel.itemKey])\"\n                                (over)=\"onItemDragOver($event)\"\n                                (leave)=\"onItemDragLeave($event)\"\n                                (dragMove)=\"onItemDragMove($event)\"\n                                (dragEnd)=\"onItemDragEnd($event)\"\n                                (dropped)=\"onItemDropped($event, panel.type)\"\n                                [id]=\"item[panel.itemKey]\"\n                            >\n                                <div class=\"igx-pivot-data-selector__item\">\n                                    <div\n                                        class=\"igx-pivot-data-selector__item-start\"\n                                        (click)=\"onItemSort($event, item, panel.type)\"\n                                        [class.igx-pivot-data-selector__action-sort]=\"\n                                            panel.sortable\n                                        \"\n                                    >\n                                        <div class=\"igx-pivot-data-selector__item-text\">\n                                            @if (panel.type === null) {\n                                                <span>{{\n                                                    item.aggregate.key\n                                                }}</span>\n                                            }\n                                            @if (panel.type === null) {\n                                                <span>(</span>\n                                            }\n                                            <span>{{ item[panel.displayKey] || item[panel.itemKey] }}</span>\n                                            @if (panel.type === null) {\n                                                <span>)</span>\n                                            }\n                                        </div>\n                                        @if (panel.sortable && item.sortDirection) {\n                                            <igx-icon\n                                                family=\"default\"\n                                                [name]=\"item.sortDirection < 2 ? 'sort_asc' : 'sort_desc'\"\n                                                class=\"igx-pivot-data-selector__action-sort\"\n                                            >\n                                            </igx-icon>\n                                        }\n                                    </div>\n                                    <div class=\"igx-pivot-data-selector__item-end\">\n                                        @if (panel.type !== null) {\n                                            <igx-icon\n                                                family=\"default\"\n                                                name=\"filter_list\"\n                                                class=\"igx-pivot-data-selector__action-filter\"\n                                                (pointerdown)=\"onFilteringIconPointerDown($event)\"\n                                                (click)=\"onFilteringIconClick($event, item)\">\n                                            </igx-icon>\n                                        }\n                                        @if (panel.type === null) {\n                                            <igx-icon\n                                                family=\"default\"\n                                                name=\"functions\"\n                                                class=\"igx-pivot-data-selector__action-summary\"\n                                                (click)=\"onSummaryClick($event, item, dropdown)\"\n                                                [igxDropDownItemNavigation]=\"dropdown\">\n                                            </igx-icon>\n                                        }\n                                        @if (panel.dragChannels.length > 0) {\n                                            <igx-icon\n                                                family=\"default\"\n                                                name=\"drag_indicator\"\n                                                igxDragHandle\n                                                class=\"igx-pivot-data-selector__action-move\"\n                                            >\n                                            </igx-icon>\n                                        }\n                                    </div>\n                                </div>\n                            </igx-list-item>\n                        }\n                    </igx-list>\n                    }\n                    @if (this.grid && this.grid[panel.dataKey].length === 0) {\n                        <div class=\"igx-pivot-data-selector__empty\">\n                            {{ grid?.resourceStrings.igx_grid_pivot_selector_panel_empty }}\n                        </div>\n                    }\n            </igx-expansion-panel-body>\n        </igx-expansion-panel>\n    }\n</igx-accordion>\n\n<igx-drop-down #dropdown (selectionChanging)=\"onAggregationChange($event)\">\n    @for (item of aggregateList; track item) {\n        <igx-drop-down-item\n            [selected]=\"isSelected(item)\"\n            [value]=\"item\"\n        >\n            {{ item.label }}\n        </igx-drop-down-item>\n    }\n</igx-drop-down>\n\n<ng-template #itemGhost>\n    <div\n        class=\"igx-pivot-data-selector__item-ghost\"\n        [style.width.px]=\"ghostWidth\"\n        [class.igx-pivot-data-selector__item-ghost--no-drop]=\"!dropAllowed\"\n    >\n        <div class=\"igx-pivot-data-selector__item-ghost-text\">\n            <igx-icon family=\"default\" name=\"import_export\"></igx-icon>\n            <span>{{ ghostText }}</span>\n        </div>\n        <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n    </div>\n</ng-template>\n","import { IgxPivotDataSelectorComponent } from './pivot-data-selector.component';\nimport { IgxPivotGridComponent } from './pivot-grid.component';\nimport { IgxPivotValueChipTemplateDirective } from './pivot-grid.directives';\n\nexport * from './pivot-grid.component';\nexport * from './pivot-grid.interface';\nexport * from './pivot-grid-aggregate';\nexport * from './pivot-grid-dimensions';\nexport * from './pivot-data-selector.component';\nexport * from './pivot-grid.directives';\nexport * from '../../data-operations/pivot-strategy';\nexport * from '../../data-operations/pivot-sort-strategy';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n    NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\n \nimport {\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxRowExpandedIndicatorDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n} from \"../public_api\";\n\n/* NOTE: Pivot grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_PIVOT_GRID_DIRECTIVES = [\n    IgxPivotGridComponent,\n    IgxPivotDataSelectorComponent,\n    IgxPivotValueChipTemplateDirective,\n    // IGX_GRID_COMMON_DIRECTIVES:\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n] as const;\n","import { GridBaseAPIService } from '../api.service';\nimport { GridColumnDataType, DataUtil } from '../../data-operations/data-util';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\nimport { HierarchicalTransaction, TransactionType, State } from '../../services/public_api';\nimport { Injectable } from '@angular/core';\nimport { cloneArray, mergeObjects } from '../../core/utils';\nimport { IFilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { TreeGridFilteringStrategy } from './tree-grid.filtering.strategy';\nimport { ColumnType, GridType } from '../common/grid.interface';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { IgxDataRecordSorting } from '../common/strategy';\nimport { FilterUtil } from '../../data-operations/filtering-strategy';\n\n@Injectable()\nexport class IgxTreeGridAPIService extends GridBaseAPIService<GridType> {\n\n    public override get_all_data(transactions?: boolean): any[] {\n        const grid = this.grid;\n        let data = grid && grid.flatData ? grid.flatData : [];\n        data = transactions ? grid.dataWithAddedInTransactionRows : data;\n        return data;\n    }\n\n    public override get_summary_data() {\n        const grid = this.grid;\n        const data = grid.processedRootRecords?.filter(row => row.isFilteredOutParent === undefined || row.isFilteredOutParent === false)\n            .map(rec => rec.data);\n        if (data && grid.transactions.enabled) {\n            const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.DELETE).map(t => t.id);\n            deletedRows.forEach(rowID => {\n                const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n                const index = tempData.indexOf(rowID);\n                if (index !== -1) {\n                    data.splice(index, 1);\n                }\n            });\n        }\n        return data;\n    }\n\n    public override allow_expansion_state_change(rowID, expanded): boolean {\n        const grid = this.grid;\n        const row = grid.records.get(rowID);\n        if (row.expanded === expanded ||\n            ((!row.children || !row.children.length) && (!grid.loadChildrenOnDemand ||\n                (grid.hasChildrenKey && !row.data[grid.hasChildrenKey])))) {\n            return false;\n        }\n        return true;\n    }\n\n    public expand_path_to_record(record: ITreeGridRecord) {\n        const grid = this.grid;\n        const expandedStates = grid.expansionStates;\n\n        while (record.parent) {\n            record = record.parent;\n            const expanded = this.get_row_expansion_state(record);\n\n            if (!expanded) {\n                expandedStates.set(record.key, true);\n            }\n        }\n        grid.expansionStates = expandedStates;\n\n        if (grid.rowEditable) {\n            grid.gridAPI.crudService.endEdit(false);\n        }\n    }\n\n    public override get_row_expansion_state(record: ITreeGridRecord): boolean {\n        const grid = this.grid;\n        const states = grid.expansionStates;\n        const expanded = states.get(record.key);\n\n        if (expanded !== undefined) {\n            return expanded;\n        } else {\n            return record.children && record.children.length && record.level < grid.expansionDepth;\n        }\n    }\n\n    public override should_apply_number_style(column: ColumnType): boolean {\n        return column.dataType === GridColumnDataType.Number && column.visibleIndex !== 0;\n    }\n\n    public override deleteRowById(rowID: any): any {\n        const treeGrid = this.grid;\n        const flatDataWithCascadeOnDeleteAndTransactions =\n            treeGrid.primaryKey &&\n            treeGrid.foreignKey &&\n            treeGrid.cascadeOnDelete &&\n            treeGrid.transactions.enabled;\n\n        if (flatDataWithCascadeOnDeleteAndTransactions) {\n            treeGrid.transactions.startPending();\n        }\n\n        const record = super.deleteRowById(rowID);\n\n        if (flatDataWithCascadeOnDeleteAndTransactions) {\n            treeGrid.transactions.endPending(true);\n        }\n\n        return record;\n    }\n\n    public override deleteRowFromData(rowID: any, index: number) {\n        const treeGrid = this.grid;\n        const record = treeGrid.records.get(rowID);\n\n        if (treeGrid.primaryKey && treeGrid.foreignKey) {\n            index = treeGrid.primaryKey ?\n                treeGrid.data.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n                treeGrid.data.indexOf(rowID);\n            super.deleteRowFromData(rowID, index);\n\n            if (treeGrid.cascadeOnDelete) {\n                if (record && record.children) {\n                    for (const child of record.children) {\n                        super.deleteRowById(child.key);\n                    }\n                }\n            }\n        } else {\n            const collection = record.parent ? record.parent.data[treeGrid.childDataKey] : treeGrid.data;\n            index = treeGrid.primaryKey ?\n                collection.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n                collection.indexOf(rowID);\n\n            const selectedChildren = [];\n            this.get_selected_children(record, selectedChildren);\n            if (selectedChildren.length > 0) {\n                treeGrid.deselectRows(selectedChildren);\n            }\n\n            if (treeGrid.transactions.enabled) {\n                const path = treeGrid.generateRowPath(rowID);\n                treeGrid.transactions.add({\n                    id: rowID,\n                    type: TransactionType.DELETE,\n                    newValue: null,\n                    path\n                } as HierarchicalTransaction,\n                    collection[index]\n                );\n            } else {\n                collection.splice(index, 1);\n            }\n            this.grid.validation.clear(rowID);\n        }\n    }\n\n    public get_selected_children(record: ITreeGridRecord, selectedRowIDs: any[]) {\n        const grid = this.grid;\n        if (!record.children || record.children.length === 0) {\n            return;\n        }\n        for (const child of record.children) {\n            if (grid.selectionService.isRowSelected(child.key)) {\n                selectedRowIDs.push(child.key);\n            }\n            this.get_selected_children(child, selectedRowIDs);\n        }\n    }\n\n    public override row_deleted_transaction(rowID: any): boolean {\n        return this.row_deleted_parent(rowID) || super.row_deleted_transaction(rowID);\n    }\n\n    public override get_rec_by_id(rowID) {\n        return this.grid.records.get(rowID);\n    }\n\n    /**\n     * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n     *\n     * @param pk\n     * @param dataCollection\n     */\n    public override get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number {\n        dataCollection = dataCollection || this.grid.data;\n        return this.grid.primaryKey ? dataCollection.findIndex(rec => rec.data[this.grid.primaryKey] === pk) : -1;\n    }\n\n    public override addRowToData(data: any, parentRowID?: any) {\n        if (parentRowID !== undefined && parentRowID !== null) {\n\n            const state = this.grid.transactions.getState(parentRowID);\n            // we should not allow adding of rows as child of deleted row\n            if (state && state.type === TransactionType.DELETE) {\n                throw Error(`Cannot add child row to deleted parent row`);\n            }\n\n            const parentRecord = this.grid.records.get(parentRowID);\n\n            if (!parentRecord) {\n                throw Error('Invalid parent row ID!');\n            }\n            this.grid.summaryService.clearSummaryCache({ rowID: parentRecord.key });\n            if (this.grid.primaryKey && this.grid.foreignKey) {\n                data[this.grid.foreignKey] = parentRowID;\n                super.addRowToData(data);\n            } else {\n                const parentData = parentRecord.data;\n                const childKey = this.grid.childDataKey;\n                if (this.grid.transactions.enabled) {\n                    const rowId = this.grid.primaryKey ? data[this.grid.primaryKey] : data;\n                    const path: any[] = [];\n                    path.push(...this.grid.generateRowPath(parentRowID));\n                    path.push(parentRowID);\n                    this.grid.transactions.add({\n                        id: rowId,\n                        path,\n                        newValue: data,\n                        type: TransactionType.ADD\n                    } as HierarchicalTransaction,\n                        null);\n                } else {\n                    if (!parentData[childKey]) {\n                        parentData[childKey] = [];\n                    }\n                    parentData[childKey].push(data);\n                }\n            }\n        } else {\n            super.addRowToData(data);\n        }\n    }\n\n    public override filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[] {\n        const records = this.filterTreeDataByExpressions(expressionsTree);\n        const data = [];\n\n        this.getFlatDataFromFilteredRecords(records, data);\n\n        return data;\n    }\n\n    public override sortDataByExpressions(data: ITreeGridRecord[], expressions: ISortingExpression[]) {\n        const records: ITreeGridRecord[] = DataUtil.sort(\n            cloneArray(data),\n            expressions,\n            this.grid.sortStrategy ?? new IgxDataRecordSorting(),\n            this.grid);\n        return records.map(r => r.data);\n    }\n\n    public filterTreeDataByExpressions(expressionsTree: IFilteringExpressionsTree): ITreeGridRecord[] {\n        let records = this.grid.rootRecords;\n\n        if (expressionsTree.filteringOperands.length) {\n            const state = {\n                expressionsTree,\n                strategy: this.grid.filterStrategy ?? new TreeGridFilteringStrategy()\n            };\n            records = FilterUtil.filter(cloneArray(records), state, this.grid);\n        }\n\n        return records;\n    }\n\n    protected override update_row_in_array(value: any, rowID: any, index: number) {\n        const grid = this.grid;\n        if (grid.primaryKey && grid.foreignKey) {\n            super.update_row_in_array(value, rowID, index);\n        } else {\n            const record = grid.records.get(rowID);\n            const childData = record.parent ? record.parent.data[grid.childDataKey] : grid.data;\n            index = grid.primaryKey ? childData.map(c => c[grid.primaryKey]).indexOf(rowID) :\n                childData.indexOf(rowID);\n            childData[index] = value;\n        }\n    }\n\n    /**\n     * Updates related row of provided grid's data source with provided new row value\n     *\n     * @param grid Grid to update data for\n     * @param rowID ID of the row to update\n     * @param rowValueInDataSource Initial value of the row as it is in data source\n     * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n     * @param rowNewValue New value of the row\n     */\n    protected override updateData(\n        grid: GridType,\n        rowID: any,\n        rowValueInDataSource: any,\n        rowCurrentValue: any,\n        rowNewValue: { [x: string]: any }) {\n        if (grid.transactions.enabled) {\n            const path = grid.generateRowPath(rowID);\n            const transaction: HierarchicalTransaction = {\n                id: rowID,\n                type: TransactionType.UPDATE,\n                newValue: rowNewValue,\n                path\n            };\n            grid.transactions.add(transaction, rowCurrentValue);\n        } else {\n            mergeObjects(rowValueInDataSource, rowNewValue);\n        }\n    }\n\n    private row_deleted_parent(rowID: any): boolean {\n        const grid = this.grid;\n        if (!grid) {\n            return false;\n        }\n        if ((grid.cascadeOnDelete && grid.foreignKey) || grid.childDataKey) {\n            let node = grid.records.get(rowID);\n            while (node) {\n                const state: State = grid.transactions.getState(node.key);\n                if (state && state.type === TransactionType.DELETE) {\n                    return true;\n                }\n                node = node.parent;\n            }\n        }\n        return false;\n    }\n\n    private getFlatDataFromFilteredRecords(records: ITreeGridRecord[], data: any[]) {\n        if (!records || records.length === 0) {\n            return;\n        }\n\n        for (const record of records) {\n            if (!record.isFilteredOutParent) {\n                data.push(record);\n            }\n            this.getFlatDataFromFilteredRecords(record.children, data);\n        }\n    }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowLoadingIndicator]',\n    standalone: true\n})\nexport class IgxRowLoadingIndicatorTemplateDirective {\n\n    constructor(public template: TemplateRef<any>) { }\n}\n","import { Injectable } from '@angular/core';\nimport { GridSelectionMode } from '../common/enums';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\n\n\n@Injectable()\nexport class IgxTreeGridSelectionService extends IgxGridSelectionService {\n    private rowsToBeSelected: Set<any>;\n    private rowsToBeIndeterminate: Set<any>;\n\n    /** Select specified rows. No event is emitted. */\n    public override selectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?): void {\n        if (this.grid && this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n            this.cascadeSelectRowsWithNoEvent(rowIDs, clearPrevSelection);\n            return;\n        }\n        super.selectRowsWithNoEvent(rowIDs, clearPrevSelection);\n    }\n\n    /** Deselect specified rows. No event is emitted. */\n    public override deselectRowsWithNoEvent(rowIDs: any[]): void {\n        if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n            this.cascadeDeselectRowsWithNoEvent(rowIDs);\n            return;\n        }\n        super.deselectRowsWithNoEvent(rowIDs);\n    }\n\n    public override emitRowSelectionEvent(newSelection, added, removed, event?): boolean {\n        if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n            this.emitCascadeRowSelectionEvent(newSelection, added, removed, event);\n            return;\n        }\n\n        super.emitRowSelectionEvent(newSelection, added, removed, event);\n    }\n\n    public updateCascadeSelectionOnFilterAndCRUD(\n        parents: Set<any>,\n        crudRowID?: any,\n        visibleRowIDs: Set<any> = null) {\n        if (visibleRowIDs === null) {\n            // if the tree grid has flat structure\n            // do not explicitly handle the selection state of the rows\n            if (!parents.size) {\n                return;\n            }\n            visibleRowIDs = new Set(this.getRowIDs(this.allData));\n            this.rowsToBeSelected = new Set(this.rowSelection);\n            this.rowsToBeIndeterminate = new Set(this.indeterminateRows);\n            if (crudRowID) {\n                this.rowSelection.delete(crudRowID);\n            }\n        }\n        if (!parents.size) {\n            this.rowSelection = new Set(this.rowsToBeSelected);\n            this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n            // TODO: emit selectionChangeD event, calculate its args through the handleAddedAndRemovedArgs method\n            this.clearHeaderCBState();\n            this.selectedRowsChange.next(this.getSelectedRows());\n            return;\n        }\n        const newParents = new Set<any>();\n        parents.forEach(parent => {\n            this.handleRowSelectionState(parent, visibleRowIDs);\n            if (parent && parent.parent) {\n                newParents.add(parent.parent);\n            }\n        });\n        this.updateCascadeSelectionOnFilterAndCRUD(newParents, null, visibleRowIDs);\n    }\n\n    private cascadeSelectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?: boolean): void {\n        if (clearPrevSelection) {\n            this.indeterminateRows.clear();\n            this.rowSelection.clear();\n            this.calculateRowsNewSelectionState({ added: rowIDs, removed: [] });\n        } else {\n            const oldSelection = this.getSelectedRows();\n            const newSelection = [...oldSelection, ...rowIDs];\n            const args = { oldSelection, newSelection };\n\n            // retrieve only the rows without their parents/children which has to be added to the selection\n            this.handleAddedAndRemovedArgs(args);\n\n            this.calculateRowsNewSelectionState(args);\n        }\n        this.rowSelection = new Set(this.rowsToBeSelected);\n        this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next(this.getSelectedRows());\n    }\n\n    private cascadeDeselectRowsWithNoEvent(rowIDs: any[]): void {\n        const args = { added: [], removed: rowIDs };\n        this.calculateRowsNewSelectionState(args);\n\n        this.rowSelection = new Set(this.rowsToBeSelected);\n        this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next(this.getSelectedRows());\n    }\n\n    public get selectionService(): IgxGridSelectionService {\n        return this.grid.selectionService;\n    }\n\n    private emitCascadeRowSelectionEvent(newSelection, added, removed, event?): boolean {\n        const currSelection = this.getSelectedRows();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args = {\n            owner: this.grid, oldSelection: this.getSelectedRowsData(), newSelection,\n            added, removed, event, cancel: false\n        };\n\n        this.calculateRowsNewSelectionState(args, !!this.grid.primaryKey);\n        args.newSelection = Array.from(this.grid.gridAPI.get_all_data().filter(r => this.rowsToBeSelected.has(this.grid.primaryKey ? r[this.grid.primaryKey] : r)));\n\n        // retrieve rows/parents/children which has been added/removed from the selection\n        this.handleAddedAndRemovedArgs(args);\n\n        this.grid.rowSelectionChanging.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n        const newSelectionIDs = args.newSelection.map(r => this.grid.primaryKey? r[this.grid.primaryKey] : r)\n        // if args.newSelection hasn't been modified\n        if (this.areEqualCollections(Array.from(this.rowsToBeSelected), newSelectionIDs)) {\n            this.rowSelection = new Set(this.rowsToBeSelected);\n            this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n            this.clearHeaderCBState();\n            this.selectedRowsChange.next(this.getSelectedRows());\n        } else {\n            // select the rows within the modified args.newSelection with no event\n            this.cascadeSelectRowsWithNoEvent(newSelectionIDs, true);\n        }\n    }\n\n\n    /**\n     * retrieve the rows which should be added/removed to/from the old selection\n     */\n    private handleAddedAndRemovedArgs(args: any) {\n        const newSelectionSet = new Set(args.newSelection);\n        const oldSelectionSet = new Set(args.oldSelection);\n        args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));\n        args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));\n    }\n\n    /**\n     * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set\n     *\n     * @param rowsToBeProcessed set of the rows (without their parents/children) to be selected/deselected\n     * @param visibleRowIDs list of all visible rowIds\n     * @returns a new set with all direct parents of the rows within rowsToBeProcessed set\n     */\n    private collectRowsChildrenAndDirectParents(rowsToBeProcessed: Set<any>, visibleRowIDs: Set<any>, adding: boolean, shouldConvert: boolean): Set<any> {\n        const processedRowsParents = new Set<any>();\n        Array.from(rowsToBeProcessed).forEach((row) => {\n            const rowID = shouldConvert ? row[this.grid.primaryKey] : row;\n            this.selectDeselectRow(rowID, adding);\n            const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);\n            const rowAndAllChildren = this.get_all_children(rowTreeRecord);\n            rowAndAllChildren.forEach(r => {\n                if (visibleRowIDs.has(r.key)) {\n                    this.selectDeselectRow(r.key, adding);\n                }\n            });\n            if (rowTreeRecord && rowTreeRecord.parent) {\n                processedRowsParents.add(rowTreeRecord.parent);\n            }\n        });\n        return processedRowsParents;\n    }\n\n\n    /**\n     * populates the rowsToBeSelected and rowsToBeIndeterminate sets\n     * with the rows which will be eventually in selected/indeterminate state\n     */\n    private calculateRowsNewSelectionState(args: any, shouldConvert = false) {\n        this.rowsToBeSelected = new Set<any>(args.oldSelection ? shouldConvert ? args.oldSelection.map(r => r[this.grid.primaryKey]) : args.oldSelection : this.getSelectedRows());\n        this.rowsToBeIndeterminate = new Set<any>(this.getIndeterminateRows());\n\n        const visibleRowIDs = new Set(this.getRowIDs(this.allData));\n\n        const removed = new Set(args.removed);\n        const added = new Set(args.added);\n\n        if (removed && removed.size) {\n            let removedRowsParents = new Set<any>();\n\n            removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false, shouldConvert);\n\n            Array.from(removedRowsParents).forEach((parent) => {\n                this.handleParentSelectionState(parent, visibleRowIDs);\n            });\n        }\n\n        if (added && added.size) {\n            let addedRowsParents = new Set<any>();\n\n            addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true, shouldConvert);\n\n            Array.from(addedRowsParents).forEach((parent) => {\n                this.handleParentSelectionState(parent, visibleRowIDs);\n            });\n        }\n    }\n\n    /**\n     * recursively handle the selection state of the direct and indirect parents\n     */\n    private handleParentSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n        if (!treeRow) {\n            return;\n        }\n        this.handleRowSelectionState(treeRow, visibleRowIDs);\n        if (treeRow.parent) {\n            this.handleParentSelectionState(treeRow.parent, visibleRowIDs);\n        }\n    }\n\n    /**\n     * Handle the selection state of a given row based the selection states of its direct children\n     */\n    private handleRowSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n        let visibleChildren = [];\n        if (treeRow && treeRow.children) {\n            visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.key));\n        }\n        if (visibleChildren.length) {\n            if (visibleChildren.every(row => this.rowsToBeSelected.has(row.key))) {\n                this.selectDeselectRow(treeRow.key, true);\n            } else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.key) || this.rowsToBeIndeterminate.has(row.key))) {\n                this.rowsToBeIndeterminate.add(treeRow.key);\n                this.rowsToBeSelected.delete(treeRow.key);\n            } else {\n                this.selectDeselectRow(treeRow.key, false);\n            }\n        } else {\n            // if the children of the row has been deleted and the row was selected do not change its state\n            if (this.isRowSelected(treeRow.key)) {\n                this.selectDeselectRow(treeRow.key, true);\n            } else {\n                this.selectDeselectRow(treeRow.key, false);\n            }\n        }\n    }\n\n    private get_all_children(record: ITreeGridRecord): any[] {\n        const children = [];\n        if (record && record.children && record.children.length) {\n            for (const child of record.children) {\n                children.push(...this.get_all_children(child));\n                children.push(child);\n            }\n        }\n        return children;\n\n    }\n\n    private selectDeselectRow(rowID: any, select: boolean) {\n        if (select) {\n            this.rowsToBeSelected.add(rowID);\n            this.rowsToBeIndeterminate.delete(rowID);\n        } else {\n            this.rowsToBeSelected.delete(rowID);\n            this.rowsToBeIndeterminate.delete(rowID);\n        }\n    }\n\n}\n","import {\n    AfterContentInit,\n    Component,\n    ElementRef,\n    Input,\n    IterableDiffer,\n    IterableDiffers,\n    OnDestroy,\n    booleanAttribute,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IChipsAreaReorderEventArgs } from '../../chips/public_api';\nimport { PlatformUtil } from '../../core/utils';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { IgxGroupByAreaDirective, IgxGroupByMetaPipe } from './group-by-area.directive';\nimport { IgxDropDirective } from '../../directives/drag-drop/drag-drop.directive';\nimport { IgxGroupAreaDropDirective } from '../grid.directives';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxChipComponent } from '../../chips/chip.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxChipsAreaComponent } from '../../chips/chips-area.component';\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\n@Component({\n    selector: 'igx-tree-grid-group-by-area',\n    templateUrl: 'group-by-area.component.html',\n    providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxTreeGridGroupByAreaComponent }],\n    imports: [IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe]\n})\nexport class IgxTreeGridGroupByAreaComponent extends IgxGroupByAreaDirective implements AfterContentInit, OnDestroy {\n    @Input({ transform: booleanAttribute })\n    public get hideGroupedColumns() {\n        return this._hideGroupedColumns;\n    }\n\n    public set hideGroupedColumns(value: boolean) {\n        if (this.grid?.columns && this.expressions) {\n            this.setColumnsVisibility(value);\n        }\n\n        this._hideGroupedColumns = value;\n    }\n\n    private _hideGroupedColumns = false;\n    private groupingDiffer: IterableDiffer<IGroupingExpression>;\n    private destroy$ = new Subject<any>();\n\n    constructor(private differs: IterableDiffers, ref: ElementRef<HTMLElement>, platform: PlatformUtil) {\n        super(ref, platform);\n    }\n\n    public ngAfterContentInit(): void {\n        if (this.grid.columns && this.expressions) {\n            this.groupingDiffer = this.differs.find(this.expressions).create();\n            this.updateColumnsVisibility();\n        }\n\n        this.grid.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions: ISortingExpression[]) => {\n            if (!this.expressions || !this.expressions.length) {\n                return;\n            }\n\n            let changed = false;\n\n            sortingExpressions.forEach((sortExpr: ISortingExpression) => {\n                const fieldName = sortExpr.fieldName;\n                const groupingExpr = this.expressions.find(ex => ex.fieldName === fieldName);\n                if (groupingExpr && groupingExpr.dir !== sortExpr.dir) {\n                    groupingExpr.dir = sortExpr.dir;\n                    changed = true;\n                }\n            });\n\n            if (changed) {\n                this.expressions = [...this.expressions];\n            }\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    public handleReorder(event: IChipsAreaReorderEventArgs) {\n        const { chipsArray, originalEvent } = event;\n        const newExpressions = this.getReorderedExpressions(chipsArray);\n\n        this.chipExpressions = newExpressions;\n\n        // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n        if (originalEvent instanceof KeyboardEvent) {\n            this.expressions = newExpressions;\n        }\n    }\n\n    public handleMoveEnd() {\n        this.expressions = this.chipExpressions;\n    }\n\n    public groupBy(expression: IGroupingExpression) {\n        this.expressions.push(expression);\n        this.expressions = [...this.expressions];\n    }\n\n    public clearGrouping(name: string) {\n        this.expressions = this.expressions.filter(item => item.fieldName !== name);\n        this.grid.sortingExpressions = this.grid.sortingExpressions.filter(item => item.fieldName !== name);\n        this.grid.notifyChanges(true);\n    }\n\n    protected override expressionsChanged() {\n        this.updateColumnsVisibility();\n    }\n\n    private updateColumnsVisibility() {\n        if (this.groupingDiffer && this.grid.columns && !this.grid.hasColumnLayouts) {\n            const changes = this.groupingDiffer.diff(this.expressions);\n            if (changes && this.grid.columns.length > 0) {\n                changes.forEachAddedItem((rec) => {\n                    const col = this.grid.getColumnByName(rec.item.fieldName);\n                    col.hidden = this.hideGroupedColumns;\n                });\n                changes.forEachRemovedItem((rec) => {\n                    const col = this.grid.getColumnByName(rec.item.fieldName);\n                    col.hidden = false;\n                });\n            }\n        }\n    }\n\n    private setColumnsVisibility(value) {\n        if (this.grid.columns.length > 0 && !this.grid.hasColumnLayouts) {\n            this.expressions.forEach((expr) => {\n                const col = this.grid.getColumnByName(expr.fieldName);\n                col.hidden = value;\n            });\n        }\n    }\n}\n\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\nimport { ISummaryRecord } from '../summaries/grid-summary';\nimport { GridSummaryCalculationMode, GridSummaryPosition } from '../common/enums';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridSummary',\n    standalone: true\n})\nexport class IgxTreeGridSummaryPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) {}\n\n    public transform(flatData: ITreeGridRecord[],\n        hasSummary: boolean,\n        summaryCalculationMode: GridSummaryCalculationMode,\n        summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean, _: number, __: number): any[] {\n\n        if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n            return flatData;\n        }\n\n        return this.addSummaryRows(this.grid, flatData, summaryPosition, showSummaryOnCollapse);\n    }\n\n    private addSummaryRows(grid: GridType, collection: ITreeGridRecord[],\n        summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean): any[] {\n        const recordsWithSummary = [];\n        const maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();\n\n        for (const record of collection) {\n            recordsWithSummary.push(record);\n\n            const isCollapsed = !record.expanded && record.children && record.children.length > 0 && showSummaryOnCollapse;\n            if (isCollapsed) {\n                let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n                childData = this.removeDeletedRecord(grid, record.key, childData);\n                const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight,\n                    cellIndentation: record.level + 1\n                };\n                recordsWithSummary.push(summaryRecord);\n            }\n            const isExpanded = record.children && record.children.length > 0 && record.expanded;\n            if (summaryPosition === GridSummaryPosition.bottom && !isExpanded) {\n                let childRecord = record;\n                let parent = record.parent;\n\n                while (parent) {\n                    const children = parent.children;\n\n                    if (children[children.length - 1] === childRecord ) {\n                        let childData = children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n                        childData = this.removeDeletedRecord(grid, parent.key, childData);\n                        const summaries = grid.summaryService.calculateSummaries(parent.key, childData);\n                        const summaryRecord: ISummaryRecord = {\n                            summaries,\n                            max: maxSummaryHeight,\n                            cellIndentation: parent.level + 1\n                        };\n                        recordsWithSummary.push(summaryRecord);\n\n                        childRecord = parent;\n                        parent = childRecord.parent;\n                    } else {\n                        break;\n                    }\n                }\n            } else if (summaryPosition === GridSummaryPosition.top && isExpanded) {\n                let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n                childData = this.removeDeletedRecord(grid, record.key, childData);\n                const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight,\n                    cellIndentation: record.level + 1\n                };\n                recordsWithSummary.push(summaryRecord);\n            }\n        }\n        return recordsWithSummary;\n    }\n\n    private removeDeletedRecord(grid, rowId, data) {\n        if (!grid.transactions.enabled || !grid.cascadeOnDelete) {\n            return data;\n        }\n        const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n        let row = grid.records.get(rowId);\n        if (!row && deletedRows.lenght === 0) {\n            return [];\n        }\n        row = row.children ? row : row.parent;\n        while (row) {\n            rowId = row.key;\n            if (deletedRows.indexOf(rowId) !== -1) {\n                return [];\n            }\n            row = row.parent;\n        }\n        deletedRows.forEach(rowID => {\n            const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n            const index = tempData.indexOf(rowID);\n            if (index !== -1) {\n                data.splice(index, 1);\n            }\n        });\n        return data;\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { IFilteringStrategy } from '../../data-operations/filtering-strategy';\nimport { IFilteringExpressionsTree, FilteringExpressionsTree } from '../../data-operations/filtering-expressions-tree';\nimport { IFilteringState } from '../../data-operations/filtering-state.interface';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { TreeGridFilteringStrategy } from './tree-grid.filtering.strategy';\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridFiltering',\n    standalone: true\n})\nexport class IgxTreeGridFilteringPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) {}\n\n    public transform(hierarchyData: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        filterStrategy: IFilteringStrategy,\n        advancedFilteringExpressionsTree: IFilteringExpressionsTree,\n        _: number, __: number, pinned?): ITreeGridRecord[] {\n        const state: IFilteringState = {\n            expressionsTree,\n            advancedExpressionsTree: advancedFilteringExpressionsTree,\n            strategy: new TreeGridFilteringStrategy()\n        };\n\n        if (filterStrategy) {\n            state.strategy = filterStrategy;\n        }\n\n        if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n            this.grid.setFilteredData(null, pinned);\n            return hierarchyData;\n        }\n\n        const result = this.filter(hierarchyData, state, this.grid);\n        const filteredData: any[] = [];\n        this.expandAllRecursive(this.grid, result, this.grid.expansionStates, filteredData);\n        this.grid.setFilteredData(filteredData, pinned);\n\n        return result;\n    }\n\n    private expandAllRecursive(grid: GridType, data: ITreeGridRecord[],\n        expandedStates: Map<any, boolean>, filteredData: any[]) {\n        for (const rec of data) {\n            filteredData.push(rec.data);\n\n            if (rec.children && rec.children.length > 0) {\n                expandedStates.set(rec.key, true);\n                this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);\n            }\n        }\n    }\n\n    private filter(data: ITreeGridRecord[], state: IFilteringState, grid?: GridType): ITreeGridRecord[] {\n        return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { cloneArray, cloneHierarchicalArray } from '../../core/utils';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { GridPagingMode } from '../common/enums';\nimport { TransactionType } from '../../services/public_api';\nimport { IgxAddRow } from '../common/crud.service';\nimport { ISortingExpression } from '../../data-operations/sorting-strategy';\nimport { IGridSortingStrategy } from '../common/strategy';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'treeGridHierarchizing',\n    standalone: true\n})\nexport class IgxTreeGridHierarchizingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], primaryKey: string, foreignKey: string, childDataKey: string, _: number): ITreeGridRecord[] {\n        let hierarchicalRecords: ITreeGridRecord[] = [];\n        const treeGridRecordsMap = new Map<any, ITreeGridRecord>();\n        const flatData: any[] = [];\n\n        if (!collection || !collection.length) {\n            this.grid.flatData = collection;\n            this.grid.records = treeGridRecordsMap;\n            this.grid.rootRecords = collection;\n            return collection;\n        }\n\n        if (childDataKey) {\n            hierarchicalRecords = this.hierarchizeRecursive(collection, primaryKey, childDataKey, undefined,\n                flatData, 0, treeGridRecordsMap);\n        } else if (primaryKey) {\n            hierarchicalRecords = this.hierarchizeFlatData(collection, primaryKey, foreignKey, treeGridRecordsMap, flatData);\n        }\n\n        this.grid.flatData = this.grid.transactions.enabled ?\n            flatData.filter(rec => {\n                const state = this.grid.transactions.getState(this.getRowID(primaryKey, rec));\n                return !state || state.type !== TransactionType.ADD;\n            }) : flatData;\n        this.grid.records = treeGridRecordsMap;\n        this.grid.rootRecords = hierarchicalRecords;\n        return hierarchicalRecords;\n    }\n\n    private getRowID(primaryKey: any, rowData: any) {\n        return primaryKey ? rowData[primaryKey] : rowData;\n    }\n\n    private hierarchizeFlatData(collection: any[], primaryKey: string, foreignKey: string,\n        map: Map<any, ITreeGridRecord>, flatData: any[]):\n        ITreeGridRecord[] {\n        const result: ITreeGridRecord[] = [];\n        const missingParentRecords: ITreeGridRecord[] = [];\n        collection.forEach(row => {\n            const record: ITreeGridRecord = {\n                key: this.getRowID(primaryKey, row),\n                data: row,\n                children: []\n            };\n            const parent = map.get(row[foreignKey]);\n            if (parent) {\n                record.parent = parent;\n                parent.children.push(record);\n            } else {\n                missingParentRecords.push(record);\n            }\n\n            map.set(row[primaryKey], record);\n        });\n\n        missingParentRecords.forEach(record => {\n            const parent = map.get(record.data[foreignKey]);\n            if (parent) {\n                record.parent = parent;\n                parent.children.push(record);\n            } else {\n                result.push(record);\n            }\n        });\n\n        this.setIndentationLevels(result, 0, flatData);\n\n        return result;\n    }\n\n    private setIndentationLevels(collection: ITreeGridRecord[], indentationLevel: number, flatData: any[]) {\n        for (const record of collection) {\n            record.level = indentationLevel;\n            record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n            flatData.push(record.data);\n\n            if (record.children && record.children.length > 0) {\n                this.setIndentationLevels(record.children, indentationLevel + 1, flatData);\n            }\n        }\n    }\n\n    private hierarchizeRecursive(collection: any[], primaryKey: string, childDataKey: string,\n        parent: ITreeGridRecord, flatData: any[], indentationLevel: number, map: Map<any, ITreeGridRecord>): ITreeGridRecord[] {\n        const result: ITreeGridRecord[] = [];\n\n        for (const item of collection) {\n            const record: ITreeGridRecord = {\n                key: this.getRowID(primaryKey, item),\n                data: item,\n                parent,\n                level: indentationLevel\n            };\n            record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n            flatData.push(item);\n            map.set(record.key, record);\n            record.children = item[childDataKey] ?\n                this.hierarchizeRecursive(item[childDataKey], primaryKey, childDataKey, record, flatData, indentationLevel + 1, map) :\n                undefined;\n            result.push(record);\n        }\n\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'treeGridFlattening',\n    standalone: true\n})\nexport class IgxTreeGridFlatteningPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: ITreeGridRecord[],\n        expandedLevels: number, expandedStates: Map<any, boolean>, _: number): any[] {\n\n        const data: ITreeGridRecord[] = [];\n\n        this.grid.processedRootRecords = collection;\n        this.grid.processedRecords = new Map<any, ITreeGridRecord>();\n\n        this.getFlatDataRecursive(collection, data, expandedLevels, expandedStates, true);\n\n        this.grid.processedExpandedFlatData = data.map(r => r.data);\n\n        return data;\n    }\n\n    private getFlatDataRecursive(collection: ITreeGridRecord[], data: ITreeGridRecord[],\n        expandedLevels: number, expandedStates: Map<any, boolean>, parentExpanded: boolean) {\n        if (!collection || !collection.length) {\n            return;\n        }\n\n        for (const hierarchicalRecord of collection) {\n            if (parentExpanded) {\n                data.push(hierarchicalRecord);\n            }\n\n            hierarchicalRecord.expanded = this.grid.gridAPI.get_row_expansion_state(hierarchicalRecord);\n\n            this.updateNonProcessedRecordExpansion(this.grid, hierarchicalRecord);\n\n            this.grid.processedRecords.set(hierarchicalRecord.key, hierarchicalRecord);\n\n            this.getFlatDataRecursive(hierarchicalRecord.children, data, expandedLevels,\n                expandedStates, parentExpanded && hierarchicalRecord.expanded);\n        }\n    }\n\n    private updateNonProcessedRecordExpansion(grid: GridType, record: ITreeGridRecord) {\n        const rec = grid.records.get(record.key);\n        rec.expanded = record.expanded;\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridSorting',\n    standalone: true\n})\nexport class IgxTreeGridSortingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(\n        hierarchicalData: ITreeGridRecord[],\n        sortExpressions: ISortingExpression[],\n        groupExpressions: IGroupingExpression[],\n        sorting: IGridSortingStrategy,\n        _: number,\n        pinned?: boolean): ITreeGridRecord[] {\n\n        const expressions = groupExpressions ? groupExpressions.concat(sortExpressions) : sortExpressions;\n        let result: ITreeGridRecord[];\n        if (!expressions.length) {\n            result = hierarchicalData;\n        } else {\n            result = DataUtil.treeGridSort(hierarchicalData, expressions, sorting, null, this.grid);\n        }\n\n        const filteredSortedData = [];\n        this.flattenTreeGridRecords(result, filteredSortedData);\n        this.grid.setFilteredSortedData(filteredSortedData, pinned);\n\n        return result;\n    }\n\n    private flattenTreeGridRecords(records: ITreeGridRecord[], flatData: any[]) {\n        if (records && records.length) {\n            for (const record of records) {\n                flatData.push(record.data);\n                this.flattenTreeGridRecords(record.children, flatData);\n            }\n        }\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridPaging',\n    standalone: true\n})\nexport class IgxTreeGridPagingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: ITreeGridRecord[], enabled: boolean, page = 0, perPage = 15, _: number): ITreeGridRecord[] {\n        if (!enabled || this.grid.pagingMode !== GridPagingMode.Local) {\n            return collection;\n        }\n\n        const len = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n        const totalPages = Math.ceil(len / perPage);\n\n        const state = {\n            index: (totalPages > 0 && page >= totalPages) ? totalPages - 1 : page,\n            recordsPerPage: perPage\n        };\n\n        const result: ITreeGridRecord[] = DataUtil.page(cloneArray(collection), state, len);\n        this.grid.pagingState = state;\n        this.grid.page = state.index;\n\n        return result;\n    }\n}\n/** @hidden */\n@Pipe({\n    name: 'treeGridTransaction',\n    standalone: true\n})\nexport class IgxTreeGridTransactionPipe implements PipeTransform {\n\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], _: number): any[] {\n\n        if (this.grid.transactions.enabled) {\n            const aggregatedChanges = this.grid.transactions.getAggregatedChanges(true);\n            if (aggregatedChanges.length > 0) {\n                const primaryKey = this.grid.primaryKey;\n                if (!primaryKey) {\n                    return collection;\n                }\n\n                const childDataKey = this.grid.childDataKey;\n\n                if (childDataKey) {\n                    const hierarchicalDataClone = cloneHierarchicalArray(collection, childDataKey);\n                    return DataUtil.mergeHierarchicalTransactions(\n                        hierarchicalDataClone,\n                        aggregatedChanges,\n                        childDataKey,\n                        this.grid.primaryKey,\n                        this.grid.dataCloneStrategy\n                    );\n                } else {\n                    const flatDataClone = cloneArray(collection);\n                    return DataUtil.mergeTransactions(\n                        flatDataClone,\n                        aggregatedChanges,\n                        this.grid.primaryKey,\n                        this.grid.dataCloneStrategy);\n                }\n            }\n        }\n        return collection;\n    }\n}\n\n/**\n * This pipe maps the original record to ITreeGridRecord format used in TreeGrid.\n */\n@Pipe({\n    name: 'treeGridNormalizeRecord',\n    standalone: true\n})\nexport class IgxTreeGridNormalizeRecordsPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(_: any[], __: number): any[] {\n        const primaryKey = this.grid.primaryKey;\n        // using flattened data because origin data may be hierarchical.\n        const flatData = this.grid.flatData;\n        const res = flatData ? flatData.map(rec =>\n        ({\n            rowID: this.grid.primaryKey ? rec[primaryKey] : rec,\n            data: rec,\n            level: 0,\n            children: []\n        })) : [];\n        return res;\n    }\n}\n\n@Pipe({\n    name: 'treeGridAddRow',\n    standalone: true\n})\nexport class IgxTreeGridAddRowPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any, isPinned = false, _pipeTrigger: number) {\n        if (!this.grid.rowEditable || !this.grid.crudService.row || this.grid.crudService.row.getClassName() !== IgxAddRow.name ||\n            !this.grid.gridAPI.crudService.addRowParent || isPinned !== this.grid.gridAPI.crudService.addRowParent.isPinned) {\n            return collection;\n        }\n        const copy = collection.slice(0);\n        const rec = (this.grid.crudService.row as IgxAddRow).recordRef;\n        if (this.grid.crudService.addRowParent.isPinned) {\n            const parentRowIndex = copy.findIndex(record => record.rowID === this.grid.crudService.addRowParent.rowID);\n            copy.splice(parentRowIndex + 1, 0, rec);\n        } else {\n            copy.splice(this.grid.crudService.row.index, 0, rec);\n        }\n        this.grid.records.set(rec.key, rec);\n        return copy;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Input\n} from '@angular/core';\nimport { NgClass, NgStyle, NgTemplateOutlet, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\n\nimport { HammerGesturesManager } from '../../core/touch';\nimport { IgxGridExpandableCellComponent } from '../grid/expandable-cell.component';\nimport { IgxTreeGridRow } from '../grid-public-row';\nimport { RowType } from '../common/grid.interface';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from '../common/pipes';\nimport { IgxTooltipDirective } from '../../directives/tooltip/tooltip.directive';\nimport { IgxTooltipTargetDirective } from '../../directives/tooltip/tooltip-target.directive';\nimport { IgxCircularProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxPrefixDirective } from '../../directives/prefix/prefix.directive';\nimport { IgxDateTimeEditorDirective } from '../../directives/date-time-editor/date-time-editor.directive';\nimport { IgxTimePickerComponent } from '../../time-picker/time-picker.component';\nimport { IgxDatePickerComponent } from '../../date-picker/date-picker.component';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxFocusDirective } from '../../directives/focus/focus.directive';\nimport { IgxInputDirective } from '../../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../../input-group/input-group.component';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxTextHighlightDirective } from '../../directives/text-highlight/text-highlight.directive';\nimport { IgxChipComponent } from '../../chips/chip.component';\nimport { IgxTextSelectionDirective } from '../../directives/text-selection/text-selection.directive';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-tree-grid-cell',\n    templateUrl: 'tree-cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        DecimalPipe,\n        PercentPipe,\n        CurrencyPipe,\n        DatePipe,\n        IgxChipComponent,\n        IgxTextHighlightDirective,\n        IgxIconComponent,\n        ReactiveFormsModule,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxFocusDirective,\n        IgxCheckboxComponent,\n        IgxDatePickerComponent,\n        IgxTimePickerComponent,\n        IgxDateTimeEditorDirective,\n        IgxPrefixDirective,\n        IgxSuffixDirective,\n        IgxCircularProgressBarComponent,\n        IgxTooltipTargetDirective,\n        IgxTooltipDirective,\n        IgxGridCellImageAltPipe,\n        IgxStringReplacePipe,\n        IgxColumnFormatterPipe,\n        IgxTextSelectionDirective\n    ]\n})\nexport class IgxTreeGridCellComponent extends IgxGridExpandableCellComponent {\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public level = 0;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public showIndicator = false;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public isLoading: boolean;\n\n    /**\n     * Gets the row of the cell.\n     * ```typescript\n     * let cellRow = this.cell.row;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public override get row(): RowType {\n        // TODO: Fix types\n        return new IgxTreeGridRow(this.grid as any, this.intRow.index, this.intRow.data);\n    }\n\n    /**\n     * @hidden\n     */\n    public override toggle(event: Event) {\n        event.stopPropagation();\n        this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !this.intRow.expanded, event);\n    }\n\n    /**\n     * @hidden\n     */\n    public onLoadingDblClick(event: Event) {\n        event.stopPropagation();\n    }\n}\n","<ng-template #defaultPinnedIndicator>\n    @if (displayPinnedChip) {\n        <igx-chip\n            class=\"igx-grid__td--pinned-chip\"\n            [disabled]=\"true\"\n            [style.--ig-size]=\"1\"\n        >{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n    }\n</ng-template>\n<ng-template #defaultCell>\n    @if (column.dataType !== 'boolean' && column.dataType !== 'image' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight\n            class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"\n                formatter\n                    ? (value | columnFormatter:formatter:rowData)\n                    : column.dataType === 'number'\n                    ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n                    : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                    ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n                    : column.dataType === 'currency'\n                    ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n                    : column.dataType === 'percent'\n                    ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n                    : value\n            \"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\"\n        >{{\n            formatter\n                ? (value | columnFormatter:formatter:rowData)\n                : column.dataType === \"number\"\n                ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n                : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n                : column.dataType === 'currency'\n                ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n                : column.dataType === 'percent'\n                ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n                : value\n        }}</div>\n    }\n    @if (column.dataType === 'boolean' && !this.formatter) {\n        <igx-icon\n            family=\"default\"\n            [name]=\"value ? 'confirm' : 'close'\"\n            [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\">\n        </igx-icon>\n    }\n    @if (column.dataType === 'image') {\n        <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n    }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n    @if (column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n        igxTextHighlight class=\"igx-grid__td-text\"\n        [cssClass]=\"highlightClass\"\n        [activeCssClass]=\"activeHighlightClass\"\n        [groupName]=\"gridID\"\n        [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n            (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n            (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n            (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n            (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n        [row]=\"rowData\"\n        [column]=\"this.column.field\"\n        [containerClass]=\"'igx-grid__td-text'\"\n        [metadata]=\"searchMetadata\">{{\n            !isEmptyAddRowCell ? value : (column.header || column.field)\n        }}</div>\n    }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n    @if (column.dataType === 'string' || column.dataType === 'image') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-input-group [style.--ig-size]=\"1\">\n                <input\n                    igxInput\n                    [attr.aria-describedby]=\"ariaDescribeBy\"\n                    [attr.aria-invalid]=\"isInvalid\"\n                    [igxFocus]=\"true\"\n                    [igxTextSelection]=\"true\"\n                    [formControl]=\"formControl\"\n                    (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n                    (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n                />\n            </igx-input-group>\n        </ng-container>\n    }\n    @if (column.dataType === 'number') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [igxTextSelection]=\"true\"\n                [formControl]=\"formControl\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'boolean') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-checkbox\n                [checked]=\"editValue\"\n                [igxFocus]=\"true\"\n                [disableRipple]=\"true\"\n                [formControl]=\"formControl\"\n            ></igx-checkbox>\n        </ng-container>\n    }\n    @if (column.dataType === 'date') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-date-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [weekStart]=\"column.pipeArgs.weekStart\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            >\n            </igx-date-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'time') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-time-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            ></igx-time-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'dateTime') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                type=\"text\"\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [formControl]=\"formControl\"\n                igxInput\n                [locale]=\"grid.locale\"\n                [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n                [defaultFormatType]=\"column.dataType\"\n                [displayFormat]=\"column.pipeArgs.format\"\n                [igxFocus]=\"true\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'currency') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            @if (grid.currencyPositionLeft) {\n                <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n            }\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [igxTextSelection]=\"true\"\n                [formControl]=\"formControl\"\n            />\n            @if (!grid.currencyPositionLeft) {\n                <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n            }\n        </igx-input-group>\n    }\n    @if (column.dataType === 'percent') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [igxTextSelection]=\"true\"\n                [formControl]=\"formControl\"\n            />\n            <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n        </igx-input-group>\n    }\n</ng-template>\n@if (!editMode) {\n    @if (level > 0) {\n        <div\n            #indentationDiv\n            class=\"igx-grid__tree-cell--padding-level-{{level}}\"\n            [ngStyle]=\"{'padding-inline-start': 'calc(var(--igx-tree-indent-size) *' + level + ')'}\"\n        ></div>\n    }\n    @if (!isLoading) {\n        <div\n            #indicator\n            class=\"igx-grid__tree-grouping-indicator\"\n            [ngStyle]=\"{ visibility: showIndicator ? 'visible' : 'hidden' }\"\n            (click)=\"toggle($event)\"\n            (focus)=\"onIndicatorFocus()\"\n        >\n            <ng-container\n                *ngTemplateOutlet=\"iconTemplate; context: { $implicit:  this }\"\n            >\n            </ng-container>\n            <ng-container\n                *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\"\n            >\n            </ng-container>\n        </div>\n    }\n    @if (isLoading) {\n        <div\n            (dblclick)=\"onLoadingDblClick($event)\"\n            class=\"igx-grid__tree-loading-indicator\"\n        >\n            <ng-container\n                *ngTemplateOutlet=\"\n                    grid.rowLoadingIndicatorTemplate\n                        ? grid.rowLoadingIndicatorTemplate\n                        : defaultLoadingIndicatorTemplate\n                \"\n            >\n            </ng-container>\n        </div>\n    }\n    <ng-template #defaultLoadingIndicatorTemplate>\n        <igx-circular-bar [indeterminate]=\"true\"> </igx-circular-bar>\n    </ng-template>\n}\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n    <igx-icon\n        family=\"default\"\n        name=\"error\"\n        #errorIcon\n        [igxTooltipTarget]=\"tooltipRef\"\n        [igxToggleOutlet]=\"grid.outlet\"\n        (mouseover)='errorShowing = true'\n        (mouseout)='errorShowing = false'>\n    </igx-icon>\n    <div [id]=\"ariaErrorMessage\"\n    igxTooltip #error #tooltipRef=\"tooltip\">\n        <div [style.width]=\"'max-content'\">\n            <ng-container *ngTemplateOutlet=\"cellValidationErrorTemplate || defaultError; context: context\"></ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n    <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n    <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n<ng-template #defaultError>\n    @if (formGroup?.get(column?.field).errors?.['required']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_required_validation_error}}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['minlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['maxlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['min']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['max']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['email']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_email_validation_error }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['pattern']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n        </div>\n    }\n</ng-template>\n","import { Component, forwardRef, Input, ViewChildren, QueryList, HostBinding, DoCheck, ChangeDetectionStrategy } from '@angular/core';\nimport { IgxRowDirective } from '../row.directive';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\nimport { IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from '../common/pipes';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxTreeGridCellComponent } from './tree-cell.component';\nimport { IgxGridCellComponent } from '../cell.component';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxRowDragDirective } from '../row-drag.directive';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-tree-grid-row',\n    templateUrl: 'tree-grid-row.component.html',\n    providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxTreeGridRowComponent) }],\n    imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, IgxGridCellComponent, NgClass, NgStyle, IgxTreeGridCellComponent, IgxCheckboxComponent, IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxTreeGridRowComponent extends IgxRowDirective implements DoCheck {\n    @ViewChildren('treeCell')\n    protected override _cells: QueryList<any>;\n\n    /**\n     * @hidden\n     */\n    public isLoading: boolean;\n\n    private _treeRow: ITreeGridRecord;\n\n    /**\n     * The `ITreeGridRecord` passed to the row component.\n     *\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * const treeRow = row.treeRow;\n     * ```\n     */\n    @Input()\n    public get treeRow(): ITreeGridRecord {\n        return this._treeRow;\n    }\n\n    public set treeRow(value: ITreeGridRecord) {\n        if (this._treeRow !== value) {\n            this._treeRow = value;\n            this.data = this._treeRow.data;\n        }\n    }\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * this.grid.selectedRows[0].pinned = true;\n     * ```\n     */\n    public override set pinned(value: boolean) {\n        if (value) {\n            this.grid.pinRow(this.key);\n        } else {\n            this.grid.unpinRow(this.key);\n        }\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     * ```typescript\n     * let isPinned = row.pinned;\n     * ```\n     */\n    public override get pinned() {\n        return this.grid.isRecordPinned(this._treeRow);\n    }\n\n    /**\n     * @hidden\n     */\n    public override get isRoot(): boolean {\n        let treeRec = this.treeRow;\n        const isPinnedArea = this.pinned && !this.disabled;\n        if (isPinnedArea) {\n            treeRec = this.grid.unpinnedRecords.find(x => x.data === this.data);\n        }\n        return treeRec?.level === 0;\n    }\n\n    /**\n     * @hidden\n     */\n    public override get hasChildren(): boolean {\n        return true;\n    }\n\n    /**\n     * Returns a value indicating whether the row component is expanded.\n     *\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * const expanded = row.expanded;\n     * ```\n     */\n    @HostBinding('attr.aria-expanded')\n    public override get expanded(): boolean {\n        return this._treeRow.expanded;\n    }\n\n    /**\n     * Sets a value indicating whether the row component is expanded.\n     *\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * row.expanded = true;\n     * ```\n     */\n    public override set expanded(value: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this._treeRow.key, value);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get viewIndex(): number {\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * @hidden\n     */\n    public get showIndicator() {\n        return this.grid.loadChildrenOnDemand ?\n            this.grid.expansionStates.has(this.key) ?\n                this.treeRow.children && this.treeRow.children.length :\n                this.grid.hasChildrenKey ?\n                    this.data[this.grid.hasChildrenKey] :\n                    true :\n            this.treeRow.children && this.treeRow.children.length;\n    }\n\n    /**\n     * @hidden\n     */\n    public get indeterminate(): boolean {\n        return this.selectionService.isRowInIndeterminateState(this.key);\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngDoCheck() {\n        this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.key) : false;\n        super.ngDoCheck();\n    }\n\n    /**\n     * Spawns the add child row UI for the specific row.\n     *\n     * @example\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * row.beginAddChild();\n     * ```\n     * @param rowID\n     */\n    public beginAddChild() {\n        this.grid.crudService.enterAddRowMode(this, true);\n    }\n}\n","<ng-container *ngTemplateOutlet='addRowUI ? addTemp : defaultTemp'></ng-container>\n\n<ng-template #addTemp>\n    <div class='igx-grid__tr--inner' [class.igx-grid__tr--add-animate]='triggerAddAnimationClass' (animationend)='animationEndHandler()'>\n        <ng-container *ngTemplateOutlet='defaultTemp'></ng-container>\n    </div>\n</ng-template>\n<ng-template #defaultTemp>\n    @if (rowDraggable) {\n        <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n            <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n        </div>\n    }\n    @if (showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (click)=\"onRowSelectorClick($event)\" (pointerdown)=\"$event.preventDefault()\">\n            <ng-template *ngTemplateOutlet=\"\n                this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n                context: { $implicit: { index: viewIndex, rowID: key, key, selected: selected }}\">\n            </ng-template>\n        </div>\n    }\n    @if (pinnedColumns.length > 0 && grid.isPinningToStart) {\n        <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-container>\n    }\n    <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n        <ng-template #cellTemplate>\n            <igx-grid-cell\n                class=\"igx-grid__td igx-grid__td--fw\"\n                [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n                [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n                [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n                [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n                [column]=\"col\"\n                [formatter]=\"col.formatter\"\n                [intRow]=\"this\"\n                [rowData]=\"data\"\n                [style.min-width]=\"col.resolvedWidth\"\n                [style.max-width]=\"col.resolvedWidth\"\n                [style.flex-basis]=\"col.resolvedWidth\"\n                [width]=\"col.getCellWidth()\"\n                [visibleColumnIndex]=\"col.visibleIndex\"\n                [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n                [cellTemplate]=\"col.bodyTemplate\"\n                [cellValidationErrorTemplate]=\"col.errorTemplate\"\n                [lastSearchInfo]=\"grid.lastSearchInfo\"\n                [active]=\"isCellActive(col.visibleIndex)\"\n                [cellSelectionMode]=\"grid.cellSelection\"\n                [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n                #treeCell>\n            </igx-grid-cell>\n        </ng-template>\n        <ng-template #treeCellTemplate>\n            <igx-tree-grid-cell\n                class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n                [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n                [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\n                [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [level]=\"treeRow.level\"\n                [expanded]=\"expanded\"\n                [showIndicator]=\"showIndicator\"\n                [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n                [column]=\"col\"\n                [formatter]=\"col.formatter\"\n                [intRow]=\"this\"\n                [rowData]=\"data\"\n                [style.min-width]=\"col.resolvedWidth\"\n                [style.max-width]=\"col.resolvedWidth\"\n                [style.flex-basis]=\"col.resolvedWidth\"\n                [width]=\"col.getCellWidth()\"\n                [visibleColumnIndex]=\"col.visibleIndex\"\n                [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n                [isLoading]=\"isLoading\"\n                [cellTemplate]=\"col.bodyTemplate\"\n                [cellValidationErrorTemplate]=\"col.errorTemplate\"\n                [lastSearchInfo]=\"grid.lastSearchInfo\"\n                [active]=\"isCellActive(col.visibleIndex)\"\n                [cellSelectionMode]=\"grid.cellSelection\"\n                [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n                #treeCell>\n            </igx-tree-grid-cell>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate\"></ng-container>\n    </ng-template>\n    @if (pinnedColumns.length > 0 && !grid.isPinningToStart) {\n        <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-container>\n    }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox\n            [tabindex]=\"-1\"\n            [readonly]=\"true\"\n            [checked]=\"selected\"\n            [indeterminate]=\"indeterminate\"\n            [disabled]=\"deleted\"\n            [disableRipple]=\"true\"\n            [disableTransitions]=\"grid.disableTransitions\"\n            [aria-label]=\"rowCheckboxAriaLabel\">\n        </igx-checkbox>\n    </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n    @for (col of pinnedColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n        <ng-template #cellTemplate>\n            <igx-grid-cell\n                class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n                [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n                [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n                [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n                [column]=\"col\"\n                [formatter]=\"col.formatter\"\n                [intRow]=\"this\"\n                [firstPinned]=\"col.isFirstPinned\"\n                [lastPinned]=\"col.isLastPinned\"\n                [rowData]=\"data\"\n                [style.min-width]=\"col.resolvedWidth\"\n                [style.max-width]=\"col.resolvedWidth\"\n                [style.flex-basis]=\"col.resolvedWidth\"\n                [style.left]=\"col.rightPinnedOffset\"\n                [width]=\"col.getCellWidth()\"\n                [visibleColumnIndex]=\"col.visibleIndex\"\n                [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n                [cellTemplate]=\"col.bodyTemplate\"\n                [cellValidationErrorTemplate]=\"col.errorTemplate\"\n                [lastSearchInfo]=\"grid.lastSearchInfo\"\n                [active]=\"isCellActive(col.visibleIndex)\"\n                [cellSelectionMode]=\"grid.cellSelection\"\n                [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n                #treeCell>\n            </igx-grid-cell>\n        </ng-template>\n        <ng-template #treeCellTemplate>\n            <igx-tree-grid-cell\n                class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell igx-grid__td--pinned\"\n                [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n                [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\n                [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [level]=\"treeRow.level\"\n                [expanded]=\"expanded\"\n                [showIndicator]=\"showIndicator\"\n                [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n                [column]=\"col\"\n                [formatter]=\"col.formatter\"\n                [intRow]=\"this\"\n                [lastPinned]=\"col.isLastPinned\"\n                [rowData]=\"data\"\n                [style.min-width]=\"col.resolvedWidth\"\n                [style.max-width]=\"col.resolvedWidth\"\n                [style.flex-basis]=\"col.resolvedWidth\"\n                [style.left]=\"col.rightPinnedOffset\"\n                [width]=\"col.getCellWidth()\"\n                [visibleColumnIndex]=\"col.visibleIndex\"\n                [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n                [isLoading]=\"isLoading\"\n                [cellTemplate]=\"col.bodyTemplate\"\n                [cellValidationErrorTemplate]=\"col.errorTemplate\"\n                [lastSearchInfo]=\"grid.lastSearchInfo\"\n                [active]=\"isCellActive(col.visibleIndex)\"\n                [cellSelectionMode]=\"grid.cellSelection\"\n                [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n                #treeCell>\n            </igx-tree-grid-cell>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate\"></ng-container>\n    }\n</ng-template>\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    HostBinding,\n    Input,\n    OnInit,\n    TemplateRef,\n    ContentChild,\n    AfterContentInit,\n    ViewChild,\n    DoCheck,\n    AfterViewInit,\n    ElementRef,\n    NgZone,\n    Inject,\n    ChangeDetectorRef,\n    IterableDiffers,\n    ViewContainerRef,\n    Optional,\n    LOCALE_ID,\n    Injector,\n    EnvironmentInjector,\n    CUSTOM_ELEMENTS_SCHEMA,\n    booleanAttribute\n} from '@angular/core';\nimport { DOCUMENT, NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';\n\nimport { IgxTreeGridAPIService } from './tree-grid-api.service';\nimport { IgxGridBaseDirective } from '../grid-base.directive';\nimport { ITreeGridRecord } from './tree-grid.interfaces';\nimport { IRowDataCancelableEventArgs, IRowDataEventArgs, IRowToggleEventArgs } from '../common/events';\nimport {\n    HierarchicalTransaction,\n    HierarchicalState,\n    TransactionType,\n    TransactionEventOrigin,\n    StateUpdateEvent\n} from '../../services/transaction/transaction';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxGridSummaryService } from '../summaries/grid-summary.service';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { mergeObjects, PlatformUtil } from '../../core/utils';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { IgxRowLoadingIndicatorTemplateDirective } from './tree-grid.directives';\nimport { IgxForOfSyncService, IgxForOfScrollSyncService } from '../../directives/for-of/for_of.sync.service';\nimport { IgxGridNavigationService } from '../grid-navigation.service';\nimport { CellType, GridServiceType, GridType, IGX_GRID_BASE, IGX_GRID_SERVICE_BASE, RowType } from '../common/grid.interface';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { IgxTreeGridSelectionService } from './tree-grid-selection.service';\nimport { GridSelectionMode } from '../common/enums';\nimport { IgxSummaryRow, IgxTreeGridRow } from '../grid-public-row';\nimport { IgxGridCRUDService } from '../common/crud.service';\nimport { IgxTreeGridGroupByAreaComponent } from '../grouping/tree-grid-group-by-area.component';\nimport { IgxGridCell } from '../grid-public-cell';\nimport { IgxHierarchicalTransactionFactory } from '../../services/transaction/transaction-factory.service';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { HierarchicalTransactionService } from '../../services/transaction/hierarchical-transaction';\nimport { IgxOverlayService } from '../../services/overlay/overlay';\nimport { IgxGridTransaction } from '../common/types';\nimport { TreeGridFilteringStrategy } from './tree-grid.filtering.strategy';\nimport { IgxGridValidationService } from '../grid/grid-validation.service';\nimport { IgxTreeGridSummaryPipe } from './tree-grid.summary.pipe';\nimport { IgxTreeGridFilteringPipe } from './tree-grid.filtering.pipe';\nimport { IgxTreeGridHierarchizingPipe, IgxTreeGridFlatteningPipe, IgxTreeGridSortingPipe, IgxTreeGridPagingPipe, IgxTreeGridTransactionPipe, IgxTreeGridNormalizeRecordsPipe, IgxTreeGridAddRowPipe } from './tree-grid.pipes';\nimport { IgxSummaryDataPipe } from '../summaries/grid-root-summary.pipe';\nimport { IgxHasVisibleColumnsPipe, IgxGridRowPinningPipe, IgxGridRowClassesPipe, IgxGridRowStylesPipe, IgxStringReplacePipe } from '../common/pipes';\nimport { IgxGridColumnResizerComponent } from '../resizing/resizer.component';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRowEditTabStopDirective } from '../grid.rowEdit.directive';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { IgxSnackbarComponent } from '../../snackbar/snackbar.component';\nimport { IgxCircularProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxOverlayOutletDirective, IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxSummaryRowComponent } from '../summaries/summary-row.component';\nimport { IgxTreeGridRowComponent } from './tree-grid-row.component';\nimport { IgxTemplateOutletDirective } from '../../directives/template-outlet/template_outlet.directive';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxGridDragSelectDirective } from '../selection/drag-select.directive';\nimport { IgxGridBodyDirective } from '../grid.common';\nimport { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';\nimport { IgxTextHighlightService } from '../../directives/text-highlight/text-highlight.service';\n\nlet NEXT_ID = 0;\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Tree Grid** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid)\n *\n * The Ignite UI Tree Grid displays and manipulates hierarchical data with consistent schema formatted as a table and\n * provides features such as sorting, filtering, editing, column pinning, paging, column moving and hiding.\n *\n * Example:\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" primaryKey=\"employeeID\" foreignKey=\"PID\" [autoGenerate]=\"false\">\n *   <igx-column field=\"first\" header=\"First Name\"></igx-column>\n *   <igx-column field=\"last\" header=\"Last Name\"></igx-column>\n *   <igx-column field=\"role\" header=\"Role\"></igx-column>\n * </igx-tree-grid>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-tree-grid',\n    templateUrl: 'tree-grid.component.html',\n    providers: [\n        IgxGridCRUDService,\n        IgxGridValidationService,\n        IgxGridSummaryService,\n        IgxGridNavigationService,\n        { provide: IgxGridSelectionService, useClass: IgxTreeGridSelectionService },\n        { provide: IGX_GRID_SERVICE_BASE, useClass: IgxTreeGridAPIService },\n        { provide: IGX_GRID_BASE, useExisting: IgxTreeGridComponent },\n        IgxFilteringService,\n        IgxColumnResizingService,\n        IgxForOfSyncService,\n        IgxForOfScrollSyncService\n    ],\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        IgxGridHeaderRowComponent,\n        IgxGridBodyDirective,\n        IgxGridDragSelectDirective,\n        IgxColumnMovingDropDirective,\n        IgxGridForOfDirective,\n        IgxTemplateOutletDirective,\n        IgxTreeGridRowComponent,\n        IgxSummaryRowComponent,\n        IgxOverlayOutletDirective,\n        IgxToggleDirective,\n        IgxCircularProgressBarComponent,\n        IgxSnackbarComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxRowEditTabStopDirective,\n        IgxIconComponent,\n        IgxGridColumnResizerComponent,\n        IgxHasVisibleColumnsPipe,\n        IgxGridRowPinningPipe,\n        IgxGridRowClassesPipe,\n        IgxGridRowStylesPipe,\n        IgxSummaryDataPipe,\n        IgxTreeGridHierarchizingPipe,\n        IgxTreeGridFlatteningPipe,\n        IgxTreeGridSortingPipe,\n        IgxTreeGridFilteringPipe,\n        IgxTreeGridPagingPipe,\n        IgxTreeGridTransactionPipe,\n        IgxTreeGridSummaryPipe,\n        IgxTreeGridNormalizeRecordsPipe,\n        IgxTreeGridAddRowPipe,\n        IgxStringReplacePipe\n    ],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxTreeGridComponent extends IgxGridBaseDirective implements GridType, OnInit, AfterViewInit, DoCheck, AfterContentInit {\n    /**\n     * Sets the child data key of the `IgxTreeGridComponent`.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" [autoGenerate]=\"true\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public childDataKey: string;\n\n    /**\n     * Sets the foreign key of the `IgxTreeGridComponent`.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [autoGenerate]=\"true\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public foreignKey: string;\n\n    /**\n     * Sets the key indicating whether a row has children.\n     * This property is only used for load on demand scenarios.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\"\n     *                [loadChildrenOnDemand]=\"loadChildren\"\n     *                [hasChildrenKey]=\"'hasEmployees'\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public hasChildrenKey: string;\n\n    /**\n     * Sets whether child records should be deleted when their parent gets deleted.\n     * By default it is set to true and deletes all children along with the parent.\n     * ```html\n     * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" cascadeOnDelete=\"false\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public cascadeOnDelete = true;\n\n    /* csSuppress */\n    /**\n     * Sets a callback for loading child rows on demand.\n     * ```html\n     * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [loadChildrenOnDemand]=\"loadChildren\">\n     * </igx-tree-grid>\n     * ```\n     * ```typescript\n     * public loadChildren = (parentID: any, done: (children: any[]) => void) => {\n     *     this.dataService.getData(parentID, children => done(children));\n     * }\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public loadChildrenOnDemand: (parentID: any, done: (children: any[]) => void) => void;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'treegrid';\n\n    /**\n     * Sets the value of the `id` attribute. If not provided it will be automatically generated.\n     * ```html\n     * <igx-tree-grid [id]=\"'igx-tree-grid-1'\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-tree-grid-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxTreeGridGroupByAreaComponent, { read: IgxTreeGridGroupByAreaComponent })\n    public treeGroupArea: IgxTreeGridGroupByAreaComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('record_template', { read: TemplateRef, static: true })\n    protected recordTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('summary_template', { read: TemplateRef, static: true })\n    protected summaryTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxRowLoadingIndicatorTemplateDirective, { read: IgxRowLoadingIndicatorTemplateDirective })\n    protected rowLoadingTemplate: IgxRowLoadingIndicatorTemplateDirective;\n\n    /**\n     * @hidden\n     */\n    public flatData: any[] | null;\n\n    /**\n     * @hidden\n     */\n    public processedExpandedFlatData: any[] | null;\n\n    /**\n     * Returns an array of the root level `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the root record with index=2\n     * const states = this.grid.rootRecords[2];\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public rootRecords: ITreeGridRecord[];\n\n    /* blazorSuppress */\n    /**\n     * Returns a map of all `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the record with primaryKey=2\n     * const states = this.grid.records.get(2);\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public records: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n    /**\n     * Returns an array of processed (filtered and sorted) root `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the processed root record with index=2\n     * const states = this.grid.processedRootRecords[2];\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public processedRootRecords: ITreeGridRecord[];\n\n    /* blazorSuppress */\n    /**\n     * Returns a map of all processed (filtered and sorted) `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the processed record with primaryKey=2\n     * const states = this.grid.processedRecords.get(2);\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public processedRecords: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n    /**\n     * @hidden\n     */\n    public loadingRows = new Set<any>();\n\n    protected override _filterStrategy = new TreeGridFilteringStrategy();\n    protected override _transactions: HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>;\n    private _data;\n    private _rowLoadingIndicatorTemplate: TemplateRef<void>;\n    private _expansionDepth = Infinity;\n\n     /* treatAsRef */\n    /**\n     * Gets/Sets the array of data that populates the component.\n     * ```html\n     * <igx-tree-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public get data(): any[] | null {\n        return this._data;\n    }\n\n     /* treatAsRef */\n    public set data(value: any[] | null) {\n        const oldData = this._data;\n        this._data = value || [];\n        this.summaryService.clearSummaryCache();\n        if (!this._init) {\n            this.validation.updateAll(this._data);\n        }\n        if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data)) {\n            this.setupColumns();\n        }\n        this.checkPrimaryKeyField();\n        this.cdr.markForCheck();\n    }\n\n    /** @hidden @internal */\n    public override get type(): GridType[\"type\"] {\n        return 'tree';\n    }\n\n    /**\n     * Get transactions service for the grid.\n     *\n     * @experimental @hidden\n     */\n    public override get transactions() {\n        if (this._diTransactions && !this.batchEditing) {\n            return this._diTransactions;\n        }\n        return this._transactions;\n    }\n\n    /**\n     * Sets the count of levels to be expanded in the `IgxTreeGridComponent`. By default it is\n     * set to `Infinity` which means all levels would be expanded.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" expansionDepth=\"1\" [autoGenerate]=\"true\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public get expansionDepth(): number {\n        return this._expansionDepth;\n    }\n\n    public set expansionDepth(value: number) {\n        this._expansionDepth = value;\n        this.notifyChanges();\n    }\n\n    /**\n     * Template for the row loading indicator when load on demand is enabled.\n     * ```html\n     * <ng-template #rowLoadingTemplate>\n     *     <igx-icon>loop</igx-icon>\n     * </ng-template>\n     *\n     * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'ID'\" [foreignKey]=\"'parentID'\"\n     *                [loadChildrenOnDemand]=\"loadChildren\"\n     *                [rowLoadingIndicatorTemplate]=\"rowLoadingTemplate\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public get rowLoadingIndicatorTemplate(): TemplateRef<void> {\n        return this._rowLoadingIndicatorTemplate;\n    }\n\n    public set rowLoadingIndicatorTemplate(value: TemplateRef<void>) {\n        this._rowLoadingIndicatorTemplate = value;\n        this.notifyChanges();\n    }\n\n    // Kind of stupid\n    // private get _gridAPI(): IgxTreeGridAPIService {\n    //     return this.gridAPI as IgxTreeGridAPIService;\n    // }\n\n    constructor(\n        validationService: IgxGridValidationService,\n        selectionService: IgxGridSelectionService,\n        colResizingService: IgxColumnResizingService,\n        @Inject(IGX_GRID_SERVICE_BASE) gridAPI: GridServiceType,\n        // public gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>,\n        transactionFactory: IgxHierarchicalTransactionFactory,\n        _elementRef: ElementRef<HTMLElement>,\n        _zone: NgZone,\n        @Inject(DOCUMENT) document: any,\n        cdr: ChangeDetectorRef,\n        differs: IterableDiffers,\n        viewRef: ViewContainerRef,\n        injector: Injector,\n        envInjector: EnvironmentInjector,\n        navigation: IgxGridNavigationService,\n        filteringService: IgxFilteringService,\n        textHighlightService: IgxTextHighlightService,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n        summaryService: IgxGridSummaryService,\n        @Inject(LOCALE_ID) localeId: string,\n        platform: PlatformUtil,\n        @Optional() @Inject(IgxGridTransaction) protected override _diTransactions?:\n            HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>,\n    ) {\n        super(\n            validationService,\n            selectionService,\n            colResizingService,\n            gridAPI,\n            transactionFactory,\n            _elementRef,\n            _zone,\n            document,\n            cdr,\n            differs,\n            viewRef,\n            injector,\n            envInjector,\n            navigation,\n            filteringService,\n            textHighlightService,\n            overlayService,\n            summaryService,\n            localeId,\n            platform,\n            _diTransactions,\n        );\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        super.ngOnInit();\n\n        this.rowToggle.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n            this.loadChildrenOnRowExpansion(args);\n        });\n\n        // TODO: cascade selection logic should be refactor to be handled in the already existing subs\n        this.rowAddedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                let rec = this.gridAPI.get_rec_by_id(this.primaryKey ? args.data[this.primaryKey] : args.data);\n                if (rec && rec.parent) {\n                    this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n                        new Set([rec.parent]), rec.parent.key);\n                } else {\n                    // The record is still not available\n                    // Wait for the change detection to update records through pipes\n                    requestAnimationFrame(() => {\n                        rec = this.gridAPI.get_rec_by_id(this.primaryKey ?\n                            args.data[this.primaryKey] : args.data);\n                        if (rec && rec.parent) {\n                            this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n                                new Set([rec.parent]), rec.parent.key);\n                        }\n                        this.notifyChanges();\n                    });\n                }\n            }\n        });\n\n        this.rowDeletedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                if (args.data) {\n                    const rec = this.gridAPI.get_rec_by_id(\n                        this.primaryKey ? args.data[this.primaryKey] : args.data);\n                    this.handleCascadeSelection(args, rec);\n                } else {\n                    // if a row has been added and before commiting the transaction deleted\n                    const leafRowsDirectParents = new Set<any>();\n                    this.records.forEach(record => {\n                        if (record && (!record.children || record.children.length === 0) && record.parent) {\n                            leafRowsDirectParents.add(record.parent);\n                        }\n                    });\n                    // Wait for the change detection to update records through pipes\n                    requestAnimationFrame(() => {\n                        this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n                        this.notifyChanges();\n                    });\n                }\n            }\n        });\n\n        this.filteringDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                const leafRowsDirectParents = new Set<any>();\n                this.records.forEach(record => {\n                    if (record && (!record.children || record.children.length === 0) && record.parent) {\n                        leafRowsDirectParents.add(record.parent);\n                    }\n                });\n                this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n                this.notifyChanges();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n        // TODO: pipesExectured event\n        // run after change detection in super triggers pipes for records structure\n        if (this.rowSelection === GridSelectionMode.multipleCascade && this.selectedRows.length) {\n            const selRows = this.selectedRows;\n            this.selectionService.clearRowSelection();\n            this.selectRows(selRows, true);\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        if (this.rowLoadingTemplate) {\n            this._rowLoadingIndicatorTemplate = this.rowLoadingTemplate.template;\n        }\n        super.ngAfterContentInit();\n    }\n\n    public override getDefaultExpandState(record: ITreeGridRecord) {\n        return record.children && record.children.length && record.level < this.expansionDepth;\n    }\n\n    /**\n     * Expands all rows.\n     * ```typescript\n     * this.grid.expandAll();\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public override expandAll() {\n        this._expansionDepth = Infinity;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Collapses all rows.\n     *\n     * ```typescript\n     * this.grid.collapseAll();\n     *  ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public override collapseAll() {\n        this._expansionDepth = 0;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * @hidden\n     */\n    public override refreshGridState(args?: IRowDataEventArgs) {\n        super.refreshGridState();\n        if (this.primaryKey && this.foreignKey && args) {\n            const rowID = args.data[this.foreignKey];\n            this.summaryService.clearSummaryCache({ rowID });\n            this.pipeTrigger++;\n            this.cdr.detectChanges();\n        }\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Creates a new `IgxTreeGridRowComponent` with the given data. If a parentRowID is not specified, the newly created\n     * row would be added at the root level. Otherwise, it would be added as a child of the row whose primaryKey matches\n     * the specified parentRowID. If the parentRowID does not exist, an error would be thrown.\n     * ```typescript\n     * const record = {\n     *     ID: this.grid.data[this.grid1.data.length - 1].ID + 1,\n     *     Name: this.newRecord\n     * };\n     * this.grid.addRow(record, 1); // Adds a new child row to the row with ID=1.\n     * ```\n     *\n     * @param data\n     * @param parentRowID\n     * @memberof IgxTreeGridComponent\n     */\n    // TODO: remove evt emission\n    public override addRow(data: any, parentRowID?: any) {\n        this.crudService.endEdit(true);\n        this.gridAPI.addRowToData(data, parentRowID);\n\n        this.rowAddedNotifier.next({\n            data: data,\n            rowData: data, owner: this,\n            primaryKey: data[this.primaryKey],\n            rowKey: data[this.primaryKey]\n        });\n        this.pipeTrigger++;\n        this.notifyChanges();\n    }\n\n    /**\n     * Enters add mode by spawning the UI with the context of the specified row by index.\n     *\n     * @remarks\n     * Accepted values for index are integers from 0 to this.grid.dataView.length\n     * @remarks\n     * When adding the row as a child, the parent row is the specified row.\n     * @remarks\n     * To spawn the UI on top, call the function with index = null or a negative number.\n     * In this case trying to add this row as a child will result in error.\n     * @example\n     * ```typescript\n     * this.grid.beginAddRowByIndex(10);\n     * this.grid.beginAddRowByIndex(10, true);\n     * this.grid.beginAddRowByIndex(null);\n     * ```\n     * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n     * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n     */\n    public override beginAddRowByIndex(index: number, asChild?: boolean): void {\n        if (index === null || index < 0) {\n            return this.beginAddRowById(null, asChild);\n        }\n        return this._addRowForIndex(index - 1, asChild);\n    }\n\n    /**\n     * @hidden\n     */\n    public getContext(rowData: any, rowIndex: number, pinned?: boolean): any {\n        return {\n            $implicit: this.isGhostRecord(rowData) ? rowData.recordRef : rowData,\n            index: this.getDataViewIndex(rowIndex, pinned),\n            templateID: {\n                type: this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n                id: null\n            },\n            disabled: this.isGhostRecord(rowData) ? rowData.recordRef.isFilteredOutParent === undefined : false\n        };\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override getInitialPinnedIndex(rec) {\n        const id = this.gridAPI.get_row_id(rec);\n        return this._pinnedRecordIDs.indexOf(id);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override isRecordPinned(rec) {\n        return this.getInitialPinnedIndex(rec.data) !== -1;\n    }\n\n    /**\n     *\n     * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public override getSelectedData(formatters = false, headers = false): any[] {\n        let source = [];\n\n        const process = (record) => {\n            if (record.summaries) {\n                source.push(null);\n                return;\n            }\n            source.push(record.data);\n        };\n\n        this.unpinnedDataView.forEach(process);\n        source = this.isRowPinningToTop ? [...this.pinnedDataView, ...source] : [...source, ...this.pinnedDataView];\n        return this.extractDataFromSelection(source, formatters, headers);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override getEmptyRecordObjectFor(inTreeRow: RowType) {\n        const treeRowRec = inTreeRow?.treeRow || null;\n        const row = { ...treeRowRec };\n        const data = treeRowRec?.data || {};\n        row.data = { ...data };\n        Object.keys(row.data).forEach(key => {\n            // persist foreign key if one is set.\n            if (this.foreignKey && key === this.foreignKey) {\n                row.data[key] = treeRowRec.data[this.crudService.addRowParent?.asChild ? this.primaryKey : key];\n            } else {\n                row.data[key] = undefined;\n            }\n        });\n        let id = this.generateRowID();\n        const rootRecPK = this.foreignKey && this.rootRecords && this.rootRecords.length > 0 ?\n            this.rootRecords[0].data[this.foreignKey] : null;\n        if (id === rootRecPK) {\n            // safeguard in case generated id matches the root foreign key.\n            id = this.generateRowID();\n        }\n        row.key = id;\n        row.data[this.primaryKey] = id;\n        return { rowID: id, data: row.data, recordRef: row };\n    }\n\n    /** @hidden */\n    public override deleteRowById(rowId: any): any {\n        //  if this is flat self-referencing data, and CascadeOnDelete is set to true\n        //  and if we have transactions we should start pending transaction. This allows\n        //  us in case of delete action to delete all child rows as single undo action\n        const args: IRowDataCancelableEventArgs = {\n            rowID: rowId,\n            primaryKey: rowId,\n            rowKey: rowId,\n            cancel: false,\n            rowData: this.getRowData(rowId),\n            data: this.getRowData(rowId),\n            oldValue: null,\n            owner: this\n        };\n        this.rowDelete.emit(args);\n        if (args.cancel) {\n            return;\n        }\n\n        const record = this.gridAPI.deleteRowById(rowId);\n        const key = record[this.primaryKey];\n        if (record !== null && record !== undefined) {\n            const rowDeletedEventArgs: IRowDataEventArgs = {\n                data: record,\n                rowData: record,\n                owner: this,\n                primaryKey: key,\n                rowKey: key\n            };\n            this.rowDeleted.emit(rowDeletedEventArgs);\n        }\n        return record;\n    }\n\n    /**\n     * Returns the `IgxTreeGridRow` by index.\n     *\n     * @example\n     * ```typescript\n     * const myRow = treeGrid.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByIndex(index: number): RowType {\n        if (index < 0 || index >= this.dataView.length) {\n            return undefined;\n        }\n        return this.createRow(index);\n    }\n\n    /**\n     * Returns the `RowType` object by the specified primary key.\n     *\n     * @example\n     * ```typescript\n     * const myRow = this.treeGrid.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByKey(key: any): RowType {\n        const rec = this.filteredSortedData ? this.primaryKey ? this.filteredSortedData.find(r => r[this.primaryKey] === key) :\n            this.filteredSortedData.find(r => r === key) : undefined;\n        const index = this.dataView.findIndex(r => r.data && r.data === rec);\n        if (index < 0 || index >= this.filteredSortedData.length) {\n            return undefined;\n        }\n        return new IgxTreeGridRow(this as any, index, rec);\n    }\n\n    /**\n     * Returns the collection of all RowType for current page.\n     *\n     * @hidden @internal\n     */\n    public allRows(): RowType[] {\n        return this.dataView.map((rec, index) => this.createRow(index));\n    }\n\n    /**\n     * Returns the collection of `IgxTreeGridRow`s for current page.\n     *\n     * @hidden @internal\n     */\n    public dataRows(): RowType[] {\n        return this.allRows().filter(row => row instanceof IgxTreeGridRow);\n    }\n\n    /**\n     * Returns an array of the selected `IgxGridCell`s.\n     *\n     * @example\n     * ```typescript\n     * const selectedCells = this.grid.selectedCells;\n     * ```\n     */\n    public get selectedCells(): CellType[] {\n        return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n            .reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @example\n     * ```typescript\n     * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n     * ```\n     * @param rowIndex\n     * @param columnField\n     */\n    public getCellByColumn(rowIndex: number, columnField: string): CellType {\n        const row = this.getRowByIndex(rowIndex);\n        const column = this.columns.find((col) => col.field === columnField);\n        if (row && row instanceof IgxTreeGridRow && column) {\n            return new IgxGridCell(this as any, rowIndex, column);\n        }\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @remarks\n     * Requires that the primaryKey property is set.\n     * @example\n     * ```typescript\n     * grid.getCellByKey(1, 'index');\n     * ```\n     * @param rowSelector match any rowID\n     * @param columnField\n     */\n    public getCellByKey(rowSelector: any, columnField: string): CellType {\n        const row = this.getRowByKey(rowSelector);\n        const column = this.columns.find((col) => col.field === columnField);\n        if (row && column) {\n            return new IgxGridCell(this as any, row.index, column);\n        }\n    }\n\n    public override pinRow(rowID: any, index?: number): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.pinRow(rowID, index, row);\n    }\n\n    public override unpinRow(rowID: any): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.unpinRow(rowID, row);\n    }\n\n    /** @hidden */\n    public generateRowPath(rowId: any): any[] {\n        const path: any[] = [];\n        let record = this.records.get(rowId);\n\n        while (record.parent) {\n            path.push(record.parent.key);\n            record = record.parent;\n        }\n\n        return path.reverse();\n    }\n\n    /** @hidden */\n    public isTreeRow(record: any): boolean {\n        return record.key !== undefined && record.data;\n    }\n\n    /** @hidden */\n    public override getUnpinnedIndexById(id) {\n        return this.unpinnedRecords.findIndex(x => x.data[this.primaryKey] === id);\n    }\n\n    /**\n     * @hidden\n     */\n    public createRow(index: number, data?: any): RowType {\n        let row: RowType;\n        const dataIndex = this._getDataViewIndex(index);\n        const rec: any = data ?? this.dataView[dataIndex];\n\n        if (this.isSummaryRow(rec)) {\n            row = new IgxSummaryRow(this as any, index, rec.summaries);\n        }\n\n        if (!row && rec) {\n            const isTreeRow = this.isTreeRow(rec);\n            const dataRec = isTreeRow ? rec.data : rec;\n            const treeRow = isTreeRow ? rec : undefined;\n            row = new IgxTreeGridRow(this as any, index, dataRec, treeRow);\n        }\n\n        return row;\n    }\n\n    protected override generateDataFields(data: any[]): string[] {\n        return super.generateDataFields(data).filter(field => field !== this.childDataKey);\n    }\n\n    protected override transactionStatusUpdate(event: StateUpdateEvent) {\n        let actions = [];\n        if (event.origin === TransactionEventOrigin.REDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                this.handleCascadeSelection(event);\n            }\n        } else if (event.origin === TransactionEventOrigin.UNDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                if (event.actions[0].transaction.type === 'add') {\n                    const rec = this.gridAPI.get_rec_by_id(event.actions[0].transaction.id);\n                    this.handleCascadeSelection(event, rec);\n                } else {\n                    this.handleCascadeSelection(event);\n                }\n            }\n        }\n        if (actions.length) {\n            for (const action of actions) {\n                this.deselectChildren(action.transaction.id);\n            }\n        }\n        super.transactionStatusUpdate(event);\n    }\n\n    protected findRecordIndexInView(rec) {\n        return this.dataView.findIndex(x => x.data[this.primaryKey] === rec[this.primaryKey]);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getDataBasedBodyHeight(): number {\n        return !this.flatData || (this.flatData.length < this._defaultTargetRecordNumber) ?\n            0 : this.defaultTargetBodyHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected override scrollTo(row: any | number, column: any | number): void {\n        let delayScrolling = false;\n        let record: ITreeGridRecord;\n\n        if (typeof (row) !== 'number') {\n            const rowData = row;\n            const rowID = this.gridAPI.get_row_id(rowData);\n            record = this.processedRecords.get(rowID);\n            this.gridAPI.expand_path_to_record(record);\n\n            if (this.paginator) {\n                const rowIndex = this.processedExpandedFlatData.indexOf(rowData);\n                const page = Math.floor(rowIndex / this.perPage);\n\n                if (this.page !== page) {\n                    delayScrolling = true;\n                    this.page = page;\n                }\n            }\n        }\n\n        if (delayScrolling) {\n            this.verticalScrollContainer.dataChanged.pipe(first()).subscribe(() => {\n                this.scrollDirective(this.verticalScrollContainer,\n                    typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n            });\n        } else {\n            this.scrollDirective(this.verticalScrollContainer,\n                typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n        }\n\n        this.scrollToHorizontally(column);\n    }\n\n    protected override writeToData(rowIndex: number, value: any) {\n        mergeObjects(this.flatData[rowIndex], value);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n        if (this.hasColumnLayouts) {\n            // invalid configuration - tree grid should not allow column layouts\n            // remove column layouts\n            const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n            this.updateColumns(nonColumnLayoutColumns);\n        }\n        super.initColumns(collection, cb);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getGroupAreaHeight(): number {\n        return this.treeGroupArea ? this.getComputedHeight(this.treeGroupArea.nativeElement) : 0;\n    }\n\n    /** {@link triggerPipes} will re-create pinnedData on CRUD operations */\n    protected trackPinnedRowData(record: ITreeGridRecord) {\n        // TODO FIX: pipeline data doesn't match end interface (¬_¬ )\n        // return record.key || (record as any).rowID;\n        return record;\n    }\n\n    /**\n     * @description A recursive way to deselect all selected children of a given record\n     * @param recordID ID of the record whose children to deselect\n     * @hidden\n     * @internal\n     */\n    private deselectChildren(recordID): void {\n        const selectedChildren = [];\n        // G.E. Apr 28, 2021 #9465 Records which are not in view can also be selected so we need to\n        // deselect them as well, hence using 'records' map instead of getRowByKey() method which will\n        // return only row components (i.e. records in view).\n        const rowToDeselect = this.records.get(recordID);\n        this.selectionService.deselectRowsWithNoEvent([recordID]);\n        this.gridAPI.get_selected_children(rowToDeselect, selectedChildren);\n        if (selectedChildren.length > 0) {\n            selectedChildren.forEach(x => this.deselectChildren(x));\n        }\n    }\n\n    private addChildRows(children: any[], parentID: any) {\n        if (this.primaryKey && this.foreignKey) {\n            for (const child of children) {\n                child[this.foreignKey] = parentID;\n            }\n            this.data.push(...children);\n        } else if (this.childDataKey) {\n            let parent = this.records.get(parentID);\n            let parentData = parent.data;\n\n            if (this.transactions.enabled && this.transactions.getAggregatedChanges(true).length) {\n                const path = [];\n                while (parent) {\n                    path.push(parent.key);\n                    parent = parent.parent;\n                }\n\n                let collection = this.data;\n                let record: any;\n                for (let i = path.length - 1; i >= 0; i--) {\n                    const pid = path[i];\n                    record = collection.find(r => r[this.primaryKey] === pid);\n\n                    if (!record) {\n                        break;\n                    }\n                    collection = record[this.childDataKey];\n                }\n                if (record) {\n                    parentData = record;\n                }\n            }\n\n            parentData[this.childDataKey] = children;\n        }\n        this.selectionService.clearHeaderCBState();\n        this.pipeTrigger++;\n        if (this.rowSelection === GridSelectionMode.multipleCascade) {\n            // Force pipe triggering for building the data structure\n            this.cdr.detectChanges();\n            if (this.selectionService.isRowSelected(parentID)) {\n                this.selectionService.rowSelection.delete(parentID);\n                this.selectionService.selectRowsWithNoEvent([parentID]);\n            }\n        }\n    }\n\n    private loadChildrenOnRowExpansion(args: IRowToggleEventArgs) {\n        if (this.loadChildrenOnDemand) {\n            const parentID = args.rowID;\n\n            if (args.expanded && !this._expansionStates.has(parentID)) {\n                this.loadingRows.add(parentID);\n\n                this.loadChildrenOnDemand(parentID, children => {\n                    this.loadingRows.delete(parentID);\n                    this.addChildRows(children, parentID);\n                    this.notifyChanges();\n                });\n            }\n        }\n    }\n\n    private handleCascadeSelection(event: IRowDataEventArgs | StateUpdateEvent, rec: ITreeGridRecord = null) {\n        // Wait for the change detection to update records through the pipes\n        requestAnimationFrame(() => {\n            if (rec === null) {\n                rec = this.gridAPI.get_rec_by_id((event as StateUpdateEvent).actions[0].transaction.id);\n            }\n            if (rec && rec.parent) {\n                this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n                    new Set([rec.parent]), rec.parent.key\n                );\n                this.notifyChanges();\n            }\n        });\n    }\n}\n","<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n<ng-content select=\"igx-tree-grid-group-by-area,igc-tree-grid-group-by-area\"></ng-content>\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n    [grid]=\"this\"\n    [hasMRL]=\"hasColumnLayouts\"\n    [activeDescendant]=\"activeDescendant\"\n    [width]=\"calcWidth\"\n    [pinnedColumnCollection]=\"pinnedColumns\"\n    [unpinnedColumnCollection]=\"unpinnedColumns\"\n    (keydown.meta.c)=\"copyHandler($event)\"\n    (keydown.control.c)=\"copyHandler($event)\"\n    (copy)=\"copyHandler($event)\"\n    (keydown)=\"navigation.headerNavigation($event)\"\n    (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n    <div class=\"igx-grid__tbody-content\"  tabindex=\"0\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\"\n    (dragStop)=\"selectionService.dragMode = $event\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n        (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n        [style.height.px]='totalHeight' [style.width.px]='calcWidth' #tbody (scroll)='preventContainerScroll($event)'>\n        @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n            <span\n                [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n                class=\"igx-grid__scroll-on-drag-left\"></span>\n        }\n        @if (moving && columnInDrag && pinnedColumns.length > 0) {\n            <span\n                [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n                class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedWidth\"></span>\n        }\n        <ng-template #pinnedRecordsTemplate>\n            @if (data\n                | treeGridTransaction:pipeTrigger\n                | visibleColumns:hasVisibleColumns\n                | treeGridNormalizeRecord:pipeTrigger\n                | treeGridAddRow:true:pipeTrigger\n                | gridRowPinning:id:true:pipeTrigger\n                | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true\n                | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger:true; as pinnedData\n            ) {\n                @if (pinnedData.length > 0) {\n                    <div #pinContainer\n                        [ngClass]=\"{\n                            'igx-grid__tr--pinned-bottom':  !isRowPinningToTop,\n                            'igx-grid__tr--pinned-top': isRowPinningToTop\n                        }\"\n                        class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n                        @for (rowData of pinnedData; track trackPinnedRowData(rowData); let rowIndex = $index) {\n                            <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n                            </ng-container>\n                        }\n                    </div>\n                }\n            }\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n        <ng-template igxGridFor let-rowData [igxGridForOf]=\"data\n        | treeGridTransaction:pipeTrigger\n        | visibleColumns:hasVisibleColumns\n        | treeGridHierarchizing:primaryKey:foreignKey:childDataKey:pipeTrigger\n        | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger\n        | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger\n        | treeGridFlattening:expansionDepth:expansionStates:pipeTrigger\n        | treeGridPaging:!!paginator:page:perPage:pipeTrigger\n        | treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n        | treeGridAddRow:false:pipeTrigger\n        | gridRowPinning:id:false:pipeTrigger\"\n            let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]='verticalScroll'\n            [igxForContainerSize]='calcHeight' [igxForItemSize]=\"renderedRowHeight\" #verticalScrollContainer\n            (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n            <ng-template [igxTemplateOutlet]='isSummaryRow(rowData) ? summary_template : record_template'\n                [igxTemplateOutletContext]='getContext(rowData, rowIndex, false)'\n                (cachedViewLoaded)='cachedViewLoaded($event)'>\n            </ng-template>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n        <ng-template #record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData>\n            <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [disabled]=\"disabledRow\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n            </igx-tree-grid-row>\n        </ng-template>\n        <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData>\n            <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n            </igx-tree-grid-row>\n        </ng-template>\n        <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n            <igx-grid-summary-row [gridID]=\"id\" [summaries]=\"rowData.summaries\"\n                [firstCellIndentation]=\"rowData.cellIndentation\" [index]=\"rowIndex\"\n                class=\"igx-grid__summaries--body\" role=\"row\" #summaryRow>\n            </igx-grid-summary-row>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n        <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n        <igc-trial-watermark></igc-trial-watermark>\n    </div>\n    <div igxToggle #loadingOverlay>\n        @if (shouldOverlayLoading) {\n            <igx-circular-bar [indeterminate]=\"true\">\n            </igx-circular-bar>\n        }\n    </div>\n    @if (moving && columnInDrag) {\n        <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n            id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n    }\n    <div [hidden]='!hasVerticalScroll()' class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\"  (pointerdown)=\"$event.preventDefault()\"\n        [style.height.px]='calcHeight'>\n        <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=' isRowPinningToTop ? pinnedRowHeight : 0'></div>\n        <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]='calcHeight'>\n            <ng-template igxGridFor [igxGridForOf]='[]' #verticalScrollHolder></ng-template>\n        </div>\n        <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]='!isRowPinningToTop ? pinnedRowHeight : 0'></div>\n    </div>\n    <div class=\"igx-grid__addrow-snackbar\">\n        <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]='snackbarDisplayTime'>{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n    </div>\n\n    <div igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summaryRowHeight' #tfoot>\n    <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\"\n        (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n        @if (hasSummarizedColumns && rootSummariesEnabled) {\n            <igx-grid-summary-row [style.width.px]='calcWidth' [style.height.px]='summaryRowHeight'\n                [gridID]=\"id\" role=\"row\"\n                [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n                class=\"igx-grid__summaries\" #summaryRow>\n            </igx-grid-summary-row>\n        }\n        <div class=\"igx-grid__tfoot-thumb\" [hidden]='!hasVerticalScroll()' [style.height.px]='summaryRowHeight'\n            [style.width.px]=\"scrollSize\"></div>\n    </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n    <div class=\"igx-grid__scroll-start\" [style.width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth' [style.min-width.px]='isPinningToStart ? pinnedWidth : headerFeaturesWidth'></div>\n    <div class=\"igx-grid__scroll-main\" [style.width.px]='unpinnedWidth'>\n        <ng-template igxGridFor [igxGridForOf]='[]' #scrollContainer>\n        </ng-template>\n    </div>\n    <div class=\"igx-grid__scroll-end\" [style.width.px]='pinnedWidth' [style.min-width.px]='pinnedWidth' [hidden]=\"pinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n    <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n    <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyFilteredGridMessage}}</span>\n        @if (showAddButton) {\n            <span>\n                <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n            </span>\n        }\n    </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyGridMessage}}</span>\n        @if (showAddButton) {\n            <span>\n                <ng-container *ngTemplateOutlet='addRowEmptyTemplate || defaultAddRowEmptyTemplate'></ng-container>\n            </span>\n        }\n    </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n    <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n        {{resourceStrings.igx_grid_add_row_label}}\n    </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n    <div class=\"igx-grid__loading\">\n        <igx-circular-bar [indeterminate]=\"true\">\n        </igx-circular-bar>\n    </div>\n</ng-template>\n\n@if (rowEditable) {\n    <div igxToggle #rowEditingOverlay>\n        <div [className]=\"bannerClass\">\n            <ng-container\n                *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultRowEditText>\n    {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n    <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n    <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n    <div class=\"igx-banner__message\">\n        <span class=\"igx-banner__text\">\n            <ng-container\n                *ngTemplateOutlet=\"this.crudService.row?.getClassName() === 'IgxAddRow' ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n                context: { $implicit: this.crudService.row?.getClassName() !== 'IgxAddRow' ? rowChangesCount : null }\">\n            </ng-container>\n        </span>\n    </div>\n    <div class=\"igx-banner__actions\">\n        <div class=\"igx-banner__row\">\n            <ng-container\n                *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n    <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n    <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n    <div #sink style=\"display: none;\">\n        <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n        <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"></ng-content>\n    </div>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { formatDate } from '../../core/utils';\nimport { GridColumnDataType } from '../../data-operations/data-util';\nimport { IGroupingExpression } from '../../data-operations/grouping-expression.interface';\nimport { GridType } from '../common/grid.interface';\nimport { IgxSorting } from '../common/strategy';\n\nconst HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';\n\n/**\n * @hidden\n * @internal\n */\nclass GroupByRecord {\n    public key: string;\n    public value: any;\n    public groups: GroupByRecord[];\n    public records: any[];\n}\n\nexport class ITreeGridAggregation {\n    public field: string;\n    public aggregate: (parent: any, children: any[]) => any;\n}\n\nexport class IgxGroupedTreeGridSorting extends IgxSorting {\n    private static _instance: IgxGroupedTreeGridSorting = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new IgxGroupedTreeGridSorting());\n    }\n\n    protected override getFieldValue(obj: any, key: string, isDate = false, isTime = false): any {\n        const data = obj.data[HIDDEN_FIELD_NAME] ?\n            obj.data.hasOwnProperty(key) ?\n                obj.data :\n                obj.data[HIDDEN_FIELD_NAME] :\n            obj.data;\n\n        return super.getFieldValue(data, key, isDate, isTime);\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridGrouping',\n    standalone: true\n})\nexport class IgxTreeGridGroupingPipe implements PipeTransform {\n    private grid: GridType;\n\n    public transform(collection: any[],\n                     groupingExpressions: IGroupingExpression[],\n                     groupKey: string,\n                     childDataKey: string,\n                     grid: GridType,\n                     aggregations?: ITreeGridAggregation[]\n                    ): any[] {\n        if (groupingExpressions.length === 0) {\n            return collection;\n        }\n\n        if (groupKey?.toLowerCase() === childDataKey?.toLowerCase()) {\n            throw new Error('Group key and child data key cannot be the same.');\n        }\n\n        this.grid = grid;\n\n        const result = [];\n        const groupedRecords = this.groupByMultiple(collection, groupingExpressions);\n        this.flattenGrouping(groupedRecords, groupKey,\n            childDataKey, result, aggregations);\n\n        return result;\n    }\n\n    private flattenGrouping(groupRecords: GroupByRecord[],\n                            groupKey: string,\n                            childDataKey: string,\n                            data: any[],\n                            aggregations: ITreeGridAggregation[] = []) {\n        for (const groupRecord of groupRecords) {\n            const parent = {};\n            const children = groupRecord.records;\n\n            parent[childDataKey] = [];\n\n            for (const aggregation of aggregations) {\n                parent[aggregation.field] = aggregation.aggregate(parent, children);\n            }\n\n            parent[groupKey] = groupRecord.value + ` (${groupRecord.records.length})`;\n            parent[HIDDEN_FIELD_NAME] = { [groupRecord.key]: groupRecord.value };\n            data.push(parent);\n\n            if (groupRecord.groups) {\n                this.flattenGrouping(groupRecord.groups, groupKey, childDataKey,\n                    parent[childDataKey], aggregations);\n            } else {\n                parent[childDataKey] = children;\n            }\n        }\n    }\n\n    private groupByMultiple(array: any[], groupingExpressions: IGroupingExpression[], index = 0): GroupByRecord[] {\n        const res = this.groupBy(array, groupingExpressions[index]);\n\n        if (index + 1 < groupingExpressions.length) {\n           for (const groupByRecord of res) {\n                groupByRecord.groups = this.groupByMultiple(groupByRecord.records, groupingExpressions, index + 1);\n            }\n        }\n\n        return res;\n    }\n\n    private groupBy(array: any[], groupingExpression: IGroupingExpression): GroupByRecord[] {\n        const key = groupingExpression.fieldName;\n        const column = this.grid?.getColumnByName(key);\n        const isDateTime = column?.dataType === GridColumnDataType.Date ||\n            column?.dataType === GridColumnDataType.DateTime ||\n            column?.dataType === GridColumnDataType.Time;\n        const map: Map<any, GroupByRecord> = new Map<any, GroupByRecord>();\n        for (const record of array) {\n            const value = isDateTime\n                ? formatDate(record[key], column.pipeArgs.format, this.grid.locale)\n                : record[key];\n\n            let valueCase = value;\n            let groupByRecord: GroupByRecord;\n\n            if (groupingExpression.ignoreCase) {\n                valueCase = value?.toString().toLowerCase();\n            }\n            if (map.has(valueCase)) {\n                groupByRecord = map.get(valueCase);\n            } else {\n                groupByRecord = new GroupByRecord();\n                groupByRecord.key = key;\n                groupByRecord.value = value;\n                groupByRecord.records = [];\n                map.set(valueCase, groupByRecord);\n            }\n\n            groupByRecord.records.push(record);\n        }\n\n        return Array.from(map.values());\n    }\n}\n","import { IgxTreeGridComponent } from './tree-grid.component';\nimport { IgxTreeGridGroupByAreaComponent } from '../grouping/tree-grid-group-by-area.component';\nimport { IgxTreeGridGroupingPipe } from './tree-grid.grouping.pipe';\n\nexport * from './tree-grid.component';\nexport * from './tree-grid.interfaces';\nexport * from './tree-grid.filtering.strategy';\nexport * from './tree-grid.grouping.pipe';\nexport * from '../grouping/tree-grid-group-by-area.component';\nexport * from './tree-grid.grouping.pipe';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n    NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\n \nimport {\n    IgxRowDirective,\n    IgxRowEditTextDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTabStopDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxRowExpandedIndicatorDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective,\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n} from \"../public_api\";\nimport {\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n} from '../../paginator/public_api';\n\n/* NOTE: Tree grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TREE_GRID_DIRECTIVES = [\n    IgxTreeGridComponent,\n    IgxTreeGridGroupByAreaComponent,\n    IgxTreeGridGroupingPipe,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTextDirective,\n    IgxRowEditTabStopDirective,\n    // IGX_GRID_COMMON_DIRECTIVES:\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective,\n    // IGX_PAGINATOR_DIRECTIVES:\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective,\n    // IGX_PAGINATOR_DIRECTIVES:\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n] as const;\n","import { IgxRowIslandComponent } from './row-island.component';\nimport { Subject } from 'rxjs';\nimport { GridType, IPathSegment } from '../common/grid.interface';\nimport { Injectable } from '@angular/core';\nimport { GridBaseAPIService } from '../api.service';\n\n@Injectable()\nexport class IgxHierarchicalGridAPIService extends GridBaseAPIService<GridType> {\n    protected childRowIslands: Map<string, IgxRowIslandComponent> = new Map<string, IgxRowIslandComponent>();\n    protected childGrids: Map<string, Map<any, GridType>> =\n        new Map<string, Map<any, GridType>>();\n\n    public registerChildRowIsland(rowIsland: IgxRowIslandComponent) {\n        this.childRowIslands.set(rowIsland.key, rowIsland);\n        this.destroyMap.set(rowIsland.key, new Subject<boolean>());\n    }\n\n    public unsetChildRowIsland(rowIsland: IgxRowIslandComponent) {\n        this.childGrids.delete(rowIsland.key);\n        this.childRowIslands.delete(rowIsland.key);\n        this.destroyMap.delete(rowIsland.key);\n    }\n\n    public getChildRowIsland(key: string) {\n        return this.childRowIslands.get(key);\n    }\n\n    public getChildGrid(path: Array<IPathSegment>) {\n        const currPath = path;\n        let grid;\n        const pathElem = currPath.shift();\n        const childrenForLayout = this.childGrids.get(pathElem.rowIslandKey);\n        if (childrenForLayout) {\n            const childGrid = childrenForLayout.get(pathElem.rowKey);\n            if (currPath.length === 0) {\n                grid = childGrid;\n            } else {\n                grid = childGrid.gridAPI.getChildGrid(currPath);\n            }\n        }\n        return grid;\n    }\n\n    public getChildGrids(inDepth?: boolean) {\n        let allChildren: GridType [] = [];\n        this.childGrids.forEach((layoutMap) => {\n            layoutMap.forEach((grid) => {\n                allChildren.push(grid);\n                if (inDepth) {\n                    const children = grid.gridAPI.getChildGrids(inDepth);\n                    allChildren = allChildren.concat(children);\n                }\n            });\n        });\n\n        return allChildren;\n    }\n\n    public getParentRowId(childGrid: GridType) {\n        let rowID;\n        this.childGrids.forEach((layoutMap) => {\n            layoutMap.forEach((grid, key) => {\n                if (grid === childGrid) {\n                    rowID = key;\n                    return;\n                }\n            });\n        });\n        return rowID;\n    }\n\n    public registerChildGrid(parentRowID: any, rowIslandKey: string, grid: GridType) {\n        let childrenForLayout = this.childGrids.get(rowIslandKey);\n        if (!childrenForLayout) {\n            this.childGrids.set(rowIslandKey, new Map<any, GridType>());\n            childrenForLayout = this.childGrids.get(rowIslandKey);\n        }\n        childrenForLayout.set(parentRowID, grid);\n    }\n\n    public getChildGridsForRowIsland(rowIslandKey: string): GridType[] {\n        const childrenForLayout = this.childGrids.get(rowIslandKey);\n        const children = [];\n        if (childrenForLayout) {\n            childrenForLayout.forEach((child) => {\n                children.push(child);\n            });\n        }\n        return children;\n    }\n\n    public getChildGridByID(rowIslandKey, rowID) {\n        const childrenForLayout = this.childGrids.get(rowIslandKey);\n        return childrenForLayout.get(rowID);\n    }\n\n    public override get_row_expansion_state(record: any): boolean {\n        let inState;\n        if (record.childGridsData !== undefined) {\n            const ri = record.key;\n            const states = this.grid.expansionStates;\n            const expanded = states.get(ri);\n            if (expanded !== undefined) {\n                return expanded;\n            } else {\n                return this.grid.getDefaultExpandState(record);\n            }\n        } else {\n            inState = !!super.get_row_expansion_state(record);\n        }\n        return inState && (this.grid as any).childLayoutList.length !== 0;\n    }\n\n    public override allow_expansion_state_change(rowID, expanded): boolean {\n        const rec = this.get_rec_by_id(rowID);\n        const grid = (this.grid as any);\n        if (grid.hasChildrenKey && !rec[grid.hasChildrenKey]) {\n            return false;\n        }\n        return !!rec && this.grid.expansionStates.get(rowID) !== expanded;\n    }\n\n    public override get_rec_by_id(rowID): any {\n        const data = this.get_all_data(false);\n        const index = this.get_row_index_in_data(rowID, data);\n        return data[index];\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { NAVIGATION_KEYS, SUPPORTED_KEYS } from '../../core/utils';\nimport { GridType, IPathSegment, RowType } from '../common/grid.interface';\nimport { IActiveNode, IgxGridNavigationService } from '../grid-navigation.service';\n\n@Injectable()\nexport class IgxHierarchicalGridNavigationService extends IgxGridNavigationService {\n    protected _pendingNavigation = false;\n\n\n    public override dispatchEvent(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        const cellOrRowInEdit = this.grid.crudService.cell || this.grid.crudService.row;\n        if (!this.activeNode || !(SUPPORTED_KEYS.has(key) || (key === 'tab' && cellOrRowInEdit))) {\n            return;\n        }\n\n        const targetGrid = this.getClosestElemByTag(event.target, 'igx-hierarchical-grid')\n            || this.getClosestElemByTag(event.target, 'igc-hierarchical-grid');\n        if (targetGrid !== this.grid.nativeElement) {\n            return;\n        }\n\n        if (this._pendingNavigation && NAVIGATION_KEYS.has(key)) {\n            // In case focus needs to be moved from one grid to another, however there is a pending scroll operation\n            // which is an async operation, any additional navigation keys should be ignored\n            // untill operation complete.\n            event.preventDefault();\n            return;\n        }\n        super.dispatchEvent(event);\n    }\n\n    public override navigateInBody(rowIndex, visibleColIndex, cb: (arg: any) => void = null): void {\n        const rec = this.grid.dataView[rowIndex];\n        if (rec && this.grid.isChildGridRecord(rec)) {\n             // target is child grid\n            const virtState = this.grid.verticalScrollContainer.state;\n             const inView = rowIndex >= virtState.startIndex && rowIndex <= virtState.startIndex + virtState.chunkSize;\n             const isNext =  this.activeNode.row < rowIndex;\n             const targetLayoutIndex = isNext ? null : this.grid.childLayoutKeys.length - 1;\n             if (inView) {\n                this._moveToChild(rowIndex, visibleColIndex, isNext, targetLayoutIndex, cb);\n            } else {\n                let scrollAmount = this.grid.verticalScrollContainer.getScrollForIndex(rowIndex, !isNext);\n                scrollAmount += isNext ? 1 : -1;\n                this.grid.verticalScrollContainer.getScroll().scrollTop = scrollAmount;\n                this._pendingNavigation = true;\n                this.grid.verticalScrollContainer.chunkLoad.pipe(first()).subscribe(() => {\n                    this._moveToChild(rowIndex, visibleColIndex, isNext, targetLayoutIndex, cb);\n                    this._pendingNavigation = false;\n                });\n            }\n            return;\n        }\n\n        const isLast = rowIndex === this.grid.dataView.length;\n        if ((rowIndex === -1 || isLast) &&\n            this.grid.parent !== null) {\n            // reached end of child grid\n            const nextSiblingIndex = this.nextSiblingIndex(isLast);\n            if (nextSiblingIndex !== null) {\n                this.grid.parent.navigation._moveToChild(this.grid.childRow.index, visibleColIndex, isLast, nextSiblingIndex, cb);\n            } else {\n                this._moveToParent(isLast, visibleColIndex, cb);\n            }\n            return;\n        }\n\n        if (this.grid.parent) {\n            const isNext = this.activeNode && typeof this.activeNode.row === 'number' ? rowIndex > this.activeNode.row : false;\n            const cbHandler = (args) => {\n                this._handleScrollInChild(rowIndex, isNext);\n                cb(args);\n            };\n            if (!this.activeNode) {\n                this.activeNode = { row: null, column: null };\n            }\n            super.navigateInBody(rowIndex, visibleColIndex, cbHandler);\n            return;\n        }\n\n        if (!this.activeNode) {\n            this.activeNode = { row: null, column: null };\n        }\n        super.navigateInBody(rowIndex, visibleColIndex, cb);\n    }\n\n    public override shouldPerformVerticalScroll(index, visibleColumnIndex = -1, isNext?) {\n        const targetRec = this.grid.dataView[index];\n        if (this.grid.isChildGridRecord(targetRec)) {\n            const scrollAmount = this.grid.verticalScrollContainer.getScrollForIndex(index, !isNext);\n            const currScroll = this.grid.verticalScrollContainer.getScroll().scrollTop;\n            const shouldScroll = !isNext ? scrollAmount > currScroll : currScroll < scrollAmount;\n            return shouldScroll;\n        } else {\n            return super.shouldPerformVerticalScroll(index, visibleColumnIndex);\n        }\n    }\n\n    public override focusTbody(event) {\n        if (!this.activeNode || this.activeNode.row === null) {\n            this.activeNode = {\n                row: 0,\n                column: 0\n            };\n\n            this.grid.navigateTo(0, 0, (obj) => {\n                this.grid.clearCellSelection();\n                obj.target.activate(event);\n            });\n\n        } else {\n            super.focusTbody(event);\n        }\n    }\n\n    protected nextSiblingIndex(isNext) {\n        const layoutKey = this.grid.childRow.layout.key;\n        const layoutIndex = this.grid.parent.childLayoutKeys.indexOf(layoutKey);\n        const nextIndex = isNext ? layoutIndex + 1 : layoutIndex - 1;\n        if (nextIndex <= this.grid.parent.childLayoutKeys.length - 1 && nextIndex > -1) {\n            return nextIndex;\n        } else {\n            return null;\n        }\n    }\n\n    /**\n     * Handles scrolling in child grid and ensures target child row is in main grid view port.\n     *\n     * @param rowIndex The row index which should be in view.\n     * @param isNext  Optional. Whether we are navigating to next. Used to determine scroll direction.\n     * @param cb  Optional.Callback function called when operation is complete.\n     */\n    protected _handleScrollInChild(rowIndex: number, isNext?: boolean, cb?: () => void) {\n        const shouldScroll = this.shouldPerformVerticalScroll(rowIndex, -1, isNext);\n        if (shouldScroll) {\n            this.grid.navigation.performVerticalScrollToCell(rowIndex, -1, () => {\n                this.positionInParent(rowIndex, isNext, cb);\n            });\n        } else {\n            this.positionInParent(rowIndex, isNext, cb);\n        }\n    }\n\n    /**\n     *\n     * @param rowIndex Row index that should come in view.\n     * @param isNext  Whether we are navigating to next. Used to determine scroll direction.\n     * @param cb  Optional.Callback function called when operation is complete.\n     */\n    protected positionInParent(rowIndex, isNext, cb?: () => void) {\n        const row = this.grid.gridAPI.get_row_by_index(rowIndex);\n        if (!row) {\n            if (cb) {\n                cb();\n            }\n            return;\n        }\n        const positionInfo = this.getPositionInfo(row, isNext);\n        if (!positionInfo.inView) {\n            // stop event from triggering multiple times before scrolling is complete.\n            this._pendingNavigation = true;\n            const scrollableGrid = isNext ? this.getNextScrollableDown(this.grid) : this.getNextScrollableUp(this.grid);\n            scrollableGrid.grid.verticalScrollContainer.recalcUpdateSizes();\n            scrollableGrid.grid.verticalScrollContainer.addScrollTop(positionInfo.offset);\n            scrollableGrid.grid.verticalScrollContainer.chunkLoad.pipe(first()).subscribe(() => {\n                this._pendingNavigation = false;\n                if (cb) {\n                    cb();\n                }\n            });\n        } else {\n            if (cb) {\n                cb();\n            }\n        }\n    }\n\n    /**\n     * Navigates to the specific child grid based on the array of paths leading to it\n     *\n     * @param pathToChildGrid Array of IPathSegments that describe the path to the child grid\n     * each segment is described by the rowKey of the parent row and the rowIslandKey.\n     */\n    public navigateToChildGrid(pathToChildGrid: IPathSegment[], cb?: () => void) {\n        if (pathToChildGrid.length == 0) {\n            if (cb) {\n                cb();\n            }\n            return;\n        }\n        const pathElem = pathToChildGrid.shift();\n        const rowKey = pathElem.rowKey;\n        const rowIndex = this.grid.gridAPI.get_row_index_in_data(rowKey);\n        if (rowIndex === -1) {\n            if (cb) {\n                cb();\n            }\n            return;\n        }\n        // scroll to row, since it can be out of view\n        this.performVerticalScrollToCell(rowIndex, -1, () => {\n            this.grid.cdr.detectChanges();\n            // next, expand row, if it is collapsed\n            const row = this.grid.getRowByIndex(rowIndex);\n            if (!row.expanded) {\n                row.expanded = true;\n                // update sizes after expand\n                this.grid.verticalScrollContainer.recalcUpdateSizes();\n                this.grid.cdr.detectChanges();\n            }\n\n            const childGrid =  this.grid.gridAPI.getChildGrid([pathElem]);\n            if (!childGrid) {\n                if (cb) {\n                    cb();\n                }\n                return;\n            }\n            const positionInfo = this.getElementPosition(childGrid.nativeElement, false);\n            this.grid.verticalScrollContainer.addScrollTop(positionInfo.offset);\n            this.grid.verticalScrollContainer.chunkLoad.pipe(first()).subscribe(() => {\n                childGrid.navigation.navigateToChildGrid(pathToChildGrid, cb);\n            });\n        });\n    }\n\n    /**\n     * Moves navigation to child grid.\n     *\n     * @param parentRowIndex The parent row index, at which the child grid is rendered.\n     * @param childLayoutIndex Optional. The index of the child row island to which the child grid belongs to. Uses first if not set.\n     */\n    protected _moveToChild(parentRowIndex: number, visibleColIndex: number, isNext: boolean, childLayoutIndex?: number,\n                            cb?: (arg: any) => void) {\n        const ri = typeof childLayoutIndex !== 'number' ?\n         this.grid.childLayoutList.first : this.grid.childLayoutList.toArray()[childLayoutIndex];\n        const rowId = this.grid.dataView[parentRowIndex].rowID;\n        const pathSegment: IPathSegment = {\n            rowID: rowId,\n            rowKey: rowId,\n            rowIslandKey: ri.key\n        };\n        const childGrid =  this.grid.gridAPI.getChildGrid([pathSegment]);\n        const targetIndex = isNext ? 0 : childGrid.dataView.length - 1;\n        const targetRec =  childGrid.dataView[targetIndex];\n        if (!targetRec) {\n            // if no target rec, then move on in next sibling or parent\n            childGrid.navigation.navigateInBody(targetIndex, visibleColIndex, cb);\n            return;\n        }\n        if (childGrid.isChildGridRecord(targetRec)) {\n            // if target is a child grid record should move into it.\n            this.grid.navigation.activeNode.row = null;\n            childGrid.navigation.activeNode = { row: targetIndex, column: this.activeNode.column};\n            childGrid.navigation._handleScrollInChild(targetIndex, isNext, () => {\n                const targetLayoutIndex = isNext ? 0 : childGrid.childLayoutList.toArray().length - 1;\n                childGrid.navigation._moveToChild(targetIndex, visibleColIndex, isNext, targetLayoutIndex, cb);\n            });\n            return;\n        }\n\n        const childGridNav =  childGrid.navigation;\n        this.clearActivation();\n        const lastVisibleIndex = childGridNav.lastColumnIndex;\n        const columnIndex = visibleColIndex <= lastVisibleIndex ? visibleColIndex : lastVisibleIndex;\n        childGridNav.activeNode = { row: targetIndex, column: columnIndex};\n        childGrid.tbody.nativeElement.focus({preventScroll: true});\n        this._pendingNavigation = false;\n        childGrid.navigation._handleScrollInChild(targetIndex, isNext, () => {\n            childGrid.navigateTo(targetIndex, columnIndex, cb);\n        });\n    }\n\n    /**\n     * Moves navigation back to parent grid.\n     *\n     * @param rowIndex\n     */\n    protected _moveToParent(isNext: boolean, columnIndex, cb?) {\n        const indexInParent = this.grid.childRow.index;\n        const hasNextTarget = this.hasNextTarget(this.grid.parent, indexInParent, isNext);\n        if (!hasNextTarget) {\n            return;\n        }\n        this.clearActivation();\n        const targetRowIndex =  isNext ? indexInParent + 1 : indexInParent - 1;\n        const lastVisibleIndex = this.grid.parent.navigation.lastColumnIndex;\n        const nextColumnIndex = columnIndex <= lastVisibleIndex ? columnIndex : lastVisibleIndex;\n        this._pendingNavigation = true;\n        const cbFunc = (args) => {\n            this._pendingNavigation = false;\n            cb(args);\n            args.target.grid.tbody.nativeElement.focus();\n        };\n        this.grid.parent.navigation.navigateInBody(targetRowIndex, nextColumnIndex, cbFunc);\n    }\n\n    /**\n     * Gets information on the row position relative to the root grid view port.\n     * Returns whether the row is in view and its offset.\n     *\n     * @param rowObj\n     * @param isNext\n     */\n    protected getPositionInfo(row: RowType, isNext: boolean) {\n        // XXX: Fix type\n        let rowElem = row.nativeElement;\n        if ((row as any).layout) {\n            const childLayoutKeys = this.grid.childLayoutKeys;\n            const riKey = isNext ? childLayoutKeys[0] : childLayoutKeys[childLayoutKeys.length - 1];\n            const pathSegment: IPathSegment = {\n                rowID: row.data.rowID, rowKey: row.data.rowID,\n                rowIslandKey: riKey\n            };\n            const childGrid =  this.grid.gridAPI.getChildGrid([pathSegment]);\n            rowElem = childGrid.tfoot.nativeElement;\n        }\n\n        return this.getElementPosition(rowElem, isNext);\n    }\n\n    protected getElementPosition(element: HTMLElement, isNext: boolean) {\n        // Special handling for scenarios where there is css transformations applied that affects scale.\n        // getBoundingClientRect().height returns size after transformations\n        // element.offsetHeight returns size without any transformations\n        // get the ratio to figure out if anything has applied transformations\n        const scaling = element.getBoundingClientRect().height / element.offsetHeight;\n\n        const gridBottom = this._getMinBottom(this.grid);\n        const diffBottom =\n        element.getBoundingClientRect().bottom - gridBottom;\n        const gridTop = this._getMaxTop(this.grid);\n        const diffTop = element.getBoundingClientRect().bottom -\n        element.getBoundingClientRect().height - gridTop;\n        // Adding Math.Round because Chrome has some inconsistencies when the page is zoomed\n        const isInView = isNext ? Math.round(diffBottom) <= 0 : Math.round(diffTop) >= 0;\n        const calcOffset =  isNext ? diffBottom : diffTop;\n\n        return { inView: isInView, offset: calcOffset / scaling};\n    }\n\n    /**\n     * Gets closest element by its tag name.\n     *\n     * @param sourceElem The element from which to start the search.\n     * @param targetTag The target element tag name, for which to search.\n     */\n    protected getClosestElemByTag(sourceElem, targetTag) {\n        let result = sourceElem;\n        while (result !== null && result.nodeType === 1) {\n            if (result.tagName.toLowerCase() === targetTag.toLowerCase()) {\n                return result;\n            }\n            result = result.parentNode;\n        }\n        return null;\n    }\n\n    private clearActivation() {\n        // clear if previous activation exists.\n        if (this.activeNode && Object.keys(this.activeNode).length) {\n            this.activeNode = Object.assign({} as IActiveNode);\n        }\n    }\n\n    private hasNextTarget(grid: GridType, index: number, isNext: boolean) {\n        const targetRowIndex =  isNext ? index + 1 : index - 1;\n        const hasTargetRecord = !!grid.dataView[targetRowIndex];\n        if (hasTargetRecord) {\n            return true;\n        } else {\n            let hasTargetRecordInParent = false;\n            if (grid.parent) {\n                const indexInParent = grid.childRow.index;\n                hasTargetRecordInParent = this.hasNextTarget(grid.parent, indexInParent, isNext);\n            }\n            return hasTargetRecordInParent;\n        }\n    }\n\n    /**\n     * Gets the max top view in the current grid hierarchy.\n     *\n     * @param grid\n     */\n    private _getMaxTop(grid) {\n        let currGrid = grid;\n        let top = currGrid.tbody.nativeElement.getBoundingClientRect().top;\n        while (currGrid.parent) {\n            currGrid = currGrid.parent;\n            const pinnedRowsHeight = currGrid.hasPinnedRecords && currGrid.isRowPinningToTop ? currGrid.pinnedRowHeight : 0;\n            top = Math.max(top, currGrid.tbody.nativeElement.getBoundingClientRect().top + pinnedRowsHeight);\n        }\n        return top;\n    }\n\n    /**\n     * Gets the min bottom view in the current grid hierarchy.\n     *\n     * @param grid\n     */\n    private _getMinBottom(grid) {\n        let currGrid = grid;\n        let bottom = currGrid.tbody.nativeElement.getBoundingClientRect().bottom;\n        while (currGrid.parent) {\n            currGrid = currGrid.parent;\n            const pinnedRowsHeight = currGrid.hasPinnedRecords && !currGrid.isRowPinningToTop ? currGrid.pinnedRowHeight : 0;\n            bottom = Math.min(bottom, currGrid.tbody.nativeElement.getBoundingClientRect().bottom - pinnedRowsHeight);\n        }\n        return bottom;\n    }\n\n    /**\n     * Finds the next grid that allows scrolling down.\n     *\n     * @param grid The grid from which to begin the search.\n     */\n    private getNextScrollableDown(grid) {\n        let currGrid = grid.parent;\n        if (!currGrid) {\n            return { grid, prev: null };\n        }\n        let scrollTop = currGrid.verticalScrollContainer.scrollPosition;\n        let scrollHeight = currGrid.verticalScrollContainer.getScroll().scrollHeight;\n        let nonScrollable = scrollHeight === 0 ||\n            Math.round(scrollTop + currGrid.verticalScrollContainer.igxForContainerSize) === scrollHeight;\n        let prev = grid;\n        while (nonScrollable && currGrid.parent !== null) {\n            prev = currGrid;\n            currGrid = currGrid.parent;\n            scrollTop = currGrid.verticalScrollContainer.scrollPosition;\n            scrollHeight = currGrid.verticalScrollContainer.getScroll().scrollHeight;\n            nonScrollable = scrollHeight === 0 ||\n                Math.round(scrollTop + currGrid.verticalScrollContainer.igxForContainerSize) === scrollHeight;\n        }\n        return { grid: currGrid, prev };\n    }\n\n    /**\n     * Finds the next grid that allows scrolling up.\n     *\n     * @param grid The grid from which to begin the search.\n     */\n    private getNextScrollableUp(grid) {\n        let currGrid = grid.parent;\n        if (!currGrid) {\n            return { grid, prev: null };\n        }\n        let nonScrollable = currGrid.verticalScrollContainer.scrollPosition === 0;\n        let prev = grid;\n        while (nonScrollable && currGrid.parent !== null) {\n            prev = currGrid;\n            currGrid = currGrid.parent;\n            nonScrollable = currGrid.verticalScrollContainer.scrollPosition === 0;\n        }\n        return { grid: currGrid, prev };\n    }\n}\n","import {\n    booleanAttribute,\n    ChangeDetectorRef,\n    createComponent,\n    Directive,\n    ElementRef,\n    EnvironmentInjector,\n    EventEmitter,\n    Inject,\n    Injector,\n    Input,\n    IterableDiffers,\n    LOCALE_ID,\n    NgZone,\n    Optional,\n    Output,\n    reflectComponentType,\n    ViewContainerRef\n} from '@angular/core';\nimport { IgxGridBaseDirective } from '../grid-base.directive';\nimport { IgxHierarchicalGridAPIService } from './hierarchical-grid-api.service';\nimport { IgxRowIslandComponent } from './row-island.component';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxSummaryOperand } from '../summaries/grid-summary';\nimport { DOCUMENT } from '@angular/common';\nimport { IgxHierarchicalGridNavigationService } from './hierarchical-grid-navigation.service';\nimport { IgxGridSummaryService } from '../summaries/grid-summary.service';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { GridType, IGX_GRID_SERVICE_BASE, IPathSegment } from '../common/grid.interface';\nimport { IgxColumnGroupComponent } from '../columns/column-group.component';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { IForOfState } from '../../directives/for-of/for_of.directive';\nimport { takeUntil } from 'rxjs/operators';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxFlatTransactionFactory } from '../../services/transaction/transaction-factory.service';\nimport { IgxTransactionService } from '../../services/transaction/igx-transaction';\nimport { IgxOverlayService } from '../../services/overlay/overlay';\nimport { State, Transaction, TransactionService } from '../../services/transaction/transaction';\nimport { IgxGridTransaction } from '../common/types';\nimport { IgxGridValidationService } from '../grid/grid-validation.service';\nimport { IgxTextHighlightService } from '../../directives/text-highlight/text-highlight.service';\n\nexport const hierarchicalTransactionServiceFactory = () => new IgxTransactionService();\n\nexport const IgxHierarchicalTransactionServiceFactory = {\n    provide: IgxGridTransaction,\n    useFactory: hierarchicalTransactionServiceFactory\n};\n\n/* blazorIndirectRender\n   blazorComponent\n   omitModule\n   wcSkipComponentSuffix */\n@Directive()\nexport abstract class IgxHierarchicalGridBaseDirective extends IgxGridBaseDirective implements GridType {\n    /**\n     * Gets/Sets the key indicating whether a row has children. If row has no children it does not render an expand indicator.\n     *\n     * @example\n     * ```html\n     * <igx-hierarchical-grid #grid [data]=\"localData\" [hasChildrenKey]=\"'hasEmployees'\">\n     * </igx-hierarchical-grid>\n     * ```\n     */\n    @Input()\n    public hasChildrenKey: string;\n\n    /**\n     * Gets/Sets whether the expand/collapse all button in the header should be rendered.\n     *\n     * @remarks\n     * The default value is false.\n     * @example\n     * ```html\n     * <igx-hierarchical-grid #grid [data]=\"localData\" [showExpandAll]=\"true\">\n     * </igx-hierarchical-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showExpandAll = false;\n\n    /**\n     * Emitted when a new chunk of data is loaded from virtualization.\n     *\n     * @example\n     * ```typescript\n     *  <igx-hierarchical-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [autoGenerate]=\"true\" (dataPreLoad)=\"handleEvent()\">\n     *  </igx-hierarchical-grid>\n     * ```\n     */\n    @Output()\n    public dataPreLoad = new EventEmitter<IForOfState>();\n\n    /** @hidden @internal */\n    public override get type(): GridType[\"type\"] {\n        return 'hierarchical';\n    }\n\n    /**\n     * @hidden\n     */\n    public override get maxLevelHeaderDepth() {\n        if (this._maxLevelHeaderDepth === null) {\n            this._maxLevelHeaderDepth = this.columns.reduce((acc, col) => Math.max(acc, col.level), 0);\n        }\n        return this._maxLevelHeaderDepth;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets the outlet used to attach the grid's overlays to.\n     *\n     * @remarks\n     * If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.\n     */\n    public override get outlet() {\n        return this.rootGrid ? this.rootGrid.resolveOutlet() : this.resolveOutlet();\n    }\n\n    /* blazorSuppress */\n    /**\n     * Sets the outlet used to attach the grid's overlays to.\n     */\n    public override set outlet(val: any) {\n        this._userOutletDirective = val;\n    }\n\n    /** @hidden @internal */\n    public batchEditingChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    public override get batchEditing(): boolean {\n        return this._batchEditing;\n    }\n\n    public override set batchEditing(val: boolean) {\n        if (val !== this._batchEditing) {\n            delete this._transactions;\n            this.switchTransactionService(val);\n            this.subscribeToTransactions();\n            this.batchEditingChange.emit(val);\n            this._batchEditing = val;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public parentIsland: IgxRowIslandComponent;\n    public abstract rootGrid: GridType;\n\n    /* blazorSuppress */\n    public abstract expandChildren: boolean;\n\n    constructor(\n        validationService: IgxGridValidationService,\n        selectionService: IgxGridSelectionService,\n        colResizingService: IgxColumnResizingService,\n        @Inject(IGX_GRID_SERVICE_BASE) public override gridAPI: IgxHierarchicalGridAPIService,\n        transactionFactory: IgxFlatTransactionFactory,\n        elementRef: ElementRef<HTMLElement>,\n        zone: NgZone,\n        @Inject(DOCUMENT) document,\n        cdr: ChangeDetectorRef,\n        differs: IterableDiffers,\n        viewRef: ViewContainerRef,\n        injector: Injector,\n        envInjector: EnvironmentInjector,\n        public override navigation: IgxHierarchicalGridNavigationService,\n        filteringService: IgxFilteringService,\n        textHighlightService: IgxTextHighlightService,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n        summaryService: IgxGridSummaryService,\n        @Inject(LOCALE_ID) localeId: string,\n        platform: PlatformUtil,\n        @Optional() @Inject(IgxGridTransaction) _diTransactions?: TransactionService<Transaction, State>,\n    ) {\n        super(\n            validationService,\n            selectionService,\n            colResizingService,\n            gridAPI,\n            transactionFactory,\n            elementRef,\n            zone,\n            document,\n            cdr,\n            differs,\n            viewRef,\n            injector,\n            envInjector,\n            navigation,\n            filteringService,\n            textHighlightService,\n            overlayService,\n            summaryService,\n            localeId,\n            platform,\n            _diTransactions,\n        );\n    }\n\n    /**\n     * @hidden\n     */\n    public createColumnsList(cols: Array<any>) {\n        const columns = [];\n        const topLevelCols = cols.filter(c => c.level === 0);\n        topLevelCols.forEach((col) => {\n            col.grid = this;\n            const ref = this._createColumn(col);\n            ref.changeDetectorRef.detectChanges();\n            columns.push(ref.instance);\n        });\n        const result = flatten(columns);\n        this.updateColumns(result);\n        this.initPinning();\n\n        result.forEach(col => {\n            this.columnInit.emit(col);\n        });\n\n        const mirror = reflectComponentType(IgxColumnComponent);\n        const outputs = mirror.outputs.filter(o => o.propName !== 'columnChange');\n        outputs.forEach(output => {\n            this.columns.forEach(column => {\n                if (column[output.propName]) {\n                    column[output.propName].pipe(takeUntil(column.destroy$)).subscribe((args) => {\n                        const rowIslandColumn = this.parentIsland.columnList.find((col) => col.field\n                            ? col.field === column.field\n                            : col.header === column.header);\n                        rowIslandColumn[output.propName].emit({ args, owner: this });\n                    });\n                }\n            });\n        });\n    }\n\n    protected _createColumn(col) {\n        let ref;\n        if (col instanceof IgxColumnGroupComponent) {\n            ref = this._createColGroupComponent(col);\n        } else {\n            ref = this._createColComponent(col);\n        }\n        return ref;\n    }\n\n    protected _createColGroupComponent(col: IgxColumnGroupComponent) {\n        const ref = createComponent(IgxColumnGroupComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n        ref.changeDetectorRef.detectChanges();\n        const mirror = reflectComponentType(IgxColumnGroupComponent);\n        mirror.inputs.forEach((input) => {\n            const propName = input.propName;\n            ref.instance[propName] = col[propName];\n        });\n        if (col.children.length > 0) {\n            const newChildren = [];\n            col.children.forEach(child => {\n                const newCol = this._createColumn(child).instance;\n                newCol.parent = ref.instance;\n                newChildren.push(newCol);\n            });\n            ref.instance.children.reset(newChildren);\n            ref.instance.children.notifyOnChanges();\n        }\n        return ref;\n    }\n\n    protected _createColComponent(col) {\n        const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n        const mirror = reflectComponentType(IgxColumnComponent);\n        mirror.inputs.forEach((input) => {\n            const propName = input.propName;\n            if (!(col[propName] instanceof IgxSummaryOperand)) {\n                ref.instance[propName] = col[propName];\n            } else {\n                ref.instance[propName] = col[propName].constructor;\n            }\n        });\n        ref.instance.validators = col.validators;\n        return ref;\n    }\n\n    protected getGridsForIsland(rowIslandID: string) {\n        return this.gridAPI.getChildGridsForRowIsland(rowIslandID);\n    }\n\n    protected getChildGrid(path: Array<IPathSegment>) {\n        if (!path) {\n            return;\n        }\n        return this.gridAPI.getChildGrid(path);\n    }\n}\n\nconst flatten = (arr: any[]) => {\n    let result = [];\n\n    arr.forEach(el => {\n        result.push(el);\n        if (el.children) {\n            result = result.concat(flatten(el.children.toArray()));\n        }\n    });\n    return result;\n};\n","import { IgxHierarchicalGridComponent } from './hierarchical-grid.component';\nimport { IgxRowIslandComponent } from './row-island.component';\nimport { Subject } from 'rxjs';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class IgxRowIslandAPIService {\n    public rowIsland: IgxRowIslandComponent;\n    public change: Subject<any> = new Subject<any>();\n    protected state: Map<string, IgxRowIslandComponent> = new Map<string, IgxRowIslandComponent>();\n    protected destroyMap: Map<string, Subject<boolean>> = new Map<string, Subject<boolean>>();\n\n    protected childRowIslands: Map<string, IgxRowIslandComponent> = new Map<string, IgxRowIslandComponent>();\n    protected childGrids:  Map<any, IgxHierarchicalGridComponent> = new Map<any, IgxHierarchicalGridComponent>();\n\n    public register(rowIsland: IgxRowIslandComponent) {\n        this.state.set(rowIsland.id, rowIsland);\n        this.destroyMap.set(rowIsland.id, new Subject<boolean>());\n    }\n\n    public unsubscribe(rowIsland: IgxRowIslandComponent) {\n        this.state.delete(rowIsland.id);\n    }\n\n    public get(id: string): IgxRowIslandComponent {\n        return this.state.get(id);\n    }\n\n    public unset(id: string) {\n        this.state.delete(id);\n        this.destroyMap.delete(id);\n    }\n\n    public reset(oldId: string, newId: string) {\n        const destroy = this.destroyMap.get(oldId);\n        const rowIsland = this.get(oldId);\n\n        this.unset(oldId);\n\n        if (rowIsland) {\n            this.state.set(newId, rowIsland);\n        }\n\n        if (destroy) {\n            this.destroyMap.set(newId, destroy);\n        }\n    }\n\n    public registerChildRowIsland(rowIsland: IgxRowIslandComponent) {\n        this.childRowIslands.set(rowIsland.key, rowIsland);\n        this.destroyMap.set(rowIsland.key, new Subject<boolean>());\n    }\n\n    public unsetChildRowIsland(rowIsland: IgxRowIslandComponent) {\n        this.childRowIslands.delete(rowIsland.key);\n        this.destroyMap.delete(rowIsland.key);\n    }\n\n    public getChildRowIsland(rowIslandKey: string) {\n        return this.childRowIslands.get(rowIslandKey);\n    }\n\n    public registerChildGrid(parentRowID: any, grid: IgxHierarchicalGridComponent) {\n        this.childGrids.set(parentRowID, grid);\n    }\n\n    public getChildGrids(inDepth?: boolean) {\n        let allChildren = [];\n        this.childGrids.forEach((grid) => {\n            allChildren.push(grid);\n        });\n        if (inDepth) {\n            this.childRowIslands.forEach((layout) => {\n                allChildren = allChildren.concat(layout.rowIslandAPI.getChildGrids(inDepth));\n            });\n        }\n\n        return allChildren;\n    }\n\n    public getChildGridByID(rowID) {\n        return this.childGrids.get(rowID);\n    }\n}\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    EnvironmentInjector,\n    EventEmitter,\n    forwardRef,\n    Inject,\n    Injector,\n    Input,\n    IterableChangeRecord,\n    IterableDiffers,\n    LOCALE_ID,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewContainerRef\n} from '@angular/core';\nimport { IgxHierarchicalGridAPIService } from './hierarchical-grid-api.service';\nimport { DOCUMENT } from '@angular/common';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxGridSummaryService } from '../summaries/grid-summary.service';\nimport { IgxHierarchicalGridBaseDirective } from './hierarchical-grid-base.directive';\nimport { IgxHierarchicalGridNavigationService } from './hierarchical-grid-navigation.service';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { IgxOverlayService } from '../../services/public_api';\nimport { first, filter, takeUntil, pluck } from 'rxjs/operators';\nimport { IgxColumnComponent } from '../columns/column.component';\nimport { ISearchInfo } from '../common/events';\nimport { IgxRowIslandAPIService } from './row-island-api.service';\nimport { PlatformUtil } from '../../core/utils';\nimport { IForOfState } from '../../directives/for-of/for_of.directive';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { GridType, IGX_GRID_SERVICE_BASE, IgxGridPaginatorTemplateContext } from '../common/grid.interface';\nimport { IgxGridToolbarDirective, IgxGridToolbarTemplateContext } from '../toolbar/common';\nimport { IgxActionStripToken } from '../../action-strip/token';\nimport { IgxPaginatorDirective } from '../../paginator/paginator-interfaces';\nimport { IgxFlatTransactionFactory } from '../../services/transaction/transaction-factory.service';\nimport { IGridCreatedEventArgs } from './events';\nimport { IgxGridValidationService } from '../grid/grid-validation.service';\nimport { IgxTextHighlightService } from '../../directives/text-highlight/text-highlight.service';\nimport { IgxPaginatorComponent } from '../../paginator/paginator.component';\n\n/* blazorCopyInheritedMembers */\n/* blazorElement */\n/* wcElementTag: igc-row-island */\n/* blazorIndirectRender */\n/* jsonAPIManageCollectionInMarkup */\n/* jsonAPIManageItemInMarkup */\n/* mustUseNGParentAnchor */\n/* additionalIdentifier: ChildDataKey */\n/* contentParent: RowIsland */\n/* contentParent: HierarchicalGrid */\n/**\n * Row island\n *\n * @igxModule IgxHierarchicalGridModule\n * @igxParent IgxHierarchicalGridComponent, IgxRowIslandComponent\n *\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-row-island',\n    template: `@if (platform.isElements) {\n        <div #sink style=\"display: none;\">\n            <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"></ng-content>\n            <ng-content select=\"igx-row-island,igc-row-island\"></ng-content>\n        </div>\n    }`,\n    providers: [\n        IgxRowIslandAPIService,\n        IgxFilteringService,\n        IgxGridSelectionService\n    ],\n    standalone: true\n})\nexport class IgxRowIslandComponent extends IgxHierarchicalGridBaseDirective\n    implements AfterContentInit, AfterViewInit, OnChanges, OnInit, OnDestroy {\n\n    /* blazorSuppress */\n    /**\n     * Sets the key of the row island by which child data would be taken from the row data if such is provided.\n     * ```html\n     * <igx-hierarchical-grid [data]=\"Data\" [autoGenerate]=\"true\">\n     *      <igx-row-island [key]=\"'childData'\">\n     *          <!-- ... -->\n     *      </igx-row-island>\n     * </igx-hierarchical-grid>\n     * ```\n     *\n     * @memberof IgxRowIslandComponent\n     */\n    @Input()\n    public key: string;\n\n    /* blazorInclude,wcInclude TODO: Move to Elements-only component */\n    /**\n     * Sets the key of the row island by which child data would be taken from the row data if such is provided.\n     * @hidden @internal\n     */\n    @Input()\n    public get childDataKey() {\n        return this.key;\n    }\n    /* blazorInclude,wcInclude */\n    public set childDataKey(value: string) {\n        this.key = value;\n    }\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(forwardRef(() => IgxRowIslandComponent), { read: IgxRowIslandComponent, descendants: false })\n    public children = new QueryList<IgxRowIslandComponent>();\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: RowIslandCollection */\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(forwardRef(() => IgxRowIslandComponent), { read: IgxRowIslandComponent, descendants: false })\n    public childLayoutList = new QueryList<IgxRowIslandComponent>();\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxColumnComponent, { read: IgxColumnComponent, descendants: false })\n    public childColumns = new QueryList<IgxColumnComponent>();\n\n    @ContentChild(IgxGridToolbarDirective, { read: TemplateRef })\n    protected toolbarDirectiveTemplate: TemplateRef<IgxGridToolbarTemplateContext>;\n\n    @ContentChild(IgxPaginatorDirective, { read: TemplateRef })\n    protected paginatorDirectiveTemplate: TemplateRef<any>;\n\n    /* csSuppress */\n    /**\n     * Sets/Gets the toolbar template for each child grid created from this row island.\n    */\n    @Input()\n    public get toolbarTemplate(): TemplateRef<IgxGridToolbarTemplateContext> {\n        return this._toolbarTemplate || this.toolbarDirectiveTemplate;\n    }\n\n    public set toolbarTemplate(template: TemplateRef<IgxGridToolbarTemplateContext>) {\n        this._toolbarTemplate = template;\n    }\n\n\n    /* csSuppress */\n    /**\n     * Sets/Gets the paginator template for each child grid created from this row island.\n    */\n    @Input()\n    public get paginatorTemplate(): TemplateRef<IgxGridPaginatorTemplateContext> {\n        return this._paginatorTemplate || this.paginatorDirectiveTemplate;\n    }\n\n    public set paginatorTemplate(template: TemplateRef<IgxGridPaginatorTemplateContext>) {\n        this._paginatorTemplate = template;\n    }\n\n    // TODO(api-analyzer): Shouldn't need all tags to copy from base or hidden/internal due to include tag\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ActionStripCollection */\n    /* blazorCollectionItemName: ActionStrip */\n    /* ngQueryListName: actionStripComponents */\n    /** @hidden @internal */\n    @ContentChildren(IgxActionStripToken, { read: IgxActionStripToken, descendants: false })\n    protected override actionStripComponents: QueryList<IgxActionStripToken>;\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public layoutChange = new EventEmitter<any>();\n\n    /**\n     * Event emitted when a grid is being created based on this row island.\n     * ```html\n     * <igx-hierarchical-grid [data]=\"Data\" [autoGenerate]=\"true\">\n     *      <igx-row-island [key]=\"'childData'\" (gridCreated)=\"gridCreated($event)\" #rowIsland>\n     *          <!-- ... -->\n     *      </igx-row-island>\n     * </igx-hierarchical-grid>\n     * ```\n     *\n     * @memberof IgxRowIslandComponent\n     */\n    @Output()\n    public gridCreated = new EventEmitter<IGridCreatedEventArgs>();\n\n    /**\n     * Emitted after a grid is being initialized for this row island.\n     * The emitting is done in `ngAfterViewInit`.\n     * ```html\n     * <igx-hierarchical-grid [data]=\"Data\" [autoGenerate]=\"true\">\n     *      <igx-row-island [key]=\"'childData'\" (gridInitialized)=\"gridInitialized($event)\" #rowIsland>\n     *          <!-- ... -->\n     *      </igx-row-island>\n     * </igx-hierarchical-grid>\n     * ```\n     *\n     * @memberof IgxRowIslandComponent\n     */\n    @Output()\n    public gridInitialized = new EventEmitter<IGridCreatedEventArgs>();\n\n    /**\n     * @hidden\n     */\n    public initialChanges = [];\n\n    /**\n     * @hidden\n     */\n    public rootGrid: GridType = null;\n\n    /** @hidden */\n    public readonly data: any[] | null;\n\n    /** @hidden */\n    public override get hiddenColumnsCount(): number {\n        return 0;\n    }\n\n    /** @hidden */\n    public override get pinnedColumnsCount(): number {\n        return 0;\n    }\n\n    /** @hidden */\n    public override get lastSearchInfo(): ISearchInfo {\n        return null;\n    }\n\n    /** @hidden */\n    public override get filteredData(): any {\n        return [];\n    }\n\n    /** @hidden */\n    public override get filteredSortedData(): any[] {\n        return [];\n    }\n\n    /** @hidden */\n    public override get virtualizationState(): IForOfState {\n        return null;\n    }\n\n    /** @hidden */\n    public override get pinnedColumns(): IgxColumnComponent[] {\n        return [];\n    }\n\n    /** @hidden */\n    public override get unpinnedColumns(): IgxColumnComponent[] {\n        return [];\n    }\n\n    /** @hidden */\n    public override get visibleColumns(): IgxColumnComponent[] {\n        return [];\n    }\n\n    /** @hidden */\n    public override get dataView(): any[] {\n        return [];\n    }\n\n    private ri_columnListDiffer;\n    private layout_id = `igx-row-island-`;\n    private isInit = false;\n    private _toolbarTemplate: TemplateRef<IgxGridToolbarTemplateContext>;\n    private _paginatorTemplate: TemplateRef<IgxGridPaginatorTemplateContext>;\n\n    /**\n     * Sets if all immediate children of the grids for this `IgxRowIslandComponent` should be expanded/collapsed.\n     * ```html\n     * <igx-hierarchical-grid [data]=\"Data\" [autoGenerate]=\"true\">\n     *      <igx-row-island [key]=\"'childData'\" [expandChildren]=\"true\" #rowIsland>\n     *          <!-- ... -->\n     *      </igx-row-island>\n     * </igx-hierarchical-grid>\n     * ```\n     *\n     * @memberof IgxRowIslandComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public set expandChildren(value: boolean) {\n        this._defaultExpandState = value;\n        this.rowIslandAPI.getChildGrids().forEach((grid) => {\n            if (this.document.body.contains(grid.nativeElement)) {\n                // Detect changes right away if the grid is visible\n                grid.expandChildren = value;\n                grid.cdr.detectChanges();\n            } else {\n                // Else defer the detection on changes when the grid gets into view for performance.\n                grid.updateOnRender = true;\n            }\n        });\n    }\n\n    /**\n     * Gets if all immediate children of the grids for this `IgxRowIslandComponent` have been set to be expanded/collapsed.\n     * ```typescript\n     * const expanded = this.rowIsland.expandChildren;\n     * ```\n     *\n     * @memberof IgxRowIslandComponent\n     */\n    public get expandChildren(): boolean {\n        return this._defaultExpandState;\n    }\n\n    /**\n     * @hidden\n     */\n    public get id() {\n        const pId = this.parentId ? this.parentId.substring(this.parentId.indexOf(this.layout_id) + this.layout_id.length) + '-' : '';\n        return this.layout_id + pId + this.key;\n    }\n\n    /**\n     * @hidden\n     */\n    public get parentId() {\n        return this.parentIsland ? this.parentIsland.id : null;\n    }\n\n    /**\n     * @hidden\n     */\n    public get level() {\n        let ptr = this.parentIsland;\n        let lvl = 0;\n        while (ptr) {\n            lvl++;\n            ptr = ptr.parentIsland;\n        }\n        return lvl + 1;\n    }\n\n    constructor(\n        validationService: IgxGridValidationService,\n        selectionService: IgxGridSelectionService,\n        colResizingService: IgxColumnResizingService,\n        @Inject(IGX_GRID_SERVICE_BASE) gridAPI: IgxHierarchicalGridAPIService,\n        transactionFactory: IgxFlatTransactionFactory,\n        elementRef: ElementRef<HTMLElement>,\n        zone: NgZone,\n        @Inject(DOCUMENT) document,\n        cdr: ChangeDetectorRef,\n        differs: IterableDiffers,\n        viewRef: ViewContainerRef,\n        injector: Injector,\n        envInjector: EnvironmentInjector,\n        navigation: IgxHierarchicalGridNavigationService,\n        filteringService: IgxFilteringService,\n        textHighlightService: IgxTextHighlightService,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n        summaryService: IgxGridSummaryService,\n        public rowIslandAPI: IgxRowIslandAPIService,\n        @Inject(LOCALE_ID) localeId: string,\n        platform: PlatformUtil) {\n        super(\n            validationService,\n            selectionService,\n            colResizingService,\n            gridAPI,\n            transactionFactory,\n            elementRef,\n            zone,\n            document,\n            cdr,\n            differs,\n            viewRef,\n            injector,\n            envInjector,\n            navigation,\n            filteringService,\n            textHighlightService,\n            overlayService,\n            summaryService,\n            localeId,\n            platform\n        );\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        this.filteringService.grid = this as GridType;\n        this.rootGrid = this.gridAPI.grid;\n        this.rowIslandAPI.rowIsland = this;\n        this.ri_columnListDiffer = this.differs.find([]).create(null);\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        this.updateChildren();\n        this.children.notifyOnChanges();\n        this.children.changes.pipe(takeUntil(this.destroy$))\n            .subscribe(() => {\n                this.updateChildren();\n                // update existing grids since their child ri have been changed.\n                this.getGridsForIsland(this.key).forEach(grid => {\n                    (grid as any).onRowIslandChange(this.children);\n                });\n            });\n        const nestedColumns = this.children.map((layout) => layout.columnList.toArray());\n        const colsArray = [].concat.apply([], nestedColumns);\n        const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);\n        this._childColumns = topCols;\n        this.updateColumns(this._childColumns);\n        this.columnList.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            Promise.resolve().then(() => {\n                this.updateColumnList();\n            });\n        });\n\n        // handle column changes so that they are passed to child grid instances when columnChange is emitted.\n        this.ri_columnListDiffer.diff(this.childColumns);\n        this._childColumns.forEach(x => x.columnChange.pipe(takeUntil(x.destroy$)).subscribe(() => this.updateColumnList()));\n        this.childColumns.changes.pipe(takeUntil(this.destroy$)).subscribe((change: QueryList<IgxColumnComponent>) => {\n            const diff = this.ri_columnListDiffer.diff(change);\n            if (diff) {\n                diff.forEachAddedItem((record: IterableChangeRecord<IgxColumnComponent>) => {\n                    record.item.columnChange.pipe(takeUntil(record.item.destroy$)).subscribe(() => this.updateColumnList());\n                });\n            }\n        });\n\n        if (this.actionStrip) {\n            this.actionStrip.menuOverlaySettings.outlet = this.outlet;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterViewInit() {\n        this.rowIslandAPI.register(this);\n        if (this.parentIsland) {\n            this.parentIsland.rowIslandAPI.registerChildRowIsland(this);\n        } else {\n            this.rootGrid.gridAPI.registerChildRowIsland(this);\n        }\n        this._init = false;\n\n        // Create the child toolbar if the parent island has a toolbar definition\n        this.gridCreated.pipe(pluck('grid'), takeUntil(this.destroy$)).subscribe(grid => {\n            grid.rendered$.pipe(first(), filter(() => !!this.toolbarTemplate))\n                .subscribe(() => grid.toolbarOutlet.createEmbeddedView(this.toolbarTemplate, { $implicit: grid }, { injector: grid.toolbarOutlet.injector }));\n            grid.rendered$.pipe(first(), filter(() => !!this.paginatorTemplate))\n                .subscribe(() => {\n                    this.rootGrid.paginatorList.changes.pipe(takeUntil(this.destroy$)).subscribe((changes: QueryList<IgxPaginatorComponent>) => {\n                        changes.forEach(p => {\n                            if (p.nativeElement.offsetParent?.id === grid.id) {\n                                // Optimize update only for those grids that have related changed paginator.\n                                grid.setUpPaginator()\n                            }\n                        });\n                    });\n                    grid.paginatorOutlet.createEmbeddedView(this.paginatorTemplate, { $implicit: grid });\n                });\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes) {\n        this.layoutChange.emit(changes);\n        if (!this.isInit) {\n            this.initialChanges.push(changes);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnDestroy() {\n        // Override the base destroy because we have not rendered anything to use removeEventListener on\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        this._destroyed = true;\n        this.rowIslandAPI.unset(this.id);\n        if (this.parentIsland) {\n            this.getGridsForIsland(this.key).forEach(grid => {\n                this.cleanGridState(grid);\n                grid.gridAPI.unsetChildRowIsland(this);\n            });\n            this.parentIsland.rowIslandAPI.unsetChildRowIsland(this);\n        } else {\n            this.rootGrid.gridAPI.unsetChildRowIsland(this);\n            this.cleanGridState(this.rootGrid);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override reflow() { }\n\n    /**\n     * @hidden\n     */\n    public override calculateGridHeight() { }\n\n    /**\n     * @hidden\n     */\n    public override calculateGridWidth() { }\n\n    protected _childColumns = [];\n\n    protected updateColumnList() {\n        const nestedColumns = this.children.map((layout) => layout.columnList.toArray());\n        const colsArray = [].concat.apply([], nestedColumns);\n        const topCols = this.columnList.filter((item) => {\n            if (colsArray.indexOf(item) === -1) {\n                /* Reset the default width of the columns that come into this row island,\n                because the root catches them first during the detectChanges() and sets their defaultWidth. */\n                item.defaultWidth = undefined;\n                return true;\n            }\n            return false;\n        });\n        this._childColumns = topCols;\n        this.updateColumns(this._childColumns);\n        this.rowIslandAPI.getChildGrids().forEach((grid: GridType) => {\n            grid.createColumnsList(this._childColumns);\n            if (!this.document.body.contains(grid.nativeElement)) {\n                grid.updateOnRender = true;\n            }\n        });\n    }\n\n    protected updateChildren() {\n        if (this.children.first === this) {\n            this.children.reset(this.children.toArray().slice(1));\n        }\n        this.children.forEach(child => {\n            child.parentIsland = this;\n        });\n    }\n\n    private cleanGridState(grid) {\n        grid.childGridTemplates.forEach((tmpl) => {\n            tmpl.owner.cleanView(tmpl.context.templateID);\n        });\n        grid.childGridTemplates.clear();\n        grid.onRowIslandChange();\n    }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { cloneArray, resolveNestedPath } from '../../core/utils';\nimport { DataUtil } from '../../data-operations/data-util';\nimport { GridPagingMode } from '../common/enums';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridHierarchical',\n    standalone: true\n})\nexport class IgxGridHierarchicalPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(\n        collection: any,\n        state = new Map<any, boolean>(),\n        id: string,\n        primaryKey: any,\n        childKeys: string[],\n        _pipeTrigger: number\n    ): any[] {\n        if (childKeys.length === 0) {\n            return collection;\n        }\n        if (this.grid.verticalScrollContainer.isRemote) {\n            return collection;\n        }\n        const result = this.addHierarchy(this.grid, cloneArray(collection), state, primaryKey, childKeys);\n\n        return result;\n    }\n\n    public addHierarchy<T>(grid, data: T[], state, primaryKey, childKeys: string[]): T[] {\n        const result = [];\n\n        data.forEach((v) => {\n            result.push(v);\n            const childGridsData = {};\n            childKeys.forEach((childKey) => {\n                if (!v[childKey]) {\n                    v[childKey] = [];\n                }\n                const hasNestedPath = childKey?.includes('.');\n                const childData = !hasNestedPath ? v[childKey] : resolveNestedPath(v, childKey);\n                childGridsData[childKey] = childData;\n            });\n            if (grid.gridAPI.get_row_expansion_state(v)) {\n                result.push({ rowID: primaryKey ? v[primaryKey] : v, childGridsData });\n            }\n        });\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridHierarchicalPaging',\n    standalone: true\n})\nexport class IgxGridHierarchicalPagingPipe implements PipeTransform {\n\n    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }\n\n    public transform(collection: any[], enabled: boolean, page = 0, perPage = 15, _id: string, _pipeTrigger: number): any[] {\n        if (!enabled || this.grid.pagingMode !== GridPagingMode.Local) {\n            return collection;\n        }\n\n        const state = {\n            index: page,\n            recordsPerPage: perPage\n        };\n\n        const total = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n        const result: any[] = DataUtil.page(cloneArray(collection), state, total);\n        this.grid.pagingState = state;\n        return result;\n\n    }\n}\n","import { IgxGridCellComponent } from '../cell.component';\nimport { ChangeDetectorRef, ElementRef, ChangeDetectionStrategy, Component, OnInit, NgZone, Inject } from '@angular/core';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { HammerGesturesManager } from '../../core/touch';\nimport { PlatformUtil } from '../../core/utils';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxOverlayService } from '../../services/public_api';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from '../common/pipes';\nimport { IgxTooltipDirective } from '../../directives/tooltip/tooltip.directive';\nimport { IgxTooltipTargetDirective } from '../../directives/tooltip/tooltip-target.directive';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxPrefixDirective } from '../../directives/prefix/prefix.directive';\nimport { IgxDateTimeEditorDirective } from '../../directives/date-time-editor/date-time-editor.directive';\nimport { IgxTimePickerComponent } from '../../time-picker/time-picker.component';\nimport { IgxDatePickerComponent } from '../../date-picker/date-picker.component';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxTextSelectionDirective } from '../../directives/text-selection/text-selection.directive';\nimport { IgxFocusDirective } from '../../directives/focus/focus.directive';\nimport { IgxInputDirective } from '../../directives/input/input.directive';\nimport { IgxInputGroupComponent } from '../../input-group/input-group.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxTextHighlightDirective } from '../../directives/text-highlight/text-highlight.directive';\nimport { IgxChipComponent } from '../../chips/chip.component';\nimport { NgClass, NgTemplateOutlet, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-hierarchical-grid-cell',\n    templateUrl: '../cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [IgxChipComponent, IgxTextHighlightDirective, IgxIconComponent, NgClass, FormsModule, ReactiveFormsModule, IgxInputGroupComponent, IgxInputDirective, IgxFocusDirective, IgxTextSelectionDirective, IgxCheckboxComponent, IgxDatePickerComponent, IgxTimePickerComponent, IgxDateTimeEditorDirective, IgxPrefixDirective, IgxSuffixDirective, NgTemplateOutlet, IgxTooltipTargetDirective, IgxTooltipDirective, IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe]\n})\nexport class IgxHierarchicalGridCellComponent extends IgxGridCellComponent implements OnInit {\n    // protected hSelection;\n    protected _rootGrid;\n\n    constructor(\n        selectionService: IgxGridSelectionService,\n        @Inject(IGX_GRID_BASE) grid: GridType,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService,\n        cdr: ChangeDetectorRef,\n        helement: ElementRef<HTMLElement>,\n        zone: NgZone,\n        touchManager: HammerGesturesManager,\n        platformUtil: PlatformUtil\n    ) {\n        super(selectionService, grid, overlayService, cdr, helement, zone, touchManager, platformUtil);\n    }\n\n    public override ngOnInit() {\n        super.ngOnInit();\n        this._rootGrid = this._getRootGrid();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override activate(event: FocusEvent) {\n        this._clearAllHighlights();\n        const currentElement = this.grid.nativeElement;\n        let parentGrid = this.grid;\n        let childGrid;\n        // add highligh to the current grid\n        if (this._rootGrid.id !== currentElement.id) {\n            currentElement.classList.add('igx-grid__tr--highlighted');\n        }\n\n        // add highligh to the current grid\n        while (this._rootGrid.id !== parentGrid.id) {\n            childGrid = parentGrid;\n            parentGrid = parentGrid.parent;\n\n            const parentRowID = parentGrid.gridAPI.getParentRowId(childGrid);\n            parentGrid.highlightedRowID = parentRowID;\n        }\n        this.grid.navigation.activeNode.gridID = this.gridID;\n        super.activate(event);\n    }\n\n    private _getRootGrid() {\n        let currGrid = this.grid;\n        while (currGrid.parent) {\n            currGrid = currGrid.parent;\n        }\n        return currGrid;\n    }\n\n    // TODO: Extend the new selection service to avoid complete traversal\n    private _clearAllHighlights() {\n        [this._rootGrid, ...this._rootGrid.getChildGrids(true)].forEach(grid => {\n            if (grid !== this.grid && grid.navigation.activeNode) {\n                grid.navigation.clearActivation();\n                grid.selectionService.initKeyboardState();\n                grid.selectionService.clear();\n            }\n\n            grid.selectionService.activeElement = null;\n            grid.nativeElement.classList.remove('igx-grid__tr--highlighted');\n            grid.highlightedRowID = null;\n            grid.cdr.markForCheck();\n        });\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    HostBinding,\n    forwardRef,\n    ElementRef,\n    ViewChildren,\n    QueryList,\n    ViewChild,\n    TemplateRef\n} from '@angular/core';\nimport { IgxRowDirective } from '../row.directive';\nimport { IgxHierarchicalGridCellComponent } from './hierarchical-cell.component';\nimport { GridType } from '../common/grid.interface';\nimport { IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from '../common/pipes';\nimport { IgxCheckboxComponent } from '../../checkbox/checkbox.component';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxRowDragDirective } from '../row-drag.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-hierarchical-grid-row',\n    templateUrl: './hierarchical-row.component.html',\n    providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxHierarchicalRowComponent) }],\n    imports: [NgTemplateOutlet, IgxIconComponent, IgxRowDragDirective, NgClass, IgxGridForOfDirective, IgxHierarchicalGridCellComponent, NgStyle, IgxCheckboxComponent, IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxHierarchicalRowComponent extends IgxRowDirective {\n    @ViewChild('expander', { read: ElementRef })\n    public expander: ElementRef<HTMLElement>;\n\n    @ViewChildren(forwardRef(() => IgxHierarchicalGridCellComponent), { read: IgxHierarchicalGridCellComponent })\n    protected override _cells: QueryList<IgxHierarchicalGridCellComponent>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultEmptyTemplate', { read: TemplateRef, static: true })\n    protected defaultEmptyTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultCollapsedTemplate: TemplateRef<any>;\n\n    protected expanderClass = 'igx-grid__hierarchical-expander';\n    protected rolActionClass = 'igx-grid__tr-action';\n\n    /**\n     * @hidden\n     */\n    public get expanderClassResolved() {\n        return {\n            [`${this.expanderClass} ${this.rolActionClass}`]: !this.pinned || this.disabled,\n            [`${this.expanderClass}--empty`]: this.pinned && !this.disabled\n        };\n    }\n\n    public override get viewIndex(): number {\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * Returns whether the row is expanded.\n     * ```typescript\n     * const RowExpanded = this.grid1.rowList.first.expanded;\n     * ```\n     */\n    public override get expanded() {\n        return this.grid.gridAPI.get_row_expansion_state(this.data);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-grid__tr--expanded')\n    public get expandedClass() {\n        return this.expanded && !this.pinned;\n    }\n\n    public override get hasChildren() {\n        return !!this.grid.childLayoutKeys.length;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-grid__tr--highlighted')\n    public get highlighted() {\n        return this.grid && this.grid.highlightedRowID === this.key;\n    }\n\n    /**\n     * @hidden\n     */\n    public expanderClick(event) {\n        event.stopPropagation();\n        this.toggle();\n    }\n\n    /**\n     * Toggles the hierarchical row.\n     * ```typescript\n     * this.grid1.rowList.first.toggle()\n     * ```\n     */\n    public toggle() {\n        if (this.added) {\n            return;\n        }\n        // K.D. 28 Feb, 2022 #10634 Don't trigger endEdit/commit upon row expansion state change\n        // this.endEdit(this.grid.rootGrid);\n        this.grid.gridAPI.set_row_expansion_state(this.key, !this.expanded);\n        this.grid.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public select = () => {\n        this.grid.selectRows([this.key]);\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public deselect = () => {\n        this.grid.deselectRows([this.key]);\n    };\n\n    /**\n     * @hidden\n     */\n    public get iconTemplate() {\n        let expandable = true;\n        if (this.grid.hasChildrenKey) {\n            expandable = this.data[this.grid.hasChildrenKey];\n        }\n        if (!expandable || (this.pinned && !this.disabled)) {\n            return this.defaultEmptyTemplate;\n        }\n        if (this.expanded) {\n            return this.grid.rowExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n        } else {\n            return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n        }\n    }\n\n    // TODO: consider moving into CRUD\n    protected endEdit(grid: GridType) {\n        if (grid.gridAPI.crudService.cellInEditMode) {\n            grid.gridAPI.crudService.endEdit();\n        }\n        grid.gridAPI.getChildGrids(true).forEach(g => {\n            if (g.gridAPI.crudService.cellInEditMode) {\n                g.gridAPI.crudService.endEdit();\n            }\n        });\n    }\n}\n","<ng-container *ngTemplateOutlet='addRowUI ? addTemp : defaultTemp'></ng-container>\n<ng-template #defaultExpandedTemplate>\n    <igx-icon family=\"default\" name=\"tree_collapse\" [active]='!added'></igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n    <igx-icon family=\"default\" name=\"tree_expand\" [active]='!added'></igx-icon>\n</ng-template>\n\n<ng-template #defaultEmptyTemplate>\n    <!-- Empty icon used as spacer for size matching-->\n    <igx-icon></igx-icon>\n</ng-template>\n\n<ng-template #addTemp>\n    <div class='igx-grid__tr--inner' [class.igx-grid__tr--add-animate]='triggerAddAnimationClass' (animationend)='animationEndHandler()'>\n        <ng-container *ngTemplateOutlet='defaultTemp'></ng-container>\n    </div>\n</ng-template>\n<ng-template #defaultTemp>\n    <!-- Drag indicator -->\n    @if (rowDraggable) {\n        <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\" (pointerdown)=\"$event.preventDefault()\">\n            <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n        </div>\n    }\n\n    <!-- Select Row -->\n    @if (showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (click)=\"onRowSelectorClick($event)\" (pointerdown)=\"$event.preventDefault()\">\n            <ng-template *ngTemplateOutlet=\"\n                this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n                context: { $implicit: {\n                                index: viewIndex,\n                                rowID: key,\n                                key,\n                                selected: selected,\n                                select: select,\n                                deselect: deselect }}\">\n            </ng-template>\n        </div>\n    }\n\n    <!-- Row Expander -->\n    @if (hasChildren) {\n        <div  (click)=\"expanderClick($event)\" (mousedown)='$event.preventDefault()' [ngClass]=\"expanderClassResolved\" #expander>\n            <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n            </ng-container>\n        </div>\n    }\n\n    @if (pinnedColumns.length > 0 && grid.isPinningToStart) {\n        <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n    }\n\n    <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"' [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n        <igx-hierarchical-grid-cell\n            class=\"igx-grid__td igx-grid__td--fw\"\n            [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n\n            [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n            [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n            [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n            [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n            [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n            [column]=\"col\"\n            [formatter]=\"col.formatter\"\n            [intRow]=\"this\"\n            [active]=\"isCellActive(col.visibleIndex)\"\n            [rowData]=\"data\"\n            [style.min-width]=\"col.resolvedWidth\"\n            [style.max-width]=\"col.resolvedWidth\"\n            [style.flex-basis]=\"col.resolvedWidth\"\n            [width]=\"col.getCellWidth()\"\n            [visibleColumnIndex]=\"col.visibleIndex\"\n            [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n            [cellTemplate]=\"col.bodyTemplate\"\n            [cellValidationErrorTemplate]=\"col.errorTemplate\"\n            [lastSearchInfo]=\"grid.lastSearchInfo\"\n            [cellSelectionMode]=\"grid.cellSelection\"\n            [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\">\n        </igx-hierarchical-grid-cell>\n    </ng-template>\n\n    @if (pinnedColumns.length > 0 && !grid.isPinningToStart) {\n        <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n    }\n\n    <ng-template #rowSelectorBaseTemplate>\n        <div class=\"igx-grid__cbx-padding\">\n            <igx-checkbox\n                [tabindex]=\"-1\"\n                [readonly]=\"true\"\n                [checked]=\"selected\"\n                [disableRipple]=\"true\"\n                [disabled]=\"deleted\"\n                [disableTransitions]=\"grid.disableTransitions\"\n                [aria-label]=\"rowCheckboxAriaLabel\">\n            </igx-checkbox>\n        </div>\n    </ng-template>\n\n    <ng-template #pinnedCellsTemplate let-col>\n        @for (col of pinnedColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n            <igx-hierarchical-grid-cell\n                class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n                [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n                [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n                [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n                [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n                [column]=\"col\"\n                [formatter]=\"col.formatter\"\n                [intRow]=\"this\"\n                [active]=\"isCellActive(col.visibleIndex)\"\n                [firstPinned]=\"col.isFirstPinned\"\n                [lastPinned]=\"col.isLastPinned\"\n                [rowData]=\"data\"\n                [style.min-width]=\"col.resolvedWidth\"\n                [style.max-width]=\"col.resolvedWidth\"\n                [style.flex-basis]=\"col.resolvedWidth\"\n                [style.left]=\"col.rightPinnedOffset\"\n                [width]=\"col.getCellWidth()\"\n                [visibleColumnIndex]=\"col.visibleIndex\"\n                [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n                [cellTemplate]=\"col.bodyTemplate\"\n                [cellValidationErrorTemplate]=\"col.errorTemplate\"\n                [lastSearchInfo]=\"grid.lastSearchInfo\"\n                [cellSelectionMode]=\"grid.cellSelection\"\n                [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\">\n            </igx-hierarchical-grid-cell>\n        }\n    </ng-template>\n</ng-template>\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    CUSTOM_ELEMENTS_SCHEMA,\n    DoCheck,\n    ElementRef,\n    HostBinding,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    QueryList,\n    reflectComponentType,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';\n\nimport { IgxHierarchicalGridAPIService } from './hierarchical-grid-api.service';\nimport { IgxRowIslandComponent } from './row-island.component';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxColumnComponent, } from '../columns/column.component';\nimport { IgxHierarchicalGridNavigationService } from './hierarchical-grid-navigation.service';\nimport { IgxGridSummaryService } from '../summaries/grid-summary.service';\nimport { IgxHierarchicalGridBaseDirective } from './hierarchical-grid-base.directive';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxTemplateOutletDirective } from '../../directives/template-outlet/template_outlet.directive';\nimport { IgxGridSelectionService } from '../selection/selection.service';\nimport { IgxForOfSyncService, IgxForOfScrollSyncService } from '../../directives/for-of/for_of.sync.service';\nimport { CellType, GridType, IGX_GRID_BASE, IGX_GRID_SERVICE_BASE, RowType } from '../common/grid.interface';\nimport { IgxRowIslandAPIService } from './row-island-api.service';\nimport { IgxGridCRUDService } from '../common/crud.service';\nimport { IgxHierarchicalGridRow } from '../grid-public-row';\nimport { IgxGridCell } from '../grid-public-cell';\nimport type { IgxPaginatorComponent } from '../../paginator/paginator.component';\nimport { IgxPaginatorToken } from '../../paginator/token';\nimport { IgxGridComponent } from '../grid/grid.component';\nimport { IgxOverlayOutletDirective, IgxToggleDirective } from '../../directives/toggle/toggle.directive';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { IgxGridExcelStyleFilteringComponent } from '../filtering/excel-style/excel-style-filtering.component';\nimport { IgxGridValidationService } from '../grid/grid-validation.service';\nimport { IgxGridHierarchicalPipe, IgxGridHierarchicalPagingPipe } from './hierarchical-grid.pipes';\nimport { IgxSummaryDataPipe } from '../summaries/grid-root-summary.pipe';\nimport { IgxGridTransactionPipe, IgxHasVisibleColumnsPipe, IgxGridRowPinningPipe, IgxGridAddRowPipe, IgxGridRowClassesPipe, IgxGridRowStylesPipe, IgxStringReplacePipe } from '../common/pipes';\nimport { IgxGridSortingPipe, IgxGridFilteringPipe } from '../grid/grid.pipes';\nimport { IgxGridColumnResizerComponent } from '../resizing/resizer.component';\nimport { IgxRowEditTabStopDirective } from '../grid.rowEdit.directive';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxButtonDirective } from '../../directives/button/button.directive';\nimport { IgxSummaryRowComponent } from '../summaries/summary-row.component';\nimport { IgxSnackbarComponent } from '../../snackbar/snackbar.component';\nimport { IgxCircularProgressBarComponent } from '../../progressbar/progressbar.component';\nimport { IgxHierarchicalRowComponent } from './hierarchical-row.component';\nimport { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxGridDragSelectDirective } from '../selection/drag-select.directive';\nimport { IgxGridBodyDirective } from '../grid.common';\nimport { IgxGridHeaderRowComponent } from '../headers/grid-header-row.component';\nimport { IgxActionStripToken } from '../../action-strip/token';\n\nlet NEXT_ID = 0;\n\n/**\n * @hidden @internal\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-child-grid-row',\n    templateUrl: './child-grid-row.component.html',\n    imports: [NgClass]\n})\nexport class IgxChildGridRowComponent implements AfterViewInit, OnInit {\n    @Input()\n    public layout: IgxRowIslandComponent;\n\n    /**\n     * @hidden\n     */\n    public get parentHasScroll() {\n        return !this.parentGrid.verticalScrollContainer.dc.instance.notVirtual;\n    }\n\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public parentGridID: string;\n\n    /**\n     *  The data passed to the row component.\n     *\n     * ```typescript\n     * // get the row data for the first selected row\n     * let selectedRowData = this.grid.selectedRows[0].data;\n     * ```\n     */\n    @Input()\n    public get data(): any {\n        return this._data || [];\n    }\n\n    public set data(value: any) {\n        this._data = value;\n        if (this.hGrid && !this.hGrid.dataSetByUser) {\n            this.hGrid.setDataInternal(this._data.childGridsData[this.layout.key]);\n        }\n    }\n\n    /**\n     * The index of the row.\n     *\n     * ```typescript\n     * // get the index of the second selected row\n     * let selectedRowIndex = this.grid.selectedRows[1].index;\n     * ```\n     */\n    @Input()\n    public index: number;\n\n    /* blazorSuppress */\n    @ViewChild('container', { read: ViewContainerRef, static: true })\n    public container: ViewContainerRef;\n\n    /**\n     * @hidden\n     */\n    public hGrid: IgxHierarchicalGridComponent;\n\n    /* blazorSuppress */\n    /**\n     * Get a reference to the grid that contains the selected row.\n     *\n     * ```typescript\n     * handleRowSelection(event) {\n     *  // the grid on which the rowSelected event was triggered\n     *  const grid = event.row.grid;\n     * }\n     * ```\n     *\n     * ```html\n     *  <igx-grid\n     *    [data]=\"data\"\n     *    (rowSelected)=\"handleRowSelection($event)\">\n     *  </igx-grid>\n     * ```\n     */\n    // TODO: Refactor\n    public get parentGrid(): IgxHierarchicalGridComponent {\n        return this.gridAPI.grid as IgxHierarchicalGridComponent;\n    }\n\n    @HostBinding('attr.aria-level')\n    public get level() {\n        return this.layout.level;\n    }\n\n    /**\n     * The native DOM element representing the row. Could be null in certain environments.\n     *\n     * ```typescript\n     * // get the nativeElement of the second selected row\n     * let selectedRowNativeElement = this.grid.selectedRows[1].nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * Returns whether the row is expanded.\n     * ```typescript\n     * const RowExpanded = this.grid1.rowList.first.expanded;\n     * ```\n     */\n    public expanded = false;\n\n    private _data: any;\n\n    constructor(\n        @Inject(IGX_GRID_SERVICE_BASE) public readonly gridAPI: IgxHierarchicalGridAPIService,\n        public element: ElementRef<HTMLElement>,\n        public cdr: ChangeDetectorRef) { }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        const ref = this.container.createComponent(IgxHierarchicalGridComponent, { injector: this.container.injector });\n        this.hGrid = ref.instance;\n        this.hGrid.setDataInternal(this.data.childGridsData[this.layout.key]);\n        this.hGrid.nativeElement[\"__componentRef\"] = ref;\n        this.layout.layoutChange.subscribe((ch) => {\n            this._handleLayoutChanges(ch);\n        });\n        const changes = this.layout.initialChanges;\n        changes.forEach(change => {\n            this._handleLayoutChanges(change);\n        });\n        this.hGrid.parent = this.parentGrid;\n        this.hGrid.parentIsland = this.layout;\n        this.hGrid.childRow = this;\n        // handler logic that re-emits hgrid events on the row island\n        this.setupEventEmitters();\n        this.layout.gridCreated.emit({\n            owner: this.layout,\n            parentID: this.data.rowID,\n            grid: this.hGrid\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        this.hGrid.childLayoutList = this.layout.children;\n        const layouts = this.hGrid.childLayoutList.toArray();\n        layouts.forEach((l) => this.hGrid.gridAPI.registerChildRowIsland(l));\n        this.parentGrid.gridAPI.registerChildGrid(this.data.rowID, this.layout.key, this.hGrid);\n        this.layout.rowIslandAPI.registerChildGrid(this.data.rowID, this.hGrid);\n\n        this.layout.gridInitialized.emit({\n            owner: this.layout,\n            parentID: this.data.rowID,\n            grid: this.hGrid\n        });\n\n        this.hGrid.cdr.detectChanges();\n    }\n\n    private setupEventEmitters() {\n        const destructor = takeUntil(this.hGrid.destroy$);\n\n        const mirror = reflectComponentType(IgxGridComponent);\n        // exclude outputs related to two-way binding functionality\n        const inputNames = mirror.inputs.map(input => input.propName);\n        const outputs = mirror.outputs.filter(o => {\n            const matchingInputPropName = o.propName.slice(0, o.propName.indexOf('Change'));\n            return inputNames.indexOf(matchingInputPropName) === -1;\n        });\n\n        // TODO: Skip the `rendered` output. Rendered should be called once per grid.\n        outputs.filter(o => o.propName !== 'rendered').forEach(output => {\n            if (this.hGrid[output.propName]) {\n                this.hGrid[output.propName].pipe(destructor).subscribe((args) => {\n                    if (!args) {\n                        args = {};\n                    }\n                    args.owner = this.hGrid;\n                    this.layout[output.propName].emit(args);\n                });\n            }\n        });\n    }\n\n\n    private _handleLayoutChanges(changes: SimpleChanges) {\n        for (const change in changes) {\n            if (changes.hasOwnProperty(change)) {\n                this.hGrid[change] = changes[change].currentValue;\n            }\n        }\n    }\n}\n\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorAdditionalDependency: RowIsland */\n/* blazorIndirectRender */\n/**\n * Hierarchical grid\n *\n * @igxModule IgxHierarchicalGridModule\n *\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-hierarchical-grid',\n    templateUrl: 'hierarchical-grid.component.html',\n    providers: [\n        IgxGridCRUDService,\n        IgxGridValidationService,\n        IgxGridSelectionService,\n        { provide: IGX_GRID_SERVICE_BASE, useClass: IgxHierarchicalGridAPIService },\n        { provide: IGX_GRID_BASE, useExisting: IgxHierarchicalGridComponent },\n        IgxGridSummaryService,\n        IgxFilteringService,\n        IgxHierarchicalGridNavigationService,\n        IgxColumnResizingService,\n        IgxForOfSyncService,\n        IgxForOfScrollSyncService,\n        IgxRowIslandAPIService\n    ],\n    imports: [\n        NgClass,\n        NgTemplateOutlet,\n        NgStyle,\n        IgxGridHeaderRowComponent,\n        IgxGridBodyDirective,\n        IgxGridDragSelectDirective,\n        IgxColumnMovingDropDirective,\n        IgxGridForOfDirective,\n        IgxTemplateOutletDirective,\n        IgxHierarchicalRowComponent,\n        IgxOverlayOutletDirective,\n        IgxToggleDirective,\n        IgxCircularProgressBarComponent,\n        IgxSnackbarComponent,\n        IgxSummaryRowComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxIconComponent,\n        IgxRowEditTabStopDirective,\n        IgxGridColumnResizerComponent,\n        IgxChildGridRowComponent,\n        IgxGridSortingPipe,\n        IgxGridFilteringPipe,\n        IgxGridTransactionPipe,\n        IgxHasVisibleColumnsPipe,\n        IgxGridRowPinningPipe,\n        IgxGridAddRowPipe,\n        IgxGridRowClassesPipe,\n        IgxGridRowStylesPipe,\n        IgxSummaryDataPipe,\n        IgxGridHierarchicalPipe,\n        IgxGridHierarchicalPagingPipe,\n        IgxStringReplacePipe\n    ],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxHierarchicalGridComponent extends IgxHierarchicalGridBaseDirective\n    implements GridType, AfterViewInit, AfterContentInit, OnInit, OnDestroy, DoCheck {\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'grid';\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: RowIslandCollection */\n    /* ngQueryListName: childLayoutList */\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxRowIslandComponent, { read: IgxRowIslandComponent, descendants: false })\n    public childLayoutList: QueryList<IgxRowIslandComponent>;\n\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxRowIslandComponent, { read: IgxRowIslandComponent, descendants: true })\n    public allLayoutList: QueryList<IgxRowIslandComponent>;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxPaginatorToken, { descendants: true })\n    public paginatorList: QueryList<IgxPaginatorComponent>;\n\n    /** @hidden @internal */\n    @ViewChild('toolbarOutlet', { read: ViewContainerRef })\n    public toolbarOutlet: ViewContainerRef;\n\n    /** @hidden @internal */\n    @ViewChild('paginatorOutlet', { read: ViewContainerRef })\n    public paginatorOutlet: ViewContainerRef;\n    /**\n     * @hidden\n     */\n    @ViewChildren(IgxTemplateOutletDirective, { read: IgxTemplateOutletDirective })\n    public templateOutlets: QueryList<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChildren(IgxChildGridRowComponent)\n    public hierarchicalRows: QueryList<IgxChildGridRowComponent>;\n\n    @ViewChild('hierarchical_record_template', { read: TemplateRef, static: true })\n    protected hierarchicalRecordTemplate: TemplateRef<any>;\n\n    @ViewChild('child_record_template', { read: TemplateRef, static: true })\n    protected childTemplate: TemplateRef<any>;\n\n    // @ViewChild('headerHierarchyExpander', { read: ElementRef, static: true })\n    protected get headerHierarchyExpander() {\n        return this.theadRow?.headerHierarchyExpander;\n    }\n\n    /**\n     * @hidden\n     */\n    public childLayoutKeys = [];\n\n    /** @hidden @internal */\n    public dataSetByUser = false;\n\n    /**\n     * @hidden\n     */\n    public highlightedRowID = null;\n\n    /**\n     * @hidden\n     */\n    public updateOnRender = false;\n\n    /**\n     * @hidden\n     */\n    public parent: IgxHierarchicalGridComponent = null;\n\n    /**\n     * @hidden @internal\n     */\n    public childRow: IgxChildGridRowComponent;\n\n    @ContentChildren(IgxActionStripToken, { read: IgxActionStripToken, descendants: false })\n    protected override actionStripComponents: QueryList<IgxActionStripToken>;\n\n    /** @hidden @internal */\n    public override get actionStrip() {\n        return this.parentIsland ? this.parentIsland.actionStrip : super.actionStrip;\n    }\n\n    private _data;\n    private h_id = `igx-hierarchical-grid-${NEXT_ID++}`;\n    private childGridTemplates: Map<any, any> = new Map();\n\n    /**\n     * Gets/Sets the value of the `id` attribute.\n     *\n     * @remarks\n     * If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-hierarchical-grid [id]=\"'igx-hgrid-1'\" [data]=\"Data\" [autoGenerate]=\"true\"></igx-hierarchical-grid>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this.h_id;\n    }\n    public set id(value: string) {\n        this.h_id = value;\n    }\n\n    /* treatAsRef */\n    /**\n     * Gets/Sets the array of data that populates the component.\n     * ```html\n     * <igx-hierarchical-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-hierarchical-grid>\n     * ```\n     *\n     * @memberof IgxHierarchicalGridComponent\n     */\n    @Input()\n    public set data(value: any[] | null) {\n        this.setDataInternal(value);\n        this.dataSetByUser = true;\n        this.checkPrimaryKeyField();\n    }\n\n    /**\n     * Returns an array of data set to the `IgxHierarchicalGridComponent`.\n     * ```typescript\n     * let filteredData = this.grid.filteredData;\n     * ```\n     *\n     * @memberof IgxHierarchicalGridComponent\n     */\n    public get data(): any[] | null {\n        return this._data;\n    }\n\n    /** @hidden @internal */\n    public override get paginator() {\n        const id = this.id;\n        return (!this.parentIsland && this.paginationComponents?.first) || this.rootGrid.paginatorList?.find((pg) =>\n            pg.nativeElement.offsetParent?.id === id);\n    }\n\n    /** @hidden @internal */\n    public override get excelStyleFilteringComponent(): IgxGridExcelStyleFilteringComponent {\n        return this.parentIsland ?\n            this.parentIsland.excelStyleFilteringComponents.first :\n            super.excelStyleFilteringComponent;\n    }\n\n    /**\n     * Gets/Sets the total number of records in the data source.\n     *\n     * @remarks\n     * This property is required for remote grid virtualization to function when it is bound to remote data.\n     * @example\n     * ```typescript\n     * const itemCount = this.grid1.totalItemCount;\n     * this.grid1.totalItemCount = 55;\n     * ```\n     */\n    @Input()\n    public set totalItemCount(count) {\n        this.verticalScrollContainer.totalItemCount = count;\n    }\n\n    public get totalItemCount() {\n        return this.verticalScrollContainer.totalItemCount;\n    }\n\n    /**\n     * Sets if all immediate children of the `IgxHierarchicalGridComponent` should be expanded/collapsed.\n     * Default value is false.\n     * ```html\n     * <igx-hierarchical-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [autoGenerate]=\"true\" [expandChildren]=\"true\"></igx-hierarchical-grid>\n     * ```\n     *\n     * @memberof IgxHierarchicalGridComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public set expandChildren(value: boolean) {\n        this._defaultExpandState = value;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Gets if all immediate children of the `IgxHierarchicalGridComponent` previously have been set to be expanded/collapsed.\n     * If previously set and some rows have been manually expanded/collapsed it will still return the last set value.\n     * ```typescript\n     * const expanded = this.grid.expandChildren;\n     * ```\n     *\n     * @memberof IgxHierarchicalGridComponent\n     */\n    public get expandChildren(): boolean {\n        return this._defaultExpandState;\n    }\n\n    /**\n     * Gets the unique identifier of the parent row. It may be a `string` or `number` if `primaryKey` of the\n     * parent grid is set or an object reference of the parent record otherwise.\n     * ```typescript\n     * const foreignKey = this.grid.foreignKey;\n     * ```\n     *\n     * @memberof IgxHierarchicalGridComponent\n     */\n    public get foreignKey() {\n        if (!this.parent) {\n            return null;\n        }\n        return this.parent.gridAPI.getParentRowId(this);\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasExpandableChildren() {\n        return !!this.childLayoutKeys.length;\n    }\n\n    /**\n     * @hidden\n     */\n    public get resolveRowEditContainer() {\n        if (this.parentIsland && this.parentIsland.rowEditCustom) {\n            return this.parentIsland.rowEditContainer;\n        }\n        return this.rowEditContainer;\n    }\n\n    /**\n     * @hidden\n     */\n    public get resolveRowEditActions() {\n        return this.parentIsland ? this.parentIsland.rowEditActionsTemplate : this.rowEditActionsTemplate;\n    }\n\n    /**\n     * @hidden\n     */\n    public get resolveRowEditText() {\n        return this.parentIsland ? this.parentIsland.rowEditTextTemplate : this.rowEditTextTemplate;\n    }\n\n    /** @hidden */\n    public override hideActionStrip() {\n        if (!this.parent) {\n            // hide child layout actions strips when\n            // moving outside root grid.\n            super.hideActionStrip();\n            this.allLayoutList.forEach(ri => {\n                ri.actionStrip?.hide();\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override get parentRowOutletDirective() {\n        // Targeting parent outlet in order to prevent hiding when outlet\n        // is present at a child grid and is attached to a row.\n        return this.parent ? this.parent.rowOutletDirective : this.outlet;\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        // this.expansionStatesChange.pipe(takeUntil(this.destroy$)).subscribe((value: Map<any, boolean>) => {\n        //     const res = Array.from(value.entries()).filter(({1: v}) => v === true).map(([k]) => k);\n        // });\n        this.batchEditing = !!this.rootGrid.batchEditing;\n        if (this.rootGrid !== this) {\n            this.rootGrid.batchEditingChange.pipe(takeUntil(this.destroy$)).subscribe((val: boolean) => {\n                this.batchEditing = val;\n            });\n        }\n        super.ngOnInit();\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n        this.verticalScrollContainer.beforeViewDestroyed.pipe(takeUntil(this.destroy$)).subscribe((view) => {\n            const rowData = view.context.$implicit;\n            if (this.isChildGridRecord(rowData)) {\n                const cachedData = this.childGridTemplates.get(rowData.rowID);\n                if (cachedData) {\n                    const tmlpOutlet = cachedData.owner;\n                    tmlpOutlet._viewContainerRef.detach(0);\n                }\n            }\n        });\n\n        if (this.parent) {\n            this.childLayoutKeys = this.parentIsland.children.map((item) => item.key);\n        }\n\n        this.headSelectorsTemplates = this.parentIsland ?\n            this.parentIsland.headSelectorsTemplates :\n            this.headSelectorsTemplates;\n\n        this.rowSelectorsTemplates = this.parentIsland ?\n            this.parentIsland.rowSelectorsTemplates :\n            this.rowSelectorsTemplates;\n        this.dragIndicatorIconTemplate = this.parentIsland ?\n            this.parentIsland.dragIndicatorIconTemplate :\n            this.dragIndicatorIconTemplate;\n        this.rowExpandedIndicatorTemplate = this.rootGrid.rowExpandedIndicatorTemplate;\n        this.rowCollapsedIndicatorTemplate = this.rootGrid.rowCollapsedIndicatorTemplate;\n        this.headerCollapsedIndicatorTemplate = this.rootGrid.headerCollapsedIndicatorTemplate;\n        this.headerExpandedIndicatorTemplate = this.rootGrid.headerExpandedIndicatorTemplate;\n        this.excelStyleHeaderIconTemplate = this.rootGrid.excelStyleHeaderIconTemplate;\n        this.sortAscendingHeaderIconTemplate = this.rootGrid.sortAscendingHeaderIconTemplate;\n        this.sortDescendingHeaderIconTemplate = this.rootGrid.sortDescendingHeaderIconTemplate;\n        this.sortHeaderIconTemplate = this.rootGrid.sortHeaderIconTemplate;\n        this.hasChildrenKey = this.parentIsland ?\n            this.parentIsland.hasChildrenKey || this.rootGrid.hasChildrenKey :\n            this.rootGrid.hasChildrenKey;\n        this.showExpandAll = this.parentIsland ?\n            this.parentIsland.showExpandAll : this.rootGrid.showExpandAll;\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        this.updateColumnList(false);\n        this.childLayoutKeys = this.parent ?\n            this.parentIsland.children.map((item) => item.key) :\n            this.childLayoutKeys = this.childLayoutList.map((item) => item.key);\n        this.childLayoutList.notifyOnChanges();\n        this.childLayoutList.changes.pipe(takeUntil(this.destroy$)).subscribe(() =>\n            this.onRowIslandChange()\n        );\n        super.ngAfterContentInit();\n    }\n\n    /**\n     * Returns the `RowType` by index.\n     *\n     * @example\n     * ```typescript\n     * const myRow = this.grid1.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByIndex(index: number): RowType {\n        if (index < 0 || index >= this.dataView.length) {\n            return undefined;\n        }\n        return this.createRow(index);\n    }\n\n    /**\n     * Returns the `RowType` by key.\n     *\n     * @example\n     * ```typescript\n     * const myRow = this.grid1.getRowByKey(1);\n     * ```\n     * @param key\n     */\n    public getRowByKey(key: any): RowType {\n        const data = this.dataView;\n        const rec = this.primaryKey ?\n            data.find(record => record[this.primaryKey] === key) :\n            data.find(record => record === key);\n        const index = data.indexOf(rec);\n        if (index < 0 || index > data.length) {\n            return undefined;\n        }\n\n        return new IgxHierarchicalGridRow(this as any, index, rec);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public allRows(): RowType[] {\n        return this.dataView.map((rec, index) => this.createRow(index));\n    }\n\n    /**\n     * Returns the collection of `IgxHierarchicalGridRow`s for current page.\n     *\n     * @hidden @internal\n     */\n    public dataRows(): RowType[] {\n        return this.allRows().filter(row => row instanceof IgxHierarchicalGridRow);\n    }\n\n    /**\n     * Returns an array of the selected `IgxGridCell`s.\n     *\n     * @example\n     * ```typescript\n     * const selectedCells = this.grid.selectedCells;\n     * ```\n     */\n    public get selectedCells(): CellType[] {\n        return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n            .reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @example\n     * ```typescript\n     * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n     * ```\n     * @param rowIndex\n     * @param columnField\n     */\n    public getCellByColumn(rowIndex: number, columnField: string): CellType {\n        const row = this.getRowByIndex(rowIndex);\n        const column = this.columns.find((col) => col.field === columnField);\n        if (row && row instanceof IgxHierarchicalGridRow && column) {\n            return new IgxGridCell(this, rowIndex, column);\n        }\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @remarks\n     * Requires that the primaryKey property is set.\n     * @example\n     * ```typescript\n     * grid.getCellByKey(1, 'index');\n     * ```\n     * @param rowSelector match any rowID\n     * @param columnField\n     */\n    public getCellByKey(rowSelector: any, columnField: string): CellType {\n        const row = this.getRowByKey(rowSelector);\n        const column = this.columns.find((col) => col.field === columnField);\n        if (row && column) {\n            return new IgxGridCell(this, row.index, column);\n        }\n    }\n\n    public override pinRow(rowID: any, index?: number): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.pinRow(rowID, index, row);\n    }\n\n    /** @hidden @internal */\n    public setDataInternal(value: any) {\n        const oldData = this._data;\n        this._data = value || [];\n        this.summaryService.clearSummaryCache();\n        if (!this._init) {\n            this.validation.updateAll(this._data);\n        }\n        if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data)) {\n            this.setupColumns();\n            this.reflow();\n        }\n        this.cdr.markForCheck();\n        if (this.parent && (this.height === null || this.height.indexOf('%') !== -1)) {\n            // If the height will change based on how much data there is, recalculate sizes in igxForOf.\n            this.notifyChanges(true);\n        }\n    }\n\n    public override unpinRow(rowID: any): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.unpinRow(rowID, row);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataLoading(event) {\n        this.dataPreLoad.emit(event);\n    }\n\n    /** @hidden */\n    public override featureColumnsWidth() {\n        return super.featureColumnsWidth(this.headerHierarchyExpander);\n    }\n\n    /**\n     * @hidden\n     */\n    public onRowIslandChange() {\n        if (this.parent) {\n            this.childLayoutKeys = this.parentIsland.children.filter(item => !(item as any)._destroyed).map((item) => item.key);\n        } else {\n            this.childLayoutKeys = this.childLayoutList.filter(item => !(item as any)._destroyed).map((item) => item.key);\n        }\n        if (!(this.cdr as any).destroyed) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /** @hidden @internal **/\n    public override ngOnDestroy() {\n        if (!this.parent) {\n            this.gridAPI.getChildGrids(true).forEach((grid) => {\n                if (!grid.childRow.cdr.destroyed) {\n                    grid.childRow.cdr.destroy();\n                }\n            });\n        }\n        if (this.parent && this.selectionService.activeElement) {\n            // in case selection is in destroyed child grid, selection should be cleared.\n            this._clearSeletionHighlights();\n        }\n        super.ngOnDestroy();\n    }\n\n    /**\n     * @hidden\n     */\n    public isRowHighlighted(rowData) {\n        return this.highlightedRowID === rowData.rowID;\n    }\n\n    /**\n     * @hidden\n     */\n    public isHierarchicalRecord(record: any): boolean {\n        if (this.isGhostRecord(record)) {\n            record = record.recordRef;\n        }\n        return this.childLayoutList.length !== 0 && record[this.childLayoutList.first.key];\n    }\n\n    /**\n     * @hidden\n     */\n    public isChildGridRecord(record: any): boolean {\n        // Can be null when there is defined layout but no child data was found\n        return record?.childGridsData !== undefined;\n    }\n\n    /**\n     * @hidden\n     */\n    public trackChanges(index, rec) {\n        if (rec.childGridsData !== undefined) {\n            // if is child rec\n            return rec.rowID;\n        }\n        return rec;\n    }\n\n    /**\n     * @hidden\n     */\n    public getContext(rowData, rowIndex, pinned): any {\n        if (this.isChildGridRecord(rowData)) {\n            const cachedData = this.childGridTemplates.get(rowData.rowID);\n            if (cachedData) {\n                const view = cachedData.view;\n                const tmlpOutlet = cachedData.owner;\n                return {\n                    $implicit: rowData,\n                    moveView: view,\n                    owner: tmlpOutlet,\n                    index: this.dataView.indexOf(rowData)\n                };\n            } else {\n                // child rows contain unique grids, hence should have unique templates\n                return {\n                    $implicit: rowData,\n                    templateID: {\n                        type: 'childRow',\n                        id: rowData.rowID\n                    },\n                    index: this.dataView.indexOf(rowData)\n                };\n            }\n        } else {\n            return {\n                $implicit: this.isGhostRecord(rowData) ? rowData.recordRef : rowData,\n                templateID: {\n                    type: 'dataRow',\n                    id: null\n                },\n                index: this.getDataViewIndex(rowIndex, pinned),\n                disabled: this.isGhostRecord(rowData)\n            };\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public get rootGrid(): GridType {\n        let currGrid = this as IgxHierarchicalGridComponent;\n        while (currGrid.parent) {\n            currGrid = currGrid.parent;\n        }\n        return currGrid;\n    }\n\n    /**\n     * @hidden\n     */\n    public get iconTemplate() {\n        const expanded = this.hasExpandedRecords() && this.hasExpandableChildren;\n        if (!expanded && this.showExpandAll) {\n            return this.headerCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n        } else {\n            return this.headerExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override getDragGhostCustomTemplate(): TemplateRef<any> {\n        if (this.parentIsland) {\n            return this.parentIsland.getDragGhostCustomTemplate();\n        }\n        return super.getDragGhostCustomTemplate();\n    }\n\n    /**\n     * @hidden\n     * Gets the visible content height that includes header + tbody + footer.\n     * For hierarchical child grid it may be scrolled and not fully visible.\n     */\n    public override getVisibleContentHeight() {\n        let height = super.getVisibleContentHeight();\n        if (this.parent) {\n            const rootHeight = this.rootGrid.getVisibleContentHeight();\n            const topDiff = this.nativeElement.getBoundingClientRect().top - this.rootGrid.nativeElement.getBoundingClientRect().top;\n            height = rootHeight - topDiff > height ? height : rootHeight - topDiff;\n        }\n        return height;\n    }\n\n    /**\n     * @hidden\n     */\n    public toggleAll() {\n        const expanded = this.hasExpandedRecords() && this.hasExpandableChildren;\n        if (!expanded && this.showExpandAll) {\n            this.expandAll();\n        } else {\n            this.collapseAll();\n        }\n    }\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public hasExpandedRecords() {\n        if (this.expandChildren) {\n            return true;\n        }\n        let hasExpandedEntry = false;\n        this.expansionStates.forEach(value => {\n            if (value) {\n                hasExpandedEntry = value;\n            }\n        });\n        return hasExpandedEntry;\n    }\n\n    public override getDefaultExpandState(record: any) {\n        if (this.hasChildrenKey && !record[this.hasChildrenKey]) {\n            return false;\n        }\n        return this.expandChildren;\n\n    }\n\n    /**\n     * @hidden\n     */\n    public isExpanded(record: any): boolean {\n        return this.gridAPI.get_row_expansion_state(record);\n    }\n\n    /**\n     * @hidden\n     */\n    public viewCreatedHandler(args) {\n        if (this.isChildGridRecord(args.context.$implicit)) {\n            const key = args.context.$implicit.rowID;\n            this.childGridTemplates.set(key, args);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public viewMovedHandler(args) {\n        if (this.isChildGridRecord(args.context.$implicit)) {\n            // view was moved, update owner in cache\n            const key = args.context.$implicit.rowID;\n            const cachedData = this.childGridTemplates.get(key);\n            cachedData.owner = args.owner;\n\n            this.childLayoutList.forEach((layout) => {\n                const relatedGrid = this.gridAPI.getChildGridByID(layout.key, args.context.$implicit.rowID);\n                if (relatedGrid && relatedGrid.updateOnRender) {\n                    // Detect changes if `expandChildren` has changed when the grid wasn't visible. This is for performance reasons.\n                    relatedGrid.notifyChanges(true);\n                    relatedGrid.updateOnRender = false;\n                }\n            });\n        }\n    }\n\n    /** @hidden @internal **/\n    public onContainerScroll() {\n        this.hideOverlays();\n    }\n\n    /**\n     * @hidden\n     */\n    public createRow(index: number, data?: any): RowType {\n        let row: RowType;\n        const dataIndex = this._getDataViewIndex(index);\n        const rec: any = data ?? this.dataView[dataIndex];\n\n        if (!row && rec && !rec.childGridsData) {\n            row = new IgxHierarchicalGridRow(this as any, index, rec);\n        }\n\n        return row;\n    }\n\n    /** @hidden @internal */\n    public getChildGrids(inDeph?: boolean) {\n        return this.gridAPI.getChildGrids(inDeph);\n    }\n\n    protected override generateDataFields(data: any[]): string[] {\n        return super.generateDataFields(data).filter((field) => {\n            const layoutsList = this.parentIsland ? this.parentIsland.children : this.childLayoutList;\n            const keys = layoutsList.map((item) => item.key);\n            return keys.indexOf(field) === -1;\n        });\n    }\n\n    protected resizeNotifyHandler() {\n        // do not trigger reflow if element is detached or if it is child grid.\n        if (this.nativeElement?.isConnected && !this.parent) {\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected override initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n        if (this.hasColumnLayouts) {\n            // invalid configuration - hierarchical grid should not allow column layouts\n            // remove column layouts\n            const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n            this.updateColumns(nonColumnLayoutColumns);\n        }\n        super.initColumns(collection, cb);\n    }\n\n\n    protected override setupColumns() {\n        if (this.parentIsland && this.parentIsland.childColumns.length > 0 && !this.autoGenerate) {\n            this.createColumnsList(this.parentIsland.childColumns.toArray());\n        } else {\n            super.setupColumns();\n        }\n    }\n\n    protected override getColumnList() {\n        const childLayouts = this.parent ? this.childLayoutList : this.allLayoutList;\n        const nestedColumns = childLayouts.map((layout) => layout.columnList.toArray());\n        const colsArray = [].concat.apply([], nestedColumns);\n        if (colsArray.length > 0) {\n            const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);\n            return topCols;\n        } else {\n            return this.columnList.toArray()\n        }\n    }\n\n    protected override onColumnsChanged() {\n        Promise.resolve().then(() => {\n            this.updateColumnList();\n        });\n    }\n\n    protected override _shouldAutoSize(renderedHeight) {\n        if (this.isPercentHeight && this.parent) {\n            return true;\n        }\n        return super._shouldAutoSize(renderedHeight);\n    }\n\n    private updateColumnList(recalcColSizes = true) {\n        const childLayouts = this.parent ? this.childLayoutList : this.allLayoutList;\n        const nestedColumns = childLayouts.map((layout) => layout.columnList.toArray());\n        const colsArray = [].concat.apply([], nestedColumns);\n        const colLength = this.columns.length;\n        const topCols = this.columnList.filter((item) => colsArray.indexOf(item) === -1);\n        if (topCols.length > 0) {\n            this.initColumns(topCols, (col: IgxColumnComponent) => this.columnInit.emit(col));\n            if (recalcColSizes && this.columns.length !== colLength) {\n                this.calculateGridSizes(false);\n            }\n        }\n    }\n\n    private _clearSeletionHighlights() {\n        [this.rootGrid, ...this.rootGrid.getChildGrids(true)].forEach(grid => {\n            grid.selectionService.clear();\n            grid.selectionService.activeElement = null;\n            grid.nativeElement.classList.remove('igx-grid__tr--highlighted');\n            grid.highlightedRowID = null;\n            grid.cdr.markForCheck();\n        });\n    }\n}\n","<div class=\"igx-grid__hierarchical-indent\" [ngClass]=\"{'igx-grid__hierarchical-indent--scroll': parentHasScroll}\">\n    <ng-container #container></ng-container>\n</div>\n","<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n<ng-container #toolbarOutlet></ng-container>\n\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n    [grid]=\"this\"\n    [hasMRL]=\"hasColumnLayouts\"\n    [activeDescendant]=\"activeDescendant\"\n    [width]=\"calcWidth\"\n    [pinnedColumnCollection]=\"pinnedColumns\"\n    [unpinnedColumnCollection]=\"unpinnedColumns\"\n    (keydown.meta.c)=\"copyHandler($event)\"\n    (keydown.control.c)=\"copyHandler($event)\"\n    (copy)=\"copyHandler($event)\"\n    (keydown)=\"navigation.headerNavigation($event)\"\n    (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n    <div class=\"igx-grid__tbody-content\"  tabindex=\"0\" (focus)=\"navigation.focusTbody($event)\"\n        (keydown)=\"navigation.handleNavigation($event)\" (dragStop)=\"selectionService.dragMode = $event\"\n        (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n        [style.height.px]=\"totalHeight\" [style.width.px]=\"calcWidth\" #tbody (scroll)=\"preventContainerScroll($event)\">\n        @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n            <span\n                [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n                class=\"igx-grid__scroll-on-drag-left\"></span>\n        }\n        @if (moving && columnInDrag && pinnedColumns.length > 0) {\n            <span\n                [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n                class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedWidth\"></span>\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:[]:sortStrategy:id:pipeTrigger:true; as pinnedData\n            ) {\n                @if (pinnedData.length > 0) {\n                    <div #pinContainer class=\"igx-grid__tr--pinned\"\n                        [ngClass]=\"{ 'igx-grid__tr--pinned-bottom':  !isRowPinningToTop, 'igx-grid__tr--pinned-top': isRowPinningToTop }\"\n                        [style.width.px]=\"calcWidth\">\n                        @for (rowData of pinnedData; track rowData; let rowIndex = $index) {\n                            <ng-container *ngTemplateOutlet=\"pinned_hierarchical_record_template; context: getContext(rowData, rowIndex, true)\">\n                            </ng-container>\n                        }\n                    </div>\n                }\n            }\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n        </ng-container>\n        <ng-template igxGridFor let-rowData let-rowIndex=\"index\" [igxGridForOf]=\"data\n        | gridTransaction:id:pipeTrigger\n        | visibleColumns:hasVisibleColumns\n        | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n        | gridSort:sortingExpressions:[]:sortStrategy:id:pipeTrigger\n        | gridHierarchicalPaging:!!paginator:page:perPage:id:pipeTrigger\n        | gridHierarchical:expansionStates:id:primaryKey:childLayoutKeys:pipeTrigger\n        | gridAddRow:false:pipeTrigger\n        | gridRowPinning:id:false:pipeTrigger\"\n            [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n            [igxForContainerSize]=\"calcHeight\" [igxForItemSize]=\"renderedRowHeight\" [igxForTrackBy]=\"trackChanges\"\n            #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n            <ng-template\n                [igxTemplateOutlet]=\"(isHierarchicalRecord(rowData) ? hierarchical_record_template : (isChildGridRecord(rowData) ? child_record_template : hierarchical_record_template))\"\n                [igxTemplateOutletContext]=\"getContext(rowData, rowIndex, false)\" (viewCreated)=\"viewCreatedHandler($event)\"\n                (viewMoved)=\"viewMovedHandler($event)\" (cachedViewLoaded)=\"cachedViewLoaded($event)\">\n            </ng-template>\n            <!-- <ng-container *igxTemplateOutlet=\"(isHierarchicalRecord(rowData) ? hierarchical_record_template : (isChildGridRecord(rowData) && isExpanded(rowData) ? child_record_template : hierarchical_record_template)); context: getContext(rowData)\"></ng-container> -->\n        </ng-template>\n        <ng-template #hierarchical_record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData>\n            <igx-hierarchical-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [disabled]=\"disabledRow\" [data]=\"rowData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n            </igx-hierarchical-grid-row>\n        </ng-template>\n\n        <ng-template #pinned_hierarchical_record_template let-rowIndex=\"index\" let-rowData>\n            <igx-hierarchical-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:false:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row #pinnedRow>\n            </igx-hierarchical-grid-row>\n        </ng-template>\n        <ng-template #child_record_template let-rowIndex=\"index\" let-rowData>\n            <div [attr.data-rowindex]=\"rowIndex\" (scroll)=\"onContainerScroll()\"\n                [ngClass]=\"{\n                'igx-grid__tr-container': true,\n                'igx-grid__tr--highlighted':isRowHighlighted(rowData)\n            }\">\n                @for (layout of childLayoutList; track layout) {\n                    <igx-child-grid-row [parentGridID]=\"id\" [index]=\"rowIndex\"\n                        [data]=\"rowData\" [layout]=\"layout\" #row>\n                    </igx-child-grid-row>\n                }\n            </div>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n        </ng-container>\n        <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\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 class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n        @if (!this.parent) {\n            <igc-trial-watermark></igc-trial-watermark>\n        }\n    </div>\n    <div igxToggle #loadingOverlay>\n        @if (shouldOverlayLoading) {\n            <igx-circular-bar [indeterminate]=\"true\">\n            </igx-circular-bar>\n        }\n    </div>\n    @if (moving && columnInDrag) {\n        <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n            id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n    }\n    <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n        <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n        <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n            <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n        </div>\n        <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n    </div>\n    <div class=\"igx-grid__addrow-snackbar\">\n        <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n    </div>\n\n    <div igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n    <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\" [attr.aria-activedescendant]=\"activeDescendant\"\n        (keydown)=\"navigation.summaryNav($event)\">\n        @if (hasSummarizedColumns && rootSummariesEnabled) {\n            <igx-grid-summary-row [style.width.px]=\"calcWidth\" [style.height.px]=\"summaryRowHeight\"\n                [gridID]=\"id\" role=\"row\"\n                [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n                class=\"igx-grid__summaries\" #summaryRow>\n            </igx-grid-summary-row>\n        }\n        <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n            [style.width.px]=\"scrollSize\"></div>\n    </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n    <div class=\"igx-grid__scroll-start\" [style.width.px]=\"isPinningToStart ? pinnedWidth : headerFeaturesWidth\" [style.min-width.px]=\"isPinningToStart ? pinnedWidth : headerFeaturesWidth\"></div>\n    <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n        <ng-template igxGridFor [igxGridForOf]=\"[]\" #scrollContainer>\n        </ng-template>\n    </div>\n    <div class=\"igx-grid__scroll-end\" [style.width.px]=\"pinnedWidth\" [style.min-width.px]=\"pinnedWidth\" [hidden]=\"pinnedWidth === 0 || isPinningToStart\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n    <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n    <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n    <ng-container #paginatorOutlet></ng-container>\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 #defaultCollapsedTemplate>\n    <igx-icon family=\"default\" name=\"unfold_more\" role=\"button\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n    <igx-icon\n        family=\"default\"\n        name=\"unfold_less\"\n        role=\"button\"\n        [active]=\"hasExpandedRecords() && hasExpandableChildren\">\n    </igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n    <div igxToggle #rowEditingOverlay>\n        <div [className]=\"bannerClass\">\n            <ng-container\n                *ngTemplateOutlet=\"resolveRowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\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<ng-template #defaultRowEditActions>\n    <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n    <button type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n<ng-template #defaultRowEditTemplate>\n    <div class=\"igx-banner__message\">\n        <span class=\"igx-banner__text\">\n            <ng-container\n                *ngTemplateOutlet=\"this.crudService.row?.getClassName() === 'IgxAddRow' ? rowAddTextTemplate : resolveRowEditText || defaultRowEditText;\n                context: { $implicit: this.crudService.row?.getClassName() !== 'IgxAddRow' ? 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=\"resolveRowEditActions || defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n    <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n    <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n    <div #sink style=\"display: none;\">\n        <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n        <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-action-strip,igc-action-strip\"></ng-content>\n        <ng-content select=\"igx-row-island,igc-row-island\"></ng-content>\n    </div>\n}\n","import { IgxHierarchicalGridComponent } from './hierarchical-grid.component';\nimport { IgxRowIslandComponent } from './row-island.component';\n\nexport * from './events';\nexport * from './hierarchical-grid.component';\nexport * from './row-island.component';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n    NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n    IgxRowDirective,\n    IgxRowEditTextDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTabStopDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxRowExpandedIndicatorDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective,\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective\n} from \"../public_api\";\nimport {\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective,\n    IGX_PAGINATOR_DIRECTIVES\n} from '../../paginator/public_api';\n\n/* NOTE: Hierarchical grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_HIERARCHICAL_GRID_DIRECTIVES = [\n    IgxHierarchicalGridComponent,\n    IgxRowIslandComponent,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTextDirective,\n    IgxRowEditTabStopDirective,\n    // IGX_GRID_COMMON_DIRECTIVES:\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective,\n    // IGX_GRID_VALIDATION_DIRECTIVES:\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumPatternValidatorDirective,\n    // IGX_PAGINATOR_DIRECTIVES:\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n] as const;\n","import { IgxListItemComponent } from './list-item.component';\nimport { IgxDataLoadingTemplateDirective, IgxEmptyListTemplateDirective, IgxListItemLeftPanningTemplateDirective, IgxListItemRightPanningTemplateDirective } from './list.common';\nimport { IgxListActionDirective, IgxListComponent, IgxListLineDirective, IgxListLineSubTitleDirective, IgxListLineTitleDirective, IgxListThumbnailDirective } from './list.component';\n\nexport * from './list.component';\nexport {\n    IgxListBaseDirective,\n    IgxListPanState,\n    IgxEmptyListTemplateDirective,\n    IgxDataLoadingTemplateDirective,\n    IgxListItemLeftPanningTemplateDirective,\n    IgxListItemRightPanningTemplateDirective\n} from './list.common';\nexport * from './list-item.component';\n\n/* NOTE: List directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_LIST_DIRECTIVES = [\n    IgxListComponent,\n    IgxListItemComponent,\n    IgxListThumbnailDirective,\n    IgxListActionDirective,\n    IgxListLineDirective,\n    IgxListLineTitleDirective,\n    IgxListLineSubTitleDirective,\n    IgxDataLoadingTemplateDirective,\n    IgxEmptyListTemplateDirective,\n    IgxListItemLeftPanningTemplateDirective,\n    IgxListItemRightPanningTemplateDirective\n] as const;\n","import {\n    Component,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Output,\n    Directive,\n    ContentChild,\n    booleanAttribute\n} from '@angular/core';\n\nimport { IgxIconComponent } from '../icon/icon.component';\n\n/**\n * IgxActionIcon is a container for the action nav icon of the IgxNavbar.\n */\n@Directive({\n    selector: 'igx-navbar-action,[igxNavbarAction]',\n    standalone: true\n})\nexport class IgxNavbarActionDirective { }\n\n@Directive({\n    selector: 'igx-navbar-title,[igxNavbarTitle]',\n    standalone: true\n})\nexport class IgxNavbarTitleDirective { }\n\nlet NEXT_ID = 0;\n/**\n * **Ignite UI for Angular Navbar** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navbar.html)\n *\n * The Ignite UI Navbar is most commonly used to provide an app header with a hamburger menu and navigation\n * state such as a \"Go Back\" button. It also supports other actions represented by icons.\n *\n * Example:\n * ```html\n * <igx-navbar title=\"Sample App\" actionButtonIcon=\"menu\">\n *   <igx-icon>search</igx-icon>\n *   <igx-icon>favorite</igx-icon>\n *   <igx-icon>more_vert</igx-icon>\n * </igx-navbar>\n * ```\n */\n\n@Component({\n    selector: 'igx-navbar',\n    templateUrl: 'navbar.component.html',\n    styles: [`\n        :host {\n            display: block;\n            width: 100%;\n        }\n    `\n    ],\n    imports: [IgxIconComponent]\n})\n\nexport class IgxNavbarComponent {\n    /**\n     * Sets the value of the `id` attribute. If not provided it will be automatically generated.\n     * ```html\n     * <igx-navbar [id]=\"'igx-navbar-12'\" title=\"Sample App\" actionButtonIcon=\"menu\">\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-navbar-${NEXT_ID++}`;\n\n    /**\n     * Sets the icon of the `IgxNavbarComponent`.\n     * ```html\n     * <igx-navbar [title]=\"currentView\" actionButtonIcon=\"arrow_back\"></igx-navbar>\n     * ```\n     */\n    @Input() public actionButtonIcon: string;\n\n    /**\n     * Sets the title of the `IgxNavbarComponent`.\n     * ```html\n     * <igx-navbar title=\"Sample App\" actionButtonIcon=\"menu\">\n     * ```\n     */\n    @Input() public title: string;\n\n    /**\n     * The event that will be thrown when the action is executed,\n     * provides reference to the `IgxNavbar` component as argument\n     * ```typescript\n     * public actionExc(event){\n     *     alert(\"Action Execute!\");\n     * }\n     *  //..\n     * ```\n     * ```html\n     * <igx-navbar (action)=\"actionExc($event)\" title=\"Sample App\" actionButtonIcon=\"menu\">\n     * ```\n     */\n    @Output() public action = new EventEmitter<IgxNavbarComponent>();\n\n    /**\n     * Sets the titleId of the `IgxNavbarComponent`. If not set it will be automatically generated.\n     * ```html\n     * <igx-navbar [titleId]=\"'igx-navbar-7'\" title=\"Sample App\" actionButtonIcon=\"menu\">\n     * ```\n     */\n    @Input()\n    public titleId = `igx-navbar-title-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxNavbarActionDirective, { read: IgxNavbarActionDirective })\n    protected actionIconTemplate: IgxNavbarActionDirective;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxNavbarTitleDirective, { read: IgxNavbarTitleDirective })\n    protected titleContent: IgxNavbarTitleDirective;\n\n    private isVisible = true;\n\n    /**\n     * Sets whether the action button of the `IgxNavbarComponent` is visible.\n     * ```html\n     * <igx-navbar [title]=\"currentView\" [isActionButtonVisible]=\"'false'\"></igx-navbar>\n     * ```\n     */\n    public set isActionButtonVisible(value: boolean) {\n        this.isVisible = value;\n    }\n\n    /**\n     * Returns whether the `IgxNavbarComponent` action button is visible, true/false.\n     * ```typescript\n     *  @ViewChild(\"MyChild\")\n     * public navBar: IgxNavbarComponent;\n     * ngAfterViewInit(){\n     *     let actionButtonVisibile = this.navBar.isActionButtonVisible;\n     * }\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get isActionButtonVisible(): boolean {\n        if (this.actionIconTemplate || !this.actionButtonIcon) {\n            return false;\n        }\n        return this.isVisible;\n    }\n\n    public get isTitleContentVisible(): boolean {\n        return this.titleContent ? true : false;\n    }\n\n    /**\n     * @hidden\n     */\n    public _triggerAction() {\n        this.action.emit(this);\n    }\n}\n\n","<nav class=\"igx-navbar\" role=\"navigation\" [attr.aria-labelledby]=\"titleId\">\n    <div class=\"igx-navbar__left\">\n        @if (isActionButtonVisible) {\n            <igx-icon (click)=\"_triggerAction()\">\n                {{actionButtonIcon}}\n            </igx-icon>\n        }\n        <ng-content select=\"igx-navbar-action, [igxNavbarAction]\"></ng-content>\n    </div>\n    <div class=\"igx-navbar__middle\">\n        @if (!isTitleContentVisible) {\n            <h1\n                class=\"igx-navbar__title\"\n                [attr.id]=\"titleId\">\n                {{ title }}\n            </h1>\n        }\n        <ng-content select=\"igx-navbar-title, [igxNavbarTitle]\"></ng-content>\n    </div>\n    <div class=\"igx-navbar__right\">\n        <ng-content></ng-content>\n    </div>\n</nav>\n","import { IgxNavbarActionDirective, IgxNavbarComponent, IgxNavbarTitleDirective } from './navbar.component';\n\nexport * from './navbar.component';\n\n/* NOTE: Navbar directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_NAVBAR_DIRECTIVES = [\n    IgxNavbarComponent,\n    IgxNavbarActionDirective,\n    IgxNavbarTitleDirective\n] as const;\n","import { Directive, HostBinding, Input, TemplateRef, booleanAttribute } from '@angular/core';\n\n@Directive({\n    selector: '[igxDrawerItem]',\n    exportAs: 'igxDrawerItem',\n    standalone: true\n})\nexport class IgxNavDrawerItemDirective {\n\n    /**\n     * Styles a navigation drawer item as selected.\n     * If not set, `active` will have default value `false`.\n     *\n     * @example\n     * ```html\n     * <span igxDrawerItem [active]=\"true\">Active Item</span>\n     * ```\n     */\n    @Input({ transform: booleanAttribute }) public active = false;\n\n    /**\n     * Disables a navigation drawer item.\n     * If not set, `disabled` will have default value `false`.\n     *\n     * @example\n     * ```html\n     * <span igxDrawerItem [disabled]=\"true\">Disabled Item</span>\n     * ```\n     */\n    @Input({ transform: booleanAttribute }) public disabled = false;\n\n    /**\n     * Styles a navigation drawer item as a group header.\n     * If not set, `isHeader` will have default value `false`.\n     *\n     * @example\n     * ```html\n     * <span igxDrawerItem [isHeader]=\"true\">Header</span>\n     * ```\n     */\n    @Input({ transform: booleanAttribute }) public isHeader = false;\n\n    /**\n     * @hidden\n     */\n    public readonly activeClass = 'igx-nav-drawer__item--active';\n\n     /**\n     * @hidden\n     */\n     public readonly disabledClass = 'igx-nav-drawer__item--disabled';\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-nav-drawer__item')\n    public get defaultCSS(): boolean {\n        return !this.active && !this.isHeader;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-nav-drawer__item--active')\n    public get currentCSS(): boolean {\n        return this.active && !this.isHeader && !this.disabled;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-nav-drawer__item--header')\n    public get headerCSS(): boolean {\n        return this.isHeader;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-nav-drawer__item--disabled')\n    public get disabledCSS(): boolean {\n        return this.disabled;\n    }\n}\n\n@Directive({\n    selector: '[igxDrawer]',\n    standalone: true\n})\nexport class IgxNavDrawerTemplateDirective {\n\n    constructor(public template: TemplateRef<any>) {\n    }\n}\n\n@Directive({\n    selector: '[igxDrawerMini]',\n    standalone: true\n})\nexport class IgxNavDrawerMiniTemplateDirective {\n\n    constructor(public template: TemplateRef<any>) {\n    }\n}\n","import {\n    AfterContentInit,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    SimpleChange,\n    ViewChild,\n    Renderer2,\n    booleanAttribute\n} from '@angular/core';\nimport { fromEvent, interval, Subscription } from 'rxjs';\nimport { debounce } from 'rxjs/operators';\nimport { IgxNavigationService, IToggleView } from '../core/navigation';\nimport { HammerGesturesManager } from '../core/touch';\nimport { IgxNavDrawerMiniTemplateDirective, IgxNavDrawerTemplateDirective, IgxNavDrawerItemDirective } from './navigation-drawer.directives';\nimport { PlatformUtil } from '../core/utils';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { HammerInput } from '../core/touch-annotations';\n\nlet NEXT_ID = 0;\n/**\n * **Ignite UI for Angular Navigation Drawer** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navdrawer)\n *\n * The Ignite UI Navigation Drawer is a collapsible side navigation container commonly used in combination with the Navbar.\n *\n * Example:\n * ```html\n * <igx-nav-drawer id=\"navigation\" [isOpen]=\"true\">\n *   <ng-template igxDrawer>\n *     <nav>\n *       <span igxDrawerItem [isHeader]=\"true\">Email</span>\n *       <span igxDrawerItem igxRipple>Inbox</span>\n *       <span igxDrawerItem igxRipple>Deleted</span>\n *       <span igxDrawerItem igxRipple>Sent</span>\n *     </nav>\n *   </ng-template>\n * </igx-nav-drawer>\n * ```\n */\n@Component({\n    providers: [HammerGesturesManager],\n    selector: 'igx-nav-drawer',\n    templateUrl: 'navigation-drawer.component.html',\n    styles: [`\n        :host {\n            display: block;\n            height: 100%;\n        }\n    `],\n    imports: [IgxNavDrawerItemDirective, NgTemplateOutlet]\n})\nexport class IgxNavigationDrawerComponent implements\n    IToggleView,\n    OnInit,\n    AfterContentInit,\n    OnDestroy,\n    OnChanges {\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-nav-drawer')\n    public cssClass = true;\n\n    /**\n     * ID of the component\n     *\n     * ```typescript\n     * // get\n     * let myNavDrawerId = this.navdrawer.id;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     *  <igx-nav-drawer id='navdrawer'></igx-nav-drawer>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input() public id = `igx-nav-drawer-${NEXT_ID++}`;\n\n    /**\n     * Position of the Navigation Drawer. Can be \"left\"(default) or \"right\".\n     *\n     * ```typescript\n     * // get\n     * let myNavDrawerPosition = this.navdrawer.position;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [position]=\"'left'\"></igx-nav-drawer>\n     * ```\n     */\n    @Input() public position = 'left';\n\n    /**\n     * Enables the use of touch gestures to manipulate the drawer:\n     * - swipe/pan from edge to open, swipe-toggle and pan-drag.\n     *\n     * ```typescript\n     * // get\n     * let gesturesEnabled = this.navdrawer.enableGestures;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [enableGestures]='true'></igx-nav-drawer>\n     * ```\n     */\n    @Input({ transform: booleanAttribute }) public enableGestures = true;\n\n    /**\n     * @hidden\n     */\n    @Output() public isOpenChange = new EventEmitter<boolean>();\n\n    /**\n     * Minimum device width required for automatic pin to be toggled.\n     * Default is 1024, can be set to a falsy value to disable this behavior.\n     *\n     * ```typescript\n     * // get\n     * let navDrawerPinThreshold = this.navdrawer.pinThreshold;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [pinThreshold]='1024'></igx-nav-drawer>\n     * ```\n     */\n    @Input() public pinThreshold = 1024;\n\n    /**\n     * When pinned the drawer is relatively positioned instead of sitting above content.\n     * May require additional layout styling.\n     *\n     * ```typescript\n     * // get\n     * let navDrawerIsPinned = this.navdrawer.pin;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [pin]='false'></igx-nav-drawer>\n     * ```\n     */\n    @Input({ transform: booleanAttribute }) public pin = false;\n\n    /**\n     * Width of the drawer in its open state.\n     *\n     * ```typescript\n     * // get\n     * let navDrawerWidth = this.navdrawer.width;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [width]=\"'228px'\"></igx-nav-drawer>\n     * ```\n     */\n    private _width: string;\n\n    @Input()\n    public get width() {\n        return this._width;\n    }\n    public set width(value: string) {\n        this._width = value;\n    }\n\n\n    /**\n     * Enables/disables the animation, when toggling the drawer. Set to `false` by default.\n     * ````html\n     * <igx-nav-drawer [disableAnimation]=\"true\"></igx-nav-drawer>\n     * ````\n     */\n    @HostBinding('class.igx-nav-drawer--disable-animation')\n    @Input({ transform: booleanAttribute }) public disableAnimation = false;\n\n    /**\n     * Width of the drawer in its mini state.\n     *\n     * ```typescript\n     * // get\n     * let navDrawerMiniWidth = this.navdrawer.miniWidth;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [miniWidth]=\"'34px'\"></igx-nav-drawer>\n     * ```\n     */\n    @Input() public miniWidth: string;\n\n    /**\n     * Pinned state change output for two-way binding.\n     *\n     * ```html\n     * <igx-nav-drawer [(pin)]='isPinned'></igx-nav-drawer>\n     * ```\n     */\n    @Output() public pinChange = new EventEmitter<boolean>(true);\n    /**\n     * Event fired as the Navigation Drawer is about to open.\n     *\n     * ```html\n     *  <igx-nav-drawer (opening)='onOpening()'></igx-nav-drawer>\n     * ```\n     */\n    @Output() public opening = new EventEmitter();\n    /**\n     * Event fired when the Navigation Drawer has opened.\n     *\n     * ```html\n     * <igx-nav-drawer (opened)='onOpened()'></igx-nav-drawer>\n     * ```\n     */\n    @Output() public opened = new EventEmitter();\n    /**\n     * Event fired as the Navigation Drawer is about to close.\n     *\n     * ```html\n     * <igx-nav-drawer (closing)='onClosing()'></igx-nav-drawer>\n     * ```\n     */\n    @Output() public closing = new EventEmitter();\n    /**\n     * Event fired when the Navigation Drawer has closed.\n     *\n     * ```html\n     * <igx-nav-drawer (closed)='onClosed()'></igx-nav-drawer>\n     * ```\n     */\n    @Output() public closed = new EventEmitter();\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxNavDrawerTemplateDirective, { read: IgxNavDrawerTemplateDirective })\n    protected contentTemplate: IgxNavDrawerTemplateDirective;\n\n    @ViewChild('aside', { static: true }) private _drawer: ElementRef;\n    @ViewChild('overlay', { static: true }) private _overlay: ElementRef;\n    @ViewChild('dummy', { static: true }) private _styleDummy: ElementRef;\n\n    private _isOpen = false;\n\n    /**\n     * State of the drawer.\n     *\n     * ```typescript\n     * // get\n     * let navDrawerIsOpen = this.navdrawer.isOpen;\n     * ```\n     *\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [isOpen]='false'></igx-nav-drawer>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <!--set-->\n     * <igx-nav-drawer [(isOpen)]='model.isOpen'></igx-nav-drawer>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get isOpen() {\n        return this._isOpen;\n    }\n    public set isOpen(value) {\n        this._isOpen = value;\n        this.isOpenChange.emit(this._isOpen);\n    }\n\n    /**\n     * Returns nativeElement of the component.\n     *\n     * @hidden\n     */\n    public get element() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get template() {\n        if (this.miniTemplate && !this.isOpen) {\n            return this.miniTemplate.template;\n        } else if (this.contentTemplate) {\n            return this.contentTemplate.template;\n        }\n    }\n\n    private _miniTemplate: IgxNavDrawerMiniTemplateDirective;\n    /**\n     * @hidden\n     */\n    public get miniTemplate(): IgxNavDrawerMiniTemplateDirective {\n        return this._miniTemplate;\n    }\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxNavDrawerMiniTemplateDirective, { read: IgxNavDrawerMiniTemplateDirective })\n    public set miniTemplate(v: IgxNavDrawerMiniTemplateDirective) {\n        this._miniTemplate = v;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-nav-drawer--mini')\n    public get isMini(): boolean {\n        return !!this._miniTemplate && !this.isOpen;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-nav-drawer--pinned')\n    public get pinned(): boolean {\n        return !!this.pin;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.--igx-nav-drawer-size')\n    public get normalSize() {\n        if (!this.isOpen) {\n            return '0px';\n        }\n\n        return this.width;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.--igx-nav-drawer-size--mini')\n    public get miniSize() {\n        if (this.miniTemplate && this.miniWidth) {\n            return this.miniWidth;\n        }\n    }\n\n    /** @hidden */\n    @HostBinding('style.order')\n    public get isPinnedRight() {\n        return this.pin && this.position === 'right' ? '1' : '0';\n    }\n\n    private _gesturesAttached = false;\n    private _widthCache: { width: number; miniWidth: number; windowWidth: number } = { width: null, miniWidth: null, windowWidth: null };\n    private _resizeObserver: Subscription;\n    private css: { [name: string]: string } = {\n        drawer: 'igx-nav-drawer__aside',\n        mini: 'igx-nav-drawer__aside--mini',\n        overlay: 'igx-nav-drawer__overlay',\n        styleDummy: 'igx-nav-drawer__style-dummy'\n    };\n\n    /**\n     * @hidden\n     */\n    public get drawer() {\n        return this._drawer.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get overlay() {\n        return this._overlay.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public get styleDummy() {\n        return this._styleDummy.nativeElement;\n    }\n\n    /** Pan animation properties */\n    private _panning = false;\n    private _panStartWidth: number;\n    private _panLimit: number;\n\n    /**\n     * Property to decide whether to change width or translate the drawer from pan gesture.\n     *\n     * @hidden\n     */\n    public get hasAnimateWidth(): boolean {\n        return this.pin || !!this.miniTemplate;\n    }\n\n    private _maxEdgeZone = 50;\n    /**\n     * Used for touch gestures (swipe and pan).\n     * Defaults to 50 (in px) and is extended to at least 110% of the mini template width if available.\n     *\n     * @hidden\n     */\n    public get maxEdgeZone() {\n        return this._maxEdgeZone;\n    }\n\n    /**\n     * Gets the Drawer width for specific state.\n     * Will attempt to evaluate requested state and cache.\n     *\n     *\n     * @hidden\n     */\n    public get expectedWidth() {\n        return this.getExpectedWidth(false);\n    }\n\n    /**\n     * Get the Drawer mini width for specific state.\n     * Will attempt to evaluate requested state and cache.\n     *\n     * @hidden\n     */\n    public get expectedMiniWidth() {\n        return this.getExpectedWidth(true);\n    }\n\n    /**\n     * @hidden\n     */\n    public get touchManager() {\n        return this._touchManager;\n    }\n\n    /**\n     * Exposes optional navigation service\n     *\n     * @hidden\n     */\n    public get state() {\n        return this._state;\n    }\n\n    constructor(\n        @Inject(ElementRef) private elementRef: ElementRef,\n        @Optional() private _state: IgxNavigationService,\n        protected renderer: Renderer2,\n        private _touchManager: HammerGesturesManager,\n        private platformUtil: PlatformUtil) {\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        // DOM and @Input()-s initialized\n        if (this._state) {\n            this._state.add(this.id, this);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit() {\n        // wait for template and ng-content to be ready\n        this.updateEdgeZone();\n        this.checkPinThreshold();\n\n        this.ensureEvents();\n\n        // TODO: apply platform-safe Ruler from http://plnkr.co/edit/81nWDyreYMzkunihfRgX?p=preview\n        // (https://github.com/angular/angular/issues/6515), blocked by https://github.com/angular/angular/issues/6904\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._touchManager.destroy();\n        if (this._state) {\n            this._state.remove(this.id);\n        }\n        if (this._resizeObserver) {\n            this._resizeObserver.unsubscribe();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes: { [propName: string]: SimpleChange }) {\n        // simple settings can come from attribute set (rather than binding), make sure boolean props are converted\n        if (changes.enableGestures && changes.enableGestures.currentValue !== undefined) {\n            this.enableGestures = !!(this.enableGestures && this.enableGestures.toString() === 'true');\n            this.ensureEvents();\n        }\n        if (changes.pin && changes.pin.currentValue !== undefined) {\n            this.pin = !!(this.pin && this.pin.toString() === 'true');\n            if (this.pin) {\n                this._touchManager.destroy();\n                this._gesturesAttached = false;\n            } else {\n                this.ensureEvents();\n            }\n        }\n\n        if (changes.pinThreshold) {\n            if (this.pinThreshold) {\n                this.ensureEvents();\n                this.checkPinThreshold();\n            }\n        }\n\n        if (changes.miniWidth) {\n            this.updateEdgeZone();\n        }\n    }\n\n    /**\n     * Toggle the open state of the Navigation Drawer.\n     *\n     * ```typescript\n     * this.navdrawer.toggle();\n     * ```\n     */\n    public toggle() {\n        if (this.isOpen) {\n            this.close();\n        } else {\n            this.open();\n        }\n    }\n\n    /**\n     * Open the Navigation Drawer. Has no effect if already opened.\n     *\n     * ```typescript\n     * this.navdrawer.open();\n     * ```\n     */\n    public open() {\n        if (this._panning) {\n            this.resetPan();\n        }\n\n        if (this.isOpen) {\n            return;\n        }\n\n        this.opening.emit();\n        this.isOpen = true;\n\n        // TODO: Switch to animate API when available\n        // var animationCss = this.animate.css();\n        //     animationCss\n        //         .setStyles({'width':'50px'}, {'width':'400px'})\n        //         .start(this.elementRef.nativeElement)\n        //         .onComplete(() => animationCss.setToStyles({'width':'auto'}).start(this.elementRef.nativeElement));\n\n        this.elementRef.nativeElement.addEventListener('transitionend', this.toggleOpenedEvent, false);\n\n        requestAnimationFrame(()=>{});\n    }\n\n    /**\n     * Close the Navigation Drawer. Has no effect if already closed.\n     *\n     * ```typescript\n     * this.navdrawer.close();\n     * ```\n     */\n    public close() {\n        if (this._panning) {\n            this.resetPan();\n        }\n\n        if (!this.isOpen) {\n            return;\n        }\n\n        this.closing.emit();\n\n        this.isOpen = false;\n        this.elementRef.nativeElement.addEventListener('transitionend', this.toggleClosedEvent, false);\n    }\n\n    /**\n     * @hidden\n     */\n    protected set_maxEdgeZone(value: number) {\n        this._maxEdgeZone = value;\n    }\n\n    /**\n     * Get the Drawer width for specific state. Will attempt to evaluate requested state and cache.\n     *\n     * @hidden\n     * @param [mini] - Request mini width instead\n     */\n    protected getExpectedWidth(mini?: boolean): number {\n        if (mini) {\n            if (!this.miniTemplate) {\n                return 0;\n            }\n            if (this.miniWidth) {\n                return parseFloat(this.miniWidth);\n            } else {\n                // if (!this.isOpen) { // This WON'T work due to transition timings...\n                //     return this.elementRef.nativeElement.children[1].offsetWidth;\n                // } else {\n                if (this._widthCache.miniWidth === null) {\n                    // force class for width calc. TODO?\n                    // force class for width calc. TODO?\n                    this.renderer.addClass(this.styleDummy, this.css.drawer);\n                    this.renderer.addClass(this.styleDummy, this.css.mini);\n                    this._widthCache.miniWidth = this.styleDummy.offsetWidth;\n                    this.renderer.removeClass(this.styleDummy, this.css.drawer);\n                    this.renderer.removeClass(this.styleDummy, this.css.mini);\n                }\n                return this._widthCache.miniWidth;\n            }\n        } else {\n            if (this.width) {\n                return parseFloat(this.width);\n            } else {\n                if (this._widthCache.width === null) {\n                    // force class for width calc. TODO?\n                    // force class for width calc. TODO?\n                    this.renderer.addClass(this.styleDummy, this.css.drawer);\n                    this._widthCache.width = this.styleDummy.offsetWidth;\n                    this.renderer.removeClass(this.styleDummy, this.css.drawer);\n                }\n                return this._widthCache.width;\n            }\n        }\n    }\n\n    private getWindowWidth() {\n        return (window.innerWidth > 0) ? window.innerWidth : screen.width;\n    }\n\n    /**\n     * Get current Drawer width.\n     */\n    private getDrawerWidth(): number {\n        return this.drawer.offsetWidth;\n    }\n\n    private ensureEvents() {\n        // set listeners for swipe/pan only if needed, but just once\n        if (this.enableGestures && !this.pin && !this._gesturesAttached) {\n            // Built-in manager handler(L20887) causes endless loop and max stack exception.\n            // https://github.com/angular/angular/issues/6993\n            // Use ours for now (until beta.10):\n            // this.renderer.listen(document, \"swipe\", this.swipe);\n            this._touchManager.addGlobalEventListener('document', 'swipe', this.swipe);\n            this._gesturesAttached = true;\n\n            // this.renderer.listen(document, \"panstart\", this.panstart);\n            // this.renderer.listen(document, \"pan\", this.pan);\n            this._touchManager.addGlobalEventListener('document', 'panstart', this.panstart);\n            this._touchManager.addGlobalEventListener('document', 'panmove', this.pan);\n            this._touchManager.addGlobalEventListener('document', 'panend', this.panEnd);\n        }\n        if (!this._resizeObserver && this.platformUtil.isBrowser) {\n            this._resizeObserver = fromEvent(window, 'resize').pipe(debounce(() => interval(150)))\n                .subscribe((value) => {\n                    this.checkPinThreshold(value);\n                });\n        }\n    }\n\n    private updateEdgeZone() {\n        let maxValue;\n\n        if (this.miniTemplate) {\n            maxValue = Math.max(this._maxEdgeZone, this.getExpectedWidth(true) * 1.1);\n            this.set_maxEdgeZone(maxValue);\n        }\n    }\n\n    private checkPinThreshold = (evt?: Event) => {\n        if (!this.platformUtil.isBrowser) {\n            return;\n        }\n        let windowWidth;\n        if (this.pinThreshold) {\n            windowWidth = this.getWindowWidth();\n            if (evt && this._widthCache.windowWidth === windowWidth) {\n                return;\n            }\n            this._widthCache.windowWidth = windowWidth;\n            if (!this.pin && windowWidth >= this.pinThreshold) {\n                this.pin = true;\n                this.pinChange.emit(true);\n            } else if (this.pin && windowWidth < this.pinThreshold) {\n                this.pin = false;\n                this.pinChange.emit(false);\n            }\n        }\n    };\n\n    private swipe = (evt: HammerInput) => {\n        // TODO: Could also force input type: http://stackoverflow.com/a/27108052\n        if (!this.enableGestures || evt.pointerType !== 'touch') {\n            return;\n        }\n\n        // HammerJS swipe is horizontal-only by default, don't check deltaY\n        let deltaX;\n        let startPosition;\n        if (this.position === 'right') {\n            // when on the right use inverse of deltaX\n            deltaX = -evt.deltaX;\n            startPosition = this.getWindowWidth() - (evt.center.x + evt.distance);\n        } else {\n            deltaX = evt.deltaX;\n            startPosition = evt.center.x - evt.distance;\n        }\n        // only accept closing swipe (ignoring minEdgeZone) when the drawer is expanded:\n        if ((this.isOpen && deltaX < 0) ||\n            // positive deltaX from the edge:\n            (deltaX > 0 && startPosition < this.maxEdgeZone)) {\n            this.toggle();\n        }\n    };\n\n    private panstart = (evt: HammerInput) => { // TODO: test code\n        if (!this.enableGestures || this.pin || evt.pointerType !== 'touch') {\n            return;\n        }\n        const startPosition = this.position === 'right' ? this.getWindowWidth() - (evt.center.x + evt.distance)\n            : evt.center.x - evt.distance;\n\n        // cache width during animation, flag to allow further handling\n        if (this.isOpen || (startPosition < this.maxEdgeZone)) {\n            this._panning = true;\n            this._panStartWidth = this.getExpectedWidth(!this.isOpen);\n            this._panLimit = this.getExpectedWidth(this.isOpen);\n\n            this.renderer.addClass(this.overlay, 'panning');\n            this.renderer.addClass(this.drawer, 'panning');\n        }\n    };\n\n    private pan = (evt: HammerInput) => {\n        // TODO: input.deltaX = prevDelta.x + (center.x - offset.x);\n        // get actual delta (not total session one) from event?\n        // pan WILL also fire after a full swipe, only resize on flag\n        if (!this._panning) {\n            return;\n        }\n        const right: boolean = this.position === 'right';\n        // when on the right use inverse of deltaX\n        const deltaX = right ? -evt.deltaX : evt.deltaX;\n        let newX;\n        let percent;\n        const visibleWidth = this._panStartWidth + deltaX;\n\n        if (this.isOpen && deltaX < 0) {\n            // when visibleWidth hits limit - stop animating\n            if (visibleWidth <= this._panLimit) {\n                return;\n            }\n\n            if (this.hasAnimateWidth) {\n                percent = (visibleWidth - this._panLimit) / (this._panStartWidth - this._panLimit);\n                newX = visibleWidth;\n            } else {\n                percent = visibleWidth / this._panStartWidth;\n                newX = evt.deltaX;\n            }\n            this.setXSize(newX, percent.toPrecision(2));\n\n        } else if (!this.isOpen && deltaX > 0) {\n            // when visibleWidth hits limit - stop animating\n            if (visibleWidth >= this._panLimit) {\n                return;\n            }\n\n            if (this.hasAnimateWidth) {\n                percent = (visibleWidth - this._panStartWidth) / (this._panLimit - this._panStartWidth);\n                newX = visibleWidth;\n            } else {\n                percent = visibleWidth / this._panLimit;\n                newX = (this._panLimit - visibleWidth) * (right ? 1 : -1);\n            }\n            this.setXSize(newX, percent.toPrecision(2));\n        }\n    };\n\n    private panEnd = (evt: HammerInput) => {\n        if (this._panning) {\n            const deltaX = this.position === 'right' ? -evt.deltaX : evt.deltaX;\n            const visibleWidth: number = this._panStartWidth + deltaX;\n            this.resetPan();\n\n            // check if pan brought the drawer to 50%\n            if (this.isOpen && visibleWidth <= this._panStartWidth / 2) {\n                this.close();\n            } else if (!this.isOpen && visibleWidth >= this._panLimit / 2) {\n                this.open();\n            }\n            this._panStartWidth = null;\n        }\n    };\n\n    private resetPan() {\n        this._panning = false;\n        /* styles fail to apply when set on parent due to extra attributes, prob ng bug */\n        /* styles fail to apply when set on parent due to extra attributes, prob ng bug */\n        this.renderer.removeClass(this.overlay, 'panning');\n        this.renderer.removeClass(this.drawer, 'panning');\n        this.setXSize(0, '');\n    }\n\n    /**\n     * Sets the absolute position or width in case the drawer doesn't change position.\n     *\n     * @param x the number pixels to translate on the X axis or the width to set. 0 width will clear the style instead.\n     * @param opacity optional value to apply to the overlay\n     */\n    private setXSize(x: number, opacity?: string) {\n        // Angular polyfills patches window.requestAnimationFrame, but switch to DomAdapter API (TODO)\n        window.requestAnimationFrame(() => {\n            if (this.hasAnimateWidth) {\n                this.renderer.setStyle(this.drawer, 'width', x ? Math.abs(x) + 'px' : '');\n            } else {\n                this.renderer.setStyle(this.drawer, 'transform', x ? 'translate3d(' + x + 'px,0,0)' : '');\n                this.renderer.setStyle(this.drawer, '-webkit-transform', x ? 'translate3d(' + x + 'px,0,0)' : '');\n            }\n            if (opacity !== undefined) {\n                this.renderer.setStyle(this.overlay, 'opacity', opacity);\n            }\n        });\n    }\n\n    private toggleOpenedEvent = () => {\n        this.elementRef.nativeElement.removeEventListener('transitionend', this.toggleOpenedEvent, false);\n        this.opened.emit();\n    };\n\n    private toggleClosedEvent = () => {\n        this.elementRef.nativeElement.removeEventListener('transitionend', this.toggleClosedEvent, false);\n        this.closed.emit();\n    };\n}\n","<ng-template #defaultItemsTemplate>\n    <div igxDrawerItem [isHeader]=\"true\">Navigation Drawer</div>\n    <div igxDrawerItem> Start by adding</div>\n    <div igxDrawerItem> <code>&lt;ng-template igxDrawer&gt;</code> </div>\n    <div igxDrawerItem> And some items inside </div>\n    <div igxDrawerItem> Style with igxDrawerItem </div>\n    <div igxDrawerItem> and igxRipple directives</div>\n    <div igxDrawerItem [disabled]=\"true\">Disabled Item</div>\n</ng-template>\n\n<div [hidden]=\"pin\"\n    class=\"igx-nav-drawer__overlay\"\n    [class.igx-nav-drawer__overlay--hidden]=\"!isOpen\"\n    [class.igx-nav-drawer--disable-animation]=\"disableAnimation\"\n    (click)=\"close()\" #overlay>\n</div>\n<nav\n    class=\"igx-nav-drawer__aside\"\n    [class.igx-nav-drawer__aside--collapsed]=\"!miniTemplate && !isOpen\"\n    [class.igx-nav-drawer__aside--mini]=\"miniTemplate && !isOpen\"\n    [class.igx-nav-drawer__aside--normal]=\"!miniTemplate || isOpen\"\n    [class.igx-nav-drawer__aside--pinned]=\"pin\"\n    [class.igx-nav-drawer__aside--right]=\"position === 'right'\" #aside\n    [class.igx-nav-drawer--disable-animation]=\"disableAnimation\">\n\n    <ng-container *ngTemplateOutlet=\"template || defaultItemsTemplate\"></ng-container>\n</nav>\n<div class=\"igx-nav-drawer__style-dummy\" #dummy></div>\n","import { IgxNavigationDrawerComponent } from './navigation-drawer.component';\nimport { IgxNavDrawerItemDirective, IgxNavDrawerMiniTemplateDirective, IgxNavDrawerTemplateDirective } from './navigation-drawer.directives';\n\nexport * from './navigation-drawer.component';\nexport * from './navigation-drawer.directives';\n\n/* NOTE: Navigation drawer directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_NAVIGATION_DRAWER_DIRECTIVES = [\n    IgxNavigationDrawerComponent,\n    IgxNavDrawerItemDirective,\n    IgxNavDrawerMiniTemplateDirective,\n    IgxNavDrawerTemplateDirective\n] as const;\n","import { IgxProgressBarGradientDirective, IgxProgressBarTextTemplateDirective } from './progressbar.common';\nimport { IgxCircularProgressBarComponent, IgxLinearProgressBarComponent } from './progressbar.component';\n\nexport * from './progressbar.common';\nexport {\n    IgxTextAlign,\n    IgxProgressType,\n    IChangeProgressEventArgs,\n    IgxLinearProgressBarComponent,\n    IgxCircularProgressBarComponent\n} from './progressbar.component';\n\n/* NOTE: Progress bar (linear and circular) directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_PROGRESS_BAR_DIRECTIVES = [\n    IgxLinearProgressBarComponent,\n    IgxCircularProgressBarComponent,\n    IgxProgressBarTextTemplateDirective,\n    IgxProgressBarGradientDirective\n] as const;\n\n/* NOTE: Linear progress bar directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_LINEAR_PROGRESS_BAR_DIRECTIVES = [\n    IgxLinearProgressBarComponent,\n    IgxProgressBarGradientDirective\n] as const;\n\n/* NOTE: Circular progress bar directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_CIRCULAR_PROGRESS_BAR_DIRECTIVES = [\n    IgxCircularProgressBarComponent,\n    IgxProgressBarTextTemplateDirective,\n    IgxProgressBarGradientDirective\n] as const;\n","import { Directive } from '@angular/core';\nimport { mkenum } from '../core/utils';\n\n/**\n * Template directive that allows you to set a custom template representing the lower label value of the {@link IgxSliderComponent}\n *\n * ```html\n * <igx-slider>\n *  <ng-template igxSliderThumbFrom let-value let-labels>{{value}}</ng-template>\n * </igx-slider>\n * ```\n *\n * @context {@link IgxSliderComponent.context}\n */\n@Directive({\n    selector: '[igxSliderThumbFrom]',\n    standalone: true\n})\nexport class IgxThumbFromTemplateDirective {}\n\n/**\n * Template directive that allows you to set a custom template representing the upper label value of the {@link IgxSliderComponent}\n *\n * ```html\n * <igx-slider>\n *  <ng-template igxSliderThumbTo let-value let-labels>{{value}}</ng-template>\n * </igx-slider>\n * ```\n *\n * @context {@link IgxSliderComponent.context}\n */\n@Directive({\n    selector: '[igxSliderThumbTo]',\n    standalone: true\n})\nexport class IgxThumbToTemplateDirective {}\n\n/**\n * Template directive that allows you to set a custom template, represeting primary/secondary tick labels of the {@link IgxSliderComponent}\n *\n * @context {@link IgxTicksComponent.context}\n */\n@Directive({\n    selector: '[igxSliderTickLabel]',\n    standalone: true\n})\nexport class IgxTickLabelTemplateDirective {}\n\nexport interface IRangeSliderValue {\n    lower: number;\n    upper: number;\n}\n\nexport interface ISliderValueChangeEventArgs {\n    oldValue: number | IRangeSliderValue;\n    value: number | IRangeSliderValue;\n}\n\nexport const IgxSliderType = /*@__PURE__*/mkenum({\n    /**\n     * Slider with single thumb.\n     */\n    SLIDER: 'slider',\n    /**\n     *  Range slider with multiple thumbs, that can mark the range.\n     */\n    RANGE: 'range'\n});\nexport type IgxSliderType = (typeof IgxSliderType)[keyof typeof IgxSliderType];\n\nexport const SliderHandle = /*@__PURE__*/mkenum({\n    FROM: 'from',\n    TO: 'to'\n});\nexport type SliderHandle = (typeof SliderHandle)[keyof typeof SliderHandle];\n\n/**\n * Slider Tick labels Orientation\n */\nexport const TickLabelsOrientation = /*@__PURE__*/mkenum({\n    Horizontal: 'horizontal',\n    TopToBottom: 'toptobottom',\n    BottomToTop: 'bottomtotop'\n});\nexport type TickLabelsOrientation = (typeof TickLabelsOrientation)[keyof typeof TickLabelsOrientation];\n\n/**\n * Slider Ticks orientation\n */\nexport const TicksOrientation = /*@__PURE__*/mkenum({\n    Top: 'top',\n    Bottom: 'bottom',\n    Mirror: 'mirror'\n});\nexport type TicksOrientation = (typeof TicksOrientation)[keyof typeof TicksOrientation];\n","import { Component, Input, TemplateRef, HostBinding, ElementRef, booleanAttribute } from '@angular/core';\nimport { SliderHandle } from '../slider.common';\nimport { IgxSliderThumbComponent } from '../thumb/thumb-slider.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-thumb-label',\n    templateUrl: 'thumb-label.component.html',\n    imports: [NgClass, NgTemplateOutlet]\n})\nexport class IgxThumbLabelComponent {\n    @Input()\n    public value: any;\n\n    @Input()\n    public templateRef: TemplateRef<any>;\n\n    @Input()\n    public context: any;\n\n    @Input()\n    public type: SliderHandle;\n\n    @Input({ transform: booleanAttribute })\n    public continuous: boolean;\n\n    @Input({ transform: booleanAttribute })\n    public deactiveState: boolean;\n\n    @Input()\n    public thumb: IgxSliderThumbComponent;\n\n\n    @HostBinding('class.igx-slider-thumb-label-from')\n    public get thumbFromClass() {\n        return this.type === SliderHandle.FROM;\n    }\n\n    @HostBinding('class.igx-slider-thumb-label-to')\n    public get thumbToClass() {\n        return this.type === SliderHandle.TO;\n    }\n\n    @HostBinding('class.igx-slider-thumb-label-from--active')\n    public get thumbFromActiveClass() {\n        return this.type === SliderHandle.FROM && this.active;\n    }\n\n    @HostBinding('class.igx-slider-thumb-label-to--active')\n    public get thumbToActiveClass() {\n        return this.type === SliderHandle.TO && this.active;\n    }\n\n    @HostBinding('class.igx-slider-thumb-label-from--pressed')\n    public get labelFromPressedClass() {\n        return this.thumb?.thumbFromPressedClass;\n    }\n\n    @HostBinding('class.igx-slider-thumb-label-to--pressed')\n    public get labelToPressedClass() {\n        return this.thumb?.thumbToPressedClass;\n    }\n\n    public get getLabelClass() {\n        return {\n            'igx-slider-thumb-label-from__container': this.type === SliderHandle.FROM,\n            'igx-slider-thumb-label-to__container': this.type === SliderHandle.TO\n        };\n    }\n\n    private _active: boolean;\n\n    constructor(private _elementRef: ElementRef) { }\n\n    public get nativeElement() {\n        return this._elementRef.nativeElement;\n    }\n\n    public get active() {\n        return this._active;\n    }\n\n    public set active(val: boolean) {\n        if (this.continuous || this.deactiveState) {\n            this._active = false;\n        } else {\n            this._active = val;\n        }\n    }\n}\n","<div [ngClass]=\"getLabelClass\">\n    <ng-container *ngTemplateOutlet=\"templateRef ? templateRef : thumbFromDefaultTemplate; context: context\"></ng-container>\n</div>\n\n<ng-template #thumbFromDefaultTemplate>\n    {{ value }}\n</ng-template>\n","import {\n    Component,\n    Input,\n    HostListener,\n    ElementRef,\n    HostBinding,\n    Output,\n    EventEmitter,\n    OnInit,\n    OnDestroy,\n    TemplateRef,\n    booleanAttribute\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { SliderHandle } from '../slider.common';\nimport { Subject } from 'rxjs';\nimport { IgxDirectionality } from '../../services/direction/directionality';\nimport { NgClass } from '@angular/common';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-thumb',\n    templateUrl: 'thumb-slider.component.html',\n    imports: [NgClass]\n})\nexport class IgxSliderThumbComponent implements OnInit, OnDestroy {\n    @Input()\n    public value: any;\n\n    @Input({ transform: booleanAttribute })\n    public continuous: boolean;\n\n    @Input()\n    public thumbLabelVisibilityDuration: number;\n\n    @Input({ transform: booleanAttribute })\n    public disabled: boolean;\n\n    @Input()\n    public onPan: Subject<number>;\n\n    @Input()\n    public stepDistance: number;\n\n    @Input()\n    public step: number;\n\n    @Input()\n    public templateRef: TemplateRef<any>;\n\n    @Input()\n    public context: any;\n\n    @Input()\n    public type: SliderHandle;\n\n    @Input({ transform: booleanAttribute })\n    public deactiveState: boolean;\n\n    @Input()\n    public min: number;\n\n    @Input()\n    public max: number;\n\n    @Input()\n    public labels: any[];\n\n    @Output()\n    public thumbValueChange = new EventEmitter<number>();\n\n    @Output()\n    public thumbChange = new EventEmitter<any>();\n\n    @Output()\n    public thumbBlur = new EventEmitter<void>();\n\n    @Output()\n    public hoverChange = new EventEmitter<boolean>();\n\n    @HostBinding('attr.tabindex')\n    public tabindex = 0;\n\n    @HostBinding('attr.role')\n    public role = 'slider';\n\n    @HostBinding('attr.aria-valuenow')\n    public get ariaValueNow() {\n        return this.value;\n    }\n\n    @HostBinding('attr.aria-valuemin')\n    public get ariaValueMin() {\n        return this.min;\n    }\n\n    @HostBinding('attr.aria-valuemax')\n    public get ariaValueMax() {\n        return this.max;\n    }\n\n    @HostBinding('attr.aria-valuetext')\n    public get ariaValueText() {\n        if (this.labels && this.labels[this.value] !== undefined) {\n            return this.labels[this.value];\n        }\n        return this.value;\n    }\n\n    @HostBinding('attr.aria-label')\n    public get ariaLabelAttr() {\n        return `Slider thumb ${this.type}`;\n    }\n\n    @HostBinding('attr.aria-orientation')\n    public ariaOrientation = 'horizontal';\n\n    @HostBinding(`attr.aria-disabled`)\n    public get ariaDisabled() {\n        return this.disabled;\n    }\n\n    @HostBinding('attr.z-index')\n    public zIndex = 0;\n\n    @HostBinding('class.igx-slider-thumb-to--focused')\n    public focused = false;\n\n    @HostBinding('class.igx-slider-thumb-from')\n    public get thumbFromClass() {\n        return this.type === SliderHandle.FROM;\n    }\n\n    @HostBinding('class.igx-slider-thumb-to')\n    public get thumbToClass() {\n        return this.type === SliderHandle.TO;\n    }\n\n    @HostBinding('class.igx-slider-thumb-from--active')\n    public get thumbFromActiveClass() {\n        return this.type === SliderHandle.FROM && this._isActive;\n    }\n\n    @HostBinding('class.igx-slider-thumb-to--active')\n    public get thumbToActiveClass() {\n        return this.type === SliderHandle.TO && this._isActive;\n    }\n\n    @HostBinding('class.igx-slider-thumb-from--disabled')\n    public get thumbFromDisabledClass() {\n        return this.type === SliderHandle.FROM && this.disabled;\n    }\n\n    @HostBinding('class.igx-slider-thumb-to--disabled')\n    public get thumbToDisabledClass() {\n        return this.type === SliderHandle.TO && this.disabled;\n    }\n\n    @HostBinding('class.igx-slider-thumb-from--pressed')\n    public get thumbFromPressedClass() {\n        return this.type === SliderHandle.FROM && this.isActive && this._isPressed;\n    }\n\n    @HostBinding('class.igx-slider-thumb-to--pressed')\n    public get thumbToPressedClass() {\n        return this.type === SliderHandle.TO && this.isActive && this._isPressed;\n    }\n\n    public get getDotClass() {\n        return {\n            'igx-slider-thumb-from__dot': this.type === SliderHandle.FROM,\n            'igx-slider-thumb-to__dot': this.type === SliderHandle.TO\n        };\n    }\n\n    public isActive = false;\n\n    public get nativeElement() {\n        return this._elementRef.nativeElement;\n    }\n\n    public get destroy(): Subject<boolean> {\n        return this._destroy$;\n    }\n\n    private _isActive = false;\n    private _isPressed = false;\n    private _destroy$ = new Subject<boolean>();\n\n    private get thumbPositionX() {\n        const thumbBounderies = this.nativeElement.getBoundingClientRect();\n        const thumbCenter = (thumbBounderies.right - thumbBounderies.left) / 2;\n        return thumbBounderies.left + thumbCenter;\n    }\n\n    constructor(private _elementRef: ElementRef, private _dir: IgxDirectionality) { }\n\n    @HostListener('pointerenter')\n    public onPointerEnter() {\n        this.focused = false;\n        this.hoverChange.emit(true);\n    }\n\n    @HostListener('pointerleave')\n    public onPointerLeave() {\n        this.hoverChange.emit(false);\n    }\n\n    @HostListener('keyup', ['$event'])\n    public onKeyUp(event: KeyboardEvent) {\n        event.stopPropagation();\n        this.focused = true;\n    }\n\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(event: KeyboardEvent) {\n        if (this.disabled) {\n            return;\n        }\n\n        let increment = 0;\n        const stepWithDir = (rtl: boolean) => rtl ? this.step * -1 : this.step;\n        if (event.key.endsWith('Left')) {\n            increment = stepWithDir(!this._dir.rtl);\n        } else if (event.key.endsWith('Right')) {\n            increment = stepWithDir(this._dir.rtl);\n        } else {\n            return;\n        }\n\n        this.thumbChange.emit();\n        this.thumbValueChange.emit(increment);\n    }\n\n    @HostListener('blur')\n    public onBlur() {\n        this.isActive = false;\n        this.zIndex = 0;\n        this.focused = false;\n        this.thumbBlur.emit();\n    }\n\n    @HostListener('focus')\n    public onFocusListener() {\n        this.isActive = true;\n        this.zIndex = 1;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        this.onPan\n            .pipe(takeUntil(this._destroy$))\n            .subscribe(mouseX =>\n                this.updateThumbValue(mouseX)\n            );\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroy$.next(true);\n        this._destroy$.complete();\n    }\n\n    /**\n     * Show thumb label and ripple.\n     */\n    public showThumbIndicators() {\n        this.toggleThumbIndicators(true);\n    }\n\n    /**\n     * Hide thumb label and ripple.\n     */\n    public hideThumbIndicators() {\n        this.toggleThumbIndicators(false);\n    }\n\n    private updateThumbValue(mouseX: number) {\n        const updateValue = this.calculateTrackUpdate(mouseX);\n        if (this.isActive && updateValue !== 0) {\n            this.thumbValueChange.emit(updateValue);\n        }\n    }\n\n    private calculateTrackUpdate(mouseX: number): number {\n        const scaleX = this._dir.rtl ? this.thumbPositionX - mouseX : mouseX - this.thumbPositionX;\n        const stepDistanceCenter = this.stepDistance / 2;\n\n        // If the thumb scale range (slider update) is less thàn a half step,\n        // the position stays the same.\n        const scaleXPositive = Math.abs(scaleX);\n        if (scaleXPositive < stepDistanceCenter) {\n            return 0;\n        }\n\n        return this.stepToProceed(scaleX, this.stepDistance);\n    }\n\n    private stepToProceed(scaleX, stepDist) {\n        return Math.round(scaleX / stepDist) * this.step;\n    }\n\n    private toggleThumbIndicators(visible: boolean) {\n        this._isPressed = visible;\n\n        if (this.continuous || this.deactiveState) {\n            this._isActive = false;\n        } else {\n            this._isActive = visible;\n        }\n\n    }\n}\n","<div [ngClass]=\"getDotClass\"></div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'spreadTickLabels',\n    standalone: true\n})\nexport class IgxTickLabelsPipe implements PipeTransform {\n\n\n    public transform(labels: Array<string | number | boolean | null | undefined>, secondaryTicks: number) {\n        if (!labels) {\n            return;\n        }\n\n        const result = [];\n        labels.forEach(item => {\n            result.push(item);\n            for (let i = 0; i < secondaryTicks; i++) {\n                result.push('');\n            }\n        });\n\n        return result;\n    }\n}\n","import { Component, Input, TemplateRef, HostBinding, booleanAttribute } from '@angular/core';\nimport { TicksOrientation, TickLabelsOrientation } from '../slider.common';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-ticks',\n    templateUrl: 'ticks.component.html',\n    imports: [NgClass, NgTemplateOutlet]\n})\nexport class IgxTicksComponent {\n    @Input()\n    public primaryTicks: number;\n\n    @Input()\n    public secondaryTicks: number;\n\n    @Input({ transform: booleanAttribute })\n    public primaryTickLabels: boolean;\n\n    @Input({ transform: booleanAttribute })\n    public secondaryTickLabels: boolean;\n\n    @Input()\n    public ticksOrientation: TicksOrientation;\n\n    @Input()\n    public tickLabelsOrientation: TickLabelsOrientation;\n\n    @Input()\n    public maxValue: number;\n\n    @Input()\n    public minValue: number;\n\n    @Input({ transform: booleanAttribute })\n    public labelsViewEnabled: boolean;\n\n    @Input()\n    public labels: Array<number | string | boolean | null | undefined>;\n\n    @Input()\n    public tickLabelTemplateRef: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider__ticks')\n    public ticksClass = true;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider__ticks--top')\n    public get ticksTopClass() {\n        return this.ticksOrientation === TicksOrientation.Top;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider__ticks--tall')\n    public get hasPrimaryClass() {\n        return this.primaryTicks > 0;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider__tick-labels--top-bottom')\n    public get labelsTopToBottomClass() {\n        return this.tickLabelsOrientation === TickLabelsOrientation.TopToBottom;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider__tick-labels--bottom-top')\n    public get labelsBottomToTopClass() {\n        return this.tickLabelsOrientation === TickLabelsOrientation.BottomToTop;\n    }\n\n    /**\n     * Returns the template context corresponding to\n     * {@link IgxTickLabelTemplateDirective}\n     *\n     * ```typescript\n     * return {\n     *  $implicit //returns the value per each tick label.\n     *  isPrimery //returns if the tick is primary.\n     *  labels // returns the {@link labels} collection.\n     *  index // returns the index per each tick of the whole sequence.\n     * }\n     * ```\n     *\n     * @param idx the index per each tick label.\n     */\n    public context(idx: number): any {\n        return {\n            $implicit: this.tickLabel(idx),\n            isPrimary: this.isPrimary(idx),\n            labels: this.labels,\n            index: idx\n        };\n    }\n\n    /**\n     * @hidden\n     */\n    public get ticksLength() {\n        return this.primaryTicks > 0 ?\n            ((this.primaryTicks - 1) * this.secondaryTicks) + this.primaryTicks :\n            this.secondaryTicks > 0 ? this.secondaryTicks : 0;\n    }\n\n    public hiddenTickLabels(idx: number) {\n        return this.isPrimary(idx) ? this.primaryTickLabels : this.secondaryTickLabels;\n    }\n\n    /**\n     * @hidden\n     */\n    public isPrimary(idx: number) {\n        return this.primaryTicks <= 0 ? false :\n            idx % (this.secondaryTicks + 1) === 0;\n    }\n\n    /**\n     * @hidden\n     */\n    public tickLabel(idx: number) {\n        if (this.labelsViewEnabled) {\n            return this.labels[idx];\n        }\n\n        const labelStep = (Math.max(this.minValue, this.maxValue) - Math.min(this.minValue, this.maxValue)) / (this.ticksLength - 1);\n        const labelVal = labelStep * idx;\n\n        return (this.minValue + labelVal).toFixed(2);\n    }\n}\n","@for (n of [].constructor(ticksLength); track $index; let idx = $index) {\n    <div class=\"igx-slider__ticks-group\" [ngClass]=\"{ 'igx-slider__ticks-group--tall': isPrimary(idx)}\">\n        <div class=\"igx-slider__ticks-tick\">\n            <span class=\"igx-slider__ticks-label\" [ngClass]=\"{ 'igx-slider__tick-label--hidden': !hiddenTickLabels(idx)}\">\n                <ng-container *ngTemplateOutlet=\"tickLabelTemplateRef ? tickLabelTemplateRef : tickLabelDefaultTemplate; context: context(idx)\"></ng-container>\n            </span>\n        </div>\n    </div>\n}\n\n<ng-template #tickLabelDefaultTemplate let-value>\n    {{ value }}\n</ng-template>\n","import {\n    AfterContentInit, AfterViewInit, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter,\n    HostBinding, HostListener, Input, NgZone, OnChanges, OnDestroy, OnInit, Output, QueryList, Renderer2, SimpleChanges, TemplateRef, ViewChild, ViewChildren, booleanAttribute\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { animationFrameScheduler, fromEvent, interval, merge, noop, Observable, Subject, timer } from 'rxjs';\nimport { takeUntil, throttle, throttleTime } from 'rxjs/operators';\nimport { EditorProvider } from '../core/edit-provider';\nimport { resizeObservable } from '../core/utils';\nimport { IgxDirectionality } from '../services/direction/directionality';\nimport { IgxThumbLabelComponent } from './label/thumb-label.component';\nimport {\n    IgxSliderType, IgxThumbFromTemplateDirective,\n    IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective, IRangeSliderValue, ISliderValueChangeEventArgs, SliderHandle, TickLabelsOrientation, TicksOrientation\n} from './slider.common';\nimport { IgxSliderThumbComponent } from './thumb/thumb-slider.component';\nimport { IgxTickLabelsPipe } from './ticks/tick.pipe';\nimport { IgxTicksComponent } from './ticks/ticks.component';\n\nlet NEXT_ID = 0;\n\n/**\n * **Ignite UI for Angular Slider** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/slider/slider)\n *\n * The Ignite UI Slider allows selection in a given range by moving the thumb along the track. The track\n * can be defined as continuous or stepped, and you can choose between single and range slider types.\n *\n * Example:\n * ```html\n * <igx-slider id=\"slider\"\n *            [minValue]=\"0\" [maxValue]=\"100\"\n *            [continuous]=true [(ngModel)]=\"volume\">\n * </igx-slider>\n * ```\n */\n@Component({\n    providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxSliderComponent, multi: true }],\n    selector: 'igx-slider',\n    templateUrl: 'slider.component.html',\n    imports: [IgxTicksComponent, IgxThumbLabelComponent, IgxSliderThumbComponent, IgxTickLabelsPipe]\n})\nexport class IgxSliderComponent implements\n    ControlValueAccessor,\n    EditorProvider,\n    OnInit,\n    AfterViewInit,\n    AfterContentInit,\n    OnChanges,\n    OnDestroy {\n    /**\n     * @hidden\n     */\n    public get thumbFrom(): IgxSliderThumbComponent {\n        return this.thumbs.find(thumb => thumb.type === SliderHandle.FROM);\n    }\n\n    /**\n     * @hidden\n     */\n    public get thumbTo(): IgxSliderThumbComponent {\n        return this.thumbs.find(thumb => thumb.type === SliderHandle.TO);\n    }\n\n    private get labelFrom(): IgxThumbLabelComponent {\n        return this.labelRefs.find(label => label.type === SliderHandle.FROM);\n    }\n\n    private get labelTo(): IgxThumbLabelComponent {\n        return this.labelRefs.find(label => label.type === SliderHandle.TO);\n    }\n\n    /**\n     * @hidden\n     */\n    @ViewChild('track', { static: true })\n    public trackRef: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxThumbFromTemplateDirective, { read: TemplateRef })\n    public thumbFromTemplateRef: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxThumbToTemplateDirective, { read: TemplateRef })\n    public thumbToTemplateRef: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxTickLabelTemplateDirective, { read: TemplateRef, static: false })\n    public tickLabelTemplateRef: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider')\n    public slierClass = true;\n\n    /**\n     * Sets the value of the `id` attribute.\n     * If not provided it will be automatically generated.\n     * ```html\n     * <igx-slider [id]=\"'igx-slider-32'\" [(ngModel)]=\"task.percentCompleted\" [step]=\"5\" [lowerBound]=\"20\">\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-slider-${NEXT_ID++}`;\n\n    /**\n     * Sets the duration visibility of thumbs labels. The default value is 750 milliseconds.\n     * ```html\n     * <igx-slider #slider [thumbLabelVisibilityDuration]=\"3000\" [(ngModel)]=\"task.percentCompleted\" [step]=\"5\">\n     * ```\n     */\n    @Input()\n    public thumbLabelVisibilityDuration = 750;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-slider--disabled')\n    public get disabledClass() {\n        return this.disabled;\n    }\n\n    /**\n     * Gets the type of the `IgxSliderComponent`.\n     * The slider can be IgxSliderType.SLIDER(default) or IgxSliderType.RANGE.\n     * ```typescript\n     * @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let type = this.slider.type;\n     * }\n     */\n    @Input()\n    public get type() {\n        return this._type as IgxSliderType;\n    }\n\n    /**\n     * Sets the type of the `IgxSliderComponent`.\n     * The slider can be IgxSliderType.SLIDER(default) or IgxSliderType.RANGE.\n     * ```typescript\n     * sliderType: IgxSliderType = IgxSliderType.RANGE;\n     * ```\n     * ```html\n     * <igx-slider #slider2 [type]=\"sliderType\" [(ngModel)]=\"rangeValue\" [minValue]=\"0\" [maxValue]=\"100\">\n     * ```\n     */\n    public set type(type: IgxSliderType) {\n        this._type = type;\n\n        if (type === IgxSliderType.SLIDER) {\n            this.lowerValue = 0;\n        }\n\n        if (this._hasViewInit) {\n            this.updateTrack();\n        }\n    }\n\n\n    /**\n     * Enables `labelView`, by accepting a collection of primitive values with more than one element.\n     * Each element will be equally spread over the slider and it will serve as a thumb label.\n     * Once the property is set, it will precendence over {@link maxValue}, {@link minValue}, {@link step}.\n     * This means that the manipulation for those properties won't be allowed.\n     */\n    @Input()\n    public get labels() {\n        return this._labels;\n    }\n\n    public set labels(labels: Array<number | string | boolean | null | undefined>) {\n        this._labels = labels;\n\n        this._pMax = this.valueToFraction(this.upperBound, 0, 1);\n        this._pMin = this.valueToFraction(this.lowerBound, 0, 1);\n\n        this.positionHandlersAndUpdateTrack();\n\n        if (this._hasViewInit) {\n            this.stepDistance = this.calculateStepDistance();\n            this.setTickInterval();\n        }\n    }\n\n    /**\n     * Returns the template context corresponding\n     * to {@link IgxThumbFromTemplateDirective} and {@link IgxThumbToTemplateDirective} templates.\n     *\n     * ```typescript\n     * return {\n     *  $implicit // returns the value of the label,\n     *  labels // returns the labels collection the user has passed.\n     * }\n     * ```\n     */\n    public get context(): any {\n        return {\n            $implicit: this.value,\n            labels: this.labels\n        };\n    }\n\n    /**\n     * Sets the incremental/decremental step of the value when dragging the thumb.\n     * The default step is 1, and step should not be less or equal than 0.\n     * ```html\n     * <igx-slider #slider [(ngModel)]=\"task.percentCompleted\" [step]=\"5\">\n     * ```\n     */\n    @Input()\n    public set step(step: number) {\n        this._step = step;\n\n        if (this._hasViewInit) {\n            this.stepDistance = this.calculateStepDistance();\n            this.normalizeByStep(this._value);\n            this.setValue(this._value, true);\n            this.positionHandlersAndUpdateTrack();\n            this.setTickInterval();\n        }\n    }\n\n    /**\n     * Returns the incremental/decremental dragging step of the {@link IgxSliderComponent}.\n     * ```typescript\n     * @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let step = this.slider.step;\n     * }\n     * ```\n     */\n    public get step() {\n        return this.labelsViewEnabled ? 1 : this._step;\n    }\n\n    /**\n     * Returns if the {@link IgxSliderComponent} is disabled.\n     * ```typescript\n     * @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let isDisabled = this.slider.disabled;\n     * }\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /**\n     * Disables the component.\n     * ```html\n     * <igx-slider #slider [disabled]=\"true\" [(ngModel)]=\"task.percentCompleted\" [step]=\"5\" [lowerBound]=\"20\">\n     * ```\n     */\n    public set disabled(disable: boolean) {\n        this._disabled = disable;\n\n        if (this._hasViewInit) {\n            this.changeThumbFocusableState(disable);\n        }\n    }\n\n    /**\n     * Returns if the {@link IgxSliderComponent} is set as continuous.\n     * ```typescript\n     * @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let continuous = this.slider.continuous;\n     * }\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get continuous(): boolean {\n        return this._continuous;\n    }\n\n    /**\n     * Sets the {@link IgxSliderComponent} as continuous.\n     * By default is considered that the {@link IgxSliderComponent} is discrete.\n     * Discrete {@link IgxSliderComponent} slider has step indicators over the track and visible thumb labels during interaction.\n     * Continuous {@link IgxSliderComponent} does not have ticks and does not show bubble labels for values.\n     * ```html\n     * <igx-slider #slider [continuous]=\"'true'\" [(ngModel)]=\"task.percentCompleted\" [step]=\"5\" [lowerBound]=\"20\">\n     * ```\n     */\n    public set continuous(continuous: boolean) {\n        this._continuous = continuous;\n        if (this._hasViewInit) {\n            this.setTickInterval();\n        }\n    }\n\n    /**\n     * Returns the minimal displayed track value of the `IgxSliderComponent`.\n     * ```typescript\n     *  @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let sliderMin = this.slider.minValue;\n     * }\n     * ```\n     */\n    public get minValue(): number {\n        if (this.labelsViewEnabled) {\n            return 0;\n        }\n\n        return this._minValue;\n    }\n\n    /**\n     * Sets the minimal displayed track value for the `IgxSliderComponent`.\n     * The default minimal value is 0.\n     * ```html\n     * <igx-slider [type]=\"sliderType\" [minValue]=\"56\" [maxValue]=\"100\">\n     * ```\n     */\n    @Input()\n    public set minValue(value: number) {\n        if (value >= this.maxValue) {\n            return;\n        } else {\n            this._minValue = value;\n        }\n\n        if (value > this._upperBound) {\n            this.updateUpperBoundAndMaxTravelZone();\n            this.lowerBound = value;\n        }\n\n        // Refresh min travel zone limit.\n        this._pMin = 0;\n        // Recalculate step distance.\n        this.positionHandlersAndUpdateTrack();\n        if (this._hasViewInit) {\n            this.stepDistance = this.calculateStepDistance();\n            this.setTickInterval();\n        }\n    }\n\n    /**\n     * Returns the maximum displayed track value for the {@link IgxSliderComponent}.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let sliderMax = this.slider.maxValue;\n     * }\n     *  ```\n     */\n    public get maxValue(): number {\n        return this.labelsViewEnabled ?\n            this.labels.length - 1 :\n            this._maxValue;\n    }\n\n    /**\n     * Sets the maximal displayed track value for the `IgxSliderComponent`.\n     * The default maximum value is 100.\n     * ```html\n     * <igx-slider [type]=\"sliderType\" [minValue]=\"56\" [maxValue]=\"256\">\n     * ```\n     */\n    @Input()\n    public set maxValue(value: number) {\n        if (value <= this._minValue) {\n            return;\n        } else {\n            this._maxValue = value;\n        }\n\n        if (value < this._lowerBound) {\n            this.updateLowerBoundAndMinTravelZone();\n            this.upperBound = value;\n        }\n\n        // refresh max travel zone limits.\n        this._pMax = 1;\n        // recalculate step distance.\n        this.positionHandlersAndUpdateTrack();\n        if (this._hasViewInit) {\n            this.stepDistance = this.calculateStepDistance();\n            this.setTickInterval();\n        }\n    }\n\n    /**\n     * Returns the lower boundary of settable values of the `IgxSliderComponent`.\n     * If not set, will return `minValue`.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let sliderLowBound = this.slider.lowerBound;\n     * }\n     * ```\n     */\n    public get lowerBound(): number {\n        if (!Number.isNaN(this._lowerBound) && this._lowerBound !== undefined) {\n            return this.valueInRange(this._lowerBound, this.minValue, this.maxValue);\n        }\n\n        return this.minValue;\n    }\n\n    /**\n     * Sets the lower boundary of settable values of the `IgxSliderComponent`.\n     * If not set is the same as min value.\n     * ```html\n     * <igx-slider [step]=\"5\" [lowerBound]=\"20\">\n     * ```\n     */\n    @Input()\n    public set lowerBound(value: number) {\n        if (value >= this.upperBound || (this.labelsViewEnabled && value < 0)) {\n            return;\n        }\n\n        this._lowerBound = this.valueInRange(value, this.minValue, this.maxValue);\n\n        // Refresh min travel zone.\n        this._pMin = this.valueToFraction(this._lowerBound, 0, 1);\n        this.positionHandlersAndUpdateTrack();\n    }\n\n    /**\n     * Returns the upper boundary of settable values of the `IgxSliderComponent`.\n     * If not set, will return `maxValue`\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *    let sliderUpBound = this.slider.upperBound;\n     * }\n     * ```\n     */\n    public get upperBound(): number {\n        if (!Number.isNaN(this._upperBound) && this._upperBound !== undefined) {\n            return this.valueInRange(this._upperBound, this.minValue, this.maxValue);\n        }\n\n        return this.maxValue;\n    }\n\n    /**\n     * Sets the upper boundary of the `IgxSliderComponent`.\n     * If not set is the same as max value.\n     * ```html\n     * <igx-slider [step]=\"5\" [upperBound]=\"20\">\n     * ```\n     */\n    @Input()\n    public set upperBound(value: number) {\n        if (value <= this.lowerBound || (this.labelsViewEnabled && value > this.labels.length - 1)) {\n            return;\n        }\n\n        this._upperBound = this.valueInRange(value, this.minValue, this.maxValue);\n        // Refresh time travel zone.\n        this._pMax = this.valueToFraction(this._upperBound, 0, 1);\n        this.positionHandlersAndUpdateTrack();\n    }\n\n    /**\n     * Returns the slider value. If the slider is of type {@link IgxSliderType.SLIDER} the returned value is number.\n     * If the slider type is {@link IgxSliderType.RANGE}.\n     * The returned value represents an object of {@link lowerValue} and {@link upperValue}.\n     * ```typescript\n     * @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * public sliderValue(event){\n     *     let sliderVal = this.slider.value;\n     * }\n     * ```\n     */\n    public get value(): number | IRangeSliderValue {\n        if (this.isRange) {\n            return {\n                lower: this.valueInRange(this.lowerValue, this.lowerBound, this.upperBound),\n                upper: this.valueInRange(this.upperValue, this.lowerBound, this.upperBound)\n            };\n        } else {\n            return this.valueInRange(this.upperValue, this.lowerBound, this.upperBound);\n        }\n    }\n\n    /**\n     * Sets the slider value.\n     * If the slider is of type {@link IgxSliderType.SLIDER}.\n     * The argument is number. By default the {@link value} gets the {@link lowerBound}.\n     * If the slider type is {@link IgxSliderType.RANGE} the argument\n     * represents an object of {@link lowerValue} and {@link upperValue} properties.\n     * By default the object is associated with the {@link lowerBound} and {@link upperBound} property values.\n     * ```typescript\n     * rangeValue = {\n     *   lower: 30,\n     *   upper: 60\n     * };\n     * ```\n     * ```html\n     * <igx-slider [type]=\"sliderType\" [(ngModel)]=\"rangeValue\" [minValue]=\"56\" [maxValue]=\"256\">\n     * ```\n     */\n    @Input()\n    public set value(value: number | IRangeSliderValue) {\n        this.normalizeByStep(value);\n\n        if (this._hasViewInit) {\n            this.setValue(this._value, true);\n            this.positionHandlersAndUpdateTrack();\n        }\n    }\n\n    /**\n     * Returns the number of the presented primary ticks.\n     * ```typescript\n     * const primaryTicks = this.slider.primaryTicks;\n     * ```\n     */\n    @Input()\n    public get primaryTicks() {\n        if (this.labelsViewEnabled) {\n            return this._primaryTicks = this.labels.length;\n        }\n        return this._primaryTicks;\n    }\n\n    /**\n     * Sets the number of primary ticks. If {@link @labels} is enabled, this property won't function.\n     * Insted enable ticks by {@link showTicks} property.\n     * ```typescript\n     * this.slider.primaryTicks = 5;\n     * ```\n     */\n    public set primaryTicks(val: number) {\n        if (val <= 1) {\n            return;\n        }\n\n        this._primaryTicks = val;\n    }\n\n    /**\n     * Returns the number of the presented secondary ticks.\n     * ```typescript\n     * const secondaryTicks = this.slider.secondaryTicks;\n     * ```\n     */\n    @Input()\n    public get secondaryTicks() {\n        return this._secondaryTicks;\n    }\n\n    /**\n     * Sets the number of secondary ticks. The property functions even when {@link labels} is enabled,\n     * but all secondary ticks won't present any tick labels.\n     * ```typescript\n     * this.slider.secondaryTicks = 5;\n     * ```\n     */\n    public set secondaryTicks(val: number) {\n        if (val < 1) {\n            return;\n        }\n\n        this._secondaryTicks = val;\n    }\n\n    /**\n     * Show/hide slider ticks\n     * ```html\n     * <igx-slier [showTicks]=\"true\" [primaryTicks]=\"5\"></igx-slier>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showTicks = false;\n\n    /**\n     * show/hide primary tick labels\n     * ```html\n     * <igx-slider [primaryTicks]=\"5\" [primaryTickLabels]=\"false\"></igx-slider>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public primaryTickLabels = true;\n\n    /**\n     * show/hide secondary tick labels\n     * ```html\n     * <igx-slider [secondaryTicks]=\"5\" [secondaryTickLabels]=\"false\"></igx-slider>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public secondaryTickLabels = true;\n\n    /**\n     * Changes ticks orientation:\n     * bottom - The default orienation, below the slider track.\n     * top - Above the slider track\n     * mirror - combines top and bottom orientation.\n     * ```html\n     * <igx-slider [primaryTicks]=\"5\" [ticksOrientation]=\"ticksOrientation\"></igx-slider>\n     * ```\n     */\n    @Input()\n    public ticksOrientation: TicksOrientation = TicksOrientation.Bottom;\n\n    /**\n     * Changes tick labels rotation:\n     * horizontal - The default rotation\n     * toptobottom - Rotates tick labels vertically to 90deg\n     * bottomtotop - Rotate tick labels vertically to -90deg\n     * ```html\n     * <igx-slider [primaryTicks]=\"5\" [secondaryTicks]=\"3\" [tickLabelsOrientation]=\"tickLabelsOrientaiton\"></igx-slider>\n     * ```\n     */\n    @Input()\n    public tickLabelsOrientation: TickLabelsOrientation = TickLabelsOrientation.Horizontal;\n\n    /**\n     * @hidden\n     */\n    public get deactivateThumbLabel() {\n        return ((this.primaryTicks && this.primaryTickLabels) || (this.secondaryTicks && this.secondaryTickLabels)) &&\n            (this.ticksOrientation === TicksOrientation.Top || this.ticksOrientation === TicksOrientation.Mirror);\n    }\n\n    /**\n     * This event is emitted every time the value is changed.\n     * ```typescript\n     * public change(event){\n     *    alert(\"The value has been changed!\");\n     * }\n     * ```\n     * ```html\n     * <igx-slider (valueChange)=\"change($event)\" #slider [(ngModel)]=\"task.percentCompleted\" [step]=\"5\">\n     * ```\n     */\n    @Output()\n    public valueChange = new EventEmitter<ISliderValueChangeEventArgs>();\n\n    /**\n     * This event is emitted every time the lower value of a range slider is changed.\n     * ```typescript\n     * public change(value){\n     *    alert(`The lower value has been changed to ${value}`);\n     * }\n     * ```\n     * ```html\n     * <igx-slider [(lowerValue)]=\"model.lowervalue\" (lowerValueChange)=\"change($event)\" [step]=\"5\">\n     * ```\n     */\n    @Output()\n    public lowerValueChange = new EventEmitter<number>();\n\n    /**\n     * This event is emitted every time the upper value of a range slider is changed.\n     * ```typescript\n     * public change(value){\n     *    alert(`The upper value has been changed to ${value}`);\n     * }\n     * ```\n     * ```html\n     * <igx-slider [(upperValue)]=\"model.uppervalue\" (upperValueChange)=\"change($event)\" [step]=\"5\">\n     * ```\n     */\n    @Output()\n    public upperValueChange = new EventEmitter<number>();\n\n    /**\n     * This event is emitted at the end of every slide interaction.\n     * ```typescript\n     * public change(event){\n     *    alert(\"The value has been changed!\");\n     * }\n     * ```\n     * ```html\n     * <igx-slider (dragFinished)=\"change($event)\" #slider [(ngModel)]=\"task.percentCompleted\" [step]=\"5\">\n     * ```\n     */\n    @Output()\n    public dragFinished = new EventEmitter<number | IRangeSliderValue>();\n\n    /**\n     * @hidden\n     */\n    @ViewChild('ticks', { static: true })\n    private ticks: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @ViewChildren(IgxSliderThumbComponent)\n    private thumbs: QueryList<IgxSliderThumbComponent> = new QueryList<IgxSliderThumbComponent>();\n\n    /**\n     * @hidden\n     */\n    @ViewChildren(IgxThumbLabelComponent)\n    private labelRefs: QueryList<IgxThumbLabelComponent> = new QueryList<IgxThumbLabelComponent>();\n\n    /**\n     * @hidden\n     */\n    public onPan: Subject<number> = new Subject<number>();\n\n    /**\n     * @hidden\n     */\n    public stepDistance: number;\n\n    // Limit handle travel zone\n    private _pMin = 0;\n    private _pMax = 1;\n\n    // From/upperValue in percent values\n    private _hasViewInit = false;\n    private _minValue = 0;\n    private _maxValue = 100;\n    private _lowerBound: number;\n    private _upperBound: number;\n    private _lowerValue: number;\n    private _upperValue: number;\n    private _continuous = false;\n    private _disabled = false;\n    private _step = 1;\n    private _value: number | IRangeSliderValue = 0;\n\n    // ticks\n    private _primaryTicks = 0;\n    private _secondaryTicks = 0;\n    private _sliding = false;\n\n    private _labels = new Array<number | string | boolean | null | undefined>();\n    private _type: IgxSliderType = IgxSliderType.SLIDER;\n\n    private _destroyer$ = new Subject<boolean>();\n    private _indicatorsDestroyer$ = new Subject<boolean>();\n    private _indicatorsTimer: Observable<any>;\n\n    private _onChangeCallback: (_: any) => void = noop;\n    private _onTouchedCallback: () => void = noop;\n\n    constructor(private renderer: Renderer2,\n        private _el: ElementRef,\n        private _cdr: ChangeDetectorRef,\n        private _ngZone: NgZone,\n        private _dir: IgxDirectionality) {\n        this.stepDistance = this._step;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('focus')\n    public onFocus() {\n        this.toggleSliderIndicators();\n    }\n\n    /**\n     * Returns whether the `IgxSliderComponent` type is RANGE.\n     * ```typescript\n     *  @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * ngAfterViewInit(){\n     *     let sliderRange = this.slider.isRange;\n     * }\n     * ```\n     */\n    public get isRange(): boolean {\n        return this.type === IgxSliderType.RANGE;\n    }\n\n    /**\n     * Returns the lower value of a RANGE `IgxSliderComponent`.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * public lowValue(event){\n     *    let sliderLowValue = this.slider.lowerValue;\n     * }\n     * ```\n     */\n    public get lowerValue(): number {\n        if (!Number.isNaN(this._lowerValue) && this._lowerValue !== undefined && this._lowerValue >= this.lowerBound) {\n            return this._lowerValue;\n        }\n\n        return this.lowerBound;\n    }\n\n    /**\n     * Sets the lower value of a RANGE `IgxSliderComponent`.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * public lowValue(event){\n     *    this.slider.lowerValue = value;\n     * }\n     * ```\n     */\n    @Input()\n    public set lowerValue(value: number) {\n        const adjustedValue = this.valueInRange(value, this.lowerBound, this.upperBound);\n        if (this._lowerValue !== adjustedValue) {\n            this._lowerValue = adjustedValue;\n            this.lowerValueChange.emit(this._lowerValue);\n            this.value = { lower: this._lowerValue, upper: this._upperValue };\n        }\n    }\n\n    /**\n     * Returns the upper value of a RANGE `IgxSliderComponent`.\n     * Returns `value` of a SLIDER `IgxSliderComponent`\n     * ```typescript\n     *  @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * public upperValue(event){\n     *     let upperValue = this.slider.upperValue;\n     * }\n     * ```\n     */\n    public get upperValue() {\n        if (!Number.isNaN(this._upperValue) && this._upperValue !== undefined && this._upperValue <= this.upperBound) {\n            return this._upperValue;\n        }\n\n        return this.upperBound;\n    }\n\n    /**\n     * Sets the upper value of a RANGE `IgxSliderComponent`.\n     * ```typescript\n     *  @ViewChild(\"slider2\")\n     * public slider: IgxSliderComponent;\n     * public upperValue(event){\n     *     this.slider.upperValue = value;\n     * }\n     * ```\n     */\n    @Input()\n    public set upperValue(value: number) {\n        const adjustedValue = this.valueInRange(value, this.lowerBound, this.upperBound);\n        if (this._upperValue !== adjustedValue) {\n            this._upperValue = adjustedValue;\n            this.upperValueChange.emit(this._upperValue);\n            this.value = { lower: this._lowerValue, upper: this._upperValue };\n        }\n    }\n\n    /**\n     * Returns the value corresponding the lower label.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * let label = this.slider.lowerLabel;\n     * ```\n     */\n    public get lowerLabel() {\n        return this.labelsViewEnabled ? this.labels[this.lowerValue] : this.lowerValue;\n    }\n\n    /**\n     * Returns the value corresponding the upper label.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * let label = this.slider.upperLabel;\n     * ```\n     */\n    public get upperLabel() {\n        return this.labelsViewEnabled ? this.labels[this.upperValue] : this.upperValue;\n    }\n\n    /**\n     * Returns if label view is enabled.\n     * If the {@link labels} is set, the view is automatically activated.\n     * ```typescript\n     * @ViewChild(\"slider\")\n     * public slider: IgxSliderComponent;\n     * let labelView = this.slider.labelsViewEnabled;\n     * ```\n     */\n    public get labelsViewEnabled(): boolean {\n        return !!(this.labels && this.labels.length > 1);\n    }\n\n    /**\n     * @hidden\n     */\n    public get showTopTicks() {\n        return this.ticksOrientation === TicksOrientation.Top ||\n            this.ticksOrientation === TicksOrientation.Mirror;\n    }\n\n    /**\n     * @hidden\n     */\n    public get showBottomTicks() {\n        return this.ticksOrientation === TicksOrientation.Bottom ||\n            this.ticksOrientation === TicksOrientation.Mirror;\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnChanges(changes: SimpleChanges) {\n        if (changes.minValue && changes.maxValue &&\n            changes.minValue.currentValue < changes.maxValue.currentValue) {\n            this._maxValue = changes.maxValue.currentValue;\n            this._minValue = changes.minValue.currentValue;\n        }\n\n        if (changes.step && changes.step.isFirstChange()) {\n            this.normalizeByStep(this._value);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        /**\n         * if {@link SliderType.SLIDER} than the initial value shold be the lowest one.\n         */\n        if (!this.isRange) {\n            this._upperValue = this.lowerBound;\n        }\n\n        // Set track travel zone\n        this._pMin = this.valueToFraction(this.lowerBound) || 0;\n        this._pMax = this.valueToFraction(this.upperBound) || 1;\n    }\n\n    public ngAfterContentInit() {\n        this.setValue(this._value, false);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        this._hasViewInit = true;\n        this.stepDistance = this.calculateStepDistance();\n        this.positionHandlersAndUpdateTrack();\n        this.setTickInterval();\n        this.changeThumbFocusableState(this.disabled);\n\n        this.subscribeToEvents(this.thumbFrom);\n        this.subscribeToEvents(this.thumbTo);\n\n        this.thumbs.changes.pipe(takeUntil(this._destroyer$)).subscribe(change => {\n            const thumbFrom = change.find((thumb: IgxSliderThumbComponent) => thumb.type === SliderHandle.FROM);\n            this.positionHandler(thumbFrom, null, this.lowerValue);\n            this.subscribeToEvents(thumbFrom);\n            this.changeThumbFocusableState(this.disabled);\n        });\n\n        this.labelRefs.changes.pipe(takeUntil(this._destroyer$)).subscribe(() => {\n            const labelFrom = this.labelRefs.find((label: IgxThumbLabelComponent) => label.type === SliderHandle.FROM);\n            this.positionHandler(null, labelFrom, this.lowerValue);\n        });\n\n        this._ngZone.runOutsideAngular(() => {\n            resizeObservable(this._el.nativeElement).pipe(\n                throttleTime(40),\n                takeUntil(this._destroyer$)).subscribe(() => this._ngZone.run(() => {\n                    this.stepDistance = this.calculateStepDistance();\n                }));\n            fromEvent(this._el.nativeElement, 'pointermove').pipe(\n                throttle(() => interval(0, animationFrameScheduler)),\n                takeUntil(this._destroyer$)).subscribe(($event: PointerEvent) => this._ngZone.run(() => {\n                    this.onPointerMove($event);\n                }));\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this._destroyer$.next(true);\n        this._destroyer$.complete();\n\n        this._indicatorsDestroyer$.next(true);\n        this._indicatorsDestroyer$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public writeValue(value: IRangeSliderValue | number): void {\n        if (this.isNullishButNotZero(value)) {\n            return;\n        }\n\n        this.normalizeByStep(value);\n        this.setValue(this._value, false);\n        this.positionHandlersAndUpdateTrack();\n    }\n\n    /**\n     * @hidden\n     */\n    public registerOnChange(fn: any): void {\n        this._onChangeCallback = fn;\n    }\n\n    /**\n     * @hidden\n     */\n    public registerOnTouched(fn: any): void {\n        this._onTouchedCallback = fn;\n    }\n\n    /** @hidden */\n    public getEditElement() {\n        return this.isRange ? this.thumbFrom.nativeElement : this.thumbTo.nativeElement;\n    }\n\n    /**\n     *\n     * @hidden\n     */\n    public update(mouseX) {\n        if (this.disabled) {\n            return;\n        }\n\n        // Update To/From Values\n        this.onPan.next(mouseX);\n\n        // Finally do positionHandlersAndUpdateTrack the DOM\n        // based on data values\n        this.positionHandlersAndUpdateTrack();\n    }\n\n    /**\n     * @hidden\n     */\n    public thumbChanged(value: number, thumbType: string) {\n        const oldValue = this.value;\n\n        if (this.isRange) {\n            if (thumbType === SliderHandle.FROM) {\n                if (this.lowerValue + value > this.upperValue) {\n                    this.upperValue = this.lowerValue + value;\n                }\n                this.lowerValue += value;\n            } else {\n                if (this.upperValue + value < this.lowerValue) {\n                    this.lowerValue = this.upperValue + value;\n                }\n                this.upperValue += value;\n            }\n\n            const newVal: IRangeSliderValue = {\n                lower: this.lowerValue,\n                upper: this.upperValue\n            }\n\n            // Swap the thumbs if a collision appears.\n            // if (newVal.lower == newVal.upper) {\n            //     this.toggleThumb();\n            // }\n\n            this.value = newVal;\n\n        } else {\n            const newVal = (this.value as number) + value;\n            if (newVal >= this.lowerBound && newVal <= this.upperBound) {\n                this.value = newVal;\n            }\n        }\n\n        if (this.hasValueChanged(oldValue)) {\n            this.emitValueChange(oldValue);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public onThumbChange() {\n        this.toggleSliderIndicators();\n    }\n\n    /**\n     * @hidden\n     */\n    public onHoverChange(state: boolean) {\n        return state ? this.showSliderIndicators() : this.hideSliderIndicators();\n    }\n\n    public setValue(value: number | IRangeSliderValue, triggerChange: boolean) {\n        let res;\n        if (!this.isRange) {\n            value = value as number;\n            if (!isNaN(value)) {\n                this._upperValue = value - value % this.step;\n                res = this.upperValue;\n            }\n        } else {\n            value = this.validateInitialValue(value as IRangeSliderValue);\n            this._upperValue = value.upper;\n            this._lowerValue = value.lower;\n            res = { lower: this.lowerValue, upper: this.upperValue };\n        }\n\n        if (triggerChange) {\n            this._onChangeCallback(res);\n        }\n    }\n\n    @HostListener('pointerdown', ['$event'])\n    private onPointerDown($event: PointerEvent) {\n        this.findClosestThumb($event);\n\n        if (!this.thumbTo.isActive && this.thumbFrom === undefined) {\n            return;\n        }\n\n        this._sliding = true;\n        const activeThumb = this.thumbTo.isActive ? this.thumbTo : this.thumbFrom;\n        activeThumb.nativeElement.setPointerCapture($event.pointerId);\n        this.showSliderIndicators();\n\n        $event.preventDefault();\n    }\n\n    private onPointerMove($event: PointerEvent) {\n        if (this._sliding) {\n            this.update($event.clientX);\n        }\n    }\n\n    @HostListener('pointerup', ['$event'])\n    private onPointerUp($event: PointerEvent) {\n        if (!this.thumbTo.isActive && this.thumbFrom === undefined) {\n            return;\n        }\n\n        const activeThumb = this.thumbTo.isActive ? this.thumbTo : this.thumbFrom;\n        activeThumb.nativeElement.releasePointerCapture($event.pointerId);\n\n        this._sliding = false;\n        this.hideSliderIndicators();\n        this.dragFinished.emit(this.value);\n    }\n\n    private validateInitialValue(value: IRangeSliderValue) {\n        if (value.upper < value.lower) {\n            const temp = value.upper;\n            value.upper = value.lower;\n            value.lower = temp;\n        }\n\n        if (value.lower < this.lowerBound) {\n            value.lower = this.lowerBound;\n        }\n\n        if (value.upper > this.upperBound) {\n            value.upper = this.upperBound;\n        }\n\n        return value;\n    }\n\n    private findClosestThumb(event: PointerEvent) {\n        if (this.isRange) {\n            this.closestHandle(event);\n        } else {\n            this.thumbTo.nativeElement.focus();\n        }\n\n        this.update(event.clientX);\n    }\n\n    private updateLowerBoundAndMinTravelZone() {\n        this.lowerBound = this.minValue;\n        this._pMin = 0;\n    }\n\n    private updateUpperBoundAndMaxTravelZone() {\n        this.upperBound = this.maxValue;\n        this._pMax = 1;\n    }\n\n    private calculateStepDistance() {\n        return this._el.nativeElement.getBoundingClientRect().width / (this.maxValue - this.minValue) * this.step;\n    }\n\n    // private toggleThumb() {\n    //     return this.thumbFrom.isActive ?\n    //         this.thumbTo.nativeElement.focus() :\n    //         this.thumbFrom.nativeElement.focus();\n    // }\n\n    private valueInRange(value, min = 0, max = 100) {\n        return Math.max(Math.min(value, max), min);\n    }\n\n    private positionHandler(thumbHandle: ElementRef, labelHandle: ElementRef, position: number) {\n        const percent = `${this.valueToFraction(position) * 100}%`;\n        const dir = this._dir.rtl ? 'right' : 'left';\n\n        if (thumbHandle) {\n            thumbHandle.nativeElement.style[dir] = percent;\n        }\n\n        if (labelHandle) {\n            labelHandle.nativeElement.style[dir] = percent;\n        }\n    }\n\n    private positionHandlersAndUpdateTrack() {\n        if (!this.isRange) {\n            this.positionHandler(this.thumbTo, this.labelTo, this.value as number);\n        } else {\n            this.positionHandler(this.thumbTo, this.labelTo, (this.value as IRangeSliderValue).upper);\n            this.positionHandler(this.thumbFrom, this.labelFrom, (this.value as IRangeSliderValue).lower);\n        }\n\n        if (this._hasViewInit) {\n            this.updateTrack();\n        }\n    }\n\n    private closestHandle(event: PointerEvent) {\n        const fromOffset = this.thumbFrom.nativeElement.offsetLeft + this.thumbFrom.nativeElement.offsetWidth / 2;\n        const toOffset = this.thumbTo.nativeElement.offsetLeft + this.thumbTo.nativeElement.offsetWidth / 2;\n        const xPointer = event.clientX - this._el.nativeElement.getBoundingClientRect().left;\n        const match = this.closestTo(xPointer, [fromOffset, toOffset]);\n\n        if (fromOffset === toOffset && toOffset < xPointer) {\n            this.thumbTo.nativeElement.focus();\n        } else if (fromOffset === toOffset && toOffset > xPointer) {\n            this.thumbFrom.nativeElement.focus();\n        } else if (match === fromOffset) {\n            this.thumbFrom.nativeElement.focus();\n        } else {\n            this.thumbTo.nativeElement.focus();\n        }\n    }\n\n    private setTickInterval() {\n        let tickInterval;\n        const trackProgress = 100;\n\n        if (this.labelsViewEnabled) {\n            // Calc ticks depending on the labels length;\n            tickInterval = ((trackProgress / (this.labels.length - 1) * 10)) / 10;\n        } else {\n            const trackRange = this.maxValue - this.minValue;\n            tickInterval = this.step > 1 ?\n                (trackProgress / ((trackRange / this.step)) * 10) / 10\n                : null;\n        }\n\n        this.renderer.setStyle(this.ticks.nativeElement, 'stroke-dasharray', `0, ${tickInterval * Math.sqrt(2)}%`);\n        this.renderer.setStyle(this.ticks.nativeElement, 'visibility', this.continuous || tickInterval === null ? 'hidden' : 'visible');\n    }\n\n    private showSliderIndicators() {\n        if (this.disabled) {\n            return;\n        }\n\n        if (this._indicatorsTimer) {\n            this._indicatorsDestroyer$.next(true);\n            this._indicatorsTimer = null;\n        }\n\n        this.thumbTo.showThumbIndicators();\n        this.labelTo.active = true;\n        if (this.thumbFrom) {\n            this.thumbFrom.showThumbIndicators();\n        }\n\n        if (this.labelFrom) {\n            this.labelFrom.active = true;\n        }\n\n    }\n\n    private hideSliderIndicators() {\n        if (this.disabled) {\n            return;\n        }\n\n        this._indicatorsTimer = timer(this.thumbLabelVisibilityDuration);\n        this._indicatorsTimer.pipe(takeUntil(this._indicatorsDestroyer$)).subscribe(() => {\n            this.thumbTo.hideThumbIndicators();\n            this.labelTo.active = false;\n            if (this.thumbFrom) {\n                this.thumbFrom.hideThumbIndicators();\n            }\n\n            if (this.labelFrom) {\n                this.labelFrom.active = false;\n            }\n        });\n    }\n\n    private toggleSliderIndicators() {\n        this.showSliderIndicators();\n        this.hideSliderIndicators();\n    }\n\n    private changeThumbFocusableState(state: boolean) {\n        const value = state ? -1 : 0;\n\n        if (this.isRange) {\n            this.thumbFrom.tabindex = value;\n        }\n\n        this.thumbTo.tabindex = value;\n\n        this._cdr.detectChanges();\n    }\n\n    private closestTo(goal: number, positions: number[]): number {\n        return positions.reduce((previous, current) => (Math.abs(goal - current) < Math.abs(goal - previous) ? current : previous));\n    }\n\n    private valueToFraction(value: number, pMin = this._pMin, pMax = this._pMax) {\n        return this.valueInRange((value - this.minValue) / (this.maxValue - this.minValue), pMin, pMax);\n    }\n\n    private isNullishButNotZero(value: any): boolean {\n        return !value && value !== 0;\n    }\n\n    /**\n     * @hidden\n     * Normalizе the value when two-way data bind is used and {@link this.step} is set.\n     * @param value\n     */\n    private normalizeByStep(value: IRangeSliderValue | number) {\n        if (this.isRange) {\n            this._value = {\n                lower: Math.floor((value as IRangeSliderValue).lower / this.step) * this.step,\n                upper: Math.floor((value as IRangeSliderValue).upper / this.step) * this.step\n            };\n        } else {\n            this._value = Math.floor((value as number) / this.step) * this.step;\n        }\n    }\n\n    private updateTrack() {\n        const fromPosition = this.valueToFraction(this.lowerValue);\n        const toPosition = this.valueToFraction(this.upperValue);\n        const positionGap = toPosition - fromPosition;\n\n        let trackLeftIndention = fromPosition;\n        if (this.isRange) {\n            if (positionGap) {\n                trackLeftIndention = Math.round((1 / positionGap * fromPosition) * 100);\n            }\n\n            trackLeftIndention = this._dir.rtl ? -trackLeftIndention : trackLeftIndention;\n            this.renderer.setStyle(this.trackRef.nativeElement, 'transform', `scaleX(${positionGap}) translateX(${trackLeftIndention}%)`);\n        } else {\n            this.renderer.setStyle(this.trackRef.nativeElement, 'transform', `scaleX(${toPosition})`);\n        }\n    }\n\n    private subscribeToEvents(thumb: IgxSliderThumbComponent) {\n        if (!thumb) {\n            return;\n        }\n\n        thumb.thumbValueChange\n            .pipe(takeUntil(this.unsubscriber(thumb)))\n            .subscribe(value => this.thumbChanged(value, thumb.type));\n\n        thumb.thumbBlur\n            .pipe(takeUntil(this.unsubscriber(thumb)))\n            .subscribe(() => this._onTouchedCallback());\n    }\n\n    private unsubscriber(thumb: IgxSliderThumbComponent) {\n        return merge(this._destroyer$, thumb.destroy);\n    }\n\n    private hasValueChanged(oldValue) {\n        const isSliderWithDifferentValue: boolean = !this.isRange && oldValue !== this.value;\n        const isRangeWithOneDifferentValue: boolean = this.isRange &&\n            ((oldValue as IRangeSliderValue).lower !== (this.value as IRangeSliderValue).lower ||\n                (oldValue as IRangeSliderValue).upper !== (this.value as IRangeSliderValue).upper);\n\n        return isSliderWithDifferentValue || isRangeWithOneDifferentValue;\n    }\n\n    private emitValueChange(oldValue: number | IRangeSliderValue) {\n        this.valueChange.emit({ oldValue, value: this.value });\n    }\n}\n\n/**\n * @hidden\n */\n\n","@if (showTicks && showTopTicks) {\n    <igx-ticks\n        ticksOrientation=\"top\"\n        [primaryTicks]=\"primaryTicks\"\n        [secondaryTicks]=\"secondaryTicks\"\n        [primaryTickLabels]=\"primaryTickLabels\"\n        [secondaryTickLabels]=\"secondaryTickLabels\"\n        [tickLabelsOrientation]=\"tickLabelsOrientation\"\n        [labelsViewEnabled]=\"labelsViewEnabled\"\n        [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n        [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n        [minValue]=\"minValue\"\n        [maxValue]=\"maxValue\">\n    </igx-ticks>\n}\n<div class=\"igx-slider__track\">\n    <div class=\"igx-slider__track-inactive\"></div>\n    <div #track class=\"igx-slider__track-fill\"></div>\n    <div class=\"igx-slider__track-steps\">\n        <svg width=\"100%\" height=\"100%\">\n          <line #ticks x1=\"0\" y1=\"2\" x2=\"100%\" y2=\"2\"></line>\n        </svg>\n    </div>\n</div>\n<div class=\"igx-slider__thumbs\">\n    @if (isRange) {\n        <igx-thumb-label\n            type=\"from\"\n            [value]=\"lowerLabel\"\n            [templateRef]=\"thumbFromTemplateRef\"\n            [continuous]=\"continuous\"\n            [context]=\"context\"\n            [deactiveState]=\"deactivateThumbLabel\"\n            [thumb]=\"thumbFrom\"></igx-thumb-label>\n    }\n\n    @if (isRange) {\n        <igx-thumb\n            #thumbFrom\n            type=\"from\"\n            [value]=\"lowerLabel\"\n            [min]=\"minValue\"\n            [max]=\"maxValue\"\n            [disabled]=\"disabled\"\n            [continuous]=\"continuous\"\n            [onPan]=\"onPan\"\n            [stepDistance]=\"stepDistance\"\n            [step]=\"step\"\n            [templateRef]=\"thumbFromTemplateRef\"\n            [context]=\"context\"\n            [labels]=\"labels\"\n            (thumbChange)=\"onThumbChange()\"\n            (hoverChange)=\"onHoverChange($event)\"\n            [deactiveState]=\"deactivateThumbLabel\"\n            [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n    }\n\n    <igx-thumb-label\n        [value]=\"upperLabel\"\n        type=\"to\"\n        [templateRef]=\"thumbToTemplateRef\"\n        [continuous]=\"continuous\"\n        [context]=\"context\"\n        [deactiveState]=\"deactivateThumbLabel\"\n        [thumb]=\"thumbTo\"></igx-thumb-label>\n\n    <igx-thumb\n        #thumbTo\n        type=\"to\"\n        [value]=\"upperLabel\"\n        [min]=\"minValue\"\n        [max]=\"maxValue\"\n        [disabled]=\"disabled\"\n        [continuous]=\"continuous\"\n        [onPan]=\"onPan\"\n        [stepDistance]=\"stepDistance\"\n        [step]=\"step\"\n        [templateRef]=\"thumbToTemplateRef\"\n        [context]=\"context\"\n        [labels]=\"labels\"\n        (thumbChange)=\"onThumbChange()\"\n        (hoverChange)=\"onHoverChange($event)\"\n        [deactiveState]=\"deactivateThumbLabel\"\n        [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n</div>\n@if (showTicks && showBottomTicks) {\n    <igx-ticks\n        ticksOrientation=\"bottom\"\n        [primaryTicks]=\"primaryTicks\"\n        [secondaryTicks]=\"secondaryTicks\"\n        [primaryTickLabels]=\"primaryTickLabels\"\n        [secondaryTickLabels]=\"secondaryTickLabels\"\n        [tickLabelsOrientation]=\"tickLabelsOrientation\"\n        [labelsViewEnabled]=\"labelsViewEnabled\"\n        [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n        [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n        [minValue]=\"minValue\"\n        [maxValue]=\"maxValue\">\n    </igx-ticks>\n}\n","import { IgxThumbFromTemplateDirective, IgxThumbToTemplateDirective, IgxTickLabelTemplateDirective } from './slider.common';\nimport { IgxSliderComponent } from './slider.component';\n\nexport * from './slider.component';\nexport * from './slider.common';\n\n/* NOTE: Slider directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_SLIDER_DIRECTIVES = [\n    IgxSliderComponent,\n    IgxThumbFromTemplateDirective,\n    IgxThumbToTemplateDirective,\n    IgxTickLabelTemplateDirective\n] as const;\n","import {\n    Component,\n    HostBinding,\n    Input,\n    AfterViewInit,\n    booleanAttribute\n} from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { IgxRippleDirective } from '../directives/ripple/ripple.directive';\nimport { EditorProvider, EDITOR_PROVIDER } from '../core/edit-provider';\nimport { CheckboxBaseDirective } from '../checkbox/checkbox-base.directive';\n\n/**\n *\n * The Switch component is a binary choice selection component.\n *\n * @igxModule IgxSwitchModule\n *\n * @igxTheme igx-switch-theme, igx-tooltip-theme\n *\n * @igxKeywords switch, states, tooltip\n *\n * @igxGroup Data Entry & Display\n * @remarks\n *\n * The Ignite UI Switch lets the user toggle between on/off or true/false states.\n *\n * @example\n * ```html\n * <igx-switch [checked]=\"true\">\n *   Simple switch\n * </igx-switch>\n * ```\n */\n@Component({\n    providers: [{\n        provide: EDITOR_PROVIDER,\n        useExisting: IgxSwitchComponent,\n        multi: true\n    }],\n    selector: 'igx-switch',\n    templateUrl: 'switch.component.html',\n    imports: [IgxRippleDirective]\n})\nexport class IgxSwitchComponent\n    extends CheckboxBaseDirective\n    implements ControlValueAccessor, EditorProvider, AfterViewInit {\n    /**\n     * Returns the class of the switch component.\n     *\n     * @example\n     * ```typescript\n     * let switchClass = this.switch.cssClass;\n     * ```\n     */\n    @HostBinding('class.igx-switch')\n    public override cssClass = 'igx-switch';\n    /**\n     * Sets/gets whether the switch is on or off.\n     * Default value is 'false'.\n     *\n     * @example\n     * ```html\n     *  <igx-switch [checked]=\"true\"></igx-switch>\n     * ```\n     */\n    @HostBinding('class.igx-switch--checked')\n    @Input()\n    public override set checked(value: boolean) {\n        super.checked = value;\n    }\n    public override get checked() {\n        return super.checked;\n    }\n    /**\n     * Sets/gets the `disabled` attribute.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-switch disabled><igx-switch>\n     * ```\n     */\n    @HostBinding('class.igx-switch--disabled')\n    @Input({ transform: booleanAttribute })\n    public override disabled = false;\n\n    /**\n     * Sets/gets whether the switch component is invalid.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-switch invalid></igx-switch>\n     * ```\n     * ```typescript\n     * let isInvalid = this.switch.invalid;\n     * ```\n     */\n    @HostBinding('class.igx-switch--invalid')\n    @Input({ transform: booleanAttribute })\n    public override invalid = false;\n\n    /**\n     * Sets/gets whether the switch component is on focus.\n     * Default value is `false`.\n     *\n     * @example\n     * ```typescript\n     * this.switch.focused = true;\n     * ```\n     */\n    @HostBinding('class.igx-switch--focused')\n    public override focused = false;\n}\n","<input #checkbox class=\"igx-switch__input\" type=\"checkbox\"\n    [id]=\"inputId\"\n    [name]=\"name\"\n    [value]=\"value\"\n    [tabindex]=\"tabindex\"\n    [disabled]=\"disabled\"\n    [checked]=\"checked\"\n    [required]=\"required\"\n    [attr.aria-required]=\"required\"\n    [attr.aria-invalid]=\"invalid\"\n    [attr.aria-checked]=\"checked\"\n    [attr.aria-labelledby]=\"ariaLabel ? null : ariaLabelledBy\"\n    [attr.aria-label]=\"ariaLabel\"\n    (change)=\"_onCheckboxChange($event)\"\n    (blur)=\"onBlur()\" />\n\n<span #label class=\"igx-switch__composite\"\n    igxRipple\n    igxRippleTarget=\".igx-switch__ripple\"\n    [igxRippleDisabled]=\"disableRipple\"\n    [igxRippleCentered]=\"true\"\n    [igxRippleDuration]=\"300\">\n    <div class=\"igx-switch__composite-thumb\">\n        <div class=\"igx-switch__ripple\"></div>\n        <div class=\"igx-switch__thumb\"></div>\n    </div>\n</span>\n\n<span #placeholderLabel\n    [class]=\"labelClass\"\n    [id]=\"labelId\">\n    <ng-content></ng-content>\n</span>\n","import { QueryList, TemplateRef } from '@angular/core';\n\n/** @hidden */\nexport abstract class IgxTabsBase {\n    public items: QueryList<IgxTabItemBase>;\n    public selectedIndex: number;\n    public abstract selectTab(tab: IgxTabItemBase, selected: boolean);\n}\n\n/** @hidden */\nexport abstract class IgxTabItemBase {\n    public disabled: boolean;\n    public selected: boolean;\n    public headerTemplate: TemplateRef<any>;\n    public panelTemplate: TemplateRef<any>;\n    public headerComponent: IgxTabHeaderBase;\n    public panelComponent: IgxTabContentBase;\n}\n\n/** @hidden */\nexport abstract class IgxTabHeaderBase {\n    public nativeElement: HTMLElement;\n}\n\n/** @hidden */\nexport abstract class IgxTabContentBase {\n    public nativeElement: HTMLElement;\n}\n\n","import { ContentChild, Directive, EventEmitter, Input, Output, TemplateRef, ViewChild, booleanAttribute } from '@angular/core';\nimport { Direction, IgxSlideComponentBase } from '../carousel/carousel-base';\nimport { IgxTabHeaderBase, IgxTabItemBase, IgxTabContentBase, IgxTabsBase } from './tabs.base';\n\n@Directive()\nexport abstract class IgxTabItemDirective implements IgxTabItemBase, IgxSlideComponentBase {\n\n    /** @hidden */\n    @ContentChild(IgxTabHeaderBase)\n    public headerComponent: IgxTabHeaderBase;\n\n    /** @hidden */\n    @ContentChild(IgxTabContentBase)\n    public panelComponent: IgxTabContentBase;\n\n    /** @hidden */\n    @ViewChild('headerTemplate', { static: true })\n    public headerTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild('panelTemplate', { static: true })\n    public panelTemplate: TemplateRef<any>;\n\n    /**\n     * Output to enable support for two-way binding on [(selected)]\n     */\n    @Output()\n    public selectedChange = new EventEmitter<boolean>();\n\n    /**\n     * Disables the item.\n     */\n    @Input({ transform: booleanAttribute })\n    public disabled = false;\n\n    /** @hidden */\n    public direction = Direction.NONE;\n    /** @hidden */\n    public previous: boolean;\n\n    private _selected = false;\n\n    /**\n     * Gets/Sets whether an item is selected.\n     */\n    @Input({ transform: booleanAttribute })\n    public get selected(): boolean {\n        return this._selected;\n    }\n\n    public set selected(value: boolean) {\n        if (this._selected !== value) {\n            this._selected = value;\n            this.tabs.selectTab(this, this._selected);\n            this.selectedChange.emit(this._selected);\n        }\n    }\n\n    /** @hidden */\n    constructor(private tabs: IgxTabsBase) {\n    }\n}\n","import { Directive, ElementRef, HostBinding } from '@angular/core';\nimport { IgxTabItemDirective } from './tab-item.directive';\nimport { IgxTabContentBase } from './tabs.base';\n\n@Directive()\nexport abstract class IgxTabContentDirective implements IgxTabContentBase {\n\n    /** @hidden */\n    @HostBinding('attr.role')\n    public role = 'tabpanel';\n\n    /** @hidden */\n    constructor(public tab: IgxTabItemDirective, private elementRef: ElementRef<HTMLElement>) {\n    }\n\n    /** @hidden */\n    @HostBinding('attr.tabindex')\n    public get tabIndex() {\n        return this.tab.selected ? 0 : -1;\n    }\n\n    /** @hidden */\n    @HostBinding('style.z-index')\n    public get zIndex() {\n        return this.tab.selected ? 'auto' : -1;\n    }\n\n    /** @hidden */\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n}\n","import { Component, HostBinding } from '@angular/core';\nimport { IgxTabContentDirective } from '../tab-content.directive';\nimport { IgxTabContentBase } from '../tabs.base';\n\n@Component({\n    selector: 'igx-bottom-nav-content',\n    templateUrl: 'bottom-nav-content.component.html',\n    providers: [{ provide: IgxTabContentBase, useExisting: IgxBottomNavContentComponent }],\n    imports: []\n})\nexport class IgxBottomNavContentComponent extends IgxTabContentDirective {\n    /** @hidden */\n    @HostBinding('class.igx-bottom-nav__panel')\n    public defaultClass = true;\n}\n","@if (tab.selected || tab.previous) {\n    <ng-content></ng-content>\n}\n","\nimport { Directive, ElementRef, HostBinding, HostListener } from '@angular/core';\nimport { PlatformUtil } from '../core/utils';\nimport { IgxTabItemDirective } from './tab-item.directive';\nimport { IgxTabHeaderBase, IgxTabsBase } from './tabs.base';\n\n@Directive()\nexport abstract class IgxTabHeaderDirective implements IgxTabHeaderBase {\n\n    /** @hidden */\n    @HostBinding('attr.role')\n    public role = 'tab';\n\n    /** @hidden */\n    constructor(\n        protected tabs: IgxTabsBase,\n        public tab: IgxTabItemDirective,\n        private elementRef: ElementRef<HTMLElement>,\n        protected platform: PlatformUtil\n    ) { }\n\n    /** @hidden */\n    @HostBinding('attr.tabindex')\n    public get tabIndex() {\n        return this.tab.selected ? 0 : -1;\n    }\n\n    /** @hidden */\n    @HostBinding('attr.aria-selected')\n    public get ariaSelected() {\n        return this.tab.selected;\n    }\n\n    /** @hidden */\n    @HostBinding('attr.aria-disabled')\n    public get ariaDisabled() {\n        return this.tab.disabled;\n    }\n\n    /** @hidden */\n    @HostListener('click')\n    public onClick() {\n        if (this.tab.panelComponent) {\n            this.tabs.selectTab(this.tab, true);\n        }\n    }\n\n    /** @hidden */\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n}\n","import { Component, HostBinding } from '@angular/core';\nimport { IgxTabHeaderDirective } from '../tab-header.directive';\nimport { IgxTabHeaderBase } from '../tabs.base';\n\n@Component({\n    selector: 'igx-bottom-nav-header',\n    templateUrl: 'bottom-nav-header.component.html',\n    providers: [{ provide: IgxTabHeaderBase, useExisting: IgxBottomNavHeaderComponent }],\n    standalone: true\n})\nexport class IgxBottomNavHeaderComponent extends IgxTabHeaderDirective {\n\n    /** @hidden */\n    @HostBinding('class.igx-bottom-nav__menu-item--selected')\n    public get cssClassSelected(): boolean {\n        return this.tab.selected;\n    }\n\n    /** @hidden */\n    @HostBinding('class.igx-bottom-nav__menu-item--disabled')\n    public get cssClassDisabled(): boolean {\n        return this.tab.disabled;\n    }\n\n    /** @hidden */\n    @HostBinding('class.igx-bottom-nav__menu-item')\n    public get cssClass(): boolean {\n        return (!this.tab.disabled && !this.tab.selected);\n    }\n}\n","<ng-content></ng-content>\n","import { Component } from '@angular/core';\nimport { IgxTabItemDirective } from '../tab-item.directive';\n\n@Component({\n    selector: 'igx-bottom-nav-item',\n    templateUrl: 'bottom-nav-item.component.html',\n    providers: [{ provide: IgxTabItemDirective, useExisting: IgxBottomNavItemComponent }],\n    standalone: true\n})\nexport class IgxBottomNavItemComponent extends IgxTabItemDirective {\n}\n","<ng-template #headerTemplate>\n    <ng-content select=\"igx-bottom-nav-header\"></ng-content>\n</ng-template>\n<ng-template #panelTemplate>\n    <ng-content select=\"igx-bottom-nav-content\"></ng-content>\n</ng-template>\n","import {\n    AfterViewInit, ChangeDetectorRef, ContentChildren, Directive, EventEmitter,\n    Inject,\n    Input, OnDestroy, Output, QueryList, booleanAttribute\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { Direction, IgxCarouselComponentBase } from '../carousel/carousel-base';\nimport { IBaseEventArgs } from '../core/utils';\nimport { IgxAngularAnimationService } from '../services/animation/angular-animation-service';\nimport { AnimationService } from '../services/animation/animation';\nimport { IgxDirectionality } from '../services/direction/directionality';\nimport { IgxTabItemDirective } from './tab-item.directive';\nimport { IgxTabContentBase, IgxTabsBase } from './tabs.base';\n\nexport interface ITabsBaseEventArgs extends IBaseEventArgs {\n    readonly owner: IgxTabsDirective;\n}\n\nexport interface ITabsSelectedIndexChangingEventArgs extends ITabsBaseEventArgs {\n    cancel: boolean;\n    readonly oldIndex: number;\n    newIndex: number;\n}\n\nexport interface ITabsSelectedItemChangeEventArgs extends ITabsBaseEventArgs {\n    readonly oldItem: IgxTabItemDirective;\n    readonly newItem: IgxTabItemDirective;\n}\n\n@Directive()\nexport abstract class IgxTabsDirective extends IgxCarouselComponentBase implements IgxTabsBase, AfterViewInit, OnDestroy {\n\n    /**\n     * Gets/Sets the index of the selected item.\n     * Default value is 0 if contents are defined otherwise defaults to -1.\n     */\n    @Input()\n    public get selectedIndex(): number {\n        return this._selectedIndex;\n    }\n\n    public set selectedIndex(value: number) {\n        if (this._selectedIndex !== value) {\n            let newIndex = value;\n            const oldIndex = this._selectedIndex;\n            const args: ITabsSelectedIndexChangingEventArgs = {\n                owner: this,\n                cancel: false,\n                oldIndex,\n                newIndex\n            };\n            this.selectedIndexChanging.emit(args);\n\n            if (!args.cancel) {\n                newIndex = args.newIndex;\n                this._selectedIndex = newIndex;\n                this.selectedIndexChange.emit(this._selectedIndex);\n            }\n\n            this.updateSelectedTabs(oldIndex);\n        }\n    }\n\n    /**\n     * Enables/disables the transition animation of the contents.\n     */\n    @Input({ transform: booleanAttribute })\n    public disableAnimation = false;\n\n    /**\n     * Output to enable support for two-way binding on [(selectedIndex)]\n     */\n    @Output()\n    public selectedIndexChange = new EventEmitter<number>();\n\n    /**\n     * Emitted when the selected index is about to change.\n     */\n    @Output()\n    public selectedIndexChanging = new EventEmitter<ITabsSelectedIndexChangingEventArgs>();\n\n    /**\n     * Emitted when the selected item is changed.\n     */\n    @Output()\n    public selectedItemChange = new EventEmitter<ITabsSelectedItemChangeEventArgs>();\n\n    /**\n     * Returns the items.\n     */\n    @ContentChildren(IgxTabItemDirective)\n    public items: QueryList<IgxTabItemDirective>;\n\n    /**\n     * Gets the selected item.\n     */\n    public get selectedItem(): IgxTabItemDirective {\n        return this.items && this.selectedIndex >= 0 && this.selectedIndex < this.items.length ?\n            this.items.get(this.selectedIndex) : null;\n    }\n\n    /** @hidden */\n    @ContentChildren(IgxTabContentBase, { descendants: true })\n    public panels: QueryList<IgxTabContentBase>;\n\n    /** @hidden */\n    protected override currentItem: IgxTabItemDirective;\n    /** @hidden */\n    protected override previousItem: IgxTabItemDirective;\n    /** @hidden */\n    protected componentName: string;\n\n    private _selectedIndex = -1;\n    private _itemChanges$: Subscription;\n\n    /** @hidden */\n    constructor(\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        cdr: ChangeDetectorRef,\n        public dir: IgxDirectionality) {\n        super(animationService, cdr);\n    }\n\n    /** @hidden */\n    public ngAfterViewInit(): void {\n        if (this._selectedIndex === -1) {\n            const hasSelectedTab = this.items.some((tab, i) => {\n                if (tab.selected) {\n                    this._selectedIndex = i;\n                }\n                return tab.selected;\n            });\n\n            if (!hasSelectedTab && this.hasPanels) {\n                this._selectedIndex = 0;\n            }\n        }\n\n        // Use promise to avoid expression changed after check error\n        Promise.resolve().then(() => {\n            this.updateSelectedTabs(null, false);\n        });\n\n        this._itemChanges$ = this.items.changes.subscribe(() => {\n            this.onItemChanges();\n        });\n\n        this.setAttributes();\n    }\n\n    /** @hidden */\n    public ngOnDestroy(): void {\n        if (this._itemChanges$) {\n            this._itemChanges$.unsubscribe();\n        }\n    }\n\n    /** @hidden */\n    public selectTab(tab: IgxTabItemDirective, selected: boolean): void {\n        if (!this.items) {\n            return;\n        }\n\n        const tabs = this.items.toArray();\n\n        if (selected) {\n            const index = tabs.indexOf(tab);\n            if (index > -1) {\n                this.selectedIndex = index;\n            }\n        } else {\n            if (tabs.every(t => !t.selected)) {\n                this.selectedIndex = -1;\n            }\n        }\n    }\n\n    /** @hidden */\n    protected getPreviousElement(): HTMLElement {\n        return this.previousItem.panelComponent.nativeElement;\n    }\n\n    /** @hidden */\n    protected getCurrentElement(): HTMLElement {\n        return this.currentItem.panelComponent.nativeElement;\n    }\n\n    /** @hidden */\n    protected scrollTabHeaderIntoView() {\n    }\n\n    /** @hidden */\n    protected onItemChanges() {\n        this.setAttributes();\n\n        // Check if there is selected tab\n        let selectedIndex = -1;\n        this.items.some((tab, i) => {\n            if (tab.selected) {\n                selectedIndex = i;\n            }\n            return tab.selected;\n        });\n\n        if (selectedIndex >= 0) {\n            // Set the selected index to the tab that has selected=true\n            Promise.resolve().then(() => {\n                this.selectedIndex = selectedIndex;\n            });\n        } else {\n            if (this.selectedIndex >= 0 && this.selectedIndex < this.items.length) {\n                // Select the tab on the same index the previous selected tab was\n                Promise.resolve().then(() => {\n                    this.updateSelectedTabs(null);\n                });\n            } else if (this.selectedIndex >= this.items.length) {\n                // Select the last tab\n                Promise.resolve().then(() => {\n                    this.selectedIndex = this.items.length - 1;\n                });\n            }\n        }\n    }\n\n    private setAttributes() {\n        this.items.forEach(item => {\n            if (item.panelComponent && !item.headerComponent.nativeElement.getAttribute('id')) {\n                const id = this.getNextTabId();\n                const tabHeaderId = `${this.componentName}-header-${id}`;\n                const tabPanelId = `${this.componentName}-content-${id}`;\n\n                this.setHeaderAttribute(item, 'id', tabHeaderId);\n                this.setHeaderAttribute(item, 'aria-controls', tabPanelId);\n                this.setPanelAttribute(item, 'id', tabPanelId);\n                this.setPanelAttribute(item, 'aria-labelledby', tabHeaderId);\n            }\n        });\n    }\n\n    private setHeaderAttribute(item: IgxTabItemDirective, attrName: string, value: string) {\n        item.headerComponent.nativeElement.setAttribute(attrName, value);\n    }\n\n    private setPanelAttribute(item: IgxTabItemDirective, attrName: string, value: string) {\n        item.panelComponent.nativeElement.setAttribute(attrName, value);\n    }\n\n    private get hasPanels() {\n        return this.panels && this.panels.length;\n    }\n\n    private updateSelectedTabs(oldSelectedIndex: number, raiseEvent = true) {\n        if (!this.items) {\n            return;\n        }\n\n        let newTab: IgxTabItemDirective;\n        const oldTab = this.currentItem;\n\n        // First select the new tab\n        if (this._selectedIndex >= 0 && this._selectedIndex < this.items.length) {\n            newTab = this.items.get(this._selectedIndex);\n            newTab.selected = true;\n        }\n        // Then unselect the other tabs\n        this.items.forEach((tab, i) => {\n            if (i !== this._selectedIndex) {\n                tab.selected = false;\n            }\n        });\n\n        if (this._selectedIndex !== oldSelectedIndex) {\n            this.scrollTabHeaderIntoView();\n            this.triggerPanelAnimations(oldSelectedIndex);\n\n            if (raiseEvent && newTab !== oldTab) {\n                this.selectedItemChange.emit({\n                    owner: this,\n                    newItem: newTab,\n                    oldItem: oldTab\n                });\n            }\n        }\n    }\n\n    private triggerPanelAnimations(oldSelectedIndex: number) {\n        const item = this.items.get(this._selectedIndex);\n\n        if (item &&\n            !this.disableAnimation &&\n            this.hasPanels &&\n            this.currentItem &&\n            !this.currentItem.selected) {\n            item.direction = (!this.dir.rtl && this._selectedIndex > oldSelectedIndex) ||\n                (this.dir.rtl && this._selectedIndex < oldSelectedIndex)\n                ? Direction.NEXT : Direction.PREV;\n\n            if (this.previousItem && this.previousItem.previous) {\n                this.previousItem.previous = false;\n            }\n            this.currentItem.direction = item.direction;\n\n            this.previousItem = this.currentItem;\n            this.currentItem = item;\n            this.triggerAnimations();\n        } else {\n            this.currentItem = item;\n        }\n    }\n\n    /** @hidden */\n    protected abstract getNextTabId();\n}\n","import { Component } from '@angular/core';\nimport { IgxTabsBase } from '../tabs.base';\nimport { IgxTabsDirective } from '../tabs.directive';\nimport { NgTemplateOutlet } from '@angular/common';\n\n\n/** @hidden */\nlet NEXT_BOTTOM_NAV_ITEM_ID = 0;\n\n/**\n * Bottom Navigation component enables the user to navigate among a number of contents displayed in a single view.\n *\n * @igxModule IgxBottomNavModule\n *\n * @igxTheme igx-bottom-nav-theme\n *\n * @igxKeywords bottom navigation\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Bottom Navigation component enables the user to navigate among a number of contents\n * displayed in a single view. The navigation through the contents is accomplished with the tab buttons located at bottom.\n *\n * @example\n * ```html\n * <igx-bottom-nav>\n *     <igx-bottom-nav-item>\n *         <igx-bottom-nav-header>\n *             <igx-icon igxBottomNavHeaderIcon>folder</igx-icon>\n *             <span igxBottomNavHeaderLabel>Tab 1</span>\n *         </igx-bottom-nav-header>\n *         <igx-bottom-nav-content>\n *             Content 1\n *         </igx-bottom-nav-content>\n *     </igx-bottom-nav-item>\n *     ...\n * </igx-bottom-nav>\n * ```\n */\n@Component({\n    selector: 'igx-bottom-nav',\n    templateUrl: 'bottom-nav.component.html',\n    providers: [{ provide: IgxTabsBase, useExisting: IgxBottomNavComponent }],\n    imports: [NgTemplateOutlet]\n})\nexport class IgxBottomNavComponent extends IgxTabsDirective {\n    /** @hidden */\n    public override disableAnimation = true;\n    /** @hidden */\n    protected override componentName = 'igx-bottom-nav';\n\n    /** @hidden */\n    protected getNextTabId() {\n        return NEXT_BOTTOM_NAV_ITEM_ID++;\n    }\n}\n","@for (tab of items; track tab; let i = $index) {\n    <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n}\n\n<div\n    #tablist\n    role=\"tablist\"\n    class=\"igx-bottom-nav__menu igx-bottom-nav__menu--bottom\"\n    aria-orientation=\"horizontal\"\n>\n    @for (tab of items; track tab; let i = $index) {\n        <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n    }\n</div>\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: 'igx-bottom-nav-header-label,[igxBottomNavHeaderLabel]',\n    standalone: true\n})\nexport class IgxBottomNavHeaderLabelDirective { }\n\n@Directive({\n    selector: 'igx-bottom-nav-header-icon,[igxBottomNavHeaderIcon]',\n    standalone: true\n})\nexport class IgxBottomNavHeaderIconDirective { }\n","import { IgxBottomNavContentComponent } from './bottom-nav-content.component';\nimport { IgxBottomNavHeaderComponent } from './bottom-nav-header.component';\nimport { IgxBottomNavItemComponent } from './bottom-nav-item.component';\nimport { IgxBottomNavComponent } from './bottom-nav.component';\nimport { IgxBottomNavHeaderIconDirective, IgxBottomNavHeaderLabelDirective } from './bottom-nav.directives';\n\nexport * from './bottom-nav.component';\nexport * from './bottom-nav-item.component';\nexport * from './bottom-nav-header.component';\nexport * from './bottom-nav.directives';\nexport * from './bottom-nav-content.component';\n\n/* NOTE: Bottom navigation directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_BOTTOM_NAV_DIRECTIVES = [\n    IgxBottomNavComponent,\n    IgxBottomNavItemComponent,\n    IgxBottomNavHeaderComponent,\n    IgxBottomNavContentComponent,\n    IgxBottomNavHeaderLabelDirective,\n    IgxBottomNavHeaderIconDirective\n] as const;\n","import { Component, HostBinding } from '@angular/core';\nimport { IgxTabContentDirective } from '../tab-content.directive';\nimport { IgxTabContentBase } from '../tabs.base';\n\n@Component({\n    selector: 'igx-tab-content',\n    templateUrl: 'tab-content.component.html',\n    providers: [{ provide: IgxTabContentBase, useExisting: IgxTabContentComponent }],\n    imports: []\n})\nexport class IgxTabContentComponent extends IgxTabContentDirective {\n    /** @hidden */\n    @HostBinding('class.igx-tabs__panel')\n    public cssClass = true;\n}\n","@if (tab.selected || tab.previous) {\n    <ng-content></ng-content>\n}\n","import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostBinding, Inject, Input, NgZone, OnDestroy, ViewChild } from '@angular/core';\nimport { getResizeObserver, mkenum, PlatformUtil } from '../../core/utils';\nimport { IgxAngularAnimationService } from '../../services/animation/angular-animation-service';\nimport { AnimationService } from '../../services/animation/animation';\nimport { IgxDirectionality } from '../../services/direction/directionality';\nimport { IgxTabsBase } from '../tabs.base';\nimport { IgxTabsDirective } from '../tabs.directive';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IgxIconComponent } from '../../icon/icon.component';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { IgxIconButtonDirective } from '../../directives/button/icon-button.directive';\n\nexport const IgxTabsAlignment = /*@__PURE__*/mkenum({\n    start: 'start',\n    end: 'end',\n    center: 'center',\n    justify: 'justify'\n});\n\n/** @hidden */\nconst enum TabScrollButtonStyle {\n    Enabled = 'enabled',\n    Disabled = 'disabled',\n    NotDisplayed = 'not_displayed'\n}\n\nexport type IgxTabsAlignment = (typeof IgxTabsAlignment)[keyof typeof IgxTabsAlignment];\n\n/** @hidden */\nlet NEXT_TAB_ID = 0;\n\n/**\n * Tabs component is used to organize or switch between similar data sets.\n *\n * @igxModule IgxTabsModule\n *\n * @igxTheme igx-tabs-theme\n *\n * @igxKeywords tabs\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Tabs component places tabs at the top and allows for scrolling when there are multiple tab items on the screen.\n *\n * @example\n * ```html\n * <igx-tabs>\n *     <igx-tab-item>\n *         <igx-tab-header>\n *             <igx-icon igxTabHeaderIcon>folder</igx-icon>\n *             <span igxTabHeaderLabel>Tab 1</span>\n *         </igx-tab-header>\n *         <igx-tab-content>\n *             Content 1\n *         </igx-tab-content>\n *     </igx-tab-item>\n *     ...\n * </igx-tabs>\n * ```\n */\n@Component({\n    selector: 'igx-tabs',\n    templateUrl: 'tabs.component.html',\n    providers: [{ provide: IgxTabsBase, useExisting: IgxTabsComponent }],\n    imports: [IgxRippleDirective, IgxIconComponent, NgClass, NgTemplateOutlet, IgxIconButtonDirective]\n})\n\nexport class IgxTabsComponent extends IgxTabsDirective implements AfterViewInit, OnDestroy {\n\n    /**\n     * Gets/Sets the tab alignment. Defaults to `start`.\n     */\n    @Input()\n    public get tabAlignment(): string | IgxTabsAlignment {\n        return this._tabAlignment;\n    }\n\n    public set tabAlignment(value: string | IgxTabsAlignment) {\n        this._tabAlignment = value;\n        requestAnimationFrame(() => {\n            this.updateScrollButtons();\n            this.realignSelectedIndicator();\n        });\n    }\n\n    /**\n     * Determines the tab activation.\n     * When set to auto, the tab is instantly selected while navigating with the Left/Right Arrows, Home or End keys and the corresponding panel is displayed.\n     * When set to manual, the tab is only focused. The selection happens after pressing Space or Enter.\n     * Defaults is auto.\n     */\n    @Input()\n    public activation: 'auto' | 'manual' = 'auto';\n\n    /** @hidden */\n    @ViewChild('headerContainer', { static: true })\n    public headerContainer: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('viewPort', { static: true })\n    public viewPort: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('itemsWrapper', { static: true })\n    public itemsWrapper: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('itemsContainer', { static: true })\n    public itemsContainer: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('selectedIndicator')\n    public selectedIndicator: ElementRef<HTMLElement>;\n\n    /** @hidden */\n    @ViewChild('scrollPrevButton')\n    public scrollPrevButton: ElementRef<HTMLButtonElement>;\n\n    /** @hidden */\n    @ViewChild('scrollNextButton')\n    public scrollNextButton: ElementRef<HTMLButtonElement>;\n\n    /** @hidden */\n    @HostBinding('class.igx-tabs')\n    public defaultClass = true;\n\n    /**  @hidden */\n    public offset = 0;\n\n    /** @hidden */\n    protected override componentName = 'igx-tabs';\n\n    private _tabAlignment: string | IgxTabsAlignment = 'start';\n    private _resizeObserver: ResizeObserver;\n\n    constructor(\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        cdr: ChangeDetectorRef,\n        private ngZone: NgZone,\n        dir: IgxDirectionality,\n        private platform: PlatformUtil\n    ) {\n        super(animationService, cdr, dir);\n    }\n\n\n    /** @hidden @internal */\n    public override ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n\n        this.ngZone.runOutsideAngular(() => {\n            if (this.platform.isBrowser) {\n                this._resizeObserver = new (getResizeObserver())(() => {\n                    this.updateScrollButtons();\n                    this.realignSelectedIndicator();\n                });\n                this._resizeObserver.observe(this.headerContainer.nativeElement);\n                this._resizeObserver.observe(this.viewPort.nativeElement);\n            }\n        });\n    }\n\n    /** @hidden @internal */\n    public override ngOnDestroy(): void {\n        super.ngOnDestroy();\n\n        this.ngZone.runOutsideAngular(() => {\n            this._resizeObserver?.disconnect();\n        });\n    }\n\n    /** @hidden */\n    public scrollPrev() {\n        this.scroll(false);\n    }\n\n    /** @hidden */\n    public scrollNext() {\n        this.scroll(true);\n    }\n\n    /** @hidden */\n    public realignSelectedIndicator() {\n        if (this.selectedIndex >= 0 && this.selectedIndex < this.items.length) {\n            const header = this.items.get(this.selectedIndex).headerComponent.nativeElement;\n            this.alignSelectedIndicator(header, 0);\n        }\n    }\n\n    /** @hidden */\n    public resolveHeaderScrollClasses() {\n        return {\n            'igx-tabs__header-scroll--start': this.tabAlignment === 'start',\n            'igx-tabs__header-scroll--end': this.tabAlignment === 'end',\n            'igx-tabs__header-scroll--center': this.tabAlignment === 'center',\n            'igx-tabs__header-scroll--justify': this.tabAlignment === 'justify',\n        };\n    }\n\n    /** @hidden */\n    protected override scrollTabHeaderIntoView() {\n        if (this.selectedIndex >= 0) {\n            const tabItems = this.items.toArray();\n            const tabHeaderNativeElement = tabItems[this.selectedIndex].headerComponent.nativeElement;\n\n            // Scroll left if there is need\n            if (this.getElementOffset(tabHeaderNativeElement) < this.offset) {\n                this.scrollElement(tabHeaderNativeElement, false);\n            }\n\n            // Scroll right if there is need\n            const viewPortOffsetWidth = this.viewPort.nativeElement.offsetWidth;\n            const delta = (this.getElementOffset(tabHeaderNativeElement) + tabHeaderNativeElement.offsetWidth) - (viewPortOffsetWidth + this.offset);\n\n            // Fix for IE 11, a difference is accumulated from the widths calculations\n            if (delta > 1) {\n                this.scrollElement(tabHeaderNativeElement, true);\n            }\n\n            this.alignSelectedIndicator(tabHeaderNativeElement);\n        } else {\n            this.hideSelectedIndicator();\n        }\n    }\n\n    /** @hidden */\n    protected getNextTabId() {\n        return NEXT_TAB_ID++;\n    }\n\n    /** @hidden */\n    protected override onItemChanges() {\n        super.onItemChanges();\n\n        Promise.resolve().then(() => {\n            this.updateScrollButtons();\n        });\n    }\n\n    private alignSelectedIndicator(element: HTMLElement, duration = 0.3): void {\n        if (this.selectedIndicator) {\n            this.selectedIndicator.nativeElement.style.visibility = 'visible';\n            this.selectedIndicator.nativeElement.style.transitionDuration = duration > 0 ? `${duration}s` : 'initial';\n            this.selectedIndicator.nativeElement.style.width = `${element.offsetWidth}px`;\n            this.selectedIndicator.nativeElement.style.transform = `translate(${element.offsetLeft}px)`;\n        }\n    }\n\n    private hideSelectedIndicator(): void {\n        if (this.selectedIndicator) {\n            this.selectedIndicator.nativeElement.style.visibility = 'hidden';\n        }\n    }\n\n    private scroll(scrollNext: boolean): void {\n        const tabsArray = this.items.toArray();\n\n        for (let index = 0; index < tabsArray.length; index++) {\n            const tab = tabsArray[index];\n            const element = tab.headerComponent.nativeElement;\n            if (scrollNext) {\n                if (element.offsetWidth + this.getElementOffset(element) > this.viewPort.nativeElement.offsetWidth + this.offset) {\n                    this.scrollElement(element, scrollNext);\n                    break;\n                }\n            } else {\n                if (this.getElementOffset(element) >= this.offset) {\n                    this.scrollElement(tabsArray[index - 1].headerComponent.nativeElement, scrollNext);\n                    break;\n                }\n            }\n        }\n    }\n\n    private scrollElement(element: any, scrollNext: boolean): void {\n        const viewPortWidth = this.viewPort.nativeElement.offsetWidth;\n\n        this.offset = (scrollNext) ? element.offsetWidth + this.getElementOffset(element) - viewPortWidth : this.getElementOffset(element);\n        this.viewPort.nativeElement.scrollLeft = this.getOffset(this.offset);\n        this.updateScrollButtons();\n    }\n\n    private updateScrollButtons() {\n        const itemsContainerWidth = this.getTabItemsContainerWidth();\n\n        const scrollPrevButtonStyle = this.resolveLeftScrollButtonStyle(itemsContainerWidth);\n        this.setScrollButtonStyle(this.scrollPrevButton.nativeElement, scrollPrevButtonStyle);\n\n        const scrollNextButtonStyle = this.resolveRightScrollButtonStyle(itemsContainerWidth);\n        this.setScrollButtonStyle(this.scrollNextButton.nativeElement, scrollNextButtonStyle);\n    }\n\n    private setScrollButtonStyle(button: HTMLButtonElement, buttonStyle: TabScrollButtonStyle) {\n        if (buttonStyle === TabScrollButtonStyle.Enabled) {\n            button.disabled = false;\n            button.style.display = '';\n        } else if (buttonStyle === TabScrollButtonStyle.Disabled) {\n            button.disabled = true;\n            button.style.display = '';\n        } else if (buttonStyle === TabScrollButtonStyle.NotDisplayed) {\n            button.style.display = 'none';\n        }\n    }\n    private resolveLeftScrollButtonStyle(itemsContainerWidth: number): TabScrollButtonStyle {\n        const headerContainerWidth = this.headerContainer.nativeElement.offsetWidth;\n        const offset = this.offset;\n\n        if (offset === 0) {\n            // Fix for IE 11, a difference is accumulated from the widths calculations.\n            if (itemsContainerWidth - headerContainerWidth <= 1) {\n                return TabScrollButtonStyle.NotDisplayed;\n            }\n            return TabScrollButtonStyle.Disabled;\n        } else {\n            return TabScrollButtonStyle.Enabled;\n        }\n    }\n\n    private resolveRightScrollButtonStyle(itemsContainerWidth: number): TabScrollButtonStyle {\n        const viewPortWidth = this.viewPort.nativeElement.offsetWidth;\n        const headerContainerWidth = this.headerContainer.nativeElement.offsetWidth;\n        const offset = this.offset;\n        const total = offset + viewPortWidth;\n\n        // Fix for IE 11, a difference is accumulated from the widths calculations.\n        if (itemsContainerWidth - headerContainerWidth <= 1 && offset === 0) {\n            return TabScrollButtonStyle.NotDisplayed;\n        }\n\n        if (itemsContainerWidth > total) {\n            return TabScrollButtonStyle.Enabled;\n        } else {\n            return TabScrollButtonStyle.Disabled;\n        }\n    }\n\n    private getTabItemsContainerWidth() {\n        // We use this hacky way to get the width of the itemsContainer,\n        // because there is inconsistency in IE we cannot use offsetWidth or scrollOffset.\n        const itemsContainerChildrenCount = this.itemsContainer.nativeElement.children.length;\n        let itemsContainerWidth = 0;\n\n        if (itemsContainerChildrenCount > 1) {\n            const lastTab = this.itemsContainer.nativeElement.children[itemsContainerChildrenCount - 1] as HTMLElement;\n            itemsContainerWidth = this.getElementOffset(lastTab) + lastTab.offsetWidth;\n        }\n\n        return itemsContainerWidth;\n    }\n\n    private getOffset(offset: number): number {\n        return this.dir.rtl ? -offset : offset;\n    }\n\n    private getElementOffset(element: HTMLElement): number {\n        return this.dir.rtl ? this.itemsWrapper.nativeElement.offsetWidth - element.offsetLeft - element.offsetWidth : element.offsetLeft;\n    }\n}\n","<div #headerContainer class=\"igx-tabs__header\">\n    <button #scrollPrevButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs__header-button\" (click)=\"scrollPrev()\">\n        <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n    </button>\n    <div #viewPort class=\"igx-tabs__header-content\">\n        <div #itemsWrapper class=\"igx-tabs__header-wrapper\" role=\"tablist\">\n            <div #itemsContainer class=\"igx-tabs__header-scroll\" [ngClass]=\"resolveHeaderScrollClasses()\">\n                @for (tab of items; track tab; let i = $index) {\n                    <ng-container *ngTemplateOutlet=\"tab.headerTemplate\"></ng-container>\n                }\n            </div>\n            @if (items.length > 0) {\n                <div #selectedIndicator class=\"igx-tabs__header-active-indicator\">\n                </div>\n            }\n        </div>\n    </div>\n    <button #scrollNextButton type=\"button\" igxIconButton=\"flat\" igxRipple tabindex=\"-1\" class=\"igx-tabs__header-button\" (click)=\"scrollNext()\">\n        <igx-icon family=\"default\" name=\"next\"></igx-icon>\n    </button>\n</div>\n<div class=\"igx-tabs__panels\">\n    @for (tab of items; track tab; let i = $index) {\n        <ng-container *ngTemplateOutlet=\"tab.panelTemplate\"></ng-container>\n    }\n</div>\n","import { AfterViewInit, Component, ElementRef, HostBinding, HostListener, NgZone, OnDestroy } from '@angular/core';\nimport { IgxTabItemDirective } from '../tab-item.directive';\nimport { IgxTabHeaderDirective } from '../tab-header.directive';\nimport { IgxTabHeaderBase } from '../tabs.base';\nimport { IgxTabsComponent } from './tabs.component';\nimport { getResizeObserver } from '../../core/utils';\nimport { PlatformUtil } from '../../core/utils';\nimport { IgxDirectionality } from '../../services/direction/directionality';\n\n@Component({\n    selector: 'igx-tab-header',\n    templateUrl: 'tab-header.component.html',\n    providers: [{ provide: IgxTabHeaderBase, useExisting: IgxTabHeaderComponent }],\n    standalone: true\n})\nexport class IgxTabHeaderComponent extends IgxTabHeaderDirective implements AfterViewInit, OnDestroy {\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-tabs__header-item--selected')\n    public get provideCssClassSelected(): boolean {\n        return this.tab.selected;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-tabs__header-item--disabled')\n    public get provideCssClassDisabled(): boolean {\n        return this.tab.disabled;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-tabs__header-item')\n    public cssClass = true;\n\n    private _resizeObserver: ResizeObserver;\n\n    /** @hidden @internal */\n    constructor(\n        protected override tabs: IgxTabsComponent,\n        tab: IgxTabItemDirective,\n        elementRef: ElementRef<HTMLElement>,\n        platform: PlatformUtil,\n        private ngZone: NgZone,\n        private dir: IgxDirectionality\n    ) {\n        super(tabs, tab, elementRef, platform);\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown', ['$event'])\n    public keyDown(event: KeyboardEvent) {\n        let unsupportedKey = false;\n        const itemsArray = this.tabs.items.toArray();\n        const previousIndex = itemsArray.indexOf(this.tab);\n        let newIndex = previousIndex;\n        const hasDisabledItems = itemsArray.some((item) => item.disabled);\n\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_RIGHT:\n                newIndex = this.getNewSelectionIndex(newIndex, itemsArray, event.key, hasDisabledItems);\n                break;\n            case this.platform.KEYMAP.ARROW_LEFT:\n                newIndex = this.getNewSelectionIndex(newIndex, itemsArray, event.key, hasDisabledItems);\n                break;\n            case this.platform.KEYMAP.HOME:\n                event.preventDefault();\n                newIndex = 0;\n                while (itemsArray[newIndex].disabled && newIndex < itemsArray.length) {\n                    newIndex = newIndex === itemsArray.length - 1 ? 0 : newIndex + 1;\n                }\n                break;\n            case this.platform.KEYMAP.END:\n                event.preventDefault();\n                newIndex = itemsArray.length - 1;\n                while (hasDisabledItems && itemsArray[newIndex].disabled && newIndex > 0) {\n                    newIndex = newIndex === 0 ? itemsArray.length - 1 : newIndex - 1;\n                }\n                break;\n            case this.platform.KEYMAP.ENTER:\n            case this.platform.KEYMAP.SPACE:\n                event.preventDefault();\n                if (this.tabs.activation === 'manual') {\n                    this.nativeElement.click();\n                }\n                unsupportedKey = true;\n                break;\n            default:\n                unsupportedKey = true;\n                break;\n        }\n\n        if (!unsupportedKey) {\n            itemsArray[newIndex].headerComponent.nativeElement.focus({ preventScroll: true });\n            if (this.tabs.activation === 'auto') {\n                this.tabs.selectedIndex = newIndex;\n            }\n        }\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit(): void {\n        this.ngZone.runOutsideAngular(() => {\n            if (this.platform.isBrowser) {\n                this._resizeObserver = new (getResizeObserver())(() => {\n                    this.tabs.realignSelectedIndicator();\n                });\n                this._resizeObserver.observe(this.nativeElement);\n            }\n        });\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy(): void {\n        this.ngZone.runOutsideAngular(() => {\n            this._resizeObserver?.disconnect();\n        });\n    }\n\n    private getNewSelectionIndex(newIndex: number, itemsArray: any[], key: string, hasDisabledItems: boolean): number {\n        if ((key === this.platform.KEYMAP.ARROW_RIGHT && !this.dir.rtl) || (key === this.platform.KEYMAP.ARROW_LEFT && this.dir.rtl)) {\n            newIndex = newIndex === itemsArray.length - 1 ? 0 : newIndex + 1;\n            while (hasDisabledItems && itemsArray[newIndex].disabled && newIndex < itemsArray.length) {\n                newIndex = newIndex === itemsArray.length - 1 ? 0 : newIndex + 1;\n            }\n        } else {\n            newIndex = newIndex === 0 ? itemsArray.length - 1 : newIndex - 1;\n            while (hasDisabledItems && itemsArray[newIndex].disabled && newIndex >= 0) {\n                newIndex = newIndex === 0 ? itemsArray.length - 1 : newIndex - 1;\n            }\n        }\n        return newIndex;\n    }\n}\n","<ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n\n<div class=\"igx-tabs__header-item-inner\">\n    <ng-content></ng-content>\n</div>\n\n<ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n","import { Component } from '@angular/core';\nimport { IgxTabItemDirective } from '../tab-item.directive';\n\n@Component({\n    selector: 'igx-tab-item',\n    templateUrl: 'tab-item.component.html',\n    providers: [{ provide: IgxTabItemDirective, useExisting: IgxTabItemComponent }],\n    standalone: true\n})\nexport class IgxTabItemComponent extends IgxTabItemDirective {\n\n}\n","<ng-template #headerTemplate>\n    <ng-content select=\"igx-tab-header\"></ng-content>\n</ng-template>\n<ng-template #panelTemplate>\n    <ng-content select=\"igx-tab-content\"></ng-content>\n</ng-template>\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: 'igx-tab-header-label,[igxTabHeaderLabel]',\n    standalone: true\n})\nexport class IgxTabHeaderLabelDirective { }\n\n@Directive({\n    selector: 'igx-tab-header-icon,[igxTabHeaderIcon]',\n    standalone: true\n})\nexport class IgxTabHeaderIconDirective { }\n","import { IgxPrefixDirective } from '../../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../../directives/suffix/suffix.directive';\nimport { IgxTabContentComponent } from './tab-content.component';\nimport { IgxTabHeaderComponent } from './tab-header.component';\nimport { IgxTabItemComponent } from './tab-item.component';\nimport { IgxTabsComponent } from './tabs.component';\nimport { IgxTabHeaderIconDirective, IgxTabHeaderLabelDirective } from './tabs.directives';\n\nexport * from './tabs.component';\nexport * from './tab-item.component';\nexport * from './tab-header.component';\nexport * from './tabs.directives';\nexport * from './tab-content.component';\nexport {\n    ITabsSelectedIndexChangingEventArgs,\n    ITabsSelectedItemChangeEventArgs\n} from '../tabs.directive'\n\n/* NOTE: Tabs directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TABS_DIRECTIVES = [\n    IgxTabsComponent,\n    IgxTabItemComponent,\n    IgxTabHeaderComponent,\n    IgxTabContentComponent,\n    IgxTabHeaderLabelDirective,\n    IgxTabHeaderIconDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective\n] as const;\n","import { IgxPickerActionsDirective, IgxPickerClearComponent, IgxPickerToggleComponent } from '../date-common/picker-icons.common';\nimport { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxTimePickerComponent } from './time-picker.component';\n\nexport * from './time-picker.component';\nexport * from './time-picker.directives';\n\n/* NOTE: Time picker directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TIME_PICKER_DIRECTIVES = [\n    IgxTimePickerComponent,\n    IgxPickerActionsDirective,\n    IgxPickerToggleComponent,\n    IgxPickerClearComponent,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import {\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Inject,\n    Input,\n    OnInit,\n    Optional,\n    Output\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxNavigationService } from '../core/navigation';\nimport {\n    IgxOverlayService,\n    HorizontalAlignment,\n    VerticalAlignment,\n    GlobalPositionStrategy,\n    PositionSettings\n} from '../services/public_api';\nimport { IgxNotificationsDirective } from '../directives/notification/notifications.directive';\nimport { ToggleViewEventArgs } from '../directives/toggle/toggle.directive';\nimport { useAnimation } from '@angular/animations';\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\n\nlet NEXT_ID = 0;\n\n/**\n * **Ignite UI for Angular Toast** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/toast)\n *\n * The Ignite UI Toast provides information and warning messages that are non-interactive and cannot\n * be dismissed by the user. Toasts can be displayed at the bottom, middle, or top of the page.\n *\n * Example:\n * ```html\n * <button type=\"button\" igxButton (click)=\"toast.open()\">Show notification</button>\n * <igx-toast #toast displayTime=\"1000\">\n *      Notification displayed\n * </igx-toast>\n * ```\n */\n@Component({\n    selector: 'igx-toast',\n    templateUrl: 'toast.component.html',\n    standalone: true\n})\nexport class IgxToastComponent extends IgxNotificationsDirective implements OnInit {\n    /**\n     * @hidden\n     */\n    @HostBinding('class.igx-toast')\n    public cssClass = 'igx-toast';\n\n    /**\n     * Sets/gets the `id` of the toast.\n     * If not set, the `id` will have value `\"igx-toast-0\"`.\n     * ```html\n     * <igx-toast id = \"my-first-toast\"></igx-toast>\n     * ```\n     * ```typescript\n     * let toastId = this.toast.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public override id = `igx-toast-${NEXT_ID++}`;\n\n    /**\n     * Sets/gets the `role` attribute.\n     * If not set, `role` will have value `\"alert\"`.\n     * ```html\n     * <igx-toast [role] = \"'notify'\"></igx-toast>\n     * ```\n     * ```typescript\n     * let toastRole = this.toast.role;\n     * ```\n     *\n     * @memberof IgxToastComponent\n     */\n    @HostBinding('attr.role')\n    @Input()\n    public role = 'alert';\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public isVisibleChange = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Get the position and animation settings used by the toast.\n     * ```typescript\n     * @ViewChild('toast', { static: true }) public toast: IgxToastComponent;\n     * let currentPosition: PositionSettings = this.toast.positionSettings\n     * ```\n     */\n     @Input()\n     public get positionSettings(): PositionSettings {\n         return this._positionSettings;\n     }\n\n     /**\n      * Set the position and animation settings used by the toast.\n      * ```html\n      * <igx-toast [positionSettings]=\"newPositionSettings\"></igx-toast>\n      * ```\n      * ```typescript\n      * import { slideInTop, slideOutBottom } from 'igniteui-angular';\n      * ...\n      * @ViewChild('toast', { static: true }) public toast: IgxToastComponent;\n      *  public newPositionSettings: PositionSettings = {\n      *      openAnimation: useAnimation(slideInTop, { params: { duration: '1000ms', fromPosition: 'translateY(100%)'}}),\n      *      closeAnimation: useAnimation(slideOutBottom, { params: { duration: '1000ms', fromPosition: 'translateY(0)'}}),\n      *      horizontalDirection: HorizontalAlignment.Left,\n      *      verticalDirection: VerticalAlignment.Middle,\n      *      horizontalStartPoint: HorizontalAlignment.Left,\n      *      verticalStartPoint: VerticalAlignment.Middle\n      *  };\n      * this.toast.positionSettings = this.newPositionSettings;\n      * ```\n      */\n     public set positionSettings(settings: PositionSettings) {\n         this._positionSettings = settings;\n     }\n\n     private _positionSettings: PositionSettings = {\n        horizontalDirection: HorizontalAlignment.Center,\n        verticalDirection: VerticalAlignment.Bottom,\n        openAnimation: useAnimation(fadeIn),\n        closeAnimation: useAnimation(fadeOut),\n     };\n\n    /**\n     * Gets the nativeElement of the toast.\n     * ```typescript\n     * let nativeElement = this.toast.element;\n     * ```\n     *\n     * @memberof IgxToastComponent\n     */\n    public override get element() {\n        return this._element.nativeElement;\n    }\n\n    constructor(\n        private _element: ElementRef,\n        cdr: ChangeDetectorRef,\n        @Optional() navService: IgxNavigationService,\n        @Inject(IgxOverlayService) overlayService: IgxOverlayService\n    ) {\n        super(_element, cdr, overlayService, navService);\n    }\n\n    /**\n     * Shows the toast.\n     * If `autoHide` is enabled, the toast will hide after `displayTime` is over.\n     *\n     * ```typescript\n     * this.toast.open();\n     * ```\n     */\n    public override open(message?: string, settings?: PositionSettings) {\n        if (message !== undefined) {\n            this.textMessage = message;\n        }\n        if (settings !== undefined) {\n            this.positionSettings = settings;\n        }\n        this.strategy = new GlobalPositionStrategy(this.positionSettings);\n        super.open();\n    }\n\n    /**\n     * Opens or closes the toast, depending on its current state.\n     *\n     * ```typescript\n     * this.toast.toggle();\n     * ```\n     */\n     public override toggle() {\n        if (this.collapsed || this.isClosing) {\n            this.open();\n        } else {\n            this.close();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        this.opened.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            const openedEventArgs: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n            this.isVisibleChange.emit(openedEventArgs);\n        });\n\n        this.closed.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            const closedEventArgs: ToggleViewEventArgs = { owner: this, id: this._overlayId };\n            this.isVisibleChange.emit(closedEventArgs);\n        });\n    }\n}\n","<ng-content></ng-content>\n<span>{{ textMessage }}</span>\n\n","import { Component } from '@angular/core';\nimport { IgxDropDownGroupComponent } from '../drop-down/drop-down-group.component';\n\n/**\n * The `<igx-select-item>` is a container intended for row items in\n * a `<igx-select>` container.\n */\n@Component({\n    selector: 'igx-select-item-group',\n    template: `\n        <label id=\"{{labelId}}\">{{ label }}</label>\n        <ng-content select=\"igx-select-item\"></ng-content>\n    `,\n    standalone: true\n})\nexport class IgxSelectGroupComponent extends IgxDropDownGroupComponent {\n}\n","import { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxSelectGroupComponent } from './select-group.component';\nimport { IgxSelectItemComponent } from './select-item.component';\nimport { IgxSelectComponent, IgxSelectFooterDirective, IgxSelectHeaderDirective, IgxSelectToggleIconDirective } from './select.component';\n\nexport * from './select-group.component';\nexport * from './select-item.component';\nexport * from './select.component';\n\n/* NOTE: Select directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_SELECT_DIRECTIVES = [\n    IgxSelectComponent,\n    IgxSelectItemComponent,\n    IgxSelectGroupComponent,\n    IgxSelectHeaderDirective,\n    IgxSelectFooterDirective,\n    IgxSelectToggleIconDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import { Component, HostBinding, Input, ElementRef, Output, EventEmitter, booleanAttribute } from '@angular/core';\n\n/**\n * Represents individual resizable/collapsible panes.\n *\n * @igxModule IgxSplitterModule\n *\n * @igxParent IgxSplitterComponent\n *\n * @igxKeywords pane\n *\n * @igxGroup presentation\n *\n * @remarks\n *  Users can control the resize behavior via the min and max size properties.\n */\n@Component({\n    selector: 'igx-splitter-pane',\n    templateUrl: './splitter-pane.component.html',\n    standalone: true\n})\nexport class IgxSplitterPaneComponent {\n    private _minSize: string;\n    private _maxSize: string;\n\n    /**\n     * @hidden @internal\n     * Gets/Sets the 'display' property of the current pane.\n     */\n    @HostBinding('style.display')\n    public display = 'flex';\n\n    /**\n     * Gets/Sets the minimum allowed size of the current pane.\n     *\n     * @example\n     * ```html\n     * <igx-splitter>\n     *  <igx-splitter-pane [minSize]='minSize'>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Input()\n    public get minSize(): string {\n        return this._minSize;\n    }\n    public set minSize(value: string) {\n        this._minSize = value;\n        if (this.owner) {\n            this.owner.panes.notifyOnChanges();\n        }\n    }\n\n    /**\n     * Gets/Set the maximum allowed size of the current pane.\n     *\n     * @example\n     * ```html\n     * <igx-splitter>\n     *  <igx-splitter-pane [maxSize]='maxSize'>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Input()\n    public get maxSize(): string {\n        return this._maxSize;\n    }\n    public set maxSize(value: string) {\n        this._maxSize = value;\n        if (this.owner) {\n            this.owner.panes.notifyOnChanges();\n        }\n    }\n\n    /**\n     * Gets/Sets whether pane is resizable.\n     *\n     * @example\n     * ```html\n     * <igx-splitter>\n     *  <igx-splitter-pane [resizable]='false'>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     * @remarks\n     * If pane is not resizable its related splitter bar cannot be dragged.\n     */\n    @Input({ transform: booleanAttribute })\n    public resizable = true;\n\n    /**\n     * Event fired when collapsed state of pane is changed.\n     *\n     * @example\n     * ```html\n     * <igx-splitter>\n     *  <igx-splitter-pane (collapsedChange)='paneCollapsedChange($event)'>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Output()\n    public collapsedChange = new EventEmitter<boolean>();\n\n    /** @hidden @internal */\n    @HostBinding('style.order')\n    public order!: number;\n\n    /**\n     * @hidden @internal\n     * Gets/Sets the `overflow`.\n     */\n    @HostBinding('style.overflow')\n    public overflow = 'auto';\n\n    /**\n     * @hidden @internal\n     * Get/Sets the `minWidth` properties of the current pane.\n     */\n    @HostBinding('style.min-width')\n    public minWidth = '0';\n\n    /**\n     * @hidden @internal\n     * Get/Sets the `maxWidth` properties of the current pane.\n     */\n    @HostBinding('style.max-width')\n    public maxWidth = '100%';\n\n    /**\n     * @hidden @internal\n     * Gets/Sets the `minHeight` properties of the current pane.\n     */\n    @HostBinding('style.min-height')\n    public minHeight = '0';\n\n    /**\n     * @hidden @internal\n     * Gets/Sets the `maxHeight` properties of the current `IgxSplitterPaneComponent`.\n     */\n    @HostBinding('style.max-height')\n    public maxHeight = '100%';\n\n    /** @hidden @internal */\n    public owner;\n\n    /**\n     * Gets/Sets the size of the current pane.\n     *  * @example\n     * ```html\n     * <igx-splitter>\n     *  <igx-splitter-pane [size]='size'>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Input()\n    public get size() {\n        return this._size;\n    }\n\n    public set size(value) {\n        this._size = value;\n        this.el.nativeElement.style.flex = this.flex;\n    }\n\n    /** @hidden @internal */\n    public get isPercentageSize() {\n        return this.size === 'auto' || this.size.indexOf('%') !== -1;\n    }\n\n    /** @hidden @internal */\n    public get dragSize() {\n        return this._dragSize;\n    }\n    public set dragSize(val) {\n        this._dragSize = val;\n        this.el.nativeElement.style.flex = this.flex;\n    }\n\n    /**\n     *\n     * @hidden @internal\n     * Gets the host native element.\n     */\n    public get element(): any {\n        return this.el.nativeElement;\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the `flex` property of the current `IgxSplitterPaneComponent`.\n     */\n    @HostBinding('style.flex')\n    public get flex() {\n        const size = this.dragSize || this.size;\n        const grow = this.isPercentageSize && !this.dragSize ? 1 : 0;\n        return `${grow} ${grow} ${size}`;\n    }\n\n    /**\n     * Gets/Sets whether current pane is collapsed.\n     *\n     * @example\n     * ```typescript\n     * const isCollapsed = pane.collapsed;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set collapsed(value) {\n        if (this.owner) {\n            // reset sibling sizes when pane collapse state changes.\n            this._getSiblings().forEach(sibling => {\n                sibling.size = 'auto'\n                sibling.dragSize = null;\n            });\n        }\n        this._collapsed = value;\n        this.display = this._collapsed ? 'none' : 'flex';\n        this.collapsedChange.emit(this._collapsed);\n    }\n\n    public get collapsed() {\n        return this._collapsed;\n    }\n\n    private _size = 'auto';\n    private _dragSize;\n    private _collapsed = false;\n\n\n    constructor(private el: ElementRef) { }\n\n    /**\n     * Toggles the collapsed state of the pane.\n     *\n     * @example\n     * ```typescript\n     * pane.toggle();\n     * ```\n     */\n    public toggle() {\n        this.collapsed = !this.collapsed;\n    }\n\n    /** @hidden @internal */\n    private _getSiblings() {\n        const panes = this.owner.panes.toArray();\n        const index = panes.indexOf(this);\n        const siblings = [];\n        if (index !== 0) {\n            siblings.push(panes[index - 1]);\n        }\n        if (index !== panes.length - 1) {\n            siblings.push(panes[index + 1]);\n        }\n        return siblings;\n    }\n}\n","<ng-content></ng-content>","import { DOCUMENT } from '@angular/common';\nimport { AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Inject, Input, Output, QueryList, booleanAttribute, forwardRef } from '@angular/core';\nimport { DragDirection, IDragMoveEventArgs, IDragStartEventArgs, IgxDragDirective, IgxDragIgnoreDirective } from '../directives/drag-drop/drag-drop.directive';\nimport { IgxSplitterPaneComponent } from './splitter-pane/splitter-pane.component';\n\n/**\n * An enumeration that defines the `SplitterComponent` panes orientation.\n */\nexport enum SplitterType {\n    Horizontal,\n    Vertical\n}\n\nexport declare interface ISplitterBarResizeEventArgs {\n    pane: IgxSplitterPaneComponent;\n    sibling: IgxSplitterPaneComponent;\n}\n\n/**\n * Provides a framework for a simple layout, splitting the view horizontally or vertically\n * into multiple smaller resizable and collapsible areas.\n *\n * @igxModule IgxSplitterModule\n *\n * @igxParent Layouts\n *\n * @igxTheme igx-splitter-theme\n *\n * @igxKeywords splitter panes layout\n *\n * @igxGroup presentation\n *\n * @example\n * ```html\n * <igx-splitter>\n *  <igx-splitter-pane>\n *      ...\n *  </igx-splitter-pane>\n *  <igx-splitter-pane>\n *      ...\n *  </igx-splitter-pane>\n * </igx-splitter>\n * ```\n */\n@Component({\n    selector: 'igx-splitter',\n    templateUrl: './splitter.component.html',\n    imports: [forwardRef(() => IgxSplitBarComponent)]\n})\nexport class IgxSplitterComponent implements AfterContentInit {\n    /**\n     * Gets the list of splitter panes.\n     *\n     * @example\n     * ```typescript\n     * const panes = this.splitter.panes;\n     * ```\n     */\n    @ContentChildren(IgxSplitterPaneComponent, { read: IgxSplitterPaneComponent })\n    public panes!: QueryList<IgxSplitterPaneComponent>;\n\n    /**\n    * @hidden\n    * @internal\n    */\n    @HostBinding('class.igx-splitter')\n    public cssClass = 'igx-splitter';\n\n    /**\n     * @hidden @internal\n     * Gets/Sets the `overflow` property of the current splitter.\n     */\n    @HostBinding('style.overflow')\n    public overflow = 'hidden';\n\n    /**\n     * @hidden @internal\n     * Sets/Gets the `display` property of the current splitter.\n     */\n    @HostBinding('style.display')\n    public display = 'flex';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('attr.aria-orientation')\n    public get orientation() {\n        return this.type === SplitterType.Horizontal ? 'horizontal' : 'vertical';\n    }\n\n    /**\n     * Event fired when resizing of panes starts.\n     *\n     * @example\n     * ```html\n     * <igx-splitter (resizeStart)='resizeStart($event)'>\n     *  <igx-splitter-pane>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Output()\n    public resizeStart = new EventEmitter<ISplitterBarResizeEventArgs>();\n\n    /**\n     * Event fired when resizing of panes is in progress.\n     *\n     * @example\n     * ```html\n     * <igx-splitter (resizing)='resizing($event)'>\n     *  <igx-splitter-pane>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Output()\n    public resizing = new EventEmitter<ISplitterBarResizeEventArgs>();\n\n\n    /**\n     * Event fired when resizing of panes ends.\n     *\n     * @example\n     * ```html\n     * <igx-splitter (resizeEnd)='resizeEnd($event)'>\n     *  <igx-splitter-pane>...</igx-splitter-pane>\n     * </igx-splitter>\n     * ```\n     */\n    @Output()\n    public resizeEnd = new EventEmitter<ISplitterBarResizeEventArgs>();\n\n    private _type: SplitterType = SplitterType.Horizontal;\n\n    /**\n     * @hidden @internal\n     * A field that holds the initial size of the main `IgxSplitterPaneComponent` in each pair of panes divided by a splitter bar.\n     */\n    private initialPaneSize!: number;\n\n    /**\n     * @hidden @internal\n     * A field that holds the initial size of the sibling pane in each pair of panes divided by a gripper.\n     * @memberof SplitterComponent\n     */\n    private initialSiblingSize!: number;\n\n    /**\n     * @hidden @internal\n     * The main pane in each pair of panes divided by a gripper.\n     */\n    private pane!: IgxSplitterPaneComponent;\n\n    /**\n     * The sibling pane in each pair of panes divided by a splitter bar.\n     */\n    private sibling!: IgxSplitterPaneComponent;\n\n    constructor(@Inject(DOCUMENT) public document, private elementRef: ElementRef) { }\n    /**\n     * Gets/Sets the splitter orientation.\n     *\n     * @example\n     * ```html\n     * <igx-splitter [type]=\"type\">...</igx-splitter>\n     * ```\n     */\n    @Input()\n    public get type() {\n        return this._type;\n    }\n    public set type(value) {\n        this._type = value;\n        this.resetPaneSizes();\n        this.panes?.notifyOnChanges();\n    }\n\n    /**\n     * Sets the visibility of the handle and expanders in the splitter bar.\n     * False by default\n     *\n     * @example\n     * ```html\n     * <igx-splitter [nonCollapsible]='true'>\n     * </igx-splitter>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public nonCollapsible = false; // Input to toggle showing/hiding expanders\n\n    /**\n     * @hidden @internal\n     * Gets the `flex-direction` property of the current `SplitterComponent`.\n     */\n    @HostBinding('style.flex-direction')\n    public get direction(): string {\n        return this.type === SplitterType.Horizontal ? 'row' : 'column';\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentInit(): void {\n        this.initPanes();\n        this.panes.changes.subscribe(() => {\n            this.initPanes();\n        });\n    }\n\n    /**\n     * @hidden @internal\n     * This method performs  initialization logic when the user starts dragging the splitter bar between each pair of panes.\n     * @param pane - the main pane associated with the currently dragged bar.\n     */\n    public onMoveStart(pane: IgxSplitterPaneComponent) {\n        const panes = this.panes.toArray();\n        this.pane = pane;\n        this.sibling = panes[panes.indexOf(this.pane) + 1];\n\n        const paneRect = this.pane.element.getBoundingClientRect();\n        this.initialPaneSize = this.type === SplitterType.Horizontal ? paneRect.width : paneRect.height;\n\n        const siblingRect = this.sibling.element.getBoundingClientRect();\n        this.initialSiblingSize = this.type === SplitterType.Horizontal ? siblingRect.width : siblingRect.height;\n        const args: ISplitterBarResizeEventArgs = { pane: this.pane, sibling: this.sibling };\n        this.resizeStart.emit(args);\n    }\n\n    /**\n     * @hidden @internal\n     * This method performs calculations concerning the sizes of each pair of panes when the bar between them is dragged.\n     * @param delta - The difference along the X (or Y) axis between the initial and the current point when dragging the bar.\n     */\n    public onMoving(delta: number) {\n        const [ paneSize, siblingSize ] = this.calcNewSizes(delta);\n\n        this.pane.dragSize = paneSize + 'px';\n        this.sibling.dragSize = siblingSize + 'px';\n\n        const args: ISplitterBarResizeEventArgs = { pane: this.pane, sibling: this.sibling };\n        this.resizing.emit(args);\n    }\n\n    public onMoveEnd(delta: number) {\n        const [ paneSize, siblingSize ] = this.calcNewSizes(delta);\n\n        if (this.pane.isPercentageSize) {\n            // handle % resizes\n            const totalSize = this.getTotalSize();\n            const percentPaneSize = (paneSize / totalSize) * 100;\n            this.pane.size = percentPaneSize + '%';\n        } else {\n            // px resize\n            this.pane.size = paneSize + 'px';\n        }\n\n        if (this.sibling.isPercentageSize) {\n            // handle % resizes\n            const totalSize = this.getTotalSize();\n            const percentSiblingPaneSize = (siblingSize / totalSize) * 100;\n            this.sibling.size = percentSiblingPaneSize + '%';\n        } else {\n            // px resize\n            this.sibling.size = siblingSize + 'px';\n        }\n        this.pane.dragSize = null;\n        this.sibling.dragSize = null;\n\n        const args: ISplitterBarResizeEventArgs = { pane: this.pane, sibling: this.sibling };\n        this.resizeEnd.emit(args);\n    }\n\n    /** @hidden @internal */\n    public getPaneSiblingsByOrder(order: number, barIndex: number): Array<IgxSplitterPaneComponent> {\n        const panes = this.panes.toArray();\n        const prevPane = panes[order - barIndex - 1];\n        const nextPane = panes[order - barIndex];\n        const siblings = [prevPane, nextPane];\n        return siblings;\n    }\n\n    private getTotalSize() {\n        const computed = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n        const totalSize = this.type === SplitterType.Horizontal ? computed.getPropertyValue('width') : computed.getPropertyValue('height');\n        return parseFloat(totalSize);\n    }\n\n\n    /**\n     * @hidden @internal\n     * This method inits panes with properties.\n     */\n    private initPanes() {\n        this.panes.forEach(pane => {\n            pane.owner = this;\n            if (this.type === SplitterType.Horizontal) {\n                pane.minWidth = pane.minSize ?? '0';\n                pane.maxWidth = pane.maxSize ?? '100%';\n            } else {\n                pane.minHeight = pane.minSize ?? '0';\n                pane.maxHeight = pane.maxSize ?? '100%';\n            }\n        });\n        this.assignFlexOrder();\n        if (this.panes.filter(x => x.collapsed).length > 0) {\n            // if any panes are collapsed, reset sizes.\n            this.resetPaneSizes();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * This method reset pane sizes.\n     */\n    private resetPaneSizes() {\n        if (this.panes) {\n            // if type is changed runtime, should reset sizes.\n            this.panes.forEach(x => {\n                x.size = 'auto'\n                x.minWidth = '0';\n                x.maxWidth = '100%';\n                x.minHeight = '0';\n                x.maxHeight = '100%';\n            });\n        }\n    }\n\n    /**\n     * @hidden @internal\n     * This method assigns the order of each pane.\n     */\n    private assignFlexOrder() {\n        let k = 0;\n        this.panes.forEach((pane: IgxSplitterPaneComponent) => {\n            pane.order = k;\n            k += 2;\n        });\n    }\n\n    /**\n     * @hidden @internal\n     * Calculates new sizes for the panes based on move delta and initial sizes\n     */\n    private calcNewSizes(delta: number): [number, number] {\n        const min = parseInt(this.pane.minSize, 10) || 0;\n        const minSibling = parseInt(this.sibling.minSize, 10) || 0;\n        const max = parseInt(this.pane.maxSize, 10) || this.initialPaneSize + this.initialSiblingSize - minSibling;\n        const maxSibling = parseInt(this.sibling.maxSize, 10) || this.initialPaneSize + this.initialSiblingSize - min;\n\n        if (delta < 0) {\n            const maxPossibleDelta = Math.min(\n                max - this.initialPaneSize,\n                this.initialSiblingSize - minSibling,\n            )\n            delta = Math.min(maxPossibleDelta, Math.abs(delta)) * -1;\n        } else {\n            const maxPossibleDelta = Math.min(\n                this.initialPaneSize - min,\n                maxSibling - this.initialSiblingSize\n            )\n            delta = Math.min(maxPossibleDelta, Math.abs(delta));\n        }\n        return [this.initialPaneSize - delta, this.initialSiblingSize + delta];\n    }\n}\n\n/**\n * @hidden @internal\n * Represents the draggable bar that visually separates panes and allows for changing their sizes.\n */\n@Component({\n    selector: 'igx-splitter-bar',\n    templateUrl: './splitter-bar.component.html',\n    imports: [IgxDragDirective, IgxDragIgnoreDirective]\n})\nexport class IgxSplitBarComponent {\n    /**\n     * Set css class to the host element.\n     */\n    @HostBinding('class.igx-splitter-bar-host')\n    public cssClass = 'igx-splitter-bar-host';\n\n     /**\n     * Sets the visibility of the handle and expanders in the splitter bar.\n     */\n    @Input({ transform: booleanAttribute })\n    public nonCollapsible;\n\n    /**\n     * Gets/Sets the orientation.\n     */\n    @Input()\n    public type: SplitterType = SplitterType.Horizontal;\n\n    /**\n     * Sets/gets the element order.\n     */\n    @HostBinding('style.order')\n    @Input()\n    public order!: number;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('attr.tabindex')\n    public get tabindex() {\n        return this.resizeDisallowed ? null : 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('attr.aria-orientation')\n    public get orientation() {\n        return this.type === SplitterType.Horizontal ? 'horizontal' : 'vertical';\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get cursor() {\n        if (this.resizeDisallowed) {\n            return '';\n        }\n        return this.type === SplitterType.Horizontal ? 'col-resize' : 'row-resize';\n    }\n\n    /**\n     * Sets/gets the `SplitPaneComponent` associated with the current `SplitBarComponent`.\n     *\n     * @memberof SplitBarComponent\n     */\n    @Input()\n    public pane!: IgxSplitterPaneComponent;\n\n    /**\n     * Sets/Gets the `SplitPaneComponent` sibling components associated with the current `SplitBarComponent`.\n     */\n    @Input()\n    public siblings!: Array<IgxSplitterPaneComponent>;\n\n    /**\n     * An event that is emitted whenever we start dragging the current `SplitBarComponent`.\n     */\n    @Output()\n    public moveStart = new EventEmitter<IgxSplitterPaneComponent>();\n\n    /**\n     * An event that is emitted while we are dragging the current `SplitBarComponent`.\n     */\n    @Output()\n    public moving = new EventEmitter<number>();\n\n    @Output()\n    public movingEnd = new EventEmitter<number>();\n\n    /**\n     * A temporary holder for the pointer coordinates.\n     */\n    private startPoint!: number;\n\n    private interactionKeys = new Set('right down left up arrowright arrowdown arrowleft arrowup'.split(' '));\n\n    /**\n     * @hidden @internal\n     */\n    public get prevButtonHidden() {\n        return this.siblings[0].collapsed && !this.siblings[1].collapsed;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostListener('keydown', ['$event'])\n    public keyEvent(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        const ctrl = event.ctrlKey;\n        event.stopPropagation();\n        if (this.interactionKeys.has(key)) {\n            event.preventDefault();\n        }\n        switch (key) {\n            case 'arrowup':\n            case 'up':\n                if (this.type === SplitterType.Vertical) {\n                    if (ctrl) {\n                        this.onCollapsing(false);\n                        break;\n                    }\n                    if (!this.resizeDisallowed) {\n                        event.preventDefault();\n                        this.moveStart.emit(this.pane);\n                        this.moving.emit(10);\n                    }\n                }\n                break;\n            case 'arrowdown':\n            case 'down':\n                if (this.type === SplitterType.Vertical) {\n                    if (ctrl) {\n                        this.onCollapsing(true);\n                        break;\n                    }\n                    if (!this.resizeDisallowed) {\n                        event.preventDefault();\n                        this.moveStart.emit(this.pane);\n                        this.moving.emit(-10);\n                    }\n                }\n                break;\n            case 'arrowleft':\n            case 'left':\n                if (this.type === SplitterType.Horizontal) {\n                    if (ctrl) {\n                        this.onCollapsing(false);\n                        break;\n                    }\n                    if (!this.resizeDisallowed) {\n                        event.preventDefault();\n                        this.moveStart.emit(this.pane);\n                        this.moving.emit(10);\n                    }\n                }\n                break;\n            case 'arrowright':\n            case 'right':\n                if (this.type === SplitterType.Horizontal) {\n                    if (ctrl) {\n                        this.onCollapsing(true);\n                        break;\n                    }\n                    if (!this.resizeDisallowed) {\n                        event.preventDefault();\n                        this.moveStart.emit(this.pane);\n                        this.moving.emit(-10);\n                    }\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get dragDir() {\n        return this.type === SplitterType.Horizontal ? DragDirection.VERTICAL : DragDirection.HORIZONTAL;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get nextButtonHidden() {\n        return this.siblings[1].collapsed && !this.siblings[0].collapsed;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onDragStart(event: IDragStartEventArgs) {\n        if (this.resizeDisallowed) {\n            event.cancel = true;\n            return;\n        }\n        this.startPoint = this.type === SplitterType.Horizontal ? event.startX : event.startY;\n        this.moveStart.emit(this.pane);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onDragMove(event: IDragMoveEventArgs) {\n        const isHorizontal = this.type === SplitterType.Horizontal;\n        const curr = isHorizontal ? event.pageX : event.pageY;\n        const delta = this.startPoint - curr;\n        if (delta !== 0) {\n            this.moving.emit(delta);\n            event.cancel = true;\n            event.owner.element.nativeElement.style.transform = '';\n        }\n    }\n\n    public onDragEnd(event: any) {\n        const isHorizontal = this.type === SplitterType.Horizontal;\n        const curr = isHorizontal ? event.pageX : event.pageY;\n        const delta = this.startPoint - curr;\n        if (delta !== 0) {\n            this.movingEnd.emit(delta);\n        }\n    }\n\n    protected get resizeDisallowed() {\n        const relatedTabs = this.siblings;\n        return !!relatedTabs.find(x => x.resizable === false || x.collapsed === true);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onCollapsing(next: boolean) {\n        const prevSibling = this.siblings[0];\n        const nextSibling = this.siblings[1];\n        let target;\n        if (next) {\n            // if next is clicked when prev pane is hidden, show prev pane, else hide next pane.\n            target = prevSibling.collapsed ? prevSibling : nextSibling;\n        } else {\n            // if prev is clicked when next pane is hidden, show next pane, else hide prev pane.\n            target = nextSibling.collapsed ? nextSibling : prevSibling;\n        }\n        target.toggle();\n    }\n}\n","<ng-content select=\"igx-splitter-pane\"></ng-content>\n@for (pane of panes; track pane; let last = $last; let index = $index) {\n    @if (!last) {\n        <igx-splitter-bar [order]=\"pane.order + 1\" role=\"separator\"\n            [type]=\"type\"\n            [pane]=\"pane\"\n            [siblings]=\"getPaneSiblingsByOrder(pane.order + 1, index)\"\n            (moveStart)=\"onMoveStart($event)\"\n            (moving)=\"onMoving($event)\"\n            (movingEnd)=\"onMoveEnd($event)\"\n            [nonCollapsible]=\"nonCollapsible\">\n        </igx-splitter-bar>\n    }\n}\n","<div class=\"igx-splitter-bar\"\n    [class.igx-splitter-bar--vertical]=\"type === 0\"\n    [style.cursor]=\"cursor\"\n    igxDrag\n    [ghost]=\"false\"\n    [dragDirection]=\"dragDir\"\n    (dragStart)=\"onDragStart($event)\"\n    (dragMove)=\"onDragMove($event)\"\n    (dragEnd)=\"onDragEnd($event)\"\n    [class.igx-splitter-bar--collapsible]=\"!nonCollapsible\"\n>\n    <div class=\"igx-splitter-bar__expander--start\" igxDragIgnore (click)=\"onCollapsing(false)\" [hidden]=\"prevButtonHidden\"></div>\n    <div class=\"igx-splitter-bar__handle\"></div>\n    <div class=\"igx-splitter-bar__expander--end\" igxDragIgnore (click)=\"onCollapsing(true)\" [hidden]=\"nextButtonHidden\"></div>\n</div>\n","import { IgxSplitterPaneComponent } from './splitter-pane/splitter-pane.component';\nimport { IgxSplitBarComponent, IgxSplitterComponent } from './splitter.component';\n\nexport * from './splitter.component';\nexport * from './splitter-pane/splitter-pane.component';\n\n/* NOTE: Splitter directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_SPLITTER_DIRECTIVES = [\n    IgxSplitterComponent,\n    IgxSplitterPaneComponent,\n    IgxSplitBarComponent\n] as const;\n","import { ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, TemplateRef } from '@angular/core';\nimport { IBaseCancelableBrowserEventArgs, IBaseEventArgs } from '../core/utils';\nimport { IgxStepperComponent } from './stepper.component';\nimport { IgxStepComponent } from './step/step.component';\nimport {\n    IgxStepActiveIndicatorDirective, IgxStepCompletedIndicatorDirective, IgxStepContentDirective,\n    IgxStepIndicatorDirective, IgxStepInvalidIndicatorDirective\n} from './stepper.directive';\nimport { Direction, IgxCarouselComponentBase } from '../carousel/carousel-base';\nimport { ToggleAnimationPlayer, ToggleAnimationSettings } from '../expansion-panel/toggle-animation-component';\nimport { CarouselAnimationType } from '../carousel/enums';\n\n// Component interfaces\nexport interface IgxStepper extends IgxCarouselComponentBase {\n    steps: IgxStepComponent[];\n    /** @hidden @internal */\n    nativeElement: HTMLElement;\n    /** @hidden @internal */\n    invalidIndicatorTemplate: TemplateRef<IgxStepInvalidIndicatorDirective>;\n    /** @hidden @internal */\n    completedIndicatorTemplate: TemplateRef<IgxStepCompletedIndicatorDirective>;\n    /** @hidden @internal */\n    activeIndicatorTemplate: TemplateRef<IgxStepActiveIndicatorDirective>;\n    verticalAnimationType: VerticalAnimationType;\n    horizontalAnimationType: HorizontalAnimationType;\n    animationDuration: number;\n    linear: boolean;\n    orientation: IgxStepperOrientation;\n    stepType: IgxStepType;\n    contentTop: boolean;\n    titlePosition: IgxStepperTitlePosition;\n    /** @hidden @internal */\n    verticalAnimationSettings: ToggleAnimationSettings;\n    /** @hidden @internal */\n    _defaultTitlePosition: IgxStepperTitlePosition;\n    activeStepChanging: EventEmitter<IStepChangingEventArgs>;\n    activeStepChanged: EventEmitter<IStepChangedEventArgs>;\n    navigateTo(index: number): void;\n    next(): void;\n    prev(): void;\n    reset(): void;\n    /** @hidden @internal */\n    playHorizontalAnimations(): void;\n}\n\n// Item interfaces\nexport interface IgxStep extends ToggleAnimationPlayer {\n    id: string;\n    /** @hidden @internal */\n    contentTemplate: TemplateRef<any>;\n    /** @hidden @internal */\n    customIndicatorTemplate: TemplateRef<any>;\n    /** @hidden @internal */\n    contentContainer: ElementRef;\n    /** @hidden @internal */\n    indicator: IgxStepIndicatorDirective;\n    /** @hidden @internal */\n    content: IgxStepContentDirective;\n    /** @hidden @internal */\n    indicatorTemplate: TemplateRef<any>;\n    index: number;\n    disabled: boolean;\n    completed: boolean;\n    isValid: boolean;\n    optional: boolean;\n    active: boolean;\n    tabIndex: number;\n    /** @hidden @internal */\n    contentId: string;\n    /** @hidden @internal */\n    generalDisabled: boolean;\n    /** @hidden @internal */\n    titlePositionTop: string;\n    /** @hidden @internal */\n    direction: Direction;\n    /** @hidden @internal */\n    isAccessible: boolean;\n    /** @hidden @internal */\n    isHorizontal: boolean;\n    /** @hidden @internal */\n    isTitleVisible: boolean;\n    /** @hidden @internal */\n    isIndicatorVisible: boolean;\n    /** @hidden @internal */\n    titlePosition: string;\n    /** @hidden @internal */\n    linearDisabled: boolean;\n    /** @hidden @internal */\n    collapsing: boolean;\n    /** @hidden @internal */\n    animationSettings: ToggleAnimationSettings;\n    /** @hidden @internal */\n    contentClasses: any;\n    /** @hidden @internal */\n    stepHeaderClasses: any;\n    /** @hidden @internal */\n    nativeElement: HTMLElement;\n    /** @hidden @internal */\n    previous: boolean;\n    cdr: ChangeDetectorRef;\n    activeChange: EventEmitter<boolean>;\n}\n\n// Events\nexport interface IStepChangingEventArgs extends IBaseEventArgs, IBaseCancelableBrowserEventArgs {\n    newIndex: number;\n    oldIndex: number;\n    owner: IgxStepper;\n}\n\nexport interface IStepChangedEventArgs extends IBaseEventArgs {\n    // Provides the index of the current active step within the stepper steps\n    index: number;\n    owner: IgxStepper;\n}\n\n// Enums\nexport const IgxStepperOrientation = {\n    Horizontal: 'horizontal',\n    Vertical: 'vertical'\n} as const;\nexport type IgxStepperOrientation = (typeof IgxStepperOrientation)[keyof typeof IgxStepperOrientation];\n\nexport const IgxStepType = {\n    Indicator: 'indicator',\n    Title: 'title',\n    Full: 'full'\n} as const;\nexport type IgxStepType = (typeof IgxStepType)[keyof typeof IgxStepType];\n\nexport const IgxStepperTitlePosition = {\n    Bottom: 'bottom',\n    Top: 'top',\n    End: 'end',\n    Start: 'start'\n} as const;\nexport type IgxStepperTitlePosition = (typeof IgxStepperTitlePosition)[keyof typeof IgxStepperTitlePosition];\n\nexport const VerticalAnimationType = {\n    Grow: 'grow',\n    Fade: 'fade',\n    None: 'none'\n} as const;\nexport type VerticalAnimationType = (typeof VerticalAnimationType)[keyof typeof VerticalAnimationType];\n\nexport const HorizontalAnimationType = {\n    ...CarouselAnimationType\n} as const;\nexport type HorizontalAnimationType = (typeof HorizontalAnimationType)[keyof typeof HorizontalAnimationType];\n\n// Token\nexport const IGX_STEPPER_COMPONENT = /*@__PURE__*/new InjectionToken<IgxStepperComponent>('IgxStepperToken');\nexport const IGX_STEP_COMPONENT = /*@__PURE__*/new InjectionToken<IgxStepComponent>('IgxStepToken');\n","import { Injectable } from '@angular/core';\nimport { IgxStepper, IgxStepperOrientation, IStepChangingEventArgs } from './stepper.common';\nimport { IgxStepComponent } from './step/step.component';\n\n/** @hidden @internal */\n@Injectable()\nexport class IgxStepperService {\n    public activeStep: IgxStepComponent;\n    public previousActiveStep: IgxStepComponent;\n    public focusedStep: IgxStepComponent;\n\n    public collapsingSteps: Set<IgxStepComponent> = new Set<IgxStepComponent>();\n    public linearDisabledSteps: Set<IgxStepComponent> = new Set<IgxStepComponent>();\n    public visitedSteps: Set<IgxStepComponent> = new Set<IgxStepComponent>();\n    public stepper: IgxStepper;\n\n    /**\n     * Activates the step, fires the steps change event and plays animations.\n     */\n    public expand(step: IgxStepComponent): void {\n        if (this.activeStep === step) {\n            return;\n        }\n\n        const cancel = this.emitActivatingEvent(step);\n        if (cancel) {\n            return;\n        }\n\n        this.collapsingSteps.delete(step);\n\n        this.previousActiveStep = this.activeStep;\n        this.activeStep = step;\n        this.activeStep.activeChange.emit(true);\n\n        this.collapsingSteps.add(this.previousActiveStep);\n        this.visitedSteps.add(this.activeStep);\n\n        if (this.stepper.orientation === IgxStepperOrientation.Vertical) {\n            this.previousActiveStep.playCloseAnimation(\n                this.previousActiveStep.contentContainer\n            );\n            this.activeStep.cdr.detectChanges();\n\n            this.activeStep.playOpenAnimation(\n                this.activeStep.contentContainer\n            );\n        } else {\n            this.activeStep.cdr.detectChanges();\n            this.stepper.playHorizontalAnimations();\n        }\n    }\n\n    /**\n     * Activates the step and fires the steps change event without playing animations.\n     */\n    public expandThroughApi(step: IgxStepComponent): void {\n        if (this.activeStep === step) {\n            return;\n        }\n\n        this.collapsingSteps.clear();\n\n        this.previousActiveStep = this.activeStep;\n        this.activeStep = step;\n\n        if (this.previousActiveStep) {\n            this.previousActiveStep.tabIndex = -1;\n        }\n        this.activeStep.tabIndex = 0;\n        this.visitedSteps.add(this.activeStep);\n\n        this.activeStep.cdr.markForCheck();\n        this.previousActiveStep?.cdr.markForCheck();\n\n        this.activeStep.activeChange.emit(true);\n        this.previousActiveStep?.activeChange.emit(false);\n    }\n\n    /**\n     * Collapses the currently active step and fires the change event.\n     */\n    public collapse(step: IgxStepComponent): void {\n        if (this.activeStep === step) {\n            return;\n        }\n        step.activeChange.emit(false);\n        this.collapsingSteps.delete(step);\n    }\n\n    /**\n     * Determines the steps that should be marked as visited based on the active step.\n     */\n    public calculateVisitedSteps(): void {\n        this.stepper.steps.forEach(step => {\n            if (step.index <= this.activeStep.index) {\n                this.visitedSteps.add(step);\n            } else {\n                this.visitedSteps.delete(step);\n            }\n        });\n    }\n\n    /**\n     * Determines the steps that should be disabled in linear mode based on the validity of the active step.\n     */\n    public calculateLinearDisabledSteps(): void {\n        if (!this.activeStep) {\n            return;\n        }\n\n        if (this.activeStep.isValid) {\n            const firstRequiredIndex = this.getNextRequiredStep();\n            if (firstRequiredIndex !== -1) {\n                this.updateLinearDisabledSteps(firstRequiredIndex);\n            } else {\n                this.linearDisabledSteps.clear();\n            }\n        } else {\n            this.stepper.steps.forEach(s => {\n                if (s.index > this.activeStep.index) {\n                    this.linearDisabledSteps.add(s);\n                }\n            });\n        }\n    }\n\n    public emitActivatingEvent(step: IgxStepComponent): boolean {\n        const args: IStepChangingEventArgs = {\n            owner: this.stepper,\n            newIndex: step.index,\n            oldIndex: this.activeStep.index,\n            cancel: false\n        };\n\n        this.stepper.activeStepChanging.emit(args);\n        return args.cancel;\n    }\n\n    /**\n     * Updates the linearDisabled steps from the current active step to the next required invalid step.\n     *\n     * @param toIndex the index of the last step that should be enabled.\n     */\n    private updateLinearDisabledSteps(toIndex: number): void {\n        this.stepper.steps.forEach(s => {\n            if (s.index > this.activeStep.index) {\n                if (s.index <= toIndex) {\n                    this.linearDisabledSteps.delete(s);\n                } else {\n                    this.linearDisabledSteps.add(s);\n                }\n            }\n        });\n    }\n\n    private getNextRequiredStep(): number {\n        if (!this.activeStep) {\n            return;\n        }\n        return this.stepper.steps.findIndex(s => s.index > this.activeStep.index && !s.optional && !s.disabled && !s.isValid);\n    }\n}\n","import { Directive, ElementRef, HostBinding, Inject, Input } from '@angular/core';\nimport { IgxStep, IGX_STEP_COMPONENT } from './stepper.common';\nimport { IgxStepperService } from './stepper.service';\n\n/**\n * Allows a custom element to be added as an active step indicator.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <ng-template igxStepActiveIndicator>\n *          <igx-icon>edit</igx-icon>\n *       </ng-template>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepActiveIndicator]',\n    standalone: true\n})\nexport class IgxStepActiveIndicatorDirective { }\n\n/**\n * Allows a custom element to be added as a complete step indicator.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <ng-template igxStepCompletedIndicator>\n *          <igx-icon>check</igx-icon>\n *       </ng-template>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepCompletedIndicator]',\n    standalone: true\n})\nexport class IgxStepCompletedIndicatorDirective { }\n\n/**\n * Allows a custom element to be added as an invalid step indicator.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <ng-template igxStepInvalidIndicator>\n *          <igx-icon>error</igx-icon>\n *       </ng-template>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepInvalidIndicator]',\n    standalone: true\n})\nexport class IgxStepInvalidIndicatorDirective { }\n\n/**\n * Allows a custom element to be added as a step indicator.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <igx-step>\n *         <igx-icon igxStepIndicator>home</igx-icon>\n *     </igx-step>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepIndicator]',\n    standalone: true\n})\nexport class IgxStepIndicatorDirective { }\n\n/**\n * Allows a custom element to be added as a step title.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <igx-step>\n *         <p igxStepTitle>Home</p>\n *     </igx-step>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepTitle]',\n    standalone: true\n})\nexport class IgxStepTitleDirective {\n    @HostBinding('class.igx-stepper__step-title')\n    public defaultClass = true;\n}\n\n/**\n * Allows a custom element to be added as a step subtitle.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <igx-step>\n *         <p igxStepSubtitle>Home Subtitle</p>\n *     </igx-step>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepSubtitle]',\n    standalone: true\n})\nexport class IgxStepSubtitleDirective {\n    @HostBinding('class.igx-stepper__step-subtitle')\n    public defaultClass = true;\n}\n\n/**\n * Allows a custom element to be added as a step content.\n *\n * @igxModule IgxStepperModule\n * @igxTheme igx-stepper-theme\n * @igxKeywords stepper \n * @igxGroup Layouts\n *\n * @example\n * <igx-stepper>\n *     <igx-step>\n *         <div igxStepContent>...</div>\n *     </igx-step>\n * </igx-stepper>\n */\n@Directive({\n    selector: '[igxStepContent]',\n    standalone: true\n})\nexport class IgxStepContentDirective {\n    private get target(): IgxStep {\n        return this.step;\n    }\n\n    @HostBinding('class.igx-stepper__step-content')\n    public defaultClass = true;\n\n    @HostBinding('attr.role')\n    public role = 'tabpanel';\n\n    @HostBinding('attr.aria-labelledby')\n    public get stepId(): string {\n        return this.target.id;\n    }\n\n    @HostBinding('attr.id')\n    @Input()\n    public id = this.target.id.replace('step', 'content');\n\n    @HostBinding('attr.tabindex')\n    @Input()\n    public get tabIndex(): number {\n        if (this._tabIndex !== null) {\n            return this._tabIndex;\n        }\n\n        return this.stepperService.activeStep === this.target ? 0 : -1;\n    }\n\n    public set tabIndex(val: number) {\n        this._tabIndex = val;\n    }\n\n    private _tabIndex = null;\n\n    constructor(\n        @Inject(IGX_STEP_COMPONENT) private step: IgxStep,\n        private stepperService: IgxStepperService,\n        public elementRef: ElementRef<HTMLElement>\n    ) { }\n}\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    Output,\n    Renderer2,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Direction, IgxSlideComponentBase } from '../../carousel/carousel-base';\nimport { PlatformUtil } from '../../core/utils';\nimport { ToggleAnimationPlayer, ToggleAnimationSettings } from '../../expansion-panel/toggle-animation-component';\nimport { IgxAngularAnimationService } from '../../services/animation/angular-animation-service';\nimport { AnimationService } from '../../services/animation/animation';\nimport { IgxDirectionality } from '../../services/direction/directionality';\nimport { IgxStep, IgxStepper, IgxStepperOrientation, IgxStepType, IGX_STEPPER_COMPONENT, IGX_STEP_COMPONENT, HorizontalAnimationType } from '../stepper.common';\nimport { IgxStepContentDirective, IgxStepIndicatorDirective } from '../stepper.directive';\nimport { IgxStepperService } from '../stepper.service';\nimport { IgxRippleDirective } from '../../directives/ripple/ripple.directive';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\nlet NEXT_ID = 0;\n\n/**\n * The IgxStepComponent is used within the `igx-stepper` element and it holds the content of each step.\n * It also supports custom indicators, title and subtitle.\n *\n * @igxModule IgxStepperModule\n *\n * @igxKeywords step\n *\n * @example\n * ```html\n *  <igx-stepper>\n *  ...\n *    <igx-step [active]=\"true\" [completed]=\"true\">\n *      ...\n *    </igx-step>\n *  ...\n *  </igx-stepper>\n * ```\n */\n@Component({\n    selector: 'igx-step',\n    templateUrl: 'step.component.html',\n    providers: [\n        { provide: IGX_STEP_COMPONENT, useExisting: IgxStepComponent }\n    ],\n    imports: [NgClass, IgxRippleDirective, NgTemplateOutlet]\n})\nexport class IgxStepComponent extends ToggleAnimationPlayer implements IgxStep, AfterViewInit, OnDestroy, IgxSlideComponentBase {\n\n    /**\n     * Get/Set the `id` of the step component.\n     * Default value is `\"igx-step-0\"`;\n     * ```html\n     * <igx-step id=\"my-first-step\"></igx-step>\n     * ```\n     * ```typescript\n     * const stepId = this.step.id;\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-step-${NEXT_ID++}`;\n\n    /**\n     * Get/Set whether the step is interactable.\n     *\n     * ```html\n     * <igx-stepper>\n     * ...\n     *     <igx-step [disabled]=\"true\"></igx-step>\n     * ...\n     * </igx-stepper>\n     * ```\n     *\n     * ```typescript\n     * this.stepper.steps[1].disabled = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public set disabled(value: boolean) {\n        this._disabled = value;\n        if (this.stepper.linear) {\n            this.stepperService.calculateLinearDisabledSteps();\n        }\n    }\n\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n\n    /**\n     * Get/Set whether the step is completed.\n     *\n     * @remarks\n     * When set to `true` the following separator is styled `solid`.\n     *\n     * ```html\n     * <igx-stepper>\n     * ...\n     *     <igx-step [completed]=\"true\"></igx-step>\n     * ...\n     * </igx-stepper>\n     * ```\n     *\n     * ```typescript\n     * this.stepper.steps[1].completed = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-stepper__step--completed')\n    public completed = false;\n\n    /**\n     * Get/Set whether the step is valid.\n     *```html\n     * <igx-step [isValid]=\"form.form.valid\">\n     *      ...\n     *      <div igxStepContent>\n     *          <form #form=\"ngForm\">\n     *              ...\n     *          </form>\n     *      </div>\n     * </igx-step>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get isValid(): boolean {\n        return this._valid;\n    }\n\n    public set isValid(value: boolean) {\n        this._valid = value;\n        if (this.stepper.linear && this.index !== undefined) {\n            this.stepperService.calculateLinearDisabledSteps();\n        }\n    }\n\n    /**\n     * Get/Set whether the step is optional.\n     *\n     * @remarks\n     * Optional steps validity does not affect the default behavior when the stepper is in linear mode i.e.\n     * if optional step is invalid the user could still move to the next step.\n     *\n     * ```html\n     * <igx-step [optional]=\"true\"></igx-step>\n     * ```\n     * ```typescript\n     * this.stepper.steps[1].optional = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public optional = false;\n\n    /**\n     * Get/Set the active state of the step\n     *\n     * ```html\n     * <igx-step [active]=\"true\"></igx-step>\n     * ```\n     *\n     * ```typescript\n     * this.stepper.steps[1].active = true;\n     * ```\n     *\n     * @param value: boolean\n     */\n    @HostBinding('attr.aria-selected')\n    @Input({ transform: booleanAttribute })\n    public set active(value: boolean) {\n        if (value) {\n            this.stepperService.expandThroughApi(this);\n        } else {\n            this.stepperService.collapse(this);\n        }\n    }\n\n    public get active(): boolean {\n        return this.stepperService.activeStep === this;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('attr.tabindex')\n    @Input()\n    public set tabIndex(value: number) {\n        this._tabIndex = value;\n    }\n\n    public get tabIndex(): number {\n        return this._tabIndex;\n    }\n\n    /** @hidden @internal **/\n    @HostBinding('attr.role')\n    public role = 'tab';\n\n    /** @hidden @internal */\n    @HostBinding('attr.aria-controls')\n    public get contentId(): string {\n        return this.content?.id;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-stepper__step')\n    public cssClass = true;\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-stepper__step--disabled')\n    public get generalDisabled(): boolean {\n        return this.disabled || this.linearDisabled;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('class')\n    public get titlePositionTop(): string {\n        if (this.stepper.stepType !== IgxStepType.Full) {\n            return 'igx-stepper__step--simple';\n        }\n\n        return `igx-stepper__step--${this.titlePosition}`;\n    }\n\n    /**\n     * Emitted when the step's `active` property changes. Can be used for two-way binding.\n     *\n     * ```html\n     * <igx-step [(active)]=\"this.isActive\">\n     * </igx-step>\n     * ```\n     *\n     * ```typescript\n     * const step: IgxStepComponent = this.stepper.step[0];\n     * step.activeChange.subscribe((e: boolean) => console.log(\"Step active state change to \", e))\n     * ```\n     */\n    @Output()\n    public activeChange = new EventEmitter<boolean>();\n\n    /** @hidden @internal */\n    @ViewChild('contentTemplate', { static: true })\n    public contentTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('customIndicator', { static: true })\n    public customIndicatorTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('contentContainer')\n    public contentContainer: ElementRef;\n\n    /** @hidden @internal */\n    @ContentChild(forwardRef(() => IgxStepIndicatorDirective))\n    public indicator: IgxStepIndicatorDirective;\n\n    /** @hidden @internal */\n    @ContentChild(forwardRef(() => IgxStepContentDirective))\n    public content: IgxStepContentDirective;\n\n    /**\n     * Get the step index inside of the stepper.\n     *\n     * ```typescript\n     * const step = this.stepper.steps[1];\n     * const stepIndex: number = step.index;\n     * ```\n     */\n    public get index(): number {\n        return this._index;\n    }\n\n    /** @hidden @internal */\n    public get indicatorTemplate(): TemplateRef<any> {\n        if (this.active && this.stepper.activeIndicatorTemplate) {\n            return this.stepper.activeIndicatorTemplate;\n        }\n\n        if (!this.isValid && this.stepper.invalidIndicatorTemplate) {\n            return this.stepper.invalidIndicatorTemplate;\n        }\n\n        if (this.completed && this.stepper.completedIndicatorTemplate) {\n            return this.stepper.completedIndicatorTemplate;\n        }\n\n        if (this.indicator) {\n            return this.customIndicatorTemplate;\n        }\n\n        return null;\n    }\n\n    /** @hidden @internal */\n    public get direction(): Direction {\n        return this.stepperService.previousActiveStep\n            && this.stepperService.previousActiveStep.index > this.index\n            ? Direction.PREV\n            : Direction.NEXT;\n    }\n\n    /** @hidden @internal */\n    public get isAccessible(): boolean {\n        return !this.disabled && !this.linearDisabled;\n    }\n\n    /** @hidden @internal */\n    public get isHorizontal(): boolean {\n        return this.stepper.orientation === IgxStepperOrientation.Horizontal;\n    }\n\n    /** @hidden @internal */\n    public get isTitleVisible(): boolean {\n        return this.stepper.stepType !== IgxStepType.Indicator;\n    }\n\n    /** @hidden @internal */\n    public get isIndicatorVisible(): boolean {\n        return this.stepper.stepType !== IgxStepType.Title;\n    }\n\n    /** @hidden @internal */\n    public get titlePosition(): string {\n        return this.stepper.titlePosition ? this.stepper.titlePosition : this.stepper._defaultTitlePosition;\n    }\n\n    /** @hidden @internal */\n    public get linearDisabled(): boolean {\n        return this.stepperService.linearDisabledSteps.has(this);\n    }\n\n    /** @hidden @internal */\n    public get collapsing(): boolean {\n        return this.stepperService.collapsingSteps.has(this);\n    }\n\n    /** @hidden @internal */\n    public override get animationSettings(): ToggleAnimationSettings {\n        return this.stepper.verticalAnimationSettings;\n    }\n\n    /** @hidden @internal */\n    public get contentClasses(): any {\n        if (this.isHorizontal) {\n            return { 'igx-stepper__body-content': true, 'igx-stepper__body-content--active': this.active };\n        } else {\n            return 'igx-stepper__step-content';\n        }\n    }\n\n    /** @hidden @internal */\n    public get stepHeaderClasses(): any {\n        return {\n            'igx-stepper__step--optional': this.optional,\n            'igx-stepper__step-header--current': this.active,\n            'igx-stepper__step-header--invalid': !this.isValid\n                && this.stepperService.visitedSteps.has(this) && !this.active && this.isAccessible\n        };\n    }\n\n    /** @hidden @internal */\n    public get nativeElement(): HTMLElement {\n        return this.element.nativeElement;\n    }\n    /** @hidden @internal */\n    public previous: boolean;\n    /** @hidden @internal */\n    public _index: number;\n    private _tabIndex = -1;\n    private _valid = true;\n    private _focused = false;\n    private _disabled = false;\n\n    constructor(\n        @Inject(IGX_STEPPER_COMPONENT) public stepper: IgxStepper,\n        public cdr: ChangeDetectorRef,\n        public renderer: Renderer2,\n        protected platform: PlatformUtil,\n        protected stepperService: IgxStepperService,\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        private element: ElementRef<HTMLElement>,\n        private dir: IgxDirectionality\n    ) {\n        super(animationService);\n    }\n\n    /** @hidden @internal */\n    @HostListener('focus')\n    public onFocus(): void {\n        this._focused = true;\n        this.stepperService.focusedStep = this;\n        if (this.stepperService.focusedStep !== this.stepperService.activeStep) {\n            this.stepperService.activeStep.tabIndex = -1;\n        }\n    }\n\n    /** @hidden @internal */\n    @HostListener('blur')\n    public onBlur(): void {\n        this._focused = false;\n        this.stepperService.activeStep.tabIndex = 0;\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown', ['$event'])\n    public handleKeydown(event: KeyboardEvent): void {\n        if (!this._focused) {\n            return;\n        }\n        const key = event.key;\n        if (this.stepper.orientation === IgxStepperOrientation.Horizontal) {\n            if (key === this.platform.KEYMAP.ARROW_UP || key === this.platform.KEYMAP.ARROW_DOWN) {\n                return;\n            }\n        }\n        if (!(this.platform.isNavigationKey(key) || this.platform.isActivationKey(event))) {\n            return;\n        }\n        event.preventDefault();\n        this.handleNavigation(key);\n    }\n\n    /** @hidden @internal */\n    public ngAfterViewInit(): void {\n        this.openAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(\n            () => {\n                if (this.stepperService.activeStep === this) {\n                    this.stepper.activeStepChanged.emit({ owner: this.stepper, index: this.index });\n                }\n            }\n        );\n        this.closeAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.stepperService.collapse(this);\n            this.cdr.markForCheck();\n        });\n    }\n\n    /** @hidden @internal */\n    public onPointerDown(event: MouseEvent): void {\n        event.stopPropagation();\n        if (this.isHorizontal) {\n            this.changeHorizontalActiveStep();\n        } else {\n            this.changeVerticalActiveStep();\n        }\n    }\n\n    /** @hidden @internal */\n    public handleNavigation(key: string): void {\n        switch (key) {\n            case this.platform.KEYMAP.HOME:\n                this.stepper.steps.filter(s => s.isAccessible)[0]?.nativeElement.focus();\n                break;\n            case this.platform.KEYMAP.END:\n                this.stepper.steps.filter(s => s.isAccessible).pop()?.nativeElement.focus();\n                break;\n            case this.platform.KEYMAP.ARROW_UP:\n                this.previousStep?.nativeElement.focus();\n                break;\n            case this.platform.KEYMAP.ARROW_LEFT:\n                if (this.dir.rtl && this.stepper.orientation === IgxStepperOrientation.Horizontal) {\n                    this.nextStep?.nativeElement.focus();\n                } else {\n                    this.previousStep?.nativeElement.focus();\n                }\n                break;\n            case this.platform.KEYMAP.ARROW_DOWN:\n                this.nextStep?.nativeElement.focus();\n                break;\n            case this.platform.KEYMAP.ARROW_RIGHT:\n                if (this.dir.rtl && this.stepper.orientation === IgxStepperOrientation.Horizontal) {\n                    this.previousStep?.nativeElement.focus();\n                } else {\n                    this.nextStep?.nativeElement.focus();\n                }\n                break;\n            case this.platform.KEYMAP.SPACE:\n            case this.platform.KEYMAP.ENTER:\n                if (this.isHorizontal) {\n                    this.changeHorizontalActiveStep();\n                } else {\n                    this.changeVerticalActiveStep();\n                }\n                break;\n            default:\n                return;\n        }\n    }\n\n    /** @hidden @internal */\n    public changeHorizontalActiveStep(): void {\n        if (this.stepper.animationType === HorizontalAnimationType.none && this.stepperService.activeStep !== this) {\n            const argsCanceled = this.stepperService.emitActivatingEvent(this);\n            if (argsCanceled) {\n                return;\n            }\n\n            this.active = true;\n            this.stepper.activeStepChanged.emit({ owner: this.stepper, index: this.index });\n            return;\n        }\n        this.stepperService.expand(this);\n        if (this.stepper.animationType === HorizontalAnimationType.fade) {\n            if (this.stepperService.collapsingSteps.has(this.stepperService.previousActiveStep)) {\n                this.stepperService.previousActiveStep.active = false;\n            }\n        }\n    }\n\n    private get nextStep(): IgxStepComponent | null {\n        const focusedStep = this.stepperService.focusedStep;\n        if (focusedStep) {\n            if (focusedStep.index === this.stepper.steps.length - 1) {\n                return this.stepper.steps.find(s => s.isAccessible);\n            }\n\n            const nextAccessible = this.stepper.steps.find((s, i) => i > focusedStep.index && s.isAccessible);\n            return nextAccessible ? nextAccessible : this.stepper.steps.find(s => s.isAccessible);\n        }\n\n        return null;\n    }\n\n    private get previousStep(): IgxStepComponent | null {\n        const focusedStep = this.stepperService.focusedStep;\n        if (focusedStep) {\n            if (focusedStep.index === 0) {\n                return this.stepper.steps.filter(s => s.isAccessible).pop();\n            }\n\n            let prevStep;\n            for (let i = focusedStep.index - 1; i >= 0; i--) {\n                const step = this.stepper.steps[i];\n                if (step.isAccessible) {\n                    prevStep = step;\n                    break;\n                }\n            }\n\n            return prevStep ? prevStep : this.stepper.steps.filter(s => s.isAccessible).pop();\n\n        }\n\n        return null;\n    }\n\n    private changeVerticalActiveStep(): void {\n        this.stepperService.expand(this);\n\n        if (!this.animationSettings.closeAnimation) {\n            this.stepperService.previousActiveStep?.openAnimationPlayer?.finish();\n        }\n\n        if (!this.animationSettings.openAnimation) {\n            this.stepperService.activeStep.closeAnimationPlayer?.finish();\n        }\n    }\n}\n","<ng-template #defaultTitle>\n    @if (isTitleVisible) {\n        <ng-content select=\"[igxStepTitle]\"></ng-content>\n    }\n    @if (isTitleVisible) {\n        <ng-content select=\"[igxStepSubtitle]\"></ng-content>\n    }\n</ng-template>\n\n<ng-template #contentTemplate>\n    <div [ngClass]=\"contentClasses\" #contentContainer>\n        @if (active || collapsing) {\n            <ng-content select=\"[igxStepContent]\"></ng-content>\n        }\n    </div>\n</ng-template>\n\n<ng-template #defaultIndicator>\n    <span>{{ index + 1 }}</span>\n</ng-template>\n\n<ng-template #customIndicator>\n    <ng-content select=\"[igxStepIndicator]\"></ng-content>\n</ng-template>\n\n<div class=\"igx-stepper__step-header\" igxRipple [ngClass]=\"stepHeaderClasses\" (keydown)=\"handleKeydown($event)\"\n    (click)=\"onPointerDown($event)\">\n\n    @if (isIndicatorVisible) {\n        <div class=\"igx-stepper__step-indicator\">\n            <ng-container *ngTemplateOutlet=\"indicatorTemplate ? indicatorTemplate : defaultIndicator\"></ng-container>\n        </div>\n    }\n\n    <div class=\"igx-stepper__step-title-wrapper\">\n        <ng-container *ngTemplateOutlet=\"defaultTitle\"></ng-container>\n    </div>\n</div>\n\n@if (!isHorizontal) {\n    <div class=\"igx-stepper__step-content-wrapper\">\n        <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n    </div>\n}\n","import { AnimationReferenceMetadata, useAnimation } from '@angular/animations';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterContentInit, ChangeDetectorRef, Component, ContentChild, ContentChildren,\n    ElementRef, EventEmitter, HostBinding, Inject, Input, OnChanges, OnDestroy,\n    OnInit, Output, QueryList, SimpleChanges, TemplateRef, booleanAttribute\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxCarouselComponentBase } from '../carousel/carousel-base';\n\nimport { ToggleAnimationSettings } from '../expansion-panel/toggle-animation-component';\nimport { IgxAngularAnimationService } from '../services/animation/angular-animation-service';\nimport { AnimationService } from '../services/animation/animation';\nimport { IgxStepComponent } from './step/step.component';\nimport {\n    IgxStepper, IgxStepperOrientation, IgxStepperTitlePosition, IgxStepType,\n    IGX_STEPPER_COMPONENT, IStepChangedEventArgs, IStepChangingEventArgs, VerticalAnimationType,\n    HorizontalAnimationType\n} from './stepper.common';\nimport {\n    IgxStepActiveIndicatorDirective,\n    IgxStepCompletedIndicatorDirective,\n    IgxStepInvalidIndicatorDirective\n} from './stepper.directive';\nimport { IgxStepperService } from './stepper.service';\nimport { fadeIn, growVerIn, growVerOut } from 'igniteui-angular/animations';\n\n\n// TODO: common interface between IgxCarouselComponentBase and ToggleAnimationPlayer?\n\n/**\n * IgxStepper provides a wizard-like workflow by dividing content into logical steps.\n *\n * @igxModule IgxStepperModule\n *\n * @igxKeywords stepper\n *\n * @igxGroup Layouts\n *\n * @remarks\n * The Ignite UI for Angular Stepper component allows the user to navigate between multiple steps.\n * It supports horizontal and vertical orientation as well as keyboard navigation and provides API methods to control the active step.\n * The component offers keyboard navigation and API to control the active step.\n *\n * @example\n * ```html\n * <igx-stepper>\n *  <igx-step [active]=\"true\">\n *      <igx-icon igxStepIndicator>home</igx-icon>\n *      <p igxStepTitle>Home</p>\n *      <div igxStepContent>\n *         ...\n *      </div>\n *  </igx-step>\n *  <igx-step [optional]=\"true\">\n *      <div igxStepContent>\n *          ...\n *      </div>\n *  </igx-step>\n *  <igx-step>\n *      <div igxStepContent>\n *          ...\n *      </div>\n *  </igx-step>\n * </igx-stepper>\n * ```\n */\n@Component({\n    selector: 'igx-stepper',\n    templateUrl: 'stepper.component.html',\n    providers: [\n        IgxStepperService,\n        { provide: IGX_STEPPER_COMPONENT, useExisting: IgxStepperComponent },\n    ],\n    imports: [NgTemplateOutlet]\n})\nexport class IgxStepperComponent extends IgxCarouselComponentBase implements IgxStepper, OnChanges, OnInit, AfterContentInit, OnDestroy {\n\n    /**\n     * Get/Set the animation type of the stepper when the orientation direction is vertical.\n     *\n     * @remarks\n     * Default value is `grow`. Other possible values are `fade` and `none`.\n     *\n     * ```html\n     * <igx-stepper verticalAnimationType=\"none\">\n     * <igx-stepper>\n     * ```\n     */\n    @Input()\n    public get verticalAnimationType(): VerticalAnimationType {\n        return this._verticalAnimationType;\n    }\n\n    public set verticalAnimationType(value: VerticalAnimationType) {\n        // TODO: activeChange event is not emitted for the collapsing steps (loop through collapsing steps and emit)\n        this.stepperService.collapsingSteps.clear();\n        this._verticalAnimationType = value;\n\n        switch (value) {\n            case 'grow':\n                this.verticalAnimationSettings = this.updateVerticalAnimationSettings(growVerIn, growVerOut);\n                break;\n            case 'fade':\n                this.verticalAnimationSettings = this.updateVerticalAnimationSettings(fadeIn, null);\n                break;\n            case 'none':\n                this.verticalAnimationSettings = this.updateVerticalAnimationSettings(null, null);\n                break;\n        }\n    }\n\n    /**\n     * Get/Set the animation type of the stepper when the orientation direction is horizontal.\n     *\n     * @remarks\n     * Default value is `grow`. Other possible values are `fade` and `none`.\n     *\n     * ```html\n     * <igx-stepper animationType=\"none\">\n     * <igx-stepper>\n     * ```\n     */\n    @Input()\n    public get horizontalAnimationType(): HorizontalAnimationType {\n        return this.animationType;\n    }\n\n    public set horizontalAnimationType(value: HorizontalAnimationType) {\n        // TODO: activeChange event is not emitted for the collapsing steps (loop through collapsing steps and emit)\n        this.stepperService.collapsingSteps.clear();\n        this.animationType = value;\n    }\n\n    /**\n     * Get/Set the animation duration.\n     * ```html\n     * <igx-stepper [animationDuration]=\"500\">\n     * <igx-stepper>\n     * ```\n     */\n    @Input()\n    public get animationDuration(): number {\n        return this.defaultAnimationDuration;\n    }\n\n    public set animationDuration(value: number) {\n        if (value && value > 0) {\n            this.defaultAnimationDuration = value;\n            return;\n        }\n        this.defaultAnimationDuration = this._defaultAnimationDuration;\n    }\n\n    /**\n     * Get/Set whether the stepper is linear.\n     *\n     * @remarks\n     * If the stepper is in linear mode and if the active step is valid only then the user is able to move forward.\n     *\n     * ```html\n     * <igx-stepper [linear]=\"true\"></igx-stepper>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get linear(): boolean {\n        return this._linear;\n    }\n\n    public set linear(value: boolean) {\n        this._linear = value;\n        if (this._linear && this.steps.length > 0) {\n            // when the stepper is in linear mode we should calculate which steps should be disabled\n            // and which are visited i.e. their validity should be correctly displayed.\n            this.stepperService.calculateVisitedSteps();\n            this.stepperService.calculateLinearDisabledSteps();\n        } else {\n            this.stepperService.linearDisabledSteps.clear();\n        }\n    }\n\n    /**\n     * Get/Set the stepper orientation.\n     *\n     * ```typescript\n     * this.stepper.orientation = IgxStepperOrientation.Vertical;\n     * ```\n     */\n    @HostBinding('attr.aria-orientation')\n    @Input()\n    public get orientation(): IgxStepperOrientation {\n        return this._orientation;\n    }\n\n    public set orientation(value: IgxStepperOrientation) {\n        if (this._orientation === value) {\n            return;\n        }\n\n        // TODO: activeChange event is not emitted for the collapsing steps\n        this.stepperService.collapsingSteps.clear();\n        this._orientation = value;\n        this._defaultTitlePosition = this._orientation === IgxStepperOrientation.Horizontal ?\n            IgxStepperTitlePosition.Bottom : IgxStepperTitlePosition.End;\n    }\n\n    /**\n     * Get/Set the type of the steps.\n     *\n     * ```typescript\n     * this.stepper.stepType = IgxStepType.Indicator;\n     * ```\n     */\n    @Input()\n    public stepType: IgxStepType = IgxStepType.Full;\n\n    /**\n     * Get/Set whether the content is displayed above the steps.\n     *\n     * @remarks\n     * Default value is `false` and the content is below the steps.\n     *\n     * ```typescript\n     * this.stepper.contentTop = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public contentTop = false;\n\n    /**\n     * Get/Set the position of the steps title.\n     *\n     * @remarks\n     * The default value when the stepper is horizontally orientated is `bottom`.\n     * In vertical layout the default title position is `end`.\n     *\n     * ```typescript\n     * this.stepper.titlePosition = IgxStepperTitlePosition.Top;\n     * ```\n     */\n    @Input()\n    public titlePosition: IgxStepperTitlePosition = null;\n\n    /** @hidden @internal **/\n    @HostBinding('class.igx-stepper')\n    public cssClass = 'igx-stepper';\n\n    /** @hidden @internal **/\n    @HostBinding('attr.role')\n    public role = 'tablist';\n\n    /** @hidden @internal **/\n    @HostBinding('class.igx-stepper--horizontal')\n    public get directionClass() {\n        return this.orientation === IgxStepperOrientation.Horizontal;\n    }\n\n    /**\n     * Emitted when the stepper's active step is changing.\n     *\n     *```html\n     * <igx-stepper (activeStepChanging)=\"handleActiveStepChanging($event)\">\n     * </igx-stepper>\n     * ```\n     *\n     *```typescript\n     * public handleActiveStepChanging(event: IStepChangingEventArgs) {\n     *  if (event.newIndex < event.oldIndex) {\n     *      event.cancel = true;\n     *  }\n     * }\n     *```\n     */\n    @Output()\n    public activeStepChanging = new EventEmitter<IStepChangingEventArgs>();\n\n    /**\n     * Emitted when the active step is changed.\n     *\n     * @example\n     * ```\n     * <igx-stepper (activeStepChanged)=\"handleActiveStepChanged($event)\"></igx-stepper>\n     * ```\n     */\n    @Output()\n    public activeStepChanged = new EventEmitter<IStepChangedEventArgs>();\n\n    /** @hidden @internal */\n    @ContentChild(IgxStepInvalidIndicatorDirective, { read: TemplateRef })\n    public invalidIndicatorTemplate: TemplateRef<IgxStepInvalidIndicatorDirective>;\n\n    /** @hidden @internal */\n    @ContentChild(IgxStepCompletedIndicatorDirective, { read: TemplateRef })\n    public completedIndicatorTemplate: TemplateRef<IgxStepCompletedIndicatorDirective>;\n\n    /** @hidden @internal */\n    @ContentChild(IgxStepActiveIndicatorDirective, { read: TemplateRef })\n    public activeIndicatorTemplate: TemplateRef<IgxStepActiveIndicatorDirective>;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxStepComponent, { descendants: false })\n    private _steps: QueryList<IgxStepComponent>;\n\n    /**\n     * Get all steps.\n     *\n     * ```typescript\n     * const steps: IgxStepComponent[] = this.stepper.steps;\n     * ```\n     */\n    public get steps(): IgxStepComponent[] {\n        return this._steps?.toArray() || [];\n    }\n\n    /** @hidden @internal */\n    public get nativeElement(): HTMLElement {\n        return this.element.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public verticalAnimationSettings: ToggleAnimationSettings = {\n        openAnimation: growVerIn,\n        closeAnimation: growVerOut,\n    };\n    /** @hidden @internal */\n    public _defaultTitlePosition: IgxStepperTitlePosition = IgxStepperTitlePosition.Bottom;\n    private destroy$ = new Subject<void>();\n    private _orientation: IgxStepperOrientation = IgxStepperOrientation.Horizontal;\n    private _verticalAnimationType: VerticalAnimationType = VerticalAnimationType.Grow;\n    private _linear = false;\n    private readonly _defaultAnimationDuration = 350;\n\n    constructor(\n        cdr: ChangeDetectorRef,\n        @Inject(IgxAngularAnimationService) animationService: AnimationService,\n        private stepperService: IgxStepperService,\n        private element: ElementRef<HTMLElement>) {\n        super(animationService, cdr);\n        this.stepperService.stepper = this;\n    }\n\n    /** @hidden @internal */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes['animationDuration']) {\n            this.verticalAnimationType = this._verticalAnimationType;\n        }\n    }\n\n    /** @hidden @internal */\n    public ngOnInit(): void {\n        this.enterAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.activeStepChanged.emit({ owner: this, index: this.stepperService.activeStep.index });\n        });\n        this.leaveAnimationDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.stepperService.collapsingSteps.size === 1) {\n                this.stepperService.collapse(this.stepperService.previousActiveStep);\n            } else {\n                Array.from(this.stepperService.collapsingSteps).slice(0, this.stepperService.collapsingSteps.size - 1)\n                    .forEach(step => this.stepperService.collapse(step));\n            }\n        });\n\n\n    }\n\n    /** @hidden @internal */\n    public ngAfterContentInit(): void {\n        let activeStep;\n        this.steps.forEach((step, index) => {\n            this.updateStepAria(step, index);\n            if (!activeStep && step.active) {\n                activeStep = step;\n            }\n        });\n        if (!activeStep) {\n            this.activateFirstStep(true);\n        }\n\n        if (this.linear) {\n            this.stepperService.calculateLinearDisabledSteps();\n        }\n\n        this.handleStepChanges();\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    /**\n     * Activates the step at a given index.\n     *\n     *```typescript\n     * this.stepper.navigateTo(1);\n     *```\n     */\n    public navigateTo(index: number): void {\n        const step = this.steps[index];\n        if (!step || this.stepperService.activeStep === step) {\n            return;\n        }\n        this.activateStep(step);\n    }\n\n    /**\n     * Activates the next enabled step.\n     *\n     *```typescript\n     * this.stepper.next();\n     *```\n     */\n    public next(): void {\n        this.moveToNextStep();\n    }\n\n    /**\n     * Activates the previous enabled step.\n     *\n     *```typescript\n     * this.stepper.prev();\n     *```\n     */\n    public prev(): void {\n        this.moveToNextStep(false);\n    }\n\n    /**\n     * Resets the stepper to its initial state i.e. activates the first step.\n     *\n     * @remarks\n     * The steps' content will not be automatically reset.\n     *```typescript\n     * this.stepper.reset();\n     *```\n     */\n    public reset(): void {\n        this.stepperService.visitedSteps.clear();\n        const activeStep = this.steps.find(s => !s.disabled);\n        if (activeStep) {\n            this.activateStep(activeStep);\n        }\n    }\n\n    /** @hidden @internal */\n    public playHorizontalAnimations(): void {\n        this.previousItem = this.stepperService.previousActiveStep;\n        this.currentItem = this.stepperService.activeStep;\n        this.triggerAnimations();\n    }\n\n    protected getPreviousElement(): HTMLElement {\n        return this.stepperService.previousActiveStep?.contentContainer.nativeElement;\n    }\n\n    protected getCurrentElement(): HTMLElement {\n        return this.stepperService.activeStep.contentContainer.nativeElement;\n    }\n\n    private updateVerticalAnimationSettings(\n        openAnimation: AnimationReferenceMetadata,\n        closeAnimation: AnimationReferenceMetadata): ToggleAnimationSettings {\n        const customCloseAnimation = useAnimation(closeAnimation, {\n            params: {\n                duration: this.animationDuration + 'ms'\n            }\n        });\n        const customOpenAnimation = useAnimation(openAnimation, {\n            params: {\n                duration: this.animationDuration + 'ms'\n            }\n        });\n\n        return {\n            openAnimation: openAnimation ? customOpenAnimation : null,\n            closeAnimation: closeAnimation ? customCloseAnimation : null\n        };\n    }\n\n    private updateStepAria(step: IgxStepComponent, index: number): void {\n        step._index = index;\n        step.renderer.setAttribute(step.nativeElement, 'aria-setsize', (this.steps.length).toString());\n        step.renderer.setAttribute(step.nativeElement, 'aria-posinset', (index + 1).toString());\n    }\n\n    private handleStepChanges(): void {\n        this._steps.changes.pipe(takeUntil(this.destroy$)).subscribe(steps => {\n            Promise.resolve().then(() => {\n                steps.forEach((step, index) => {\n                    this.updateStepAria(step, index);\n                });\n\n                // when the active step is removed\n                const hasActiveStep = this.steps.find(s => s === this.stepperService.activeStep);\n                if (!hasActiveStep) {\n                    this.activateFirstStep();\n                }\n                // TO DO: mark step added before the active as visited?\n                if (this.linear) {\n                    this.stepperService.calculateLinearDisabledSteps();\n                }\n            });\n        });\n    }\n\n    private activateFirstStep(activateInitially = false) {\n        const firstEnabledStep = this.steps.find(s => !s.disabled);\n        if (firstEnabledStep) {\n            firstEnabledStep.active = true;\n            if (activateInitially) {\n                firstEnabledStep.activeChange.emit(true);\n                this.activeStepChanged.emit({ owner: this, index: firstEnabledStep.index });\n            }\n        }\n    }\n\n    private activateStep(step: IgxStepComponent) {\n        if (this.orientation === IgxStepperOrientation.Horizontal) {\n            step.changeHorizontalActiveStep();\n        } else {\n            this.stepperService.expand(step);\n        }\n    }\n\n    private moveToNextStep(next = true) {\n        let steps: IgxStepComponent[] = this.steps;\n        let activeStepIndex = this.stepperService.activeStep.index;\n        if (!next) {\n            steps = this.steps.reverse();\n            activeStepIndex = steps.findIndex(s => s === this.stepperService.activeStep);\n        }\n\n        const nextStep = steps.find((s, i) => i > activeStepIndex && s.isAccessible);\n        if (nextStep) {\n            this.activateStep(nextStep);\n        }\n    }\n}\n","@if (!contentTop || orientation !== 'horizontal') {\n    <div class=\"igx-stepper__header\">\n        <ng-template *ngTemplateOutlet=\"stepTemplate\"></ng-template>\n    </div>\n}\n\n@if (orientation === 'horizontal') {\n    <div class=\"igx-stepper__body\">\n        @for (step of steps; track step) {\n            <ng-container *ngTemplateOutlet=\"step.contentTemplate\"></ng-container>\n        }\n    </div>\n}\n\n@if (contentTop && orientation === 'horizontal') {\n    <div class=\"igx-stepper__header\">\n        <ng-template *ngTemplateOutlet=\"stepTemplate\"></ng-template>\n    </div>\n}\n\n<ng-template #stepTemplate>\n    <ng-content select=\"igx-step\"></ng-content>\n</ng-template>\n","import { IgxStepComponent } from './step/step.component';\nimport { IgxStepperComponent } from './stepper.component';\nimport { IgxStepActiveIndicatorDirective, IgxStepCompletedIndicatorDirective, IgxStepContentDirective, IgxStepIndicatorDirective, IgxStepInvalidIndicatorDirective, IgxStepSubtitleDirective, IgxStepTitleDirective } from './stepper.directive';\n\nexport * from './stepper.component';\nexport * from './step/step.component';\nexport {\n    HorizontalAnimationType,\n    IStepChangingEventArgs,\n    IStepChangedEventArgs,\n    IgxStepperOrientation,\n    IgxStepType,\n    IgxStepperTitlePosition,\n    VerticalAnimationType\n} from './stepper.common';\nexport * from './stepper.directive';\n\n/* NOTE: Stepper directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_STEPPER_DIRECTIVES = [\n    IgxStepComponent,\n    IgxStepperComponent,\n    IgxStepTitleDirective,\n    IgxStepSubtitleDirective,\n    IgxStepIndicatorDirective,\n    IgxStepContentDirective,\n    IgxStepActiveIndicatorDirective,\n    IgxStepCompletedIndicatorDirective,\n    IgxStepInvalidIndicatorDirective\n] as const;\n","import { Component, ContentChild, Pipe, PipeTransform, Directive } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { IgxInputDirective, IgxInputState } from '../input-group/public_api';\nimport { IgxInputGroupComponent } from '../input-group/input-group.component';\nimport { IgxInputGroupBase } from '../input-group/input-group.common';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { IgxDateTimeEditorDirective } from '../directives/date-time-editor/public_api';\nimport { isDate } from '../core/utils';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxButtonDirective } from '../directives/button/button.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\n\n/** Represents a range between two dates. */\nexport interface DateRange {\n    start: Date | string;\n    end: Date | string;\n}\n\n/** @hidden @internal */\n@Pipe({\n    name: 'dateRange',\n    standalone: true\n})\nexport class DateRangePickerFormatPipe implements PipeTransform {\n    public transform(values: DateRange, appliedFormat?: string,\n        locale?: string, formatter?: (_: DateRange) => string): string {\n        if (!values || !values.start && !values.end) {\n            return '';\n        }\n        if (formatter) {\n            return formatter(values);\n        }\n        let { start, end } = values;\n        if (!isDate(start)) {\n            start = DateTimeUtil.parseIsoDate(start);\n        }\n        if (!isDate(end)) {\n            end = DateTimeUtil.parseIsoDate(end);\n        }\n        const startDate = appliedFormat ? DateTimeUtil.formatDate(start, appliedFormat, locale || 'en') : start?.toLocaleDateString();\n        const endDate = appliedFormat ? DateTimeUtil.formatDate(end, appliedFormat, locale || 'en') : end?.toLocaleDateString();\n        let formatted;\n        if (start) {\n            formatted = `${startDate} - `;\n            if (end) {\n                formatted += endDate;\n            }\n        }\n\n        return formatted ? formatted : '';\n    }\n}\n\n/** @hidden @internal */\n@Component({\n    template: ``,\n    selector: `igx-date-range-base`,\n    providers: [{ provide: IgxInputGroupBase, useExisting: IgxDateRangeInputsBaseComponent }],\n    standalone: true\n})\nexport class IgxDateRangeInputsBaseComponent extends IgxInputGroupComponent {\n    @ContentChild(IgxDateTimeEditorDirective)\n    public dateTimeEditor: IgxDateTimeEditorDirective;\n\n    @ContentChild(IgxInputDirective)\n    public inputDirective: IgxInputDirective;\n\n    @ContentChild(NgControl)\n    protected ngControl: NgControl;\n\n    /** @hidden @internal */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /** @hidden @internal */\n    public setFocus(): void {\n        this.input.focus();\n    }\n\n    /** @hidden @internal */\n    public updateInputValue(value: Date) {\n        if (this.ngControl) {\n            this.ngControl.control.setValue(value);\n        } else {\n            this.dateTimeEditor.value = value;\n        }\n    }\n\n    /** @hidden @internal */\n    public updateInputValidity(state: IgxInputState) {\n        this.inputDirective.valid = state;\n    }\n}\n\n/**\n * Defines the start input for a date range picker\n *\n * @igxModule IgxDateRangePickerModule\n *\n * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @remarks\n * When templating, start input has to be templated separately\n *\n * @example\n * ```html\n * <igx-date-range-picker mode=\"dropdown\">\n *      <igx-date-range-start>\n *          <input igxInput igxDateTimeEditor type=\"text\">\n *      </igx-date-range-start>\n *      ...\n * </igx-date-range-picker>\n * ```\n */\n@Component({\n    selector: 'igx-date-range-start',\n    templateUrl: '../input-group/input-group.component.html',\n    providers: [\n        { provide: IgxInputGroupBase, useExisting: IgxDateRangeStartComponent },\n        { provide: IgxDateRangeInputsBaseComponent, useExisting: IgxDateRangeStartComponent }\n    ],\n    imports: [NgTemplateOutlet, IgxPrefixDirective, IgxButtonDirective, NgClass, IgxSuffixDirective, IgxIconComponent]\n})\nexport class IgxDateRangeStartComponent extends IgxDateRangeInputsBaseComponent { }\n\n/**\n * Defines the end input for a date range picker\n *\n * @igxModule IgxDateRangePickerModule\n *\n * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @remarks\n * When templating, end input has to be template separately\n *\n * @example\n * ```html\n * <igx-date-range-picker mode=\"dropdown\">\n *      ...\n *      <igx-date-range-end>\n *          <input igxInput igxDateTimeEditor type=\"text\">\n *      </igx-date-range-end>\n * </igx-date-range-picker>\n * ```\n */\n@Component({\n    selector: 'igx-date-range-end',\n    templateUrl: '../input-group/input-group.component.html',\n    providers: [\n        { provide: IgxInputGroupBase, useExisting: IgxDateRangeEndComponent },\n        { provide: IgxDateRangeInputsBaseComponent, useExisting: IgxDateRangeEndComponent }\n    ],\n    imports: [NgTemplateOutlet, IgxPrefixDirective, IgxButtonDirective, NgClass, IgxSuffixDirective, IgxIconComponent]\n})\nexport class IgxDateRangeEndComponent extends IgxDateRangeInputsBaseComponent { }\n\n/**\n * Replaces the default separator `to` with the provided value\n *\n * @igxModule IgxDateRangePickerModule\n *\n * @igxTheme igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @example\n * ```html\n * <igx-date-range-picker>\n *      <igx-date-range-start>\n *          <input igxInput igxDateTimeEditor type=\"text\">\n *      </igx-date-range-start>\n *\n *      <ng-template igxDateRangeSeparator>-</ng-template>\n *\n *      <igx-date-range-end>\n *          <input igxInput igxDateTimeEditor type=\"text\">\n *      </igx-date-range-end>\n *      ...\n * </igx-date-range-picker>\n * ```\n */\n@Directive({\n    selector: '[igxDateRangeSeparator]',\n    standalone: true\n})\nexport class IgxDateRangeSeparatorDirective { }\n","export interface IDateRangePickerResourceStrings {\n    igx_date_range_picker_date_separator?: string;\n    igx_date_range_picker_done_button?: string;\n}\n\nexport const DateRangePickerResourceStringsEN: IDateRangePickerResourceStrings = {\n    igx_date_range_picker_date_separator: 'to',\n    igx_date_range_picker_done_button: 'Done'\n};\n","import {\n    AfterViewInit, booleanAttribute, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef,\n    EventEmitter, HostBinding, HostListener, Inject, Injector, Input, LOCALE_ID,\n    OnChanges, OnDestroy, OnInit, Optional, Output, QueryList,\n    SimpleChanges, TemplateRef, ViewChild, ViewContainerRef\n} from '@angular/core';\nimport { NgTemplateOutlet, getLocaleFirstDayOfWeek } from '@angular/common';\nimport {\n    AbstractControl, ControlValueAccessor, NgControl,\n    NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator\n} from '@angular/forms';\n\nimport { fromEvent, merge, MonoTypeOperatorFunction, noop, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { CalendarSelection, IgxCalendarComponent } from '../calendar/public_api';\nimport { DateRangeType } from '../core/dates';\nimport { DateRangePickerResourceStringsEN, IDateRangePickerResourceStrings } from '../core/i18n/date-range-picker-resources';\nimport { IBaseCancelableBrowserEventArgs, isDate, parseDate, PlatformUtil } from '../core/utils';\nimport { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component';\nimport { PickerBaseDirective } from '../date-common/picker-base.directive';\nimport { IgxPickerActionsDirective } from '../date-common/picker-icons.common';\nimport { DateTimeUtil } from '../date-common/util/date-time.util';\nimport { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';\nimport {\n    IgxInputDirective, IgxInputGroupComponent, IgxInputGroupType, IgxInputState,\n    IgxLabelDirective, IGX_INPUT_GROUP_TYPE\n} from '../input-group/public_api';\nimport {\n    AutoPositionStrategy, IgxOverlayService, OverlayCancelableEventArgs, OverlayEventArgs,\n    OverlaySettings, PositionSettings\n} from '../services/public_api';\nimport { DateRange, IgxDateRangeEndComponent, IgxDateRangeInputsBaseComponent, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent, DateRangePickerFormatPipe } from './date-range-picker-inputs.common';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxIconComponent } from '../icon/icon.component';\nimport { getCurrentResourceStrings } from '../core/i18n/resources';\nimport { fadeIn, fadeOut } from 'igniteui-angular/animations';\n\nconst SingleInputDatesConcatenationString = ' - ';\n\n/**\n * Provides the ability to select a range of dates from a calendar UI or editable inputs.\n *\n * @igxModule IgxDateRangeModule\n *\n * @igxTheme igx-input-group-theme, igx-calendar-theme, igx-date-range-picker-theme\n *\n * @igxKeywords date, range, date range, date picker\n *\n * @igxGroup scheduling\n *\n * @remarks\n * It displays the range selection in a single or two input fields.\n * The default template displays a single *readonly* input field\n * while projecting `igx-date-range-start` and `igx-date-range-end`\n * displays two *editable* input fields.\n *\n * @example\n * ```html\n * <igx-date-range-picker mode=\"dropdown\"></igx-date-range-picker>\n * ```\n */\n@Component({\n    selector: 'igx-date-range-picker',\n    templateUrl: './date-range-picker.component.html',\n    providers: [\n        { provide: NG_VALUE_ACCESSOR, useExisting: IgxDateRangePickerComponent, multi: true },\n        { provide: NG_VALIDATORS, useExisting: IgxDateRangePickerComponent, multi: true }\n    ],\n    imports: [\n        NgTemplateOutlet,\n        IgxIconComponent,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxPrefixDirective,\n        DateRangePickerFormatPipe\n    ]\n})\nexport class IgxDateRangePickerComponent extends PickerBaseDirective\n    implements OnChanges, OnInit, AfterViewInit, OnDestroy, ControlValueAccessor, Validator {\n\n    /**\n     * The number of displayed month views.\n     *\n     * @remarks\n     * Default is `2`.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker [displayMonthsCount]=\"3\"></igx-date-range-picker>\n     * ```\n     */\n    @Input()\n    public displayMonthsCount = 2;\n\n    /**\n     * Gets/Sets whether dates that are not part of the current month will be displayed.\n     *\n     * @remarks\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker [hideOutsideDays]=\"true\"></igx-date-range-picker>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hideOutsideDays: boolean;\n\n    /**\n     * A custom formatter function, applied on the selected or passed in date.\n     *\n     * @example\n     * ```typescript\n     * private dayFormatter = new Intl.DateTimeFormat(\"en\", { weekday: \"long\" });\n     * private monthFormatter = new Intl.DateTimeFormat(\"en\", { month: \"long\" });\n     *\n     * public formatter(date: Date): string {\n     *  return `${this.dayFormatter.format(date)} - ${this.monthFormatter.format(date)} - ${date.getFullYear()}`;\n     * }\n     * ```\n     * ```html\n     * <igx-date-range-picker [formatter]=\"formatter\"></igx-date-range-picker>\n     * ```\n     */\n    @Input()\n    public formatter: (val: DateRange) => string;\n\n    /**\n     * Overrides the default text of the calendar dialog **Done** button.\n     *\n     * @remarks\n     * Defaults to the value from resource strings, `\"Done\"` for the built-in EN.\n     * The button will only show up in `dialog` mode.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker doneButtonText=\"完了\"></igx-date-range-picker>\n     * ```\n     */\n    @Input()\n    public set doneButtonText(value: string) {\n        this._doneButtonText = value;\n    }\n\n    public get doneButtonText(): string {\n        if (this._doneButtonText === null) {\n            return this.resourceStrings.igx_date_range_picker_done_button;\n        }\n        return this._doneButtonText;\n    }\n    /**\n     * Custom overlay settings that should be used to display the calendar.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker [overlaySettings]=\"customOverlaySettings\"></igx-date-range-picker>\n     * ```\n     */\n    @Input()\n    public override overlaySettings: OverlaySettings;\n\n    /**\n     * The format used when editable inputs are not focused.\n     *\n     * @remarks\n     * Uses Angular's DatePipe.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker displayFormat=\"EE/M/yy\"></igx-date-range-picker>\n     * ```\n     *\n     */\n    @Input()\n    public override displayFormat: string;\n\n    /**\n     * The expected user input format and placeholder.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker inputFormat=\"dd/MM/yy\"></igx-date-range-picker>\n     * ```\n     */\n    @Input()\n    public override inputFormat: string;\n\n    /**\n     * The minimum value in a valid range.\n     *\n     * @example\n     * <igx-date-range-picker [minValue]=\"minDate\"></igx-date-range-picker>\n     */\n    @Input()\n    public set minValue(value: Date | string) {\n        this._minValue = value;\n        this.onValidatorChange();\n    }\n\n    public get minValue(): Date | string {\n        return this._minValue;\n    }\n\n    /**\n     * The maximum value in a valid range.\n     *\n     * @example\n     * <igx-date-range-picker [maxValue]=\"maxDate\"></igx-date-range-picker>\n     */\n    @Input()\n    public set maxValue(value: Date | string) {\n        this._maxValue = value;\n        this.onValidatorChange();\n    }\n\n    public get maxValue(): Date | string {\n        return this._maxValue;\n    }\n\n    /**\n     * An accessor that sets the resource strings.\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IDateRangePickerResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    /**\n     * An accessor that returns the resource strings.\n     */\n    public get resourceStrings(): IDateRangePickerResourceStrings {\n        return this._resourceStrings;\n    }\n\n    /**\n     * Sets the `placeholder` for single-input `IgxDateRangePickerComponent`.\n     *\n     *   @example\n     * ```html\n     * <igx-date-range-picker [placeholder]=\"'Choose your dates'\"></igx-date-range-picker>\n     * ```\n     */\n    @Input()\n    public override placeholder = '';\n\n    /**\n     * Gets/Sets the container used for the popup element.\n     *\n     * @remarks\n     *  `outlet` is an instance of `IgxOverlayOutletDirective` or an `ElementRef`.\n     * @example\n     * ```html\n     * <div igxOverlayOutlet #outlet=\"overlay-outlet\"></div>\n     * //..\n     * <igx-date-range-picker [outlet]=\"outlet\"></igx-date-range-picker>\n     * //..\n     * ```\n     */\n    @Input()\n    public override outlet: IgxOverlayOutletDirective | ElementRef<any>;\n\n    /**\n     * Show/hide week numbers\n     *\n     * @remarks\n     * Default is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker [showWeekNumbers]=\"true\"></igx-date-range-picker>\n     * ``\n     */\n    @Input({ transform: booleanAttribute })\n    public showWeekNumbers = false;\n\n    /**\n     * Emitted when the picker's value changes. Used for two-way binding.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker [(value)]=\"date\"></igx-date-range-picker>\n     * ```\n     */\n    @Output()\n    public valueChange = new EventEmitter<DateRange>();\n\n    /** @hidden @internal */\n    @HostBinding('class.igx-date-range-picker')\n    public cssClass = 'igx-date-range-picker';\n\n    @ViewChild(IgxInputGroupComponent, { read: ViewContainerRef })\n    private viewContainerRef: ViewContainerRef;\n\n    /** @hidden @internal */\n    @ViewChild(IgxInputDirective)\n    public inputDirective: IgxInputDirective;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxDateRangeInputsBaseComponent)\n    public projectedInputs: QueryList<IgxDateRangeInputsBaseComponent>;\n\n    @ContentChild(IgxLabelDirective)\n    public label: IgxLabelDirective;\n\n    @ContentChild(IgxPickerActionsDirective)\n    public pickerActions: IgxPickerActionsDirective;\n\n    /** @hidden @internal */\n    @ContentChild(IgxDateRangeSeparatorDirective, { read: TemplateRef })\n    public dateSeparatorTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    public get dateSeparator(): string {\n        if (this._dateSeparator === null) {\n            return this.resourceStrings.igx_date_range_picker_date_separator;\n        }\n        return this._dateSeparator;\n    }\n\n    /** @hidden @internal */\n    public get appliedFormat(): string {\n        return DateTimeUtil.getLocaleDateFormat(this.locale, this.displayFormat)\n            || DateTimeUtil.DEFAULT_INPUT_FORMAT;\n    }\n\n    /**\n     * @example\n     * ```html\n     * <igx-date-range-picker locale=\"jp\"></igx-date-range-picker>\n     * ```\n     */\n    /**\n     * Gets the `locale` of the date-range-picker.\n     * If not set, defaults to application's locale.\n     */\n    @Input()\n    public override get locale(): string {\n        return this._locale;\n    }\n\n    /**\n     * Sets the `locale` of the date-picker.\n     * Expects a valid BCP 47 language tag.\n     */\n    public override set locale(value: string) {\n        this._locale = value;\n        // if value is invalid, set it back to _localeId\n        try {\n            getLocaleFirstDayOfWeek(this._locale);\n        } catch (e) {\n            this._locale = this._localeId;\n        }\n        if (this.hasProjectedInputs) {\n            this.updateInputLocale();\n            this.updateDisplayFormat();\n        }\n    }\n\n    /** @hidden @internal */\n    public get singleInputFormat(): string {\n        if (this.placeholder !== '') {\n            return this.placeholder;\n        }\n\n        const format = this.appliedFormat;\n        return `${format}${SingleInputDatesConcatenationString}${format}`;\n    }\n\n    /**\n     * Gets calendar state.\n     *\n     * ```typescript\n     * let state = this.dateRange.collapsed;\n     * ```\n     */\n    public override get collapsed(): boolean {\n        return this._collapsed;\n    }\n\n    /**\n     * The currently selected value / range from the calendar\n     *\n     * @remarks\n     * The current value is of type `DateRange`\n     *\n     * @example\n     * ```typescript\n     * const newValue: DateRange = { start: new Date(\"2/2/2012\"), end: new Date(\"3/3/2013\")};\n     * this.dateRangePicker.value = newValue;\n     * ```\n     */\n    public get value(): DateRange | null {\n        return this._value;\n    }\n\n    @Input()\n    public set value(value: DateRange | null) {\n        this.updateValue(value);\n        this.onChangeCallback(value);\n        this.valueChange.emit(value);\n    }\n\n    /** @hidden @internal */\n    public get hasProjectedInputs(): boolean {\n        return this.projectedInputs?.length > 0;\n    }\n\n    /** @hidden @internal */\n    public get separatorClass(): string {\n        return 'igx-date-range-picker__label';\n    }\n\n    protected override get toggleContainer(): HTMLElement | undefined {\n        return this._calendarContainer;\n    }\n\n    private get required(): boolean {\n        if (this._ngControl && this._ngControl.control && this._ngControl.control.validator) {\n            const error = this._ngControl.control.validator({} as AbstractControl);\n            return (error && error.required) ? true : false;\n        }\n\n        return false;\n    }\n\n    private get calendar(): IgxCalendarComponent {\n        return this._calendar;\n    }\n\n    private get dropdownOverlaySettings(): OverlaySettings {\n        return Object.assign({}, this._dropDownOverlaySettings, this.overlaySettings);\n    }\n\n    private get dialogOverlaySettings(): OverlaySettings {\n        return Object.assign({}, this._dialogOverlaySettings, this.overlaySettings);\n    }\n\n    private _resourceStrings = getCurrentResourceStrings(DateRangePickerResourceStringsEN);\n    private _doneButtonText = null;\n    private _dateSeparator = null;\n    private _value: DateRange | null;\n    private _overlayId: string;\n    private _ngControl: NgControl;\n    private _statusChanges$: Subscription;\n    private _calendar: IgxCalendarComponent;\n    private _calendarContainer?: HTMLElement;\n    private _positionSettings: PositionSettings;\n    private _focusedInput: IgxDateRangeInputsBaseComponent;\n    private _overlaySubFilter:\n        [MonoTypeOperatorFunction<OverlayEventArgs>, MonoTypeOperatorFunction<OverlayEventArgs | OverlayCancelableEventArgs>] = [\n            filter(x => x.id === this._overlayId),\n            takeUntil(merge(this._destroy$, this.closed))\n        ];\n    private _dialogOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: true,\n        closeOnEscape: true\n    };\n    private _dropDownOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        closeOnEscape: true\n    };\n    private onChangeCallback: (dateRange: DateRange) => void = noop;\n    private onTouchCallback: () => void = noop;\n    private onValidatorChange: () => void = noop;\n\n    constructor(element: ElementRef,\n        @Inject(LOCALE_ID) _localeId: string,\n        protected platform: PlatformUtil,\n        private _injector: Injector,\n        private _cdr: ChangeDetectorRef,\n        @Inject(IgxOverlayService) private _overlayService: IgxOverlayService,\n        @Optional() @Inject(IGX_INPUT_GROUP_TYPE) _inputGroupType?: IgxInputGroupType) {\n        super(element, _localeId, _inputGroupType);\n        this.locale = this.locale || this._localeId;\n    }\n\n    /** @hidden @internal */\n    @HostListener('keydown', ['$event'])\n    /** @hidden @internal */\n    public onKeyDown(event: KeyboardEvent): void {\n        switch (event.key) {\n            case this.platform.KEYMAP.ARROW_UP:\n                if (event.altKey) {\n                    this.close();\n                }\n                break;\n            case this.platform.KEYMAP.ARROW_DOWN:\n                if (event.altKey) {\n                    this.open();\n                }\n                break;\n        }\n    }\n\n    /**\n     * Opens the date range picker's dropdown or dialog.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker #dateRange></igx-date-range-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"dateRange.open()\">Open Dialog</button\n     * ```\n     */\n    public open(overlaySettings?: OverlaySettings): void {\n        if (!this.collapsed || this.disabled) {\n            return;\n        }\n\n        const settings = Object.assign({}, this.isDropdown\n            ? this.dropdownOverlaySettings\n            : this.dialogOverlaySettings\n            , overlaySettings);\n\n        this._overlayId = this._overlayService\n            .attach(IgxCalendarContainerComponent, this.viewContainerRef, settings);\n        this.subscribeToOverlayEvents();\n        this._overlayService.show(this._overlayId);\n    }\n\n    /**\n     * Closes the date range picker's dropdown or dialog.\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker #dateRange></igx-date-range-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"dateRange.close()\">Close Dialog</button>\n     * ```\n     */\n    public close(): void {\n        if (!this.collapsed) {\n            this._overlayService.hide(this._overlayId);\n        }\n    }\n\n    /**\n     * Toggles the date range picker's dropdown or dialog\n     *\n     * @example\n     * ```html\n     * <igx-date-range-picker #dateRange></igx-date-range-picker>\n     *\n     * <button type=\"button\" igxButton (click)=\"dateRange.toggle()\">Toggle Dialog</button>\n     * ```\n     */\n    public toggle(overlaySettings?: OverlaySettings): void {\n        if (!this.collapsed) {\n            this.close();\n        } else {\n            this.open(overlaySettings);\n        }\n    }\n\n    /**\n     * Selects a range of dates. If no `endDate` is passed, range is 1 day (only `startDate`)\n     *\n     * @example\n     * ```typescript\n     * public selectFiveDayRange() {\n     *  const today = new Date();\n     *  const inFiveDays = new Date(new Date().setDate(today.getDate() + 5));\n     *  this.dateRange.select(today, inFiveDays);\n     * }\n     * ```\n     */\n    public select(startDate: Date, endDate?: Date): void {\n        endDate = endDate ?? startDate;\n        const dateRange = [startDate, endDate];\n        this.handleSelection(dateRange);\n    }\n\n    /** @hidden @internal */\n    public writeValue(value: DateRange): void {\n        this.updateValue(value);\n    }\n\n    /** @hidden @internal */\n    public registerOnChange(fn: any): void {\n        this.onChangeCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public registerOnTouched(fn: any): void {\n        this.onTouchCallback = fn;\n    }\n\n    /** @hidden @internal */\n    public validate(control: AbstractControl): ValidationErrors | null {\n        const value: DateRange = control.value;\n        const errors = {};\n        if (value) {\n            if (this.hasProjectedInputs) {\n                const startInput = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;\n                const endInput = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;\n                if (!startInput.dateTimeEditor.value) {\n                    Object.assign(errors, { startValue: true });\n                }\n                if (!endInput.dateTimeEditor.value) {\n                    Object.assign(errors, { endValue: true });\n                }\n            }\n\n            const min = parseDate(this.minValue);\n            const max = parseDate(this.maxValue);\n            const start = parseDate(value.start);\n            const end = parseDate(value.end);\n            if ((min && start && DateTimeUtil.lessThanMinValue(start, min, false))\n                || (min && end && DateTimeUtil.lessThanMinValue(end, min, false))) {\n                Object.assign(errors, { minValue: true });\n            }\n            if ((max && start && DateTimeUtil.greaterThanMaxValue(start, max, false))\n                || (max && end && DateTimeUtil.greaterThanMaxValue(end, max, false))) {\n                Object.assign(errors, { maxValue: true });\n            }\n        }\n\n        return Object.keys(errors).length > 0 ? errors : null;\n    }\n\n    /** @hidden @internal */\n    public registerOnValidatorChange?(fn: any): void {\n        this.onValidatorChange = fn;\n    }\n\n    /** @hidden @internal */\n    public setDisabledState?(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    /** @hidden */\n    public ngOnInit(): void {\n        this._ngControl = this._injector.get<NgControl>(NgControl, null);\n\n        this.locale = this.locale || this._localeId;\n    }\n\n    /** @hidden */\n    public override ngAfterViewInit(): void {\n        super.ngAfterViewInit();\n        this.subscribeToDateEditorEvents();\n        this.configPositionStrategy();\n        this.configOverlaySettings();\n        this.cacheFocusedInput();\n        this.attachOnTouched();\n\n        this.setRequiredToInputs();\n\n        if (this._ngControl) {\n            this._statusChanges$ = this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));\n        }\n\n        // delay invocations until the current change detection cycle has completed\n        Promise.resolve().then(() => {\n            this.updateDisabledState();\n            this.initialSetValue();\n            this.updateInputs();\n            // B.P. 07 July 2021 - IgxDateRangePicker not showing initial disabled state with ChangeDetectionStrategy.OnPush #9776\n            /**\n             * if disabled is placed on the range picker element and there are projected inputs\n             * run change detection since igxInput will initially set the projected inputs' disabled to false\n             */\n            if (this.hasProjectedInputs && this.disabled) {\n                this._cdr.markForCheck();\n            }\n        });\n        this.updateDisplayFormat();\n        this.updateInputFormat();\n    }\n\n    /** @hidden @internal */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes['displayFormat'] && this.hasProjectedInputs) {\n            this.updateDisplayFormat();\n        }\n        if (changes['inputFormat'] && this.hasProjectedInputs) {\n            this.updateInputFormat();\n        }\n        if (changes['disabled']) {\n            this.updateDisabledState();\n        }\n    }\n\n    /** @hidden @internal */\n    public override ngOnDestroy(): void {\n        super.ngOnDestroy();\n        if (this._statusChanges$) {\n            this._statusChanges$.unsubscribe();\n        }\n        if (this._overlayId) {\n            this._overlayService.detach(this._overlayId);\n        }\n    }\n\n    /** @hidden @internal */\n    public getEditElement() {\n        return this.inputDirective.nativeElement;\n    }\n\n    protected onStatusChanged = () => {\n        if (this.inputGroup) {\n            this.setValidityState(this.inputDirective, this.inputGroup.isFocused);\n        } else if (this.hasProjectedInputs) {\n            this.projectedInputs\n                .forEach((i) => {\n                    this.setValidityState(i.inputDirective, i.isFocused);\n                });\n        }\n        this.setRequiredToInputs();\n    };\n\n    private setValidityState(inputDirective: IgxInputDirective, isFocused: boolean) {\n        if (this._ngControl && !this._ngControl.disabled && this.isTouchedOrDirty) {\n            if (this.hasValidators && isFocused) {\n                inputDirective.valid = this._ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n            } else {\n                inputDirective.valid = this._ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n            }\n        } else {\n            inputDirective.valid = IgxInputState.INITIAL;\n        }\n    }\n\n    private get isTouchedOrDirty(): boolean {\n        return (this._ngControl.control.touched || this._ngControl.control.dirty);\n    }\n\n    private get hasValidators(): boolean {\n        return (!!this._ngControl.control.validator || !!this._ngControl.control.asyncValidator);\n    }\n\n    private handleSelection(selectionData: Date[]): void {\n        let newValue = this.extractRange(selectionData);\n        if (!newValue.start && !newValue.end) {\n            newValue = null;\n        }\n        this.value = newValue;\n        if (this.isDropdown && selectionData?.length > 1) {\n            this.close();\n        }\n    }\n\n    private handleClosing(e: IBaseCancelableBrowserEventArgs): void {\n        const args = { owner: this, cancel: e?.cancel, event: e?.event };\n        this.closing.emit(args);\n        e.cancel = args.cancel;\n        if (args.cancel) {\n            return;\n        }\n\n        if (this.isDropdown && e?.event && !this.isFocused) {\n            // outside click\n            this.updateValidityOnBlur();\n        } else {\n            this.onTouchCallback();\n            // input click\n            if (this.hasProjectedInputs && this._focusedInput) {\n                this._focusedInput.setFocus();\n            }\n            if (this.inputDirective) {\n                this.inputDirective.focus();\n            }\n        }\n    }\n\n    private subscribeToOverlayEvents() {\n        this._overlayService.opening.pipe(...this._overlaySubFilter).subscribe((e) => {\n            const overlayEvent = e as OverlayCancelableEventArgs;\n            const args = { owner: this, cancel: overlayEvent?.cancel, event: e.event };\n            this.opening.emit(args);\n            if (args.cancel) {\n                this._overlayService.detach(this._overlayId);\n                overlayEvent.cancel = true;\n                return;\n            }\n\n            this._initializeCalendarContainer(e.componentRef.instance);\n            this._calendarContainer = e.componentRef.location.nativeElement;\n            this._collapsed = false;\n            this.updateCalendar();\n        });\n\n        this._overlayService.opened.pipe(...this._overlaySubFilter).subscribe(() => {\n            this.calendar.wrapper.nativeElement.focus();\n            this.opened.emit({ owner: this });\n        });\n\n        this._overlayService.closing.pipe(...this._overlaySubFilter).subscribe((e) => {\n            this.handleClosing(e as OverlayCancelableEventArgs);\n        });\n\n        this._overlayService.closed.pipe(...this._overlaySubFilter).subscribe(() => {\n            this._overlayService.detach(this._overlayId);\n            this._collapsed = true;\n            this._overlayId = null;\n            this._calendar = null;\n            this._calendarContainer = undefined;\n            this.closed.emit({ owner: this });\n        });\n    }\n\n    private updateValue(value: DateRange) {\n        this._value = value ? value : null;\n        this.updateInputs();\n        this.updateCalendar();\n    }\n\n    private updateValidityOnBlur() {\n        this._focusedInput = null;\n        this.onTouchCallback();\n        if (this._ngControl) {\n            if (this.hasProjectedInputs) {\n                this.projectedInputs.forEach(i => {\n                    if (!this._ngControl.valid) {\n                        i.updateInputValidity(IgxInputState.INVALID);\n                    } else {\n                        i.updateInputValidity(IgxInputState.INITIAL);\n                    }\n                });\n            }\n\n            if (this.inputDirective) {\n                if (!this._ngControl.valid) {\n                    this.inputDirective.valid = IgxInputState.INVALID;\n                } else {\n                    this.inputDirective.valid = IgxInputState.INITIAL;\n                }\n            }\n        }\n    }\n\n    private updateDisabledState() {\n        if (this.hasProjectedInputs) {\n            const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;\n            const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;\n            start.inputDirective.disabled = this.disabled;\n            end.inputDirective.disabled = this.disabled;\n            return;\n        }\n    }\n\n    private setRequiredToInputs(): void {\n        // workaround for igxInput setting required\n        Promise.resolve().then(() => {\n            const isRequired = this.required;\n            if (this.inputGroup && this.inputGroup.isRequired !== isRequired) {\n                this.inputGroup.isRequired = isRequired;\n            } else if (this.hasProjectedInputs && this._ngControl) {\n                this.projectedInputs.forEach(i => i.isRequired = isRequired);\n            }\n        });\n    }\n\n    private parseMinValue(value: string | Date): Date | null {\n        let minValue: Date = parseDate(value);\n        if (!minValue && this.hasProjectedInputs) {\n            const start = this.projectedInputs.filter(i => i instanceof IgxDateRangeStartComponent)[0];\n            if (start) {\n                minValue = parseDate(start.dateTimeEditor.minValue);\n            }\n        }\n\n        return minValue;\n    }\n\n    private parseMaxValue(value: string | Date): Date | null {\n        let maxValue: Date = parseDate(value);\n        if (!maxValue && this.projectedInputs) {\n            const end = this.projectedInputs.filter(i => i instanceof IgxDateRangeEndComponent)[0];\n            if (end) {\n                maxValue = parseDate(end.dateTimeEditor.maxValue);\n            }\n        }\n\n        return maxValue;\n    }\n\n    private updateCalendar(): void {\n        if (!this.calendar) {\n            return;\n        }\n        this.calendar.disabledDates = [];\n        const minValue = this.parseMinValue(this.minValue);\n        if (minValue) {\n            this.calendar.disabledDates.push({ type: DateRangeType.Before, dateRange: [minValue] });\n        }\n        const maxValue = this.parseMaxValue(this.maxValue);\n        if (maxValue) {\n            this.calendar.disabledDates.push({ type: DateRangeType.After, dateRange: [maxValue] });\n        }\n\n        const range: Date[] = [];\n        if (this.value?.start && this.value?.end) {\n            const _value = this.toRangeOfDates(this.value);\n            if (DateTimeUtil.greaterThanMaxValue(_value.start, _value.end)) {\n                this.swapEditorDates();\n            }\n            if (this.valueInRange(this.value, minValue, maxValue)) {\n                range.push(_value.start, _value.end);\n            }\n        }\n\n        if (range.length > 0) {\n            this.calendar.selectDate(range);\n        } else if (range.length === 0 && this.calendar.monthViews) {\n            this.calendar.deselectDate();\n        }\n        this.calendar.viewDate = range[0] || new Date();\n    }\n\n    private swapEditorDates(): void {\n        if (this.hasProjectedInputs) {\n            const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;\n            const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;\n            [start.dateTimeEditor.value, end.dateTimeEditor.value] = [end.dateTimeEditor.value, start.dateTimeEditor.value];\n            [this.value.start, this.value.end] = [this.value.end, this.value.start];\n        }\n    }\n\n    private valueInRange(value: DateRange, minValue?: Date, maxValue?: Date): boolean {\n        const _value = this.toRangeOfDates(value);\n        if (minValue && DateTimeUtil.lessThanMinValue(_value.start, minValue, false)) {\n            return false;\n        }\n        if (maxValue && DateTimeUtil.greaterThanMaxValue(_value.end, maxValue, false)) {\n            return false;\n        }\n\n        return true;\n    }\n\n    private extractRange(selection: Date[]): DateRange {\n        return {\n            start: selection[0] || null,\n            end: selection.length > 0 ? selection[selection.length - 1] : null\n        };\n    }\n\n    private toRangeOfDates(range: DateRange): { start: Date; end: Date } {\n        let start;\n        let end;\n        if (!isDate(range.start)) {\n            start = DateTimeUtil.parseIsoDate(range.start);\n        }\n        if (!isDate(range.end)) {\n            end = DateTimeUtil.parseIsoDate(range.end);\n        }\n\n        if (start || end) {\n            return { start, end };\n        }\n\n        return { start: range.start as Date, end: range.end as Date };\n    }\n\n    private subscribeToDateEditorEvents(): void {\n        if (this.hasProjectedInputs) {\n            const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;\n            const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;\n            if (start && end) {\n                start.dateTimeEditor.valueChange\n                    .pipe(takeUntil(this._destroy$))\n                    .subscribe(value => {\n                        if (this.value) {\n                            this.value = { start: value, end: this.value.end };\n                        } else {\n                            this.value = { start: value, end: null };\n                        }\n                    });\n                end.dateTimeEditor.valueChange\n                    .pipe(takeUntil(this._destroy$))\n                    .subscribe(value => {\n                        if (this.value) {\n                            this.value = { start: this.value.start, end: value as Date };\n                        } else {\n                            this.value = { start: null, end: value as Date };\n                        }\n                    });\n            }\n        }\n    }\n\n    private attachOnTouched(): void {\n        if (this.hasProjectedInputs) {\n            this.projectedInputs.forEach(i => {\n                fromEvent(i.dateTimeEditor.nativeElement, 'blur')\n                    .pipe(takeUntil(this._destroy$))\n                    .subscribe(() => {\n                        if (this.collapsed) {\n                            this.updateValidityOnBlur();\n                        }\n                    });\n            });\n        } else {\n            fromEvent(this.inputDirective.nativeElement, 'blur')\n                .pipe(takeUntil(this._destroy$))\n                .subscribe(() => {\n                    if (this.collapsed) {\n                        this.updateValidityOnBlur();\n                    }\n                });\n        }\n    }\n\n    private cacheFocusedInput(): void {\n        if (this.hasProjectedInputs) {\n            this.projectedInputs.forEach(i => {\n                fromEvent(i.dateTimeEditor.nativeElement, 'focus')\n                    .pipe(takeUntil(this._destroy$))\n                    .subscribe(() => this._focusedInput = i);\n            });\n        }\n    }\n\n    private configPositionStrategy(): void {\n        this._positionSettings = {\n            openAnimation: fadeIn,\n            closeAnimation: fadeOut\n        };\n        this._dropDownOverlaySettings.positionStrategy = new AutoPositionStrategy(this._positionSettings);\n        this._dropDownOverlaySettings.target = this.element.nativeElement;\n    }\n\n    private configOverlaySettings(): void {\n        if (this.overlaySettings !== null) {\n            this._dropDownOverlaySettings = Object.assign({}, this._dropDownOverlaySettings, this.overlaySettings);\n            this._dialogOverlaySettings = Object.assign({}, this._dialogOverlaySettings, this.overlaySettings);\n        }\n    }\n\n    private initialSetValue() {\n        // if there is no value and no ngControl on the picker but we have inputs we may have value set through\n        // their ngModels - we should generate our initial control value\n        if ((!this.value || (!this.value.start && !this.value.end)) && this.hasProjectedInputs && !this._ngControl) {\n            const start = this.projectedInputs.find(i => i instanceof IgxDateRangeStartComponent);\n            const end = this.projectedInputs.find(i => i instanceof IgxDateRangeEndComponent);\n            this._value = {\n                start: start.dateTimeEditor.value as Date,\n                end: end.dateTimeEditor.value as Date\n            };\n        }\n    }\n\n    private updateInputs(): void {\n        const start = this.projectedInputs?.find(i => i instanceof IgxDateRangeStartComponent) as IgxDateRangeStartComponent;\n        const end = this.projectedInputs?.find(i => i instanceof IgxDateRangeEndComponent) as IgxDateRangeEndComponent;\n        if (start && end) {\n            const _value = this.value ? this.toRangeOfDates(this.value) : null;\n            start.updateInputValue(_value?.start || null);\n            end.updateInputValue(_value?.end || null);\n        }\n    }\n\n    private updateDisplayFormat(): void {\n        this.projectedInputs.forEach(i => {\n            const input = i as IgxDateRangeInputsBaseComponent;\n            input.dateTimeEditor.displayFormat = this.displayFormat;\n        });\n    }\n\n    private updateInputFormat(): void {\n        this.projectedInputs.forEach(i => {\n            const input = i as IgxDateRangeInputsBaseComponent;\n            if (input.dateTimeEditor.inputFormat !== this.inputFormat) {\n                input.dateTimeEditor.inputFormat = this.inputFormat;\n            }\n        });\n    }\n\n    private updateInputLocale(): void {\n        this.projectedInputs.forEach(i => {\n            const input = i as IgxDateRangeInputsBaseComponent;\n            input.dateTimeEditor.locale = this.locale;\n        });\n    }\n\n    private _initializeCalendarContainer(componentInstance: IgxCalendarContainerComponent) {\n        this._calendar = componentInstance.calendar;\n        this.calendar.hasHeader = false;\n        this.calendar.locale = this.locale;\n        this.calendar.selection = CalendarSelection.RANGE;\n        this.calendar.weekStart = this.weekStart;\n        this.calendar.hideOutsideDays = this.hideOutsideDays;\n        this.calendar.monthsViewNumber = this.displayMonthsCount;\n        this.calendar.showWeekNumbers = this.showWeekNumbers;\n        this.calendar.selected.pipe(takeUntil(this._destroy$)).subscribe((ev: Date[]) => this.handleSelection(ev));\n\n        componentInstance.mode = this.mode;\n        componentInstance.closeButtonLabel = !this.isDropdown ? this.doneButtonText : null;\n        componentInstance.pickerActions = this.pickerActions;\n        componentInstance.calendarClose.pipe(takeUntil(this._destroy$)).subscribe(() => this.close());\n    }\n}\n","<ng-container *ngTemplateOutlet=\"hasProjectedInputs ? startEndTemplate : defTemplate\"></ng-container>\n\n<ng-template #singleTemplate>\n    <div (click)=\"open()\" class=\"content-wrap\">\n        <ng-content select=\"igx-date-single\"></ng-content>\n    </div>\n</ng-template>\n\n<ng-template #startEndTemplate>\n    <ng-content select=\"igx-date-range-start\"></ng-content>\n    <div [className]=\"separatorClass\">\n        <ng-container *ngTemplateOutlet=\"dateSeparatorTemplate || defDateSeparatorTemplate;\">\n        </ng-container>\n    </div>\n    <ng-content select=\"igx-date-range-end\"></ng-content>\n</ng-template>\n\n<ng-template #defIcon>\n    <igx-icon family=\"default\" name=\"date_range\" [attr.aria-hidden]=\"true\"></igx-icon>\n</ng-template>\n\n<ng-template #defDateSeparatorTemplate>{{ dateSeparator }}</ng-template>\n\n<ng-template #defTemplate>\n    <igx-input-group [type]=\"type\" (click)=\"open()\">\n        <!-- only set mask placeholder when empty, otherwise input group might use it as label if none is set -->\n        <input #singleInput igxInput type=\"text\" readonly [disabled]=\"disabled\" [placeholder]=\"value ? '' : singleInputFormat\"\n            role=\"combobox\" aria-haspopup=\"grid\" [attr.aria-expanded]=\"!collapsed\" [attr.aria-labelledby]=\"label?.id\"\n            [value]=\"value | dateRange: appliedFormat : locale : formatter\" />\n\n        @if (!toggleComponents.length) {\n            <igx-prefix>\n                <ng-container *ngTemplateOutlet=\"defIcon\"></ng-container>\n            </igx-prefix>\n        }\n\n        <ng-container ngProjectAs=\"[igxLabel]\">\n            <ng-content select=\"[igxLabel]\"></ng-content>\n        </ng-container>\n        <ng-container ngProjectAs=\"igx-prefix\">\n            <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n        </ng-container>\n        <ng-container ngProjectAs=\"igx-suffix\">\n            <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n        </ng-container>\n        <ng-container ngProjectAs=\"igx-hint\">\n            <ng-content select=\"igx-hint,[igxHint]\"></ng-content>\n        </ng-container>\n    </igx-input-group>\n</ng-template>\n","import { IgxPickerToggleComponent } from '../date-common/picker-icons.common';\nimport { IgxHintDirective } from '../directives/hint/hint.directive';\nimport { IgxLabelDirective } from '../directives/label/label.directive';\nimport { IgxPrefixDirective } from '../directives/prefix/prefix.directive';\nimport { IgxSuffixDirective } from '../directives/suffix/suffix.directive';\nimport { IgxDateRangeEndComponent, IgxDateRangeSeparatorDirective, IgxDateRangeStartComponent } from './date-range-picker-inputs.common';\nimport { IgxDateRangePickerComponent } from './date-range-picker.component';\n\nexport * from './date-range-picker-inputs.common';\nexport * from './date-range-picker.component';\n\n/* NOTE: Date-range picker directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_DATE_RANGE_PICKER_DIRECTIVES = [\n    IgxDateRangePickerComponent,\n    IgxPickerToggleComponent,\n    IgxDateRangeStartComponent,\n    IgxDateRangeEndComponent,\n    IgxDateRangeSeparatorDirective,\n    IgxLabelDirective,\n    IgxPrefixDirective,\n    IgxSuffixDirective,\n    IgxHintDirective\n] as const;\n","import { IgxTreeNodeComponent, IgxTreeNodeLinkDirective } from './tree-node/tree-node.component';\nimport { IgxTreeComponent, IgxTreeExpandIndicatorDirective } from './tree.component';\n\nexport { IgxTreeComponent, IgxTreeExpandIndicatorDirective } from './tree.component';\nexport * from './tree-node/tree-node.component';\nexport { IgxTreeSearchResolver, ITreeNodeSelectionEvent, ITreeNodeEditingEvent,\n    ITreeNodeEditedEvent, ITreeNodeTogglingEventArgs, ITreeNodeToggledEventArgs,\n    IgxTreeSelectionType, IgxTree, IgxTreeNode\n} from './common';\n\n/* NOTE: Tree directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TREE_DIRECTIVES = [\n    IgxTreeComponent,\n    IgxTreeNodeComponent,\n    IgxTreeNodeLinkDirective,\n    IgxTreeExpandIndicatorDirective\n] as const;\n","import { IgxQueryBuilderHeaderComponent } from './query-builder-header.component';\nimport { IgxQueryBuilderComponent } from './query-builder.component';\nimport { IgxQueryBuilderSearchValueTemplateDirective } from './query-builder.directives';\n\nexport {\n    IgxQueryBuilderComponent\n} from './query-builder.component';\nexport * from './query-builder-header.component';\nexport * from './query-builder.directives';\n\n/* NOTE: Query builder directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_QUERY_BUILDER_DIRECTIVES = [\n    IgxQueryBuilderComponent,\n    IgxQueryBuilderHeaderComponent,\n    IgxQueryBuilderSearchValueTemplateDirective,\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_ACCORDION_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_ACCORDION_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_ACCORDION_DIRECTIVES\n    ]\n})\nexport class IgxAccordionModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IGX_GRID_ACTION_STRIP_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_GRID_ACTION_STRIP_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_GRID_ACTION_STRIP_DIRECTIVES\n    ],\n})\nexport class IgxActionStripModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxAvatarComponent } from './avatar.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxAvatarComponent],\n    exports: [IgxAvatarComponent]\n})\nexport class IgxAvatarModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxBadgeComponent } from './badge.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    exports: [IgxBadgeComponent],\n    imports: [IgxBadgeComponent]\n})\nexport class IgxBadgeModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_BANNER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [...IGX_BANNER_DIRECTIVES],\n    exports: [...IGX_BANNER_DIRECTIVES]\n})\nexport class IgxBannerModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_BUTTON_GROUP_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [...IGX_BUTTON_GROUP_DIRECTIVES],\n    exports: [...IGX_BUTTON_GROUP_DIRECTIVES]\n})\nexport class IgxButtonGroupModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_CALENDAR_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_CALENDAR_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_CALENDAR_DIRECTIVES\n    ]\n})\nexport class IgxCalendarModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_CARD_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_CARD_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_CARD_DIRECTIVES\n    ]\n})\nexport class IgxCardModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_CAROUSEL_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_CAROUSEL_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_CAROUSEL_DIRECTIVES\n    ]\n})\nexport class IgxCarouselModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgxCheckboxComponent } from './checkbox.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxCheckboxComponent],\n    exports: [IgxCheckboxComponent]\n})\nexport class IgxCheckboxModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_CHIPS_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    exports: [\n        ...IGX_CHIPS_DIRECTIVES\n    ],\n    imports: [\n        ...IGX_CHIPS_DIRECTIVES\n    ]\n})\nexport class IgxChipsModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_COMBO_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_COMBO_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_COMBO_DIRECTIVES\n    ]\n})\nexport class IgxComboModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_DATE_PICKER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_DATE_PICKER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_DATE_PICKER_DIRECTIVES\n    ]\n})\nexport class IgxDatePickerModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_DATE_RANGE_PICKER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_DATE_RANGE_PICKER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_DATE_RANGE_PICKER_DIRECTIVES\n    ]\n})\nexport class IgxDateRangePickerModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_DIALOG_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_DIALOG_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_DIALOG_DIRECTIVES\n    ]\n})\nexport class IgxDialogModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxAutocompleteDirective } from './autocomplete.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxAutocompleteDirective],\n    exports: [IgxAutocompleteDirective]\n})\nexport class IgxAutocompleteModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxButtonDirective } from './button.directive';\nimport { IgxIconButtonDirective } from './icon-button.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxButtonDirective, IgxIconButtonDirective],\n    exports: [IgxButtonDirective, IgxIconButtonDirective]\n})\nexport class IgxButtonModule {}\n","import { NgModule } from '@angular/core';\nimport { IgxDateTimeEditorDirective } from './date-time-editor.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxDateTimeEditorDirective],\n    exports: [IgxDateTimeEditorDirective]\n})\nexport class IgxDateTimeEditorModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxDividerDirective } from './divider.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxDividerDirective],\n    exports: [IgxDividerDirective]\n})\nexport class IgxDividerModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxDragDirective, IgxDragHandleDirective, IgxDragIgnoreDirective, IgxDropDirective } from './drag-drop.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective],\n    exports: [IgxDragDirective, IgxDropDirective, IgxDragHandleDirective, IgxDragIgnoreDirective]\n})\nexport class IgxDragDropModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxFilterDirective, IgxFilterPipe } from './filter.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFilterDirective, IgxFilterPipe],\n    exports: [IgxFilterDirective, IgxFilterPipe]\n})\nexport class IgxFilterModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgxFocusDirective } from './focus.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFocusDirective],\n    exports: [IgxFocusDirective]\n})\nexport class IgxFocusModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxFocusTrapDirective } from './focus-trap.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFocusTrapDirective],\n    exports: [IgxFocusTrapDirective]\n})\nexport class IgxFocusTrapModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxForOfDirective } from './for_of.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxForOfDirective],\n    exports: [IgxForOfDirective]\n})\nexport class IgxForOfModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgcFormControlDirective } from './form-control.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgcFormControlDirective],\n    exports: [IgcFormControlDirective]\n})\nexport class IgcFormsModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxFlexDirective, IgxLayoutDirective } from './layout.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxFlexDirective, IgxLayoutDirective],\n    exports: [IgxFlexDirective, IgxLayoutDirective]\n})\nexport class IgxLayoutModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxMaskDirective } from './mask.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxMaskDirective],\n    exports: [IgxMaskDirective]\n})\nexport class IgxMaskModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxRadioGroupDirective } from './radio-group.directive';\nimport { IgxRadioComponent } from '../../radio/radio.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxRadioGroupDirective, IgxRadioComponent],\n    exports: [IgxRadioGroupDirective, IgxRadioComponent]\n})\nexport class IgxRadioModule {}\n","import { NgModule } from '@angular/core';\nimport { IgxRippleDirective } from './ripple.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxRippleDirective],\n    exports: [IgxRippleDirective]\n})\nexport class IgxRippleModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxScrollInertiaDirective } from './scroll_inertia.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxScrollInertiaDirective],\n    exports: [IgxScrollInertiaDirective]\n})\nexport class IgxScrollInertiaModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IgxTextHighlightDirective } from './text-highlight.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxTextHighlightDirective],\n    exports: [IgxTextHighlightDirective]\n})\nexport class IgxTextHighlightModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxTextSelectionDirective } from './text-selection.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxTextSelectionDirective],\n    exports: [IgxTextSelectionDirective]\n})\nexport class IgxTextSelectionModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxOverlayOutletDirective, IgxToggleActionDirective, IgxToggleDirective } from './toggle.directive';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective],\n    exports: [IgxToggleDirective, IgxToggleActionDirective, IgxOverlayOutletDirective]\n})\nexport class IgxToggleModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_TOOLTIP_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n @NgModule({\n    imports: [...IGX_TOOLTIP_DIRECTIVES],\n    exports: [...IGX_TOOLTIP_DIRECTIVES]\n})\nexport class IgxTooltipModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_DROP_DOWN_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_DROP_DOWN_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_DROP_DOWN_DIRECTIVES\n    ]\n})\nexport class IgxDropDownModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_EXPANSION_PANEL_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_EXPANSION_PANEL_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_EXPANSION_PANEL_DIRECTIVES\n    ]\n})\nexport class IgxExpansionPanelModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_GRID_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n  imports: [\n    ...IGX_GRID_DIRECTIVES\n  ],\n  exports: [\n    ...IGX_GRID_DIRECTIVES\n  ]\n})\nexport class IgxGridModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_TREE_GRID_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_TREE_GRID_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_TREE_GRID_DIRECTIVES\n    ]\n})\nexport class IgxTreeGridModule {\n}\n","import { NgModule } from '@angular/core';\nimport { IGX_HIERARCHICAL_GRID_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_HIERARCHICAL_GRID_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_HIERARCHICAL_GRID_DIRECTIVES\n    ]\n})\nexport class IgxHierarchicalGridModule {\n}\n","import { NgModule } from \"@angular/core\";\nimport { IGX_PIVOT_GRID_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_PIVOT_GRID_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_PIVOT_GRID_DIRECTIVES\n    ]\n})\nexport class IgxPivotGridModule {}\n","import { NgModule } from '@angular/core';\nimport { IgxIconComponent } from './icon.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    exports: [IgxIconComponent],\n    imports: [IgxIconComponent]\n})\nexport class IgxIconModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_INPUT_GROUP_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_INPUT_GROUP_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_INPUT_GROUP_DIRECTIVES\n    ]\n})\n\nexport class IgxInputGroupModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_LIST_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_LIST_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_LIST_DIRECTIVES\n    ]\n})\n\nexport class IgxListModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_NAVBAR_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_NAVBAR_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_NAVBAR_DIRECTIVES\n    ]\n})\n\nexport class IgxNavbarModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_NAVIGATION_DRAWER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n */\n@NgModule({\n    imports: [\n        ...IGX_NAVIGATION_DRAWER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_NAVIGATION_DRAWER_DIRECTIVES\n    ]\n})\nexport class IgxNavigationDrawerModule {}\n","import { NgModule } from '@angular/core';\nimport { IGX_PAGINATOR_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_PAGINATOR_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_PAGINATOR_DIRECTIVES\n    ]\n})\nexport class IgxPaginatorModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_PROGRESS_BAR_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_PROGRESS_BAR_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_PROGRESS_BAR_DIRECTIVES\n    ]\n})\nexport class IgxProgressBarModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_QUERY_BUILDER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_QUERY_BUILDER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_QUERY_BUILDER_DIRECTIVES\n    ]\n})\nexport class IgxQueryBuilderModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_SELECT_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_SELECT_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_SELECT_DIRECTIVES\n    ]\n})\nexport class IgxSelectModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_SIMPLE_COMBO_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_SIMPLE_COMBO_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_SIMPLE_COMBO_DIRECTIVES\n    ]\n})\nexport class IgxSimpleComboModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_SLIDER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_SLIDER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_SLIDER_DIRECTIVES\n    ]\n})\nexport class IgxSliderModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxSnackbarComponent } from './snackbar.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        IgxSnackbarComponent\n    ],\n    exports: [\n        IgxSnackbarComponent\n    ]\n})\nexport class IgxSnackbarModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_SPLITTER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_SPLITTER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_SPLITTER_DIRECTIVES\n    ]\n})\nexport class IgxSplitterModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_STEPPER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_STEPPER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_STEPPER_DIRECTIVES\n    ]\n})\nexport class IgxStepperModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxSwitchComponent } from './switch.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        IgxSwitchComponent\n    ],\n    exports: [\n        IgxSwitchComponent\n    ]\n})\nexport class IgxSwitchModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_BOTTOM_NAV_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_BOTTOM_NAV_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_BOTTOM_NAV_DIRECTIVES\n    ]\n})\nexport class IgxBottomNavModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_TABS_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_TABS_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_TABS_DIRECTIVES\n    ]\n})\nexport class IgxTabsModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_TIME_PICKER_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_TIME_PICKER_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_TIME_PICKER_DIRECTIVES\n    ]\n})\nexport class IgxTimePickerModule { }\n","import { NgModule } from '@angular/core';\nimport { IgxToastComponent } from './toast.component';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        IgxToastComponent\n    ],\n    exports: [\n        IgxToastComponent\n    ]\n})\nexport class IgxToastModule { }\n","import { NgModule } from '@angular/core';\nimport { IGX_TREE_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [\n        ...IGX_TREE_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_TREE_DIRECTIVES\n    ]\n})\nexport class IgxTreeModule { }\n","/*\n * Public API Surface of igniteui-angular\n */\n\n/**\n * Animations\n * MOVED TO igniteui-angular/animations\n */\n//export * from './lib/animations/main';\n\n/**\n * Directives\n */\nexport * from './lib/core/navigation';\nexport * from './lib/directives/autocomplete/autocomplete.directive';\nexport * from './lib/directives/button/button.directive';\nexport * from './lib/directives/divider/divider.directive';\nexport * from './lib/directives/drag-drop/public_api';\nexport * from './lib/directives/filter/filter.directive';\nexport * from './lib/directives/focus/focus.directive';\nexport * from './lib/directives/focus-trap/focus-trap.directive';\nexport {\n    IgxForOfContext, IgxForOfDirective, IForOfState, IgxGridForOfContext, IgxGridForOfDirective\n} from './lib/directives/for-of/for_of.directive';\nexport * from './lib/directives/button/icon-button.directive';\nexport * from './lib/directives/layout/layout.directive';\nexport * from './lib/directives/mask/mask.directive';\nexport * from './lib/directives/radio/public_api';\nexport * from './lib/directives/ripple/ripple.directive';\nexport * from './lib/directives/scroll-inertia/scroll_inertia.directive';\nexport * from './lib/directives/size/ig-size.directive';\nexport * from './lib/directives/text-highlight/text-highlight.directive';\nexport * from './lib/directives/text-selection/text-selection.directive';\nexport * from './lib/directives/template-outlet/template_outlet.directive';\nexport * from './lib/directives/toggle/toggle.directive';\nexport * from './lib/directives/tooltip/public_api';\nexport * from './lib/directives/date-time-editor/public_api';\nexport * from './lib/directives/form-control/form-control.directive';\n\n/**\n * Data operations\n */\nexport * from './lib/data-operations/data-clone-strategy';\nexport * from './lib/data-operations/filtering-expression.interface';\nexport * from './lib/data-operations/filtering-expressions-tree';\nexport * from './lib/data-operations/filtering-condition';\nexport * from './lib/data-operations/filtering-state.interface';\nexport * from './lib/data-operations/filtering-strategy';\nexport { ExpressionsTreeUtil } from './lib/data-operations/expressions-tree-util';\nexport * from './lib/data-operations/groupby-expand-state.interface';\nexport * from './lib/data-operations/groupby-record.interface';\nexport * from './lib/data-operations/groupby-state.interface';\nexport * from './lib/data-operations/grouping-expression.interface';\nexport * from './lib/data-operations/sorting-strategy';\nexport * from './lib/data-operations/paging-state.interface';\nexport * from './lib/data-operations/data-util';\n\n/**\n * Components\n */\nexport * from './lib/accordion/public_api';\nexport * from './lib/action-strip/public_api';\nexport * from './lib/avatar/avatar.component';\nexport * from './lib/badge/badge.component';\nexport * from './lib/banner/public_api';\nexport * from './lib/buttonGroup/public_api';\nexport * from './lib/calendar/public_api';\nexport * from './lib/card/public_api';\nexport * from './lib/carousel/public_api';\nexport * from './lib/checkbox/public_api';\nexport * from './lib/chips/public_api';\nexport * from './lib/combo/public_api';\nexport * from './lib/simple-combo/public_api';\nexport * from './lib/date-picker/public_api';\nexport * from './lib/dialog/public_api';\nexport * from './lib/drop-down/public_api';\nexport * from './lib/grids/public_api';\nexport * from './lib/grids/grid/public_api';\nexport * from './lib/grids/pivot-grid/public_api';\nexport * from './lib/grids/tree-grid/public_api';\nexport * from './lib/grids/hierarchical-grid/public_api';\nexport * from './lib/icon/public_api';\nexport * from './lib/input-group/public_api';\nexport * from './lib/list/public_api';\nexport * from './lib/expansion-panel/public_api';\nexport * from './lib/navbar/public_api';\nexport * from './lib/navigation-drawer/public_api';\nexport * from './lib/paginator/public_api';\nexport * from './lib/progressbar/public_api';\nexport * from './lib/radio/radio.component';\nexport * from './lib/slider/public_api';\nexport * from './lib/snackbar/snackbar.component';\nexport * from './lib/switch/switch.component';\nexport * from './lib/tabs/bottom-nav/public_api';\nexport * from './lib/tabs/tabs/public_api';\nexport * from './lib/time-picker/public_api';\nexport * from './lib/toast/toast.component';\nexport * from './lib/select/public_api';\nexport * from './lib/splitter/public_api';\nexport * from './lib/stepper/public_api';\nexport * from './lib/date-range-picker/public_api';\nexport * from './lib/date-common/public_api';\nexport * from './lib/tree/public_api';\nexport * from './lib/query-builder/public_api';\n\n/**\n * Exporter services, classes, interfaces and enums\n */\nexport * from './lib/services/public_api';\nexport * from './lib/core/dates';\nexport { PickerInteractionMode } from './lib/date-common/types';\nexport { GridSelectionRange } from './lib/grids/common/types';\nexport { CancelableEventArgs, CancelableBrowserEventArgs } from './lib/core/utils';\n\n/**\n * i18n\n */\nexport { igxI18N, IResourceStrings, changei18n } from './lib/core/i18n/resources';\nexport { ICarouselResourceStrings, CarouselResourceStringsEN } from './lib/core/i18n/carousel-resources';\nexport { IGridResourceStrings, GridResourceStringsEN } from './lib/core/i18n/grid-resources';\nexport { IComboResourceStrings, ComboResourceStringsEN } from './lib/core/i18n/combo-resources';\nexport { IPaginatorResourceStrings, PaginatorResourceStringsEN } from './lib/core/i18n/paginator-resources';\nexport { ICalendarResourceStrings, CalendarResourceStringsEN } from './lib/core/i18n/calendar-resources';\nexport { ITimePickerResourceStrings, TimePickerResourceStringsEN } from './lib/core/i18n/time-picker-resources';\nexport { IDatePickerResourceStrings, DatePickerResourceStringsEN } from './lib/core/i18n/date-picker-resources';\nexport { IDateRangePickerResourceStrings, DateRangePickerResourceStringsEN } from './lib/core/i18n/date-range-picker-resources';\nexport { IListResourceStrings, ListResourceStringsEN } from './lib/core/i18n/list-resources';\nexport { ITreeResourceStrings, TreeResourceStringsEN } from './lib/core/i18n/tree-resources';\nexport { IInputResourceStrings, InputResourceStringsEN } from './lib/core/i18n/input-resources';\nexport { IChipResourceStrings, ChipResourceStringsEN } from './lib/core/i18n/chip-resources';\nexport { IActionStripResourceStrings, ActionStripResourceStringsEN } from './lib/core/i18n/action-strip-resources';\nexport { IQueryBuilderResourceStrings, QueryBuilderResourceStringsEN } from './lib/core/i18n/query-builder-resources';\nexport { IBannerResourceStrings, BannerResourceStringsEN } from './lib/core/i18n/banner-resources';\n\n/* IMPORTANT: The following are NgModules exported for backwards-compatibility before standalone components */\nexport * from './lib/accordion/accordion.module';\nexport * from './lib/action-strip/action-strip.module';\nexport * from './lib/avatar/avatar.module';\nexport * from './lib/badge/badge.module';\nexport * from './lib/banner/banner.module';\nexport * from './lib/buttonGroup/buttongroup.module';\nexport * from './lib/calendar/calendar.module';\nexport * from './lib/card/card.module';\nexport * from './lib/carousel/carousel.module';\nexport * from './lib/checkbox/checkbox.module';\nexport * from './lib/chips/chips.module';\nexport * from './lib/combo/combo.module';\nexport * from './lib/date-picker/date-picker.module';\nexport * from './lib/date-range-picker/date-range-picker.module';\nexport * from './lib/dialog/dialog.module';\nexport * from './lib/directives/autocomplete/autocomplete.module';\nexport * from './lib/directives/button/button.module';\nexport * from './lib/directives/date-time-editor/date-time-editor.module';\nexport * from './lib/directives/divider/divider.module';\nexport * from './lib/directives/drag-drop/drag-drop.module';\nexport * from './lib/directives/filter/filter.module';\nexport * from './lib/directives/focus/focus.module';\nexport * from './lib/directives/focus-trap/focus-trap.module';\nexport * from './lib/directives/for-of/for_of.module';\nexport * from './lib/directives/form-control/form-control.module';\nexport * from './lib/directives/layout/layout.module';\nexport * from './lib/directives/mask/mask.module';\nexport * from './lib/directives/radio/radio-group.module';\nexport * from './lib/directives/ripple/ripple.module';\nexport * from './lib/directives/scroll-inertia/scroll_inertia.module';\nexport * from './lib/directives/text-highlight/text-highlight.module';\nexport * from './lib/directives/text-selection/text-selection.module';\nexport * from './lib/directives/toggle/toggle.module';\nexport * from './lib/directives/tooltip/tooltip.module';\nexport * from './lib/drop-down/drop-down.module';\nexport * from './lib/expansion-panel/expansion-panel.module';\nexport * from './lib/grids/grid/grid.module';\nexport * from './lib/grids/tree-grid/tree-grid.module';\nexport * from './lib/grids/hierarchical-grid/hierarchical-grid.module';\nexport * from './lib/grids/pivot-grid/pivot-grid.module';\nexport * from './lib/icon/icon.module';\nexport * from './lib/input-group/input-group.module';\nexport * from './lib/list/list.module';\nexport * from './lib/navbar/navbar.module';\nexport * from './lib/navigation-drawer/navigation-drawer.module';\nexport * from './lib/paginator/paginator.module';\nexport * from './lib/progressbar/progressbar.module';\nexport * from './lib/query-builder/query-builder.module';\nexport * from './lib/select/select.module';\nexport * from './lib/simple-combo/simple-combo.module';\nexport * from './lib/slider/slider.module';\nexport * from './lib/snackbar/snackbar.module';\nexport * from './lib/splitter/splitter.module';\nexport * from './lib/stepper/stepper.module';\nexport * from './lib/switch/switch.module';\nexport * from './lib/tabs/bottom-nav/bottom-nav.module';\nexport * from './lib/tabs/tabs/tabs.module';\nexport * from './lib/time-picker/time-picker.module';\nexport * from './lib/toast/toast.module';\nexport * from './lib/tree/tree.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxNavigationService","flatten","_formatDate","first","last","formatDate","i1.PlatformUtil","NEXT_ID","i1.IgxInputGroupBase","clear","i1","i3.PlatformUtil","i1.IgxIconService","i1.IgxInputGroupComponent","DragScrollDirection","i1.IgxForOfScrollSyncService","i1.IgxForOfSyncService","i1.MaskParsingService","i2.PlatformUtil","nextId","i2.IgxDirectionality","i1.IgxTextHighlightService","i1.IgxDropDownGroupComponent","i1.IgxSelectionAPIService","i1.IgxGridSelectionService","DateRangeType","Direction","i2.KeyboardNavigationService","getDOM","i1.IgxComboAPIService","isEqual","i2.IgxComboAPIService","i1.HammerGesturesManager","filter","i1.BaseFilteringComponent","i1.IgxOverlayService","i3.BaseFilteringComponent","i1.IgxTreeService","i2.IgxTreeSelectionService","i1.IgxTreeNavigationService","i3.IgxTreeService","i1.IgxListBaseDirective","i3","i1.IgxColumnMovingService","i1.IgxGroupByAreaDirective","i1.IgxColumnResizingService","i2.IgxOverlayService","i1.IgxFilteringService","i2.IgxFilteringService","formatCurrency","MINIMUM_COLUMN_WIDTH","i1.IgxGridValidationService","i2.IgxGridSelectionService","i3.IgxColumnResizingService","i4.IgxFlatTransactionFactory","i8.IgxGridSummaryService","i9.PlatformUtil","i1.IgxGridCRUDService","i2.IgxColumnMovingService","i2.HammerGesturesManager","i1.IgxPivotColumnResizingService","i1.GridBaseAPIService","i6.IgxPivotGridNavigationService","i7.IgxFilteringService","i8.IgxTextHighlightService","i9.IgxGridSummaryService","i1.IgxExcelExporterService","i1.IgxCsvExporterService","i4.IgxHierarchicalTransactionFactory","i5.IgxHierarchicalGridNavigationService","i6.IgxFilteringService","i7.IgxTextHighlightService","i10.PlatformUtil","i1.IgxDirectionality","i1.IgxTabsBase","i1.IgxTabItemDirective","i2.IgxTabItemDirective","i1.IgxTabsComponent","i4.IgxDirectionality","i1.IgxStepperService","i2.IgxStepperService","i3.IgxDirectionality","i1.IgxAccordionComponent","i2.IgxExpansionPanelComponent","i3.IgxExpansionPanelHeaderComponent","i4.IgxExpansionPanelBodyComponent","i5.IgxExpansionPanelDescriptionDirective","i5.IgxExpansionPanelTitleDirective","i5.IgxExpansionPanelIconDirective","i1.IgxActionStripComponent","i1.IgxActionStripMenuItemDirective","i2.IgxGridPinningActionsComponent","i3.IgxGridEditingActionsComponent","i4.IgxGridActionsBaseDirective","i5.IgxGridActionButtonComponent","i1.IgxBannerComponent","i2.IgxBannerActionsDirective","i1.IgxButtonGroupComponent","i2.IgxButtonDirective","i1.IgxCalendarComponent","i2.IgxDaysViewComponent","i3.IgxMonthsViewComponent","i4.IgxYearsViewComponent","i5.IgxMonthPickerComponent","i6.IgxCalendarHeaderTemplateDirective","i6.IgxCalendarHeaderTitleTemplateDirective","i6.IgxCalendarMonthDirective","i6.IgxCalendarYearDirective","i6.IgxCalendarSubheaderTemplateDirective","i1.IgxCardComponent","i1.IgxCardHeaderComponent","i1.IgxCardMediaDirective","i1.IgxCardContentDirective","i1.IgxCardActionsComponent","i1.IgxCardFooterDirective","i1.IgxCardHeaderTitleDirective","i1.IgxCardHeaderSubtitleDirective","i1.IgxCardThumbnailDirective","i1.IgxCarouselComponent","i2.IgxSlideComponent","i3.IgxCarouselIndicatorDirective","i3.IgxCarouselNextButtonDirective","i3.IgxCarouselPrevButtonDirective","i1.IgxChipsAreaComponent","i2.IgxChipComponent","i3.IgxPrefixDirective","i4.IgxSuffixDirective","i1.IgxComboComponent","i2.IgxComboAddItemDirective","i2.IgxComboClearIconDirective","i2.IgxComboEmptyDirective","i2.IgxComboFooterDirective","i2.IgxComboHeaderDirective","i2.IgxComboHeaderItemDirective","i2.IgxComboItemDirective","i2.IgxComboToggleIconDirective","i3.IgxLabelDirective","i4.IgxPrefixDirective","i5.IgxSuffixDirective","i6.IgxHintDirective","i1.IgxDatePickerComponent","i2.IgxPickerToggleComponent","i2.IgxPickerClearComponent","i2.IgxPickerActionsDirective","i1.IgxDateRangePickerComponent","i3.IgxDateRangeStartComponent","i3.IgxDateRangeEndComponent","i3.IgxDateRangeSeparatorDirective","i4.IgxLabelDirective","i5.IgxPrefixDirective","i6.IgxSuffixDirective","i7.IgxHintDirective","i1.IgxDialogComponent","i2.IgxDialogTitleDirective","i2.IgxDialogActionsDirective","i1.IgxTooltipDirective","i2.IgxTooltipTargetDirective","i1.IgxDropDownComponent","i2.IgxDropDownItemComponent","i3.IgxDropDownGroupComponent","i4.IgxDropDownItemNavigationDirective","i1.IgxExpansionPanelComponent","i2.IgxExpansionPanelHeaderComponent","i3.IgxExpansionPanelBodyComponent","i4.IgxExpansionPanelDescriptionDirective","i4.IgxExpansionPanelTitleDirective","i4.IgxExpansionPanelIconDirective","i1.IgxGridComponent","i2.IgxGroupByRowTemplateDirective","i2.IgxGridDetailTemplateDirective","i3.IgxRowAddTextDirective","i3.IgxRowEditActionsDirective","i3.IgxRowEditTextDirective","i3.IgxRowEditTabStopDirective","i4.IgxRowDirective","i5.IgxGridFooterComponent","i6.IgxAdvancedFilteringDialogComponent","i2.IgxRowExpandedIndicatorDirective","i2.IgxRowCollapsedIndicatorDirective","i2.IgxHeaderExpandedIndicatorDirective","i2.IgxHeaderCollapsedIndicatorDirective","i2.IgxExcelStyleHeaderIconDirective","i2.IgxSortAscendingHeaderIconDirective","i2.IgxSortDescendingHeaderIconDirective","i2.IgxSortHeaderIconDirective","i7.IgxDragIndicatorIconDirective","i7.IgxRowDragGhostDirective","i8.IgxGridStateDirective","i9.IgxGridHeaderComponent","i10.IgxGridHeaderGroupComponent","i11.IgxGridHeaderRowComponent","i12.IgxFilterCellTemplateDirective","i12.IgxSummaryTemplateDirective","i12.IgxCellTemplateDirective","i12.IgxCellValidationErrorDirective","i12.IgxCellHeaderTemplateDirective","i12.IgxCellFooterTemplateDirective","i12.IgxCellEditorTemplateDirective","i12.IgxCollapsibleIndicatorTemplateDirective","i13.IgxColumnComponent","i14.IgxColumnGroupComponent","i15.IgxColumnLayoutComponent","i16.IgxColumnActionsComponent","i17.IgxColumnHidingDirective","i18.IgxColumnPinningDirective","i19.IgxRowSelectorDirective","i19.IgxGroupByRowSelectorDirective","i19.IgxHeadSelectorDirective","i20.IgxCSVTextDirective","i20.IgxExcelTextDirective","i20.IgxGridToolbarActionsComponent","i21.IgxGridToolbarAdvancedFilteringComponent","i22.IgxGridToolbarComponent","i23.IgxGridToolbarExporterComponent","i24.IgxGridToolbarHidingComponent","i25.IgxGridToolbarPinningComponent","i20.IgxGridToolbarTitleComponent","i20.IgxGridToolbarDirective","i26.IgxGridExcelStyleFilteringComponent","i27.IgxExcelStyleHeaderComponent","i28.IgxExcelStyleSortingComponent","i29.IgxExcelStylePinningComponent","i30.IgxExcelStyleHidingComponent","i31.IgxExcelStyleSelectingComponent","i32.IgxExcelStyleClearFiltersComponent","i33.IgxExcelStyleConditionalFilterComponent","i34.IgxExcelStyleMovingComponent","i35.IgxExcelStyleSearchComponent","i26.IgxExcelStyleColumnOperationsTemplateDirective","i26.IgxExcelStyleFilterOperationsTemplateDirective","i35.IgxExcelStyleLoadingValuesTemplateDirective","i36.IgxColumnRequiredValidatorDirective","i36.IgxColumnMinValidatorDirective","i36.IgxColumnMaxValidatorDirective","i36.IgxColumnEmailValidatorDirective","i36.IgxColumnMinLengthValidatorDirective","i36.IgxColumnMaxLengthValidatorDirective","i36.IgxColumPatternValidatorDirective","i37.IgxPaginatorComponent","i37.IgxPageNavigationComponent","i37.IgxPageSizeSelectorComponent","i37.IgxPaginatorContentDirective","i38.IgxPaginatorDirective","i1.IgxTreeGridComponent","i2.IgxTreeGridGroupByAreaComponent","i3.IgxTreeGridGroupingPipe","i4.IgxRowAddTextDirective","i4.IgxRowEditActionsDirective","i4.IgxRowEditTextDirective","i4.IgxRowEditTabStopDirective","i5.IgxRowDirective","i6.IgxGridFooterComponent","i7.IgxAdvancedFilteringDialogComponent","i8.IgxRowExpandedIndicatorDirective","i8.IgxRowCollapsedIndicatorDirective","i8.IgxHeaderExpandedIndicatorDirective","i8.IgxHeaderCollapsedIndicatorDirective","i8.IgxExcelStyleHeaderIconDirective","i8.IgxSortAscendingHeaderIconDirective","i8.IgxSortDescendingHeaderIconDirective","i8.IgxSortHeaderIconDirective","i9.IgxDragIndicatorIconDirective","i9.IgxRowDragGhostDirective","i10.IgxGridStateDirective","i11.IgxGridHeaderComponent","i12.IgxGridHeaderGroupComponent","i13.IgxGridHeaderRowComponent","i14.IgxFilterCellTemplateDirective","i14.IgxSummaryTemplateDirective","i14.IgxCellTemplateDirective","i14.IgxCellValidationErrorDirective","i14.IgxCellHeaderTemplateDirective","i14.IgxCellFooterTemplateDirective","i14.IgxCellEditorTemplateDirective","i14.IgxCollapsibleIndicatorTemplateDirective","i15.IgxColumnComponent","i16.IgxColumnGroupComponent","i17.IgxColumnLayoutComponent","i18.IgxColumnActionsComponent","i19.IgxColumnHidingDirective","i20.IgxColumnPinningDirective","i21.IgxRowSelectorDirective","i21.IgxGroupByRowSelectorDirective","i21.IgxHeadSelectorDirective","i22.IgxCSVTextDirective","i22.IgxExcelTextDirective","i22.IgxGridToolbarActionsComponent","i23.IgxGridToolbarAdvancedFilteringComponent","i24.IgxGridToolbarComponent","i25.IgxGridToolbarExporterComponent","i26.IgxGridToolbarHidingComponent","i27.IgxGridToolbarPinningComponent","i22.IgxGridToolbarTitleComponent","i22.IgxGridToolbarDirective","i28.IgxGridExcelStyleFilteringComponent","i29.IgxExcelStyleHeaderComponent","i30.IgxExcelStyleSortingComponent","i31.IgxExcelStylePinningComponent","i32.IgxExcelStyleHidingComponent","i33.IgxExcelStyleSelectingComponent","i34.IgxExcelStyleClearFiltersComponent","i35.IgxExcelStyleConditionalFilterComponent","i36.IgxExcelStyleMovingComponent","i37.IgxExcelStyleSearchComponent","i28.IgxExcelStyleColumnOperationsTemplateDirective","i28.IgxExcelStyleFilterOperationsTemplateDirective","i37.IgxExcelStyleLoadingValuesTemplateDirective","i38.IgxColumnRequiredValidatorDirective","i38.IgxColumnMinValidatorDirective","i38.IgxColumnMaxValidatorDirective","i38.IgxColumnEmailValidatorDirective","i38.IgxColumnMinLengthValidatorDirective","i38.IgxColumnMaxLengthValidatorDirective","i38.IgxColumPatternValidatorDirective","i39.IgxPaginatorComponent","i39.IgxPageNavigationComponent","i39.IgxPageSizeSelectorComponent","i39.IgxPaginatorContentDirective","i40.IgxPaginatorDirective","i1.IgxHierarchicalGridComponent","i2.IgxRowIslandComponent","i7.IgxRowExpandedIndicatorDirective","i7.IgxRowCollapsedIndicatorDirective","i7.IgxHeaderExpandedIndicatorDirective","i7.IgxHeaderCollapsedIndicatorDirective","i7.IgxExcelStyleHeaderIconDirective","i7.IgxSortAscendingHeaderIconDirective","i7.IgxSortDescendingHeaderIconDirective","i7.IgxSortHeaderIconDirective","i8.IgxDragIndicatorIconDirective","i8.IgxRowDragGhostDirective","i9.IgxGridStateDirective","i10.IgxGridHeaderComponent","i11.IgxGridHeaderGroupComponent","i12.IgxGridHeaderRowComponent","i13.IgxFilterCellTemplateDirective","i13.IgxSummaryTemplateDirective","i13.IgxCellTemplateDirective","i13.IgxCellValidationErrorDirective","i13.IgxCellHeaderTemplateDirective","i13.IgxCellFooterTemplateDirective","i13.IgxCellEditorTemplateDirective","i13.IgxCollapsibleIndicatorTemplateDirective","i14.IgxColumnComponent","i15.IgxColumnGroupComponent","i16.IgxColumnLayoutComponent","i17.IgxColumnActionsComponent","i18.IgxColumnHidingDirective","i19.IgxColumnPinningDirective","i20.IgxRowSelectorDirective","i20.IgxGroupByRowSelectorDirective","i20.IgxHeadSelectorDirective","i21.IgxCSVTextDirective","i21.IgxExcelTextDirective","i21.IgxGridToolbarActionsComponent","i22.IgxGridToolbarAdvancedFilteringComponent","i23.IgxGridToolbarComponent","i24.IgxGridToolbarExporterComponent","i25.IgxGridToolbarHidingComponent","i26.IgxGridToolbarPinningComponent","i21.IgxGridToolbarTitleComponent","i21.IgxGridToolbarDirective","i27.IgxGridExcelStyleFilteringComponent","i28.IgxExcelStyleHeaderComponent","i29.IgxExcelStyleSortingComponent","i30.IgxExcelStylePinningComponent","i31.IgxExcelStyleHidingComponent","i32.IgxExcelStyleSelectingComponent","i33.IgxExcelStyleClearFiltersComponent","i34.IgxExcelStyleConditionalFilterComponent","i35.IgxExcelStyleMovingComponent","i36.IgxExcelStyleSearchComponent","i27.IgxExcelStyleColumnOperationsTemplateDirective","i27.IgxExcelStyleFilterOperationsTemplateDirective","i36.IgxExcelStyleLoadingValuesTemplateDirective","i37.IgxColumnRequiredValidatorDirective","i37.IgxColumnMinValidatorDirective","i37.IgxColumnMaxValidatorDirective","i37.IgxColumnEmailValidatorDirective","i37.IgxColumnMinLengthValidatorDirective","i37.IgxColumnMaxLengthValidatorDirective","i37.IgxColumPatternValidatorDirective","i38.IgxPaginatorComponent","i38.IgxPageNavigationComponent","i38.IgxPageSizeSelectorComponent","i38.IgxPaginatorContentDirective","i39.IgxPaginatorDirective","i1.IgxPivotGridComponent","i2.IgxPivotDataSelectorComponent","i3.IgxPivotValueChipTemplateDirective","i2.IgxInputDirective","i1.IgxListComponent","i2.IgxListItemComponent","i1.IgxListThumbnailDirective","i1.IgxListActionDirective","i1.IgxListLineDirective","i1.IgxListLineTitleDirective","i1.IgxListLineSubTitleDirective","i3.IgxDataLoadingTemplateDirective","i3.IgxEmptyListTemplateDirective","i3.IgxListItemLeftPanningTemplateDirective","i3.IgxListItemRightPanningTemplateDirective","i1.IgxNavbarComponent","i1.IgxNavbarActionDirective","i1.IgxNavbarTitleDirective","i1.IgxNavigationDrawerComponent","i2.IgxNavDrawerItemDirective","i2.IgxNavDrawerMiniTemplateDirective","i2.IgxNavDrawerTemplateDirective","i1.IgxPaginatorComponent","i1.IgxPageNavigationComponent","i1.IgxPageSizeSelectorComponent","i1.IgxPaginatorContentDirective","i2.IgxPaginatorDirective","i1.IgxLinearProgressBarComponent","i1.IgxCircularProgressBarComponent","i2.IgxProgressBarTextTemplateDirective","i2.IgxProgressBarGradientDirective","i1.IgxQueryBuilderComponent","i2.IgxQueryBuilderHeaderComponent","i3.IgxQueryBuilderSearchValueTemplateDirective","i1.IgxSelectComponent","i2.IgxSelectItemComponent","i3.IgxSelectGroupComponent","i1.IgxSelectHeaderDirective","i1.IgxSelectFooterDirective","i1.IgxSelectToggleIconDirective","i1.IgxSimpleComboComponent","i1.IgxSliderComponent","i2.IgxThumbFromTemplateDirective","i2.IgxThumbToTemplateDirective","i2.IgxTickLabelTemplateDirective","i1.IgxSplitterComponent","i2.IgxSplitterPaneComponent","i1.IgxSplitBarComponent","i1.IgxStepComponent","i2.IgxStepperComponent","i3.IgxStepTitleDirective","i3.IgxStepSubtitleDirective","i3.IgxStepIndicatorDirective","i3.IgxStepContentDirective","i3.IgxStepActiveIndicatorDirective","i3.IgxStepCompletedIndicatorDirective","i3.IgxStepInvalidIndicatorDirective","i1.IgxBottomNavComponent","i2.IgxBottomNavItemComponent","i3.IgxBottomNavHeaderComponent","i4.IgxBottomNavContentComponent","i5.IgxBottomNavHeaderLabelDirective","i5.IgxBottomNavHeaderIconDirective","i2.IgxTabItemComponent","i3.IgxTabHeaderComponent","i4.IgxTabContentComponent","i5.IgxTabHeaderLabelDirective","i5.IgxTabHeaderIconDirective","i6.IgxPrefixDirective","i7.IgxSuffixDirective","i1.IgxTimePickerComponent","i1.IgxTreeComponent","i2.IgxTreeNodeComponent","i2.IgxTreeNodeLinkDirective","i1.IgxTreeExpandIndicatorDirective"],"mappings":"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"}