UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

1 lines • 1.99 MB
{"version":3,"file":"igniteui-angular-grids-core.mjs","sources":["../../../projects/igniteui-angular/grids/core/src/common/enums.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-actions.component.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-actions.component.html","../../../projects/igniteui-angular/grids/core/src/column-actions/column-actions-base.directive.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-hiding.directive.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-pinning.directive.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/public_api.ts","../../../projects/igniteui-angular/grids/core/src/columns/validators.directive.ts","../../../projects/igniteui-angular/grids/core/src/watch-changes.ts","../../../projects/igniteui-angular/grids/core/src/summaries/grid-summary.ts","../../../projects/igniteui-angular/grids/core/src/pivot-grid-aggregate.ts","../../../projects/igniteui-angular/grids/core/src/pivot-grid.interface.ts","../../../projects/igniteui-angular/grids/core/src/pivot-util.ts","../../../projects/igniteui-angular/grids/core/src/selection/selection.service.ts","../../../projects/igniteui-angular/grids/core/src/common/crud.service.ts","../../../projects/igniteui-angular/grids/core/src/common/grid.interface.ts","../../../projects/igniteui-angular/grids/core/src/row.directive.ts","../../../projects/igniteui-angular/grids/core/src/columns/templates.directive.ts","../../../projects/igniteui-angular/grids/core/src/moving/moving.service.ts","../../../projects/igniteui-angular/grids/core/src/grid-public-cell.ts","../../../projects/igniteui-angular/grids/core/src/columns/column.component.ts","../../../projects/igniteui-angular/grids/core/src/columns/column-group.component.ts","../../../projects/igniteui-angular/grids/core/src/columns/column-layout.component.ts","../../../projects/igniteui-angular/grids/core/src/columns/public_api.ts","../../../projects/igniteui-angular/grids/core/src/filtering/advanced-filtering/advanced-filtering-dialog.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/advanced-filtering/advanced-filtering-dialog.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/base-filtering.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-clear-filters.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-clear-filters.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.html","../../../projects/igniteui-angular/grids/core/src/common/random.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/common.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-conditional-filter.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-conditional-filter.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-header.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-header.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-hiding.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-hiding.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-moving.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-moving.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-pinning.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-pinning.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-search.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-search.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-selecting.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-selecting.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-sorting.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-sorting.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-filtering.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-filtering.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/public_api.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-action-button.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-action-button.component.html","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-actions-base.directive.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-editing-actions.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-editing-actions.component.html","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.html","../../../projects/igniteui-angular/grids/core/src/grid-footer/grid-footer.component.ts","../../../projects/igniteui-angular/grids/core/src/moving/moving.drag.directive.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.directive.ts","../../../projects/igniteui-angular/grids/core/src/grid.directives.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizing.service.ts","../../../projects/igniteui-angular/grids/core/src/headers/pipes.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header.component.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-position-strategy.ts","../../../projects/igniteui-angular/grids/core/src/filtering/grid-filtering.service.ts","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.html","../../../projects/igniteui-angular/grids/core/src/resizing/resize-handle.directive.ts","../../../projects/igniteui-angular/grids/core/src/moving/moving.drop.directive.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-group.component.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-group.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-row.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-row.component.html","../../../projects/igniteui-angular/grids/core/src/grid-public-row.ts","../../../projects/igniteui-angular/grids/core/src/common/pipes.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.html","../../../projects/igniteui-angular/grids/core/src/headers/public_api.ts","../../../projects/igniteui-angular/grids/core/src/row-drag.directive.ts","../../../projects/igniteui-angular/grids/core/src/selection/row-selectors.ts","../../../projects/igniteui-angular/grids/core/src/selection/drag-select.directive.ts","../../../projects/igniteui-angular/grids/core/src/selection/public_api.ts","../../../projects/igniteui-angular/grids/core/src/pivot-grid-dimensions.ts","../../../projects/igniteui-angular/grids/core/src/state-base.directive.ts","../../../projects/igniteui-angular/grids/core/src/state.directive.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/common.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/token.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-advanced-filtering.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-advanced-filtering.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.base.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/exporter-options-base.ts","../../../projects/igniteui-angular/grids/core/src/services/csv/csv-exporter-options.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-exporter-options.ts","../../../projects/igniteui-angular/grids/core/src/services/pdf/pdf-exporter-options.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-enums.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-strings.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/export-utilities.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/base-export-service.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-files.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-folders.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-elements-factory.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/worksheet-data-dictionary.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/worksheet-data.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-exporter.ts","../../../projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts","../../../projects/igniteui-angular/grids/core/src/services/csv/csv-exporter.ts","../../../projects/igniteui-angular/grids/core/src/services/pdf/pdf-exporter.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-exporter.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-exporter.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-hiding.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-hiding.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-pinning.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-pinning.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/public_api.ts","../../../projects/igniteui-angular/grids/core/src/grid.rowEdit.directive.ts","../../../projects/igniteui-angular/grids/core/src/common/types.ts","../../../projects/igniteui-angular/grids/core/src/common/pivot-strategy.ts","../../../projects/igniteui-angular/grids/core/src/summaries/grid-summary.service.ts","../../../projects/igniteui-angular/grids/core/src/summaries/summary-cell.component.ts","../../../projects/igniteui-angular/grids/core/src/summaries/summary-cell.component.html","../../../projects/igniteui-angular/grids/core/src/summaries/summary-row.component.ts","../../../projects/igniteui-angular/grids/core/src/summaries/summary-row.component.html","../../../projects/igniteui-angular/grids/core/src/summaries/grid-root-summary.pipe.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizer.directive.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizer.component.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizer.component.html","../../../projects/igniteui-angular/grids/core/src/resizing/pivot-grid/pivot-resizing.service.ts","../../../projects/igniteui-angular/grids/core/src/resizing/pivot-grid/pivot-resize-handle.directive.ts","../../../projects/igniteui-angular/grids/core/src/resizing/pivot-grid/pivot-resizer.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-navigation.service.ts","../../../projects/igniteui-angular/grids/core/src/grid-validation.service.ts","../../../projects/igniteui-angular/grids/core/src/grid.common.ts","../../../projects/igniteui-angular/grids/core/src/cell.component.ts","../../../projects/igniteui-angular/grids/core/src/cell.component.html","../../../projects/igniteui-angular/grids/core/src/grouping/grid-group-by-area.component.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.component.html","../../../projects/igniteui-angular/grids/core/src/grid-mrl-navigation.service.ts","../../../projects/igniteui-angular/grids/core/src/api.service.ts","../../../projects/igniteui-angular/grids/core/src/public_api.ts","../../../projects/igniteui-angular/grids/core/src/igniteui-angular-grids-core.ts"],"sourcesContent":["\n/**\n * Enumeration representing different filter modes for grid filtering.\n * - quickFilter: Default mode with a filter row UI between the column headers and the first row of records.\n * - excelStyleFilter: Filter mode where an Excel-style filter is used.\n */\nexport const FilterMode = {\n quickFilter: 'quickFilter',\n excelStyleFilter: 'excelStyleFilter'\n} as const;\nexport type FilterMode = (typeof FilterMode)[keyof typeof FilterMode];\n\n/**\n * Enumeration representing the position of grid summary rows.\n * - top: Default value; Summary rows are displayed at the top of the grid.\n * - bottom: Summary rows are displayed at the bottom of the grid.\n */\nexport const GridSummaryPosition = {\n top: 'top',\n bottom: 'bottom'\n} as const;\nexport type GridSummaryPosition = (typeof GridSummaryPosition)[keyof typeof GridSummaryPosition];\n\n/**\n * Type representing the triggers for grid cell validation.\n * - 'change': Validation is triggered when the cell value changes.\n * - 'blur': Validation is triggered when the cell loses focus.\n */\nexport type GridValidationTrigger = 'change' | 'blur' ;\n\n/**\n * Type representing the type of the target object (elements of the grid) for keydown (fired when a key is pressed) events in the grid.\n * - 'dataCell': Represents a data cell within the grid. It contains and displays individual data values\n * - 'summaryCell': Summary cells display aggregated/summarized data at the bottom of the grid. They provide insights like total record count, min/max values, etc.\n * - 'groupRow': Group row within the grid. Group rows are used to group related data rows by columns. Contains the related group expression, level, sub-records and group value.\n * - 'hierarchicalRow': Hierarchical rows are similar to group rows, but represent a more complex hierarchical structure, allowing for nested grouping\n * - 'headerCell': Represents a header cell within the grid. Header cells are used to display column headers, providing context and labels for the columns.\n * - 'masterDetailRow': Represents a grid row that can be expanded in order to show additional information\n */\nexport type GridKeydownTargetType =\n 'dataCell' |\n 'summaryCell' |\n 'groupRow' |\n 'hierarchicalRow' |\n 'headerCell' |\n 'masterDetailRow';\n\n/**\n * Enumeration representing different selection modes for the grid elements if can be selected.\n * - 'none': No selection is allowed. Default row and column selection mode.\n * - 'single': Only one element can be selected at a time. Selecting a new one will deselect the previously selected one.\n * - 'multiple': Default cell selection mode. More than one element can be selected at a time.\n * - 'multipleCascade': Similar to multiple selection. It is used in hierarchical or tree grids. Allows selection not only to an individual item but also all its related or nested items in a single action\n */\nexport const GridSelectionMode = {\n none: 'none',\n single: 'single',\n multiple: 'multiple',\n multipleCascade: 'multipleCascade'\n} as const;\nexport type GridSelectionMode = (typeof GridSelectionMode)[keyof typeof GridSelectionMode];\n\n\n/**\n * Enumeration representing different cell merging modes for the grid elements.\n * - 'never': Never merge cells.\n * - 'always': Always merge adjacent cells based on merge strategy.\n * - 'onSort': Only merge cells in column that are sorted.\n */\nexport const GridCellMergeMode = {\n always: 'always',\n onSort: 'onSort'\n} as const;\nexport type GridCellMergeMode = (typeof GridCellMergeMode)[keyof typeof GridCellMergeMode];\n\n/** Enumeration representing different column display order options. */\nexport const ColumnDisplayOrder = {\n Alphabetical: 'Alphabetical',\n DisplayOrder: 'DisplayOrder'\n} as const;\nexport type ColumnDisplayOrder = (typeof ColumnDisplayOrder)[keyof typeof ColumnDisplayOrder];\n\n/* mustCoerceToInt */\n/**\n * Enumeration representing the possible positions for pinning rows.\n * - Top: Rows are pinned to the top of the grid.\n * - Bottom: Rows are pinned to the bottom of the grid.\n */\nexport enum RowPinningPosition {\n Top,\n Bottom\n}\n\n/**\n * Enumeration representing different paging modes for the grid.\n * - Local: The grid will use local data to extract pages during paging.\n * - Remote: The grid will expect pages to be delivered from a remote location and will only raise events during paging interactions.\n */\nexport const GridPagingMode = {\n Local: 'local',\n Remote: 'remote'\n} as const;\nexport type GridPagingMode = (typeof GridPagingMode)[keyof typeof GridPagingMode];\n","import { Component, DoCheck, EventEmitter, HostBinding, Input, IterableDiffer, IterableDiffers, Output, Pipe, PipeTransform, QueryList, ViewChildren, booleanAttribute, forwardRef, inject } from '@angular/core';\nimport { ColumnDisplayOrder } from '../common/enums';\nimport { GridType } from '../common/grid.interface';\nimport { IColumnToggledEventArgs } from '../common/events';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { FormsModule } from '@angular/forms';\nimport { IgxInputDirective, IgxInputGroupComponent } from 'igniteui-angular/input-group';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxButtonDirective, IgxRippleDirective } from 'igniteui-angular/directives';\nimport { ColumnType } from 'igniteui-angular/core';\n\nlet NEXT_ID = 0;\n/**\n * Providing reference to `IgxColumnActionsComponent`:\n * ```typescript\n * @ViewChild('columnActions', { read: IgxColumnActionsComponent })\n * public columnActions: IgxColumnActionsComponent;\n */\n@Component({\n selector: 'igx-column-actions',\n templateUrl: './column-actions.component.html',\n imports: [IgxInputGroupComponent, FormsModule, IgxInputDirective, IgxCheckboxComponent, IgxButtonDirective, IgxRippleDirective, forwardRef(() => IgxColumnActionEnabledPipe), forwardRef(() => IgxFilterActionColumnsPipe), forwardRef(() => IgxSortActionColumnsPipe)]\n})\nexport class IgxColumnActionsComponent implements DoCheck {\n private differs = inject(IterableDiffers);\n\n\n /**\n * Gets/Sets the grid to provide column actions for.\n *\n * @example\n * ```typescript\n * let grid = this.columnActions.grid;\n * ```\n */\n @Input()\n public grid: GridType;\n /**\n * Gets/sets the indentation of columns in the column list based on their hierarchy level.\n *\n * @example\n * ```\n * <igx-column-actions [indentation]=\"15\"></igx-column-actions>\n * ```\n */\n @Input()\n public indentation = 30;\n /**\n * Sets/Gets the css class selector.\n * By default the value of the `class` attribute is `\"igx-column-actions\"`.\n * ```typescript\n * let cssCLass = this.columnHidingUI.cssClass;\n * ```\n * ```typescript\n * this.columnHidingUI.cssClass = 'column-chooser';\n * ```\n */\n @HostBinding('class')\n public cssClass = 'igx-column-actions';\n /**\n * Gets/sets the max height of the columns area.\n *\n * @remarks\n * The default max height is 100%.\n * @example\n * ```html\n * <igx-column-actions [columnsAreaMaxHeight]=\"200px\"></igx-column-actions>\n * ```\n */\n @Input()\n public columnsAreaMaxHeight = '100%';\n /**\n * Shows/hides the columns filtering input from the UI.\n *\n * @example\n * ```html\n * <igx-column-actions [hideFilter]=\"true\"></igx-column-actions>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public hideFilter = false;\n /**\n * Gets the checkbox components representing column items currently present in the dropdown\n *\n * @example\n * ```typescript\n * let columnItems = this.columnActions.columnItems;\n * ```\n */\n @ViewChildren(IgxCheckboxComponent)\n public columnItems: QueryList<IgxCheckboxComponent>;\n /**\n * Gets/sets the title of the column actions component.\n *\n * @example\n * ```html\n * <igx-column-actions [title]=\"'Pin Columns'\"></igx-column-actions>\n * ```\n */\n @Input()\n public title = '';\n\n /**\n * An event that is emitted after a column's checked state is changed.\n * Provides references to the `column` and the `checked` properties as event arguments.\n * ```html\n * <igx-column-actions (columnToggled)=\"columnToggled($event)\"></igx-column-actions>\n * ```\n */\n @Output()\n public columnToggled = new EventEmitter<IColumnToggledEventArgs>();\n\n /**\n * @hidden @internal\n */\n public actionableColumns: ColumnType[] = [];\n\n /**\n * @hidden @internal\n */\n public filteredColumns: ColumnType[] = [];\n\n /**\n * @hidden @internal\n */\n public pipeTrigger = 0;\n\n /**\n * @hidden @internal\n */\n public actionsDirective: IgxColumnActionsBaseDirective;\n\n protected _differ: IterableDiffer<any> | null = null;\n\n /**\n * @hidden @internal\n */\n private _filterColumnsPrompt = '';\n\n /**\n * @hidden @internal\n */\n private _filterCriteria = '';\n\n /**\n * @hidden @internal\n */\n private _columnDisplayOrder: ColumnDisplayOrder = ColumnDisplayOrder.DisplayOrder;\n\n /**\n * @hidden @internal\n */\n private _uncheckAllText: string;\n\n /**\n * @hidden @internal\n */\n private _checkAllText: string;\n\n /**\n * @hidden @internal\n */\n private _id = `igx-column-actions-${NEXT_ID++}`;\n\n constructor() {\n this._differ = this.differs.find([]).create(this.trackChanges);\n }\n\n /**\n * Gets the prompt that is displayed in the filter input.\n *\n * @example\n * ```typescript\n * let filterColumnsPrompt = this.columnActions.filterColumnsPrompt;\n * ```\n */\n @Input()\n public get filterColumnsPrompt(): string {\n return this._filterColumnsPrompt;\n }\n /**\n * Sets the prompt that is displayed in the filter input.\n *\n * @example\n * ```html\n * <igx-column-actions [filterColumnsPrompt]=\"'Type here to search'\"></igx-column-actions>\n * ```\n */\n public set filterColumnsPrompt(value: string) {\n this._filterColumnsPrompt = value || '';\n }\n /**\n * Gets the value which filters the columns list.\n *\n * @example\n * ```typescript\n * let filterCriteria = this.columnActions.filterCriteria;\n * ```\n */\n @Input()\n public get filterCriteria() {\n return this._filterCriteria;\n }\n /**\n * Sets the value which filters the columns list.\n *\n * @example\n * ```html\n * <igx-column-actions [filterCriteria]=\"'ID'\"></igx-column-actions>\n * ```\n */\n public set filterCriteria(value: string) {\n value = value || '';\n if (value !== this._filterCriteria) {\n this._filterCriteria = value;\n this.pipeTrigger++;\n }\n }\n /**\n * Gets the display order of the columns.\n *\n * @example\n * ```typescript\n * let columnDisplayOrder = this.columnActions.columnDisplayOrder;\n * ```\n */\n @Input()\n public get columnDisplayOrder() {\n return this._columnDisplayOrder;\n }\n /**\n * Sets the display order of the columns.\n *\n * @example\n * ```typescript\n * this.columnActions.columnDisplayOrder = ColumnDisplayOrder.Alphabetical;\n * ```\n */\n public set columnDisplayOrder(value: ColumnDisplayOrder) {\n if (value && value !== this._columnDisplayOrder) {\n this._columnDisplayOrder = value;\n this.pipeTrigger++;\n }\n }\n /**\n * Gets the text of the button that unchecks all columns.\n *\n * @remarks\n * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n * @example\n * ```typescript\n * let uncheckAllText = this.columnActions.uncheckAllText;\n * ```\n */\n @Input()\n public get uncheckAllText() {\n return this._uncheckAllText || this.actionsDirective.uncheckAllLabel;\n }\n /**\n * Sets the text of the button that unchecks all columns.\n *\n * @example\n * ```html\n * <igx-column-actions [uncheckAllText]=\"'Show All'\"></igx-column-actions>\n * ```\n */\n public set uncheckAllText(value: string) {\n this._uncheckAllText = value;\n }\n /**\n * Gets the text of the button that checks all columns.\n *\n * @remarks\n * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n * @example\n * ```typescript\n * let uncheckAllText = this.columnActions.uncheckAllText;\n * ```\n */\n @Input()\n public get checkAllText() {\n return this._checkAllText || this.actionsDirective.checkAllLabel;\n }\n /**\n * Sets the text of the button that checks all columns.\n *\n * @remarks\n * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n * @example\n * ```html\n * <igx-column-actions [checkAllText]=\"'Hide All'\"></igx-column-actions>\n * ```\n */\n public set checkAllText(value: string) {\n this._checkAllText = value;\n }\n\n /**\n * @hidden @internal\n */\n public get checkAllDisabled(): boolean {\n return this.actionsDirective.allUnchecked;\n\n }\n /**\n * @hidden @internal\n */\n public get uncheckAllDisabled(): boolean {\n return this.actionsDirective.allChecked;\n }\n\n /**\n * Gets/Sets the value of the `id` attribute.\n *\n * @remarks\n * If not provided it will be automatically generated.\n * @example\n * ```html\n * <igx-column-actions [id]=\"'igx-actions-1'\"></igx-column-actions>\n * ```\n */\n @HostBinding('attr.id')\n @Input()\n public get id(): string {\n return this._id;\n }\n public set id(value: string) {\n this._id = value;\n }\n\n /**\n * @hidden @internal\n */\n public get titleID() {\n return this.id + '_title';\n }\n\n /**\n * @hidden @internal\n */\n public trackChanges = (index, col) => col.field + '_' + this.actionsDirective.actionEnabledColumnsFilter(col, index, []);\n\n /**\n * @hidden @internal\n */\n public ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this.grid?.columnList);\n if (changes) {\n this.pipeTrigger++;\n }\n }\n }\n\n /**\n * Unchecks all columns and performs the appropriate action.\n *\n * @example\n * ```typescript\n * this.columnActions.uncheckAllColumns();\n * ```\n */\n public uncheckAllColumns() {\n this.actionsDirective.uncheckAll();\n }\n\n /**\n * Checks all columns and performs the appropriate action.\n *\n * @example\n * ```typescript\n * this.columnActions.checkAllColumns();\n * ```\n */\n public checkAllColumns() {\n this.actionsDirective.checkAll();\n }\n\n /**\n * @hidden @internal\n */\n public toggleColumn(column: ColumnType) {\n this.actionsDirective.toggleColumn(column);\n\n this.columnToggled.emit({ column: column as any, checked: this.actionsDirective.columnChecked(column) });\n }\n}\n\n@Pipe({\n name: 'columnActionEnabled',\n standalone: true\n})\nexport class IgxColumnActionEnabledPipe implements PipeTransform {\n protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n public transform(\n collection: ColumnType[],\n actionFilter: (value: ColumnType, index: number, array: ColumnType[]) => boolean,\n _pipeTrigger: number\n ): ColumnType[] {\n if (!collection) {\n return collection;\n }\n let copy = collection.slice(0);\n if (copy.length && copy[0].grid.hasColumnLayouts) {\n copy = copy.filter(c => c.columnLayout);\n }\n if (actionFilter) {\n copy = copy.filter(actionFilter);\n }\n // Preserve the actionable collection for use in the component\n this.columnActions.actionableColumns = copy as any;\n return copy;\n }\n}\n\n@Pipe({\n name: 'filterActionColumns',\n standalone: true\n})\nexport class IgxFilterActionColumnsPipe implements PipeTransform {\n protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n public transform(collection: ColumnType[], filterCriteria: string, _pipeTrigger: number): ColumnType[] {\n if (!collection) {\n return collection;\n }\n let copy = collection.slice(0);\n if (filterCriteria && filterCriteria.length > 0) {\n const filterFunc = (c) => {\n const filterText = c.header || c.field;\n if (!filterText) {\n return false;\n }\n return filterText.toLocaleLowerCase().indexOf(filterCriteria.toLocaleLowerCase()) >= 0 ||\n (c.children?.some(filterFunc) ?? false);\n };\n copy = collection.filter(filterFunc);\n }\n // Preserve the filtered collection for use in the component\n this.columnActions.filteredColumns = copy as any;\n return copy;\n }\n}\n\n@Pipe({\n name: 'sortActionColumns',\n standalone: true\n})\nexport class IgxSortActionColumnsPipe implements PipeTransform {\n\n public transform(collection: ColumnType[], displayOrder: ColumnDisplayOrder, _pipeTrigger: number): ColumnType[] {\n if (displayOrder === ColumnDisplayOrder.Alphabetical) {\n return collection.sort((a, b) => (a.header || a.field).localeCompare(b.header || b.field));\n }\n return collection;\n }\n}\n","<div class=\"igx-column-actions__header\">\n @if (title) {\n <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\">{{ title }}</h4>\n }\n\n @if (!hideFilter) {\n <igx-input-group class=\"igx-column-actions__header-input\">\n <input igxInput\n type=\"text\"\n [attr.aria-describedby]='titleID'\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n }\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n @for (\n column of $any(grid)?._columns\n | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n | filterActionColumns:filterCriteria:pipeTrigger\n | sortActionColumns:columnDisplayOrder:pipeTrigger; track column\n ) {\n <igx-checkbox\n class=\"igx-column-actions__columns-item\"\n [readonly]=\"true\"\n (click)=\"toggleColumn(column)\"\n [checked]=\"actionsDirective.columnChecked(column)\"\n [style.margin-left.px]=\"column.level * indentation\">\n {{ column.header || column.field }}\n </igx-checkbox>\n }\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n <button type=\"button\" igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n <button type=\"button\" igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n","import { Directive } from '@angular/core';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive()\nexport abstract class IgxColumnActionsBaseDirective {\n\n /** @hidden @internal */\n public abstract actionEnabledColumnsFilter: (\n value: ColumnType,\n index: number,\n array: ColumnType[]\n ) => boolean;\n\n /**\n * @hidden @internal\n */\n public abstract get checkAllLabel(): string;\n\n /**\n * @hidden @internal\n */\n public abstract get uncheckAllLabel(): string;\n\n /** @hidden @internal */\n public abstract columnChecked(column: ColumnType): boolean;\n\n /** @hidden @internal */\n public abstract toggleColumn(column: ColumnType): void;\n\n /** @hidden @internal */\n public abstract uncheckAll(): void;\n\n /** @hidden @internal */\n public abstract checkAll(): void;\n\n /** @hidden @internal */\n public abstract get allChecked(): boolean;\n\n /** @hidden @internal */\n public abstract get allUnchecked(): boolean;\n}\n","import { Directive, inject } from '@angular/core';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxColumnActionsComponent } from './column-actions.component';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive({\n selector: '[igxColumnHiding]',\n standalone: true\n})\nexport class IgxColumnHidingDirective extends IgxColumnActionsBaseDirective {\n protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n constructor() {\n super();\n const columnActions = this.columnActions;\n\n columnActions.actionsDirective = this;\n }\n\n /**\n * @hidden @internal\n */\n public get checkAllLabel(): string {\n return this.columnActions.grid?.resourceStrings.igx_grid_hiding_check_all_label ?? 'Show All';\n }\n\n /**\n * @hidden @internal\n */\n public get uncheckAllLabel(): string {\n return this.columnActions.grid?.resourceStrings.igx_grid_hiding_uncheck_all_label ?? 'Hide All';\n }\n /**\n * @hidden @internal\n */\n public checkAll() {\n this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(false));\n\n }\n\n /**\n * @hidden @internal\n */\n public uncheckAll() {\n this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(true));\n }\n\n /**\n * @hidden @internal\n */\n public actionEnabledColumnsFilter = c => !c.disableHiding;\n\n /**\n * @hidden @internal\n */\n public columnChecked(column: ColumnType): boolean {\n return !column.hidden;\n }\n\n /**\n * @hidden @internal\n */\n public toggleColumn(column: ColumnType) {\n column.toggleVisibility();\n }\n\n public get allChecked() {\n return this.columnActions.filteredColumns.every(col => !this.columnChecked(col));\n }\n\n public get allUnchecked() {\n return this.columnActions.filteredColumns.every(col => this.columnChecked(col));\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxColumnActionsComponent } from './column-actions.component';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive({\n selector: '[igxColumnPinning]',\n standalone: true\n})\nexport class IgxColumnPinningDirective extends IgxColumnActionsBaseDirective {\n protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n constructor() {\n super();\n const columnActions = this.columnActions;\n\n columnActions.actionsDirective = this;\n }\n\n /**\n * @hidden @internal\n */\n public get checkAllLabel(): string {\n return this.columnActions.grid?.resourceStrings.igx_grid_pinning_check_all_label ?? 'Pin All';\n }\n\n /**\n * @hidden @internal\n */\n public get uncheckAllLabel(): string {\n return this.columnActions.grid?.resourceStrings.igx_grid_pinning_uncheck_all_label ?? 'Unpin All';\n }\n /**\n * @hidden @internal\n */\n public checkAll() {\n this.columnActions.filteredColumns.forEach(c => c.pinned = true);\n }\n\n /**\n * @hidden @internal\n */\n public uncheckAll() {\n this.columnActions.filteredColumns.forEach(c => c.pinned = false);\n }\n\n /**\n * @hidden @internal\n */\n public actionEnabledColumnsFilter = (c: ColumnType) => !c.disablePinning && !c.level;\n\n /**\n * @hidden @internal\n */\n public columnChecked(column: ColumnType): boolean {\n return column.pinned;\n }\n\n /**\n * @hidden @internal\n */\n public toggleColumn(column: ColumnType) {\n column.pinned = !column.pinned;\n }\n\n public get allUnchecked() {\n return !this.columnActions.filteredColumns.some(col => !this.columnChecked(col));\n }\n\n public get allChecked() {\n return !this.columnActions.filteredColumns.some(col => this.columnChecked(col));\n }\n}\n","// import { IgxColumnActionsComponent } from './column-actions.component';\n// import { IgxColumnHidingDirective } from './column-hiding.directive';\n// import { IgxColumnPinningDirective } from './column-pinning.directive';\n\nexport { IgxColumnActionsComponent } from './column-actions.component';\nexport { IgxColumnHidingDirective } from './column-hiding.directive';\nexport { IgxColumnPinningDirective } from './column-pinning.directive';\nexport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\n\n/* NOTE: Grid column actions directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_COLUMN_ACTIONS_DIRECTIVES = [\n// IgxColumnActionsComponent,\n// IgxColumnHidingDirective,\n// IgxColumnPinningDirective\n// ] as const;\n","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: IgxColumnPatternValidatorDirective,\n multi: true\n }],\n standalone: true\n})\nexport class IgxColumnPatternValidatorDirective extends PatternValidator {\n}\n","import { SimpleChanges, SimpleChange } from '@angular/core';\n\n/**\n * @hidden\n */\nexport function WatchChanges(): PropertyDecorator {\n return (target: any, key: string, propDesc?: PropertyDescriptor) => {\n const privateKey = '_' + key.toString();\n propDesc = propDesc || {\n configurable: true,\n enumerable: true,\n };\n propDesc.get = propDesc.get || (function (this: any) {\n return this[privateKey];\n });\n const originalSetter = propDesc.set || (function (this: any, val: any) {\n this[privateKey] = val;\n });\n\n propDesc.set = function (this: any, val: any) {\n const init = this._init;\n const oldValue = this[key];\n if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n originalSetter.call(this, val);\n if (this.ngOnChanges && !init) {\n // in case wacthed prop changes trigger ngOnChanges manually\n const changes: SimpleChanges = {\n [key]: new SimpleChange(oldValue, val, false)\n };\n this.ngOnChanges(changes);\n }\n }\n };\n return propDesc;\n };\n}\n\nexport function WatchColumnChanges(): PropertyDecorator {\n return (target: any, key: string, propDesc?: PropertyDescriptor) => {\n const privateKey = '_' + key.toString();\n propDesc = propDesc || {\n configurable: true,\n enumerable: true,\n };\n propDesc.get = propDesc.get || (function (this: any) {\n return this[privateKey];\n });\n const originalSetter = propDesc.set || (function (this: any, val: any) {\n this[privateKey] = val;\n });\n\n propDesc.set = function (this: any, val: any) {\n const oldValue = this[key];\n originalSetter.call(this, val);\n if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n if (this.columnChange) {\n this.columnChange.emit();\n }\n }\n };\n return propDesc;\n };\n}\n\nexport function notifyChanges(repaint = false) {\n return (_: any, key: string, propDesc?: PropertyDescriptor) => {\n\n const privateKey = `__${key}`;\n\n propDesc = propDesc || {\n enumerable: true,\n configurable: true\n };\n\n\n const originalSetter = propDesc ? propDesc.set : null;\n propDesc.get = propDesc.get || (function (this) {\n return this[privateKey];\n });\n\n propDesc.set = function (this, newValue) {\n if (originalSetter) {\n originalSetter.call(this, newValue);\n if (this.grid) {\n this.grid.notifyChanges(repaint && this.type !== 'pivot');\n }\n } else {\n if (newValue === this[key]) {\n return;\n }\n this[privateKey] = newValue;\n if (this.grid) {\n this.grid.notifyChanges(repaint && this.type !== 'pivot');\n }\n }\n };\n return propDesc as any;\n };\n}\n","import { IGroupByRecord, IgxSummaryResult } from 'igniteui-angular/core';\n\nconst clear = (el) => el === 0 || Boolean(el);\nconst first = (arr) => arr[0];\nconst last = (arr) => arr[arr.length - 1];\n\n/* blazorCSSuppress */\nexport class IgxSummaryOperand {\n /**\n * Counts all the records in the data source.\n * If filtering is applied, counts only the filtered records.\n * ```typescript\n * IgxSummaryOperand.count(dataSource);\n * ```\n *\n * @memberof IgxSummaryOperand\n */\n public static count(data: any[]): number {\n return data.length;\n }\n /**\n * Executes the static `count` method and returns `IgxSummaryResult[]`.\n * ```typescript\n * interface IgxSummaryResult {\n * key: string;\n * label: string;\n * summaryResult: any;\n * }\n * ```\n * Can be overridden in the inherited classes to provide customization for the `summary`.\n * ```typescript\n * class CustomSummary extends IgxSummaryOperand {\n * constructor() {\n * super();\n * }\n * public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n * const result = [];\n * result.push({\n * key: \"test\",\n * label: \"Test\",\n * summaryResult: IgxSummaryOperand.count(data)\n * });\n * return result;\n * }\n * }\n * this.grid.getColumnByName('ColumnName').summaries = CustomSummary;\n * ```\n *\n * @memberof IgxSummaryOperand\n */\n public operate(data: any[] = [], _allData: any[] = [], _fieldName?: string, _groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n return [{\n key: 'count',\n label: 'Count',\n defaultFormatting: false,\n summaryResult: IgxSummaryOperand.count(data)\n }];\n }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxNumberSummaryOperand extends IgxSummaryOperand {\n /**\n * Returns the minimum numeric value in the provided data records.\n * If filtering is applied, returns the minimum value in the filtered data records.\n * ```typescript\n * IgxNumberSummaryOperand.min(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n public static min(data: any[]): number {\n return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.min(a, b)) : 0;\n }\n /**\n * Returns the maximum numeric value in the provided data records.\n * If filtering is applied, returns the maximum value in the filtered data records.\n * ```typescript\n * IgxNumberSummaryOperand.max(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n public static max(data: any[]): number {\n return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.max(a, b)) : 0;\n }\n /**\n * Returns the sum of the numeric values in the provided data records.\n * If filtering is applied, returns the sum of the numeric values in the data records.\n * ```typescript\n * IgxNumberSummaryOperand.sum(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n public static sum(data: any[]): number {\n return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => +a + +b) : 0;\n }\n /**\n * Returns the average numeric value in the data provided data records.\n * If filtering is applied, returns the average numeric value in the filtered data records.\n * ```typescript\n * IgxSummaryOperand.average(data);\n * ```\n *\n * @memberof IgxNumberSummaryOperand\n */\n public static average(data: any[]): number {\n return data.length && data.filter(clear).length ? this.sum(data) / this.count(data) : 0;\n }\n /**\n * Executes the static methods and returns `IgxSummaryResult[]`.\n * ```typescript\n * interface IgxSummaryResult {\n * key: string;\n * label: string;\n * summaryResult: any;\n * }\n * ```\n * Can be overridden in the inherited classes to provide customization for the `summary`.\n * ```typescript\n * class CustomNumberSummary extends IgxNumberSummaryOperand {\n * constructor() {\n * super();\n * }\n * public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n * const result = super.operate(data, allData, fieldName, groupRecord);\n * result.push({\n * key: \"avg\",\n * label: \"Avg\",\n * summaryResult: IgxNumberSummaryOperand.average(data)\n * });\n * result.push({\n * key: '