@clr/angular 18.3.0 → 18.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/clr-angular-accordion.mjs +28 -28
- package/fesm2022/clr-angular-accordion.mjs.map +1 -1
- package/fesm2022/clr-angular-button.mjs +27 -27
- package/fesm2022/clr-angular-button.mjs.map +1 -1
- package/fesm2022/clr-angular-card.mjs +417 -0
- package/fesm2022/clr-angular-card.mjs.map +1 -0
- package/fesm2022/clr-angular-collapsible-panel.mjs +6 -6
- package/fesm2022/clr-angular-collapsible-panel.mjs.map +1 -1
- package/fesm2022/clr-angular-data-datagrid.mjs +1105 -352
- package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -1
- package/fesm2022/clr-angular-data-stack-view.mjs +23 -23
- package/fesm2022/clr-angular-data-stack-view.mjs.map +1 -1
- package/fesm2022/clr-angular-data-tree-view.mjs +283 -48
- package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -1
- package/fesm2022/clr-angular-data.mjs +4 -4
- package/fesm2022/clr-angular-data.mjs.map +1 -1
- package/fesm2022/clr-angular-emphasis-alert.mjs +26 -26
- package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -1
- package/fesm2022/clr-angular-emphasis-badge.mjs +3 -3
- package/fesm2022/clr-angular-emphasis-badge.mjs.map +1 -1
- package/fesm2022/clr-angular-emphasis-label.mjs +3 -3
- package/fesm2022/clr-angular-emphasis-label.mjs.map +1 -1
- package/fesm2022/clr-angular-emphasis.mjs +4 -4
- package/fesm2022/clr-angular-emphasis.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-checkbox.mjs +13 -13
- package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-combobox.mjs +35 -35
- package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-common.mjs +69 -69
- package/fesm2022/clr-angular-forms-common.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-datalist.mjs +17 -17
- package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-datepicker.mjs +73 -73
- package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-file-input.mjs +36 -36
- package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-input.mjs +10 -10
- package/fesm2022/clr-angular-forms-input.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-number-input.mjs +11 -11
- package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-password.mjs +11 -11
- package/fesm2022/clr-angular-forms-password.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-radio.mjs +13 -13
- package/fesm2022/clr-angular-forms-radio.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-range.mjs +10 -10
- package/fesm2022/clr-angular-forms-range.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-select.mjs +10 -10
- package/fesm2022/clr-angular-forms-select.mjs.map +1 -1
- package/fesm2022/clr-angular-forms-textarea.mjs +10 -10
- package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -1
- package/fesm2022/clr-angular-forms.mjs +4 -4
- package/fesm2022/clr-angular-forms.mjs.map +1 -1
- package/fesm2022/clr-angular-icon.mjs +81 -41
- package/fesm2022/clr-angular-icon.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-breadcrumbs.mjs +10 -10
- package/fesm2022/clr-angular-layout-breadcrumbs.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-main-container.mjs +7 -7
- package/fesm2022/clr-angular-layout-main-container.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-nav.mjs +22 -22
- package/fesm2022/clr-angular-layout-nav.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-tabs.mjs +35 -35
- package/fesm2022/clr-angular-layout-tabs.mjs.map +1 -1
- package/fesm2022/clr-angular-layout-vertical-nav.mjs +31 -31
- package/fesm2022/clr-angular-layout-vertical-nav.mjs.map +1 -1
- package/fesm2022/clr-angular-layout.mjs +4 -4
- package/fesm2022/clr-angular-layout.mjs.map +1 -1
- package/fesm2022/clr-angular-modal.mjs +26 -26
- package/fesm2022/clr-angular-modal.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-common.mjs +69 -34
- package/fesm2022/clr-angular-popover-common.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-dropdown.mjs +63 -26
- package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-signpost.mjs +27 -25
- package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -1
- package/fesm2022/clr-angular-popover-tooltip.mjs +19 -19
- package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -1
- package/fesm2022/clr-angular-popover.mjs +4 -4
- package/fesm2022/clr-angular-popover.mjs.map +1 -1
- package/fesm2022/clr-angular-progress-progress-bars.mjs +7 -7
- package/fesm2022/clr-angular-progress-progress-bars.mjs.map +1 -1
- package/fesm2022/clr-angular-progress-spinner.mjs +7 -7
- package/fesm2022/clr-angular-progress-spinner.mjs.map +1 -1
- package/fesm2022/clr-angular-stepper.mjs +31 -31
- package/fesm2022/clr-angular-stepper.mjs.map +1 -1
- package/fesm2022/clr-angular-timeline.mjs +23 -23
- package/fesm2022/clr-angular-timeline.mjs.map +1 -1
- package/fesm2022/clr-angular-utils-conditional.mjs +16 -16
- package/fesm2022/clr-angular-utils-conditional.mjs.map +1 -1
- package/fesm2022/clr-angular-utils-loading.mjs +7 -7
- package/fesm2022/clr-angular-utils-loading.mjs.map +1 -1
- package/fesm2022/clr-angular-utils.mjs +144 -152
- package/fesm2022/clr-angular-utils.mjs.map +1 -1
- package/fesm2022/clr-angular-wizard.mjs +51 -51
- package/fesm2022/clr-angular-wizard.mjs.map +1 -1
- package/fesm2022/clr-angular.mjs +9 -4
- package/fesm2022/clr-angular.mjs.map +1 -1
- package/package.json +9 -5
- package/types/clr-angular-card.d.ts +110 -0
- package/types/clr-angular-data-datagrid.d.ts +293 -17
- package/types/clr-angular-data-tree-view.d.ts +126 -88
- package/types/clr-angular-forms-datepicker.d.ts +1 -1
- package/types/clr-angular-forms-file-input.d.ts +1 -1
- package/types/clr-angular-icon.d.ts +14 -2
- package/types/clr-angular-popover-common.d.ts +6 -0
- package/types/clr-angular-popover-dropdown.d.ts +33 -4
- package/types/clr-angular-utils.d.ts +61 -20
- package/types/clr-angular.d.ts +8 -6
- package/schematics/vitest.config.d.ts +0 -2
- package/schematics/vitest.config.js +0 -17
- package/schematics/vitest.config.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clr-angular-data-datagrid.mjs","sources":["../../../projects/angular/data/datagrid/built-in/nested-property.ts","../../../projects/angular/data/datagrid/built-in/comparators/datagrid-property-comparator.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-property-numeric-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-numeric-filter-impl.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-property-string-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-string-filter-impl.ts","../../../projects/angular/data/datagrid/enums/column-changes.enum.ts","../../../projects/angular/data/datagrid/enums/sort-order.enum.ts","../../../projects/angular/data/datagrid/providers/column-state.provider.ts","../../../projects/angular/data/datagrid/providers/custom-filter.ts","../../../projects/angular/data/datagrid/render/constants.ts","../../../projects/angular/data/datagrid/providers/state-debouncer.provider.ts","../../../projects/angular/data/datagrid/providers/page.ts","../../../projects/angular/data/datagrid/providers/filters.ts","../../../projects/angular/data/datagrid/utils/datagrid-filter-registrar.ts","../../../projects/angular/data/datagrid/wrapped-column.ts","../../../projects/angular/data/datagrid/providers/sort.ts","../../../projects/angular/data/datagrid/providers/detail.service.ts","../../../projects/angular/data/datagrid/providers/columns.service.ts","../../../projects/angular/data/datagrid/enums/render-step.enum.ts","../../../projects/angular/data/datagrid/render/render-organizer.ts","../../../projects/angular/data/datagrid/providers/column-resizer.service.ts","../../../projects/angular/data/datagrid/providers/table-size.service.ts","../../../projects/angular/data/datagrid/datagrid-column-separator.ts","../../../projects/angular/data/datagrid/utils/key-navigation-strategies/default.ts","../../../projects/angular/data/datagrid/utils/key-navigation-strategies/expanded-row.ts","../../../projects/angular/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.ts","../../../projects/angular/data/datagrid/utils/key-navigation-utils.ts","../../../projects/angular/data/datagrid/utils/key-navigation-grid.controller.ts","../../../projects/angular/data/datagrid/datagrid-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-numeric-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-string-filter.ts","../../../projects/angular/data/datagrid/datagrid-column.ts","../../../projects/angular/data/datagrid/providers/items.ts","../../../projects/angular/data/datagrid/datagrid-items.ts","../../../projects/angular/data/datagrid/datagrid-placeholder.ts","../../../projects/angular/data/datagrid/wrapped-cell.ts","../../../projects/angular/data/datagrid/datagrid-cell.ts","../../../projects/angular/data/datagrid/datagrid-if-expanded.service.ts","../../../projects/angular/data/datagrid/enums/display-mode.enum.ts","../../../projects/angular/data/datagrid/enums/selection-type.ts","../../../projects/angular/data/datagrid/wrapped-row.ts","../../../projects/angular/data/datagrid/providers/selection.ts","../../../projects/angular/data/datagrid/providers/row-action-service.ts","../../../projects/angular/data/datagrid/providers/global-expandable-rows.ts","../../../projects/angular/data/datagrid/providers/display-mode.service.ts","../../../projects/angular/data/datagrid/datagrid-single-selection.directive.ts","../../../projects/angular/data/datagrid/datagrid-selection-cell.directive.ts","../../../projects/angular/data/datagrid/datagrid-row.ts","../../../projects/angular/data/datagrid/datagrid-row.html","../../../projects/angular/data/datagrid/datagrid-virtual-scroll.directive.ts","../../../projects/angular/data/datagrid/providers/state.provider.ts","../../../projects/angular/data/datagrid/render/cell-renderer.ts","../../../projects/angular/data/datagrid/render/row-renderer.ts","../../../projects/angular/data/datagrid/chocolate/datagrid-willy-wonka.ts","../../../projects/angular/data/datagrid/chocolate/actionable-oompa-loompa.ts","../../../projects/angular/data/datagrid/chocolate/expandable-oompa-loompa.ts","../../../projects/angular/data/datagrid/datagrid.ts","../../../projects/angular/data/datagrid/datagrid.html","../../../projects/angular/data/datagrid/datagrid-action-bar.ts","../../../projects/angular/data/datagrid/datagrid-action-overflow.ts","../../../projects/angular/data/datagrid/datagrid-column-toggle-trackby.ts","../../../projects/angular/data/datagrid/datagrid-column-toggle-button.ts","../../../projects/angular/data/datagrid/datagrid-column-toggle.ts","../../../projects/angular/data/datagrid/datagrid-detail-header.ts","../../../projects/angular/data/datagrid/datagrid-detail.ts","../../../projects/angular/data/datagrid/datagrid-detail-body.ts","../../../projects/angular/data/datagrid/datagrid-hideable-column.ts","../../../projects/angular/data/datagrid/datagrid-if-detail.ts","../../../projects/angular/data/datagrid/datagrid-row-detail.ts","../../../projects/angular/data/datagrid/datagrid-footer.ts","../../../projects/angular/data/datagrid/datagrid-page-size.ts","../../../projects/angular/data/datagrid/datagrid-pagination.ts","../../../projects/angular/data/datagrid/interfaces/state.interface.ts","../../../projects/angular/data/datagrid/interfaces/filter.interface.ts","../../../projects/angular/data/datagrid/interfaces/string-filter.interface.ts","../../../projects/angular/data/datagrid/interfaces/numeric-filter.interface.ts","../../../projects/angular/data/datagrid/interfaces/comparator.interface.ts","../../../projects/angular/data/datagrid/interfaces/virtual-scroll-data-range.interface.ts","../../../projects/angular/data/datagrid/datagrid-detail-registerer.ts","../../../projects/angular/data/datagrid/render/header-renderer.ts","../../../projects/angular/data/datagrid/render/noop-dom-adapter.ts","../../../projects/angular/data/datagrid/render/main-renderer.ts","../../../projects/angular/data/datagrid/render/row-detail-renderer.ts","../../../projects/angular/data/datagrid/datagrid.module.ts","../../../projects/angular/data/datagrid/index.ts","../../../projects/angular/data/datagrid/clr-angular-data-datagrid.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * Generic accessor for deep object properties\n * that can be specified as simple dot-separated strings.\n */\nexport class NestedProperty<T = any> {\n private splitProp: string[];\n\n constructor(private prop: string) {\n if (prop.indexOf('.') >= 0) {\n this.splitProp = prop.split('.');\n }\n }\n\n // Safe getter for a deep object property, will not throw an error but return\n // undefined if one of the intermediate properties is null or undefined.\n getPropValue(item: T): any {\n if (this.splitProp) {\n let value = item;\n for (const nestedProp of this.splitProp) {\n if (\n value === null ||\n typeof value === 'undefined' ||\n typeof (value as Record<string, any>)[nestedProp] === 'undefined'\n ) {\n return undefined;\n }\n value = (value as Record<string, any>)[nestedProp];\n }\n return value;\n } else {\n return (item as Record<string, any>)[this.prop];\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridComparatorInterface } from '../../interfaces/comparator.interface';\nimport { NestedProperty } from '../nested-property';\n\nexport class DatagridPropertyComparator<T = any> implements ClrDatagridComparatorInterface<T> {\n private nestedProp: NestedProperty<T>;\n\n constructor(public prop: string) {\n this.nestedProp = new NestedProperty(prop);\n }\n\n compare(a: T, b: T): number {\n let propA = this.nestedProp.getPropValue(a);\n let propB = this.nestedProp.getPropValue(b);\n\n if (typeof propA === 'string') {\n propA = propA.toLowerCase();\n }\n\n if (typeof propB === 'string') {\n propB = propB.toLowerCase();\n }\n\n if (typeof propA === 'undefined' || propA === null) {\n if (typeof propB === 'undefined' || propB === null) {\n return 0;\n } else {\n return 1;\n }\n } else {\n if (typeof propB === 'undefined' || propB === null) {\n return -1;\n } else if (propA < propB) {\n return -1;\n } else if (propA > propB) {\n return 1;\n } else {\n return 0;\n }\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridNumericFilterInterface } from '../../interfaces/numeric-filter.interface';\nimport { NestedProperty } from '../nested-property';\n\nexport class DatagridPropertyNumericFilter<T = any> implements ClrDatagridNumericFilterInterface<T> {\n private nestedProp: NestedProperty<T>;\n\n constructor(\n public prop: string,\n public exact = false\n ) {\n this.nestedProp = new NestedProperty(prop);\n }\n\n accepts(item: T, low: number, high: number): boolean {\n const propValue = this.nestedProp.getPropValue(item);\n if (propValue === undefined) {\n return false;\n }\n if (low !== null && (typeof propValue !== 'number' || propValue < low)) {\n return false;\n }\n if (high !== null && (typeof propValue !== 'number' || propValue > high)) {\n return false;\n }\n return true;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { DatagridPropertyNumericFilter } from './datagrid-property-numeric-filter';\nimport { ClrDatagridFilterInterface } from '../../interfaces/filter.interface';\nimport { ClrDatagridNumericFilterInterface } from '../../interfaces/numeric-filter.interface';\n\nexport class DatagridNumericFilterImpl<T = any> implements ClrDatagridFilterInterface<T> {\n /**\n * The Observable required as part of the Filter interface\n */\n private _changes = new Subject<[number, number]>();\n\n /**\n * Internal values and accessor\n */\n private _low: number | null = null;\n private _high: number | null = null;\n\n constructor(public filterFn: ClrDatagridNumericFilterInterface<T>) {}\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get changes(): Observable<[number, number]> {\n return this._changes.asObservable();\n }\n\n get value(): [number, number] {\n return [this._low, this._high];\n }\n set value(vals: [number, number]) {\n const low = vals[0];\n const high = vals[1];\n if (low !== this._low || high !== this._high) {\n this._low = low;\n this._high = high;\n this._changes.next([this._low, this._high]);\n }\n }\n\n get low() {\n return this._low;\n }\n set low(low: number) {\n if (low !== this._low) {\n this._low = low;\n this._changes.next([this._low, this._high]);\n }\n }\n\n get high() {\n return this._high;\n }\n set high(high: number) {\n if (high !== this._high) {\n this._high = high;\n this._changes.next([this._low, this._high]);\n }\n }\n\n get state() {\n if (this.filterFn instanceof DatagridPropertyNumericFilter) {\n return {\n property: this.filterFn.prop,\n low: this._low,\n high: this._high,\n };\n }\n return this;\n }\n\n /**\n * Indicates if the filter is currently active, (at least one input is set)\n */\n isActive(): boolean {\n return this._low !== null || this.high !== null;\n }\n\n /**\n * Tests if an item matches a search text\n */\n accepts(item: T): boolean {\n // We have a filter function in case someone wants to implement a numeric\n // filter that always passes nulls or similar\n return this.filterFn.accepts(item, this._low, this._high);\n }\n\n equals(other: ClrDatagridFilterInterface<T, any>): boolean {\n if (other instanceof DatagridNumericFilterImpl) {\n if (other.filterFn instanceof DatagridPropertyNumericFilter) {\n return (\n this.filterFn instanceof DatagridPropertyNumericFilter &&\n other.filterFn.prop === this.filterFn.prop &&\n other.low === this._low &&\n other.high === this._high\n );\n }\n return other === this;\n }\n return false;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridStringFilterInterface } from '../../interfaces/string-filter.interface';\nimport { NestedProperty } from '../nested-property';\n\nexport class DatagridPropertyStringFilter<T = any> implements ClrDatagridStringFilterInterface<T> {\n private nestedProp: NestedProperty<T>;\n\n constructor(\n public prop: string,\n public exact = false\n ) {\n this.nestedProp = new NestedProperty(prop);\n }\n\n accepts(item: T, search: string): boolean {\n const propValue = this.nestedProp.getPropValue(item);\n if (typeof propValue === 'undefined') {\n return false;\n } else if (this.exact) {\n return ('' + propValue).toLowerCase() === search;\n } else {\n return ('' + propValue).toLowerCase().indexOf(search) >= 0;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { DatagridPropertyStringFilter } from './datagrid-property-string-filter';\nimport { ClrDatagridFilterInterface } from '../../interfaces/filter.interface';\nimport { ClrDatagridStringFilterInterface } from '../../interfaces/string-filter.interface';\n\nexport class DatagridStringFilterImpl<T = any> implements ClrDatagridFilterInterface<T> {\n /**\n * The Observable required as part of the Filter interface\n */\n private _changes = new Subject<string>();\n\n /**\n * Input value converted to lowercase\n */\n private _lowerCaseValue = '';\n\n /**\n * Raw input value\n */\n private _rawValue = '';\n\n constructor(public filterFn: ClrDatagridStringFilterInterface<T>) {}\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get changes(): Observable<string> {\n return this._changes.asObservable();\n }\n\n get lowerCaseValue() {\n return this._lowerCaseValue;\n }\n\n get state() {\n if (this.filterFn instanceof DatagridPropertyStringFilter) {\n return {\n property: this.filterFn.prop,\n value: this.value,\n };\n }\n return this;\n }\n\n get value(): string {\n return this._rawValue;\n }\n /**\n * Common setter for the input value\n */\n set value(value: string) {\n if (!value) {\n value = '';\n }\n if (value !== this._rawValue) {\n this._rawValue = value;\n this._lowerCaseValue = value.toLowerCase().trim();\n this._changes.next(value);\n }\n }\n\n /**\n * Indicates if the filter is currently active, meaning the input is not empty\n */\n isActive(): boolean {\n return !!this.value;\n }\n\n /**\n * Tests if an item matches a search text\n */\n accepts(item: T): boolean {\n // We always test with the lowercase value of the input, to stay case insensitive\n return this.filterFn.accepts(item, this.lowerCaseValue);\n }\n\n equals(other: ClrDatagridFilterInterface<T, any>): boolean {\n if (other instanceof DatagridStringFilterImpl) {\n if (other.filterFn instanceof DatagridPropertyStringFilter) {\n return (\n this.filterFn instanceof DatagridPropertyStringFilter &&\n other.filterFn.prop === this.filterFn.prop &&\n other.value === this.value\n );\n }\n return other === this;\n }\n return false;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum DatagridColumnChanges {\n WIDTH,\n HIDDEN,\n INITIALIZE,\n PINNED,\n}\n\nexport const ALL_COLUMN_CHANGES: DatagridColumnChanges[] = Object.keys(DatagridColumnChanges)\n .map(key => (DatagridColumnChanges as Record<string, any>)[key])\n .filter(key => key === parseInt(key, 10) && key !== DatagridColumnChanges.INITIALIZE); // extracts only integer keys\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * Enumeration representing the sorting order of a datagrid column. It is a constant Enum,\n * i.e. each value needs to be treated as a `number`, starting at index 0.\n *\n * @export\n * @enum {number}\n */\nexport enum ClrDatagridSortOrder {\n UNSORTED = 0,\n ASC = 1,\n DESC = -1,\n}\n\nexport enum ClrDatagridAriaSortOrder {\n UNSORTED = 'none',\n ASC = 'ascending',\n DESC = 'descending',\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { InjectionToken } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ColumnState } from '../interfaces/column-state.interface';\n\nexport const COLUMN_STATE = new InjectionToken<ColumnState>('COLUMN_STATE');\n\nexport function columnStateFactory() {\n return new BehaviorSubject<ColumnState>({\n changes: [],\n });\n}\n\nexport const COLUMN_STATE_PROVIDER = {\n provide: COLUMN_STATE,\n useFactory: columnStateFactory,\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport abstract class CustomFilter {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';\nexport const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';\nexport const PINNED_COLUMN_CLASS = 'datagrid-pinned-column';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/*\n * This provider implements some form of synchronous debouncing through a lock pattern\n * to avoid emitting multiple state changes for a single user action.\n */\n@Injectable()\nexport class StateDebouncer {\n /*\n * This is the lock, to only emit once all the changes have finished processing\n */\n private nbChanges = 0;\n\n /**\n * The Observable that lets other classes subscribe to global state changes\n */\n private _change = new Subject<void>();\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<void> {\n return this._change.asObservable();\n }\n\n changeStart() {\n this.nbChanges++;\n }\n\n changeDone() {\n if (--this.nbChanges === 0) {\n this._change.next();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { StateDebouncer } from './state-debouncer.provider';\n\n@Injectable()\nexport class Page {\n activated = false;\n\n /**\n * Page size, a value of 0 means no pagination\n */\n private _size = 0;\n\n /**\n * Total items (needed to guess the last page)\n */\n private _totalItems?: number;\n\n /**\n * Last page\n */\n private _last: number;\n\n /**\n * Current page\n */\n private _current = 1;\n\n /**\n * The Observable that lets other classes subscribe to page changes\n */\n private _change = new Subject<number>();\n\n private preventEmit = false;\n private _sizeChange = new Subject<number>();\n\n constructor(private stateDebouncer: StateDebouncer) {}\n\n get size(): number {\n return this._size;\n }\n set size(size: number) {\n const oldSize = this._size;\n if (size !== oldSize) {\n if (!this.preventEmit) {\n this.stateDebouncer.changeStart();\n }\n this._size = size;\n if (size === 0) {\n this._current = 1;\n } else {\n // Yeap. That's the formula to keep the first item from the old page still\n // displayed in the new one.\n this._current = Math.floor((oldSize / size) * (this._current - 1)) + 1;\n }\n // We always emit an event even if the current page index didn't change, because\n // the size changing means the items inside the page are different\n if (!this.preventEmit) {\n this._change.next(this._current);\n this._sizeChange.next(this._size);\n this.stateDebouncer.changeDone();\n }\n }\n this.preventEmit = false;\n }\n\n get totalItems(): number {\n return this._totalItems || 0; // remains 0 if not set to avoid breaking change\n }\n set totalItems(total: number) {\n this._totalItems = total;\n // If we have less items than before, we might need to change the current page\n if (this.current > this.last) {\n this.current = this.last;\n }\n }\n\n get last(): number {\n if (this._last) {\n return this._last;\n }\n // If the last page isn't known, we compute it from the last item's index\n if (this.size > 0 && this.totalItems) {\n return Math.ceil(this.totalItems / this.size);\n }\n return 1;\n }\n set last(page: number) {\n this._last = page;\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<number> {\n return this._change.asObservable();\n }\n\n get sizeChange(): Observable<number> {\n return this._sizeChange.asObservable();\n }\n\n get current(): number {\n return this._current;\n }\n set current(page: number) {\n if (page !== this._current) {\n this.stateDebouncer.changeStart();\n this._current = page;\n this._change.next(page);\n this.stateDebouncer.changeDone();\n }\n }\n\n /**\n * Index of the first item displayed on the current page, starting at 0, -1 if none displayed\n */\n get firstItem(): number {\n if (this._totalItems === 0) {\n return -1;\n }\n\n if (this.size === 0) {\n return 0;\n }\n return (this.current - 1) * this.size;\n }\n\n /**\n * Index of the last item displayed on the current page, starting at 0, -1 if none displayed\n */\n get lastItem(): number {\n if (this._totalItems === 0) {\n return -1;\n }\n\n if (this.size === 0) {\n return this.totalItems - 1;\n }\n let lastInPage = this.current * this.size - 1;\n if (this.totalItems) {\n lastInPage = Math.min(lastInPage, this.totalItems - 1);\n }\n return lastInPage;\n }\n\n /**\n * Moves to the previous page if it exists\n */\n previous() {\n if (this.current > 1) {\n this.current--;\n }\n }\n\n /**\n * Moves to the next page if it exists\n */\n next() {\n if (this.current < this.last) {\n this.current++;\n }\n }\n\n /**\n * Resets the page size to 0\n */\n resetPageSize(preventEmit = false): void {\n this.preventEmit = preventEmit;\n this.size = 0;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { Page } from './page';\nimport { StateDebouncer } from './state-debouncer.provider';\nimport { ClrDatagridFilterInterface } from '../interfaces/filter.interface';\n\n@Injectable()\nexport class FiltersProvider<T = any> {\n /**\n * This subject is the list of filters that changed last, not the whole list.\n * We emit a list rather than just one filter to allow batch changes to several at once.\n */\n private _change = new Subject<ClrDatagridFilterInterface<T>[]>();\n\n /**\n * List of all filters, whether they're active or not\n */\n private _all: RegisteredFilter<T, ClrDatagridFilterInterface<T>>[] = [];\n\n constructor(\n private _page: Page,\n private stateDebouncer: StateDebouncer\n ) {}\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<ClrDatagridFilterInterface<T>[]> {\n return this._change.asObservable();\n }\n\n /**\n * Tests if at least one filter is currently active\n */\n hasActiveFilters(): boolean {\n // We do not use getActiveFilters() because this function will be called much more often\n // and stopping the loop early might be relevant.\n for (const { filter } of this._all) {\n if (filter && filter.isActive()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns a list of all currently active filters\n */\n getActiveFilters(): ClrDatagridFilterInterface<T>[] {\n const ret: ClrDatagridFilterInterface<T>[] = [];\n for (const { filter } of this._all) {\n if (filter && filter.isActive()) {\n ret.push(filter);\n }\n }\n return ret;\n }\n\n /**\n * Registers a filter, and returns a deregistration function\n */\n add<F extends ClrDatagridFilterInterface<T>>(filter: F): RegisteredFilter<T, F> {\n const subscription = filter.changes.subscribe(() => this.resetPageAndEmitFilterChange([filter]));\n let hasUnregistered = false;\n const registered = new RegisteredFilter(filter, () => {\n if (hasUnregistered) {\n return;\n }\n subscription.unsubscribe();\n const matchIndex = this._all.findIndex(item => item.filter === filter);\n if (matchIndex >= 0) {\n this._all.splice(matchIndex, 1);\n }\n if (filter.isActive()) {\n this.resetPageAndEmitFilterChange([]);\n }\n hasUnregistered = true;\n });\n this._all.push(registered);\n if (filter.isActive()) {\n this.resetPageAndEmitFilterChange([filter]);\n }\n return registered;\n }\n\n /**\n * Accepts an item if it is accepted by all currently active filters\n */\n accepts(item: T): boolean {\n for (const { filter } of this._all) {\n if (filter && filter.isActive() && !filter.accepts(item)) {\n return false;\n }\n }\n return true;\n }\n\n private resetPageAndEmitFilterChange(filters: ClrDatagridFilterInterface<T>[]) {\n this.stateDebouncer.changeStart();\n // filtering may change the page number such that current page number doesn't exist in the filtered dataset.\n // So here we always set the current page to 1 so that it'll fetch first page's data with the given filter.\n this._page.current = 1;\n this._change.next(filters);\n this.stateDebouncer.changeDone();\n }\n}\n\nexport class RegisteredFilter<T, F extends ClrDatagridFilterInterface<T>> {\n constructor(\n public filter: F,\n public unregister: () => void\n ) {}\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, OnDestroy } from '@angular/core';\n\nimport { ClrDatagridFilterInterface } from '../interfaces/filter.interface';\nimport { FiltersProvider, RegisteredFilter } from '../providers/filters';\n\n@Directive()\nexport abstract class DatagridFilterRegistrar<T, F extends ClrDatagridFilterInterface<T>> implements OnDestroy {\n /**\n * @NOTEe Type `any` is set here to be able to pass templateStrictMode\n */\n registered: any;\n\n protected constructor(private filters: FiltersProvider<T>) {}\n\n get filter(): F {\n return this.registered && this.registered.filter;\n }\n\n ngOnDestroy(): void {\n this.deleteFilter();\n }\n\n setFilter(filter: F | RegisteredFilter<T, F>) {\n // If we previously had another filter, we unregister it\n this.deleteFilter();\n if (filter instanceof RegisteredFilter) {\n this.registered = filter;\n } else if (filter) {\n this.registered = this.filters.add(filter);\n }\n }\n\n deleteFilter() {\n if (this.registered) {\n this.registered.unregister();\n delete this.registered;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, EmbeddedViewRef, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'dg-wrapped-column',\n template: `\n <ng-template #columnPortal>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class WrappedColumn implements AfterViewInit, OnDestroy {\n @ViewChild('columnPortal') templateRef: TemplateRef<void>;\n columnView: EmbeddedViewRef<void>; // the columns projected view (in memory)\n\n ngAfterViewInit() {\n // Create the cells view in memory, not the DOM.\n this.columnView = this.templateRef.createEmbeddedView(null);\n }\n\n ngOnDestroy() {\n this.columnView.destroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { StateDebouncer } from './state-debouncer.provider';\nimport { ClrDatagridComparatorInterface } from '../interfaces/comparator.interface';\n\n@Injectable()\nexport class Sort<T = any> {\n /**\n * Currently active comparator\n */\n private _comparator: ClrDatagridComparatorInterface<T>;\n\n /**\n * Ascending order if false, descending if true\n */\n private _reverse = false;\n\n /**\n * The Observable that lets other classes subscribe to sort changes\n */\n private _change = new Subject<Sort<T>>();\n\n constructor(private stateDebouncer: StateDebouncer) {}\n\n get comparator(): ClrDatagridComparatorInterface<T> {\n return this._comparator;\n }\n set comparator(value: ClrDatagridComparatorInterface<T>) {\n this.stateDebouncer.changeStart();\n this._comparator = value;\n this.emitChange();\n this.stateDebouncer.changeDone();\n }\n\n get reverse(): boolean {\n return this._reverse;\n }\n set reverse(value: boolean) {\n this.stateDebouncer.changeStart();\n this._reverse = value;\n this.emitChange();\n this.stateDebouncer.changeDone();\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<Sort<T>> {\n return this._change.asObservable();\n }\n\n /**\n * Sets a comparator as the current one, or toggles reverse if the comparator is already used. The\n * optional forceReverse input parameter allows to override that toggling behavior by sorting in\n * reverse order if `true`.\n *\n * @memberof Sort\n */\n toggle(sortBy: ClrDatagridComparatorInterface<T>, forceReverse?: boolean) {\n this.stateDebouncer.changeStart();\n // We modify private properties directly, to batch the change event\n if (this.comparator === sortBy) {\n this._reverse = typeof forceReverse !== 'undefined' ? forceReverse || !this._reverse : !this._reverse;\n } else {\n this._comparator = sortBy;\n this._reverse = typeof forceReverse !== 'undefined' ? forceReverse : false;\n }\n this.emitChange();\n this.stateDebouncer.changeDone();\n }\n\n /**\n * Clears the current sorting order\n */\n clear() {\n this.comparator = null;\n }\n\n /**\n * Compares two objects according to the current comparator\n */\n compare(a: T, b: T): number {\n return (this.reverse ? -1 : 1) * this.comparator.compare(a, b);\n }\n\n private emitChange() {\n this._change.next(this);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ModalStackService } from '@clr/angular/modal';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport const MAX_DETAIL_WIDTH = 100;\nexport const DEFAULT_DETAIL_WIDTH = 66;\nexport const MIN_DETAIL_WIDTH = 0;\n\n@Injectable()\nexport class DetailService {\n id: string;\n detailWidth = DEFAULT_DETAIL_WIDTH;\n\n private preventScroll = false;\n private toggleState = false;\n private cache: any;\n private button: HTMLButtonElement;\n private _enabled = false;\n private _state = new BehaviorSubject<boolean | null>(this.toggleState);\n\n constructor(private readonly modalStackService: ModalStackService) {}\n\n get enabled(): boolean {\n return this._enabled;\n }\n set enabled(state: boolean) {\n this._enabled = state;\n }\n\n get preventFocusScroll(): boolean {\n return this.preventScroll;\n }\n set preventFocusScroll(preventScroll: boolean) {\n this.preventScroll = preventScroll;\n }\n\n get state() {\n return this.cache;\n }\n\n get stateChange(): Observable<boolean | null> {\n return this._state.asObservable();\n }\n\n get isOpen() {\n return this.toggleState === true;\n }\n\n open(item: any, button?: HTMLButtonElement) {\n this.cache = item;\n this.button = button;\n this.toggleState = true;\n this._state.next(this.toggleState);\n this.modalStackService.trackModalOpen(this);\n }\n\n close() {\n this.toggleState = false;\n this.returnFocus();\n this._state.next(this.toggleState);\n this.modalStackService.trackModalClose(this);\n }\n\n returnFocus() {\n if (this.button) {\n this.button.focus({ preventScroll: this.preventFocusScroll });\n this.button = null;\n }\n }\n\n toggle(item: any, button?: HTMLButtonElement) {\n if (this.isRowOpen(item) || !item) {\n this.close();\n } else {\n this.open(item, button);\n }\n }\n\n isRowOpen(item: any) {\n return !!(this.toggleState && this.cache === item);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ALL_COLUMN_CHANGES } from '../enums/column-changes.enum';\nimport { ColumnState, ColumnStateDiff } from '../interfaces/column-state.interface';\n\n@Injectable()\nexport class ColumnsService {\n columns: BehaviorSubject<ColumnState>[] = [];\n columnsStateChange: BehaviorSubject<ColumnState> = new BehaviorSubject(null);\n\n private _cache: ColumnState[] = [];\n\n get columnStates(): ColumnState[] {\n return this.columns.map(column => column.value);\n }\n\n get hasHideableColumns(): boolean {\n return this.columnStates.filter(state => state.hideable).length > 0;\n }\n\n get visibleColumns(): ColumnState[] {\n return this.columnStates.filter(state => !state.hidden);\n }\n\n get hasPinnedColumns(): boolean {\n return this.columnStates.some(state => state.pinned);\n }\n\n /**\n * Tells whether the column at the given index is pinned (static). Columns and cells are\n * matched by their declaration index, so this is what the header, the rows and a column aligned\n * row detail use to decide which views belong in the static container.\n */\n isPinned(columnIndex: number): boolean {\n return !!this.columns[columnIndex]?.value.pinned;\n }\n\n cache() {\n this._cache = this.columns.map(subject => {\n const value = { ...subject.value };\n delete value.changes;\n return value;\n });\n }\n\n hasCache() {\n return !!this._cache.length;\n }\n\n resetToLastCache() {\n this._cache.forEach((state, index) => {\n // Just emit the exact value from the cache\n const cachedState = { ...state, changes: ALL_COLUMN_CHANGES };\n this.columns[index].next(cachedState);\n this.columnsStateChange.next(cachedState);\n });\n this._cache = [];\n }\n\n // Helper method to emit a change to a column only when there is an actual diff to process for that column\n emitStateChangeAt(columnIndex: number, diff: ColumnStateDiff) {\n if (!this.columns[columnIndex]) {\n return;\n }\n this.emitStateChange(this.columns[columnIndex], diff);\n }\n\n emitStateChange(column: BehaviorSubject<ColumnState>, diff: ColumnStateDiff) {\n const changedState = { ...column.value, ...diff };\n column.next(changedState);\n this.columnsStateChange.next(changedState);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum DatagridRenderStep {\n ALIGN_COLUMNS,\n CALCULATE_MODE_ON,\n CALCULATE_MODE_OFF,\n CLEAR_WIDTHS, // Note this is listened to by both cells and columns\n COMPUTE_COLUMN_WIDTHS,\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { DatagridRenderStep } from '../enums/render-step.enum';\n\n@Injectable()\nexport class DatagridRenderOrganizer {\n protected _renderStep = new Subject<DatagridRenderStep>();\n\n private alreadySized = false;\n\n get renderStep(): Observable<DatagridRenderStep> {\n return this._renderStep.asObservable();\n }\n\n filterRenderSteps(step: DatagridRenderStep) {\n return this.renderStep.pipe(filter(testStep => step === testStep));\n }\n\n resize() {\n this._renderStep.next(DatagridRenderStep.CALCULATE_MODE_ON);\n if (this.alreadySized) {\n this._renderStep.next(DatagridRenderStep.CLEAR_WIDTHS);\n }\n this._renderStep.next(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS);\n this._renderStep.next(DatagridRenderStep.ALIGN_COLUMNS); // NOT USED\n this.alreadySized = true;\n this._renderStep.next(DatagridRenderStep.CALCULATE_MODE_OFF);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ElementRef, Injectable } from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\n\nimport { DatagridRenderOrganizer } from '../render/render-organizer';\n\nconst MIN_COLUMN_WIDTH = 96;\n\n// This service allows DatagridHeaderRenderer and ClrDatagridColumnSeparator\n// to share column resize data with each other.\n\n@Injectable()\nexport class ColumnResizerService {\n // is it within the maximum resize range to the left\n isWithinMaxResizeRange: boolean;\n\n private widthBeforeResize: number;\n private _resizedBy = 0;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private domAdapter: DomAdapter,\n private organizer: DatagridRenderOrganizer\n ) {}\n\n get resizedBy() {\n return this._resizedBy;\n }\n\n get minColumnWidth() {\n return this.domAdapter.minWidth(this.el.nativeElement) || MIN_COLUMN_WIDTH;\n }\n\n get maxResizeRange() {\n return this.widthBeforeResize - this.minColumnWidth;\n }\n\n get widthAfterResize(): number {\n return this.widthBeforeResize + this._resizedBy;\n }\n\n startResize(): void {\n this._resizedBy = 0;\n this.isWithinMaxResizeRange = true;\n this.widthBeforeResize = this.domAdapter.clientRect(this.el.nativeElement).width;\n }\n\n endResize(): void {\n this.organizer.resize();\n }\n\n calculateResize(resizedBy: number): void {\n // calculates the resize amount within the allowed range\n if (resizedBy < -this.maxResizeRange) {\n this._resizedBy = -this.maxResizeRange;\n this.isWithinMaxResizeRange = false;\n } else {\n this._resizedBy = resizedBy;\n this.isWithinMaxResizeRange = true;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport { ElementRef, Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n/**\n * @description\n * Internal datagrid service that holds a reference to the clr-dg-table element and exposes a method to get height.\n */\n@Injectable()\nexport class TableSizeService {\n private _tableRef: HTMLElement;\n\n constructor(@Inject(PLATFORM_ID) private platformId: any) {}\n\n get tableRef(): HTMLElement {\n return this._tableRef;\n }\n set tableRef(element: HTMLElement) {\n this._tableRef = element;\n }\n\n set table(table: ElementRef<HTMLElement>) {\n if (isPlatformBrowser(this.platformId) && table.nativeElement) {\n this.tableRef = table.nativeElement.querySelector('.datagrid-table');\n }\n }\n\n // Used when resizing columns to show the column border being dragged.\n getColumnDragHeight(): string {\n if (!this.tableRef) {\n return null;\n }\n return `${this.tableRef.clientHeight}px`;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n Inject,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { ClrCommonStringsService, Keys, uniqueIdFactory } from '@clr/angular/utils';\n\nimport { ColumnResizerService } from './providers/column-resizer.service';\nimport { TableSizeService } from './providers/table-size.service';\n\n// Default resize length on each keyboard move event\nconst KEYBOARD_RESIZE_LENGTH = 12;\n\n@Component({\n selector: 'clr-dg-column-separator',\n template: `\n <button\n type=\"button\"\n class=\"datagrid-column-handle\"\n [attr.aria-label]=\"commonString.keys.columnSeparatorAriaLabel\"\n [attr.aria-describedby]=\"descriptionId\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"showTracker()\"\n (cdkDragMoved)=\"moveTracker($event.distance.x)\"\n (cdkDragEnded)=\"hideTracker(); $event.source._dragRef.reset()\"\n #columnHandle\n ></button>\n <span class=\"clr-sr-only\" [attr.id]=\"descriptionId\">\n {{ commonString.keys.columnSeparatorDescription }}\n </span>\n <div class=\"datagrid-column-resize-tracker\" #resizeTracker></div>\n `,\n host: {\n '[class.datagrid-column-separator]': 'true',\n },\n standalone: false,\n})\nexport class ClrDatagridColumnSeparator implements AfterViewInit, OnDestroy {\n columnSeparatorId = uniqueIdFactory();\n\n private resizeStartedOnKeyDown = false;\n private isWithinMaxResizeRange: boolean;\n private unlisteners: (() => void)[] = [];\n\n @ViewChild('resizeTracker') private resizeTrackerRef: ElementRef<HTMLElement>;\n @ViewChild('columnHandle') private columnHandleRef: ElementRef<HTMLElement>;\n\n constructor(\n private columnResizerService: ColumnResizerService,\n private renderer: Renderer2,\n private ngZone: NgZone,\n private tableSizeService: TableSizeService,\n public commonString: ClrCommonStringsService,\n @Inject(DOCUMENT) private document: any\n ) {}\n\n get descriptionId(): string {\n return `${this.columnSeparatorId}-aria-describedby`;\n }\n\n private get resizeTrackerEl() {\n return this.resizeTrackerRef.nativeElement;\n }\n\n private get columnHandleEl() {\n return this.columnHandleRef.nativeElement;\n }\n\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n this.unlisteners.push(\n this.renderer.listen(this.columnHandleEl, 'keydown', event => {\n this.showTrackerOnFirstKeyDown(event);\n this.moveTrackerOnKeyDown(event);\n })\n );\n this.unlisteners.push(\n this.renderer.listen(this.columnHandleEl, 'keyup', event => {\n this.hideTrackerOnKeyUp(event);\n })\n );\n });\n }\n\n ngOnDestroy() {\n this.unlisteners.forEach(unlistener => unlistener());\n }\n\n showTracker(): void {\n this.columnResizerService.startResize();\n const tableHeight = this.tableSizeService.getColumnDragHeight();\n this.renderer.setStyle(this.resizeTrackerEl, 'height', tableHeight);\n this.renderer.setStyle(this.resizeTrackerEl, 'display', 'block');\n }\n\n moveTracker(movedBy: number): void {\n this.columnResizerService.calculateResize(movedBy);\n this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(${this.columnResizerService.resizedBy}px)`);\n this.renderer.setStyle(this.document.body, 'cursor', 'col-resize');\n this.redFlagTracker();\n }\n\n hideTracker(): void {\n this.columnResizerService.endResize();\n this.renderer.setStyle(this.resizeTrackerEl, 'display', 'none');\n this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(0px)`);\n this.renderer.setStyle(this.columnHandleEl, 'transform', `translateX(0px)`);\n this.renderer.setStyle(this.document.body, 'cursor', 'auto');\n }\n\n private showTrackerOnFirstKeyDown(event: KeyboardEvent): void {\n if (!this.resizeStartedOnKeyDown && (this.isArrowLeftKeyEvent(event) || this.isArrowRightKeyEvent(event))) {\n this.resizeStartedOnKeyDown = true;\n this.renderer.addClass(this.resizeTrackerEl, 'on-arrow-key-resize');\n this.showTracker();\n }\n }\n\n private moveTrackerOnKeyDown(event: KeyboardEvent): void {\n if (this.isArrowLeftKeyEvent(event)) {\n event.stopPropagation();\n this.moveTracker(this.columnResizerService.resizedBy - KEYBOARD_RESIZE_LENGTH);\n } else if (this.isArrowRightKeyEvent(event)) {\n event.stopPropagation();\n this.moveTracker(this.columnResizerService.resizedBy + KEYBOARD_RESIZE_LENGTH);\n }\n }\n\n private hideTrackerOnKeyUp(event: KeyboardEvent): void {\n if (this.resizeStartedOnKeyDown && (this.isArrowLeftKeyEvent(event) || this.isArrowRightKeyEvent(event))) {\n this.resizeStartedOnKeyDown = false;\n this.renderer.removeClass(this.resizeTrackerEl, 'on-arrow-key-resize');\n this.hideTracker();\n this.columnHandleEl.focus();\n }\n }\n\n private redFlagTracker(): void {\n if (this.isWithinMaxResizeRange !== this.columnResizerService.isWithinMaxResizeRange) {\n this.isWithinMaxResizeRange = this.columnResizerService.isWithinMaxResizeRange;\n if (!this.isWithinMaxResizeRange) {\n this.renderer.addClass(this.resizeTrackerEl, 'exceeded-max');\n } else {\n this.renderer.removeClass(this.resizeTrackerEl, 'exceeded-max');\n }\n }\n }\n\n private isArrowLeftKeyEvent(event: KeyboardEvent) {\n return event.key === Keys.ArrowLeft;\n }\n\n private isArrowRightKeyEvent(event: KeyboardEvent) {\n return event.key === Keys.ArrowRight;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { KeyNavigationGridStrategyInterface } from '../../interfaces/key-nav-grid-strategy.interface';\nimport { CellCoordinates } from '../key-navigation-grid.controller';\nimport { KeyNavigationUtils } from '../key-navigation-utils';\n\nexport class DefaultKeyNavigationStrategy implements KeyNavigationGridStrategyInterface {\n constructor(protected utils: KeyNavigationUtils) {}\n\n keyUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.y === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y - 1;\n\n const isActionCell = this.utils.isActionCell(currentCellCoords);\n\n if (\n this.utils.isSingleCellExpandedRow(nextCellCoords.y) &&\n !isActionCell &&\n this.utils.isDetailsRow(nextCellCoords.y)\n ) {\n nextCellCoords.x = 0;\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n if (isActionCell) {\n nextCellCoords.y = nextCellCoords.y - 1;\n } else {\n nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n }\n\n return nextCellCoords;\n }\n\n keyDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n if (currentCellCoords.y >= numOfRows) {\n return nextCellCoords;\n }\n\n const isActionCell = this.utils.isActionCell(currentCellCoords);\n nextCellCoords.y = currentCellCoords.y + 1;\n\n if (!isActionCell && this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n\n return nextCellCoords;\n }\n\n keyLeft(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.x === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.x = currentCellCoords.x - 1;\n\n return nextCellCoords;\n }\n\n keyRight(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n // calculate numOfColumns based on header cells.\n const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n nextCellCoords.x = currentCellCoords.x < numOfColumns ? nextCellCoords.x + 1 : nextCellCoords.x;\n\n return nextCellCoords;\n }\n\n keyEnd(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n\n // calculate X based on header cells.\n nextCellCoords.x = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n if (ctrlKey) {\n nextCellCoords.y = numOfRows;\n\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = this.utils.getCellsForRow(nextCellCoords.y).length - 1;\n }\n }\n\n return nextCellCoords;\n }\n\n keyHome(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n nextCellCoords.x = 0;\n\n if (ctrlKey) {\n nextCellCoords.y = 0;\n }\n\n return nextCellCoords;\n }\n\n keyPageUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n } else if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n } else {\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n }\n\n return nextCellCoords;\n }\n\n keyPageDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;\n\n if (this.utils.isActionCell(currentCellCoords) && this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n } else if (this.utils.isDetailsRow(nextCellCoords.y) && this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n } else if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n\n return nextCellCoords;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CellCoordinates } from '../key-navigation-grid.controller';\nimport { DefaultKeyNavigationStrategy } from './default';\n\nexport class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {\n override keyUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.y === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y - 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(currentCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n switch (true) {\n case this.utils.isDetailsRow(nextCellCoords.y):\n nextCellCoords.x = 0;\n break;\n case this.utils.isDetailsRow(currentCellCoords.y) === false:\n nextCellCoords.x = currentCellCoords.x;\n break;\n default:\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y) && nextCellCoords.y > 0) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n if (currentCellCoords.y >= numOfRows) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y + 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n }\n\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n } else {\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);\n }\n } else {\n nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y;\n }\n\n return nextCellCoords;\n }\n\n override keyLeft(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {\n return super.keyLeft(currentCellCoords);\n }\n\n if (currentCellCoords.x !== 0) {\n nextCellCoords.x = currentCellCoords.x - 1;\n } else if (!this.utils.isActionCell(currentCellCoords)) {\n nextCellCoords.y = currentCellCoords.y - 1;\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y) - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyRight(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {\n return super.keyRight(currentCellCoords);\n }\n\n // calculate numOfColumns based on header cells.\n const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n if (currentCellCoords.x >= numOfColumns) {\n return nextCellCoords;\n }\n\n if (\n this.utils.isActionCell(currentCellCoords) &&\n currentCellCoords.x === this.utils.actionCellCount(currentCellCoords.x) - 1 &&\n this.utils.isRowReplaced(currentCellCoords.y) &&\n !this.utils.isDetailsRow(currentCellCoords.y)\n ) {\n nextCellCoords.y = currentCellCoords.y + 1;\n nextCellCoords.x = 0;\n } else {\n nextCellCoords.x = currentCellCoords.x + 1;\n }\n\n return nextCellCoords;\n }\n\n override keyEnd(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if ((!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) || ctrlKey) {\n return super.keyEnd(currentCellCoords, ctrlKey);\n }\n\n nextCellCoords.x = this.utils.getCellsForRow(currentCellCoords.y).length - 1;\n\n return nextCellCoords;\n }\n\n override keyHome(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {\n return super.keyHome(currentCellCoords, ctrlKey);\n }\n\n nextCellCoords.x = 0;\n nextCellCoords.y = currentCellCoords.y - 1;\n\n if (ctrlKey) {\n nextCellCoords.y = 0;\n }\n\n return nextCellCoords;\n }\n\n override keyPageUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = 0;\n }\n } else if (!this.utils.isDetailsRow(currentCellCoords.y)) {\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y)) {\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);\n }\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyPageDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n if (nextCellCoords.y < numOfRows && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CellCoordinates } from '../key-navigation-grid.controller';\nimport { ExpandedRowKeyNavigationStrategy } from './expanded-row';\n\nexport class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {\n override keyUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.y === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y - 1;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyUp(currentCellCoords);\n }\n\n const isActionCell = this.utils.isActionCell(currentCellCoords);\n\n if (isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n } else if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (!isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n\n return nextCellCoords;\n }\n\n override keyDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const numOfColumns = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n if (currentCellCoords.y >= numOfRows) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y + 1;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyDown(currentCellCoords);\n }\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;\n } else if (this.utils.getCellsForRow(currentCellCoords.y).length > numOfColumns) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n } else {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else {\n nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyLeft(currentCellCoords: CellCoordinates) {\n return super.keyLeft(currentCellCoords);\n }\n\n override keyRight(currentCellCoords: CellCoordinates) {\n return super.keyRight(currentCellCoords);\n }\n\n override keyEnd(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n return super.keyEnd(currentCellCoords, ctrlKey);\n }\n\n override keyHome(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n return super.keyHome(currentCellCoords, ctrlKey);\n }\n\n override keyPageUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyPageUp(currentCellCoords);\n }\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyPageDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyPageDown(currentCellCoords);\n }\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n if (nextCellCoords.y < numOfRows) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Keys } from '@clr/angular/utils';\n\nimport { CellCoordinates, KeyNavigationGridConfig } from './key-navigation-grid.controller';\nimport { KeyNavigationGridStrategyInterface } from '../interfaces/key-nav-grid-strategy.interface';\nimport { DefaultKeyNavigationStrategy } from './key-navigation-strategies/default';\nimport { ExpandedColumnsRowKeyNavigationStrategy } from './key-navigation-strategies/expanded-columns-row';\nimport { ExpandedRowKeyNavigationStrategy } from './key-navigation-strategies/expanded-row';\n\nexport class KeyNavigationUtils {\n constructor(\n public host: HTMLElement,\n public config: KeyNavigationGridConfig\n ) {}\n\n get grid() {\n return this.host?.querySelector(this.config.keyGrid);\n }\n\n get rows() {\n return this.host?.querySelectorAll(this.config.keyGridRows) as NodeListOf<HTMLElement>;\n }\n\n get cells() {\n return this.host?.querySelectorAll(this.config.keyGridCells) as NodeListOf<HTMLElement>;\n }\n\n get currentCellCoordinates() {\n const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;\n const currentRow: HTMLElement = currentCell ? currentCell.closest(this.config.keyGridRows) : null;\n\n const coordinates: CellCoordinates = {\n x:\n currentRow && currentCell\n ? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)\n : 0,\n y: currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0,\n };\n\n return coordinates;\n }\n\n get averageRowHeight() {\n const heightSum = Array.from(this.rows.values()).reduce((sum, row) => {\n return sum + row.clientHeight;\n }, 0);\n\n return Math.round(heightSum / this.rows.length);\n }\n\n get itemsPerPage() {\n return Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.averageRowHeight) - 1 || 0;\n }\n\n setAriaRowIndexTo(cellCoords: CellCoordinates) {\n let ariaRowIndex = this.rows[cellCoords.y].getAttribute('aria-rowindex');\n\n if (!ariaRowIndex) {\n ariaRowIndex = this.rows[cellCoords.y - 1].getAttribute('aria-rowindex');\n }\n\n cellCoords.ariaRowIndex = ariaRowIndex;\n }\n\n getNextItemCoordinate(e: KeyboardEvent) {\n const currentCellCoords = this.currentCellCoordinates;\n const strategy = this.getNavStrategy(currentCellCoords);\n\n const inlineStart = this.host.dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;\n const inlineEnd = this.host.dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;\n\n switch (e.key) {\n case Keys.ArrowUp:\n return strategy.keyUp(currentCellCoords);\n case Keys.ArrowDown:\n return strategy.keyDown(currentCellCoords);\n case inlineStart:\n return strategy.keyLeft(currentCellCoords);\n case inlineEnd:\n return strategy.keyRight(currentCellCoords);\n case Keys.Home:\n return strategy.keyHome(currentCellCoords, e.ctrlKey);\n case Keys.End:\n return strategy.keyEnd(currentCellCoords, e.ctrlKey);\n case Keys.PageUp:\n return strategy.keyPageUp(currentCellCoords);\n case Keys.PageDown:\n return strategy.keyPageDown(currentCellCoords);\n default:\n return currentCellCoords;\n }\n }\n\n getCellsForRow(index: number) {\n return this.rows[index].querySelectorAll(this.config.keyGridCells);\n }\n\n isExpandedRow(index: number) {\n const selectedElement: HTMLElement = this.rows[index].querySelector('.datagrid-row-detail');\n\n return selectedElement ? selectedElement.style.display !== 'none' : false;\n }\n\n isDetailsRow(index: number) {\n return this.rows[index].classList.contains('datagrid-row-detail');\n }\n\n isRowReplaced(index: number) {\n return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');\n }\n\n isSingleCellExpandedRow(index: number) {\n return this.rows[index]?.querySelectorAll(this.config.keyGridCells).length === 1;\n }\n\n actionCellCount(index: number) {\n return this.actionCellsAsArray(index).length;\n }\n\n actionCellsAsArray(index: number) {\n return Array.from(\n this.rows[index].querySelectorAll('.datagrid-row-sticky .datagrid-cell, .datagrid-row-sticky .datagrid-column')\n );\n }\n\n isActionCell(cellCoords: CellCoordinates) {\n return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];\n }\n\n createNextCellCoords(cellCoords: CellCoordinates): CellCoordinates {\n return {\n x: cellCoords.x,\n y: cellCoords.y,\n };\n }\n\n private getNavStrategy(currentCellCoords: CellCoordinates): KeyNavigationGridStrategyInterface {\n switch (true) {\n case this.isSingleCellExpandedRow(currentCellCoords.y):\n return new ExpandedRowKeyNavigationStrategy(this);\n case this.isDetailsRow(currentCellCoords.y):\n case this.isExpandedRow(currentCellCoords.y):\n return new ExpandedColumnsRowKeyNavigationStrategy(this);\n default:\n return new DefaultKeyNavigationStrategy(this);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { EventEmitter, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport { Keys } from '@clr/angular/utils';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { KeyNavigationUtils } from './key-navigation-utils';\n\nconst actionableItemSelectors = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled])',\n 'button:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable=true]',\n '[role=button]:not([disabled])',\n];\n\nexport function getTabbableItems(el: HTMLElement) {\n const tabbableItemSelectors = [...actionableItemSelectors, '[tabindex=\"0\"]:not([disabled])'];\n const tabbableSelector = tabbableItemSelectors.join(',');\n return Array.from(el.querySelectorAll(tabbableSelector)) as HTMLElement[];\n}\n\nfunction isActionableItem(el: HTMLElement) {\n const actionableSelector = actionableItemSelectors.join(',');\n return el.matches(actionableSelector);\n}\n\nexport interface KeyNavigationGridConfig {\n keyGrid: string;\n keyGridRows: string;\n keyGridCells: string;\n}\n\nexport interface CellCoordinates {\n x: number;\n y: number;\n ariaRowIndex?: string;\n}\n\n@Injectable()\nexport class KeyNavigationGridController implements OnDestroy {\n nextCellCoordsEmitter = new EventEmitter<CellCoordinates>(false);\n\n skipItemFocus = false;\n preventScrollOnFocus = false;\n\n config: KeyNavigationGridConfig = {\n keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*=\"display: none\"])',\n keyGridCells:\n '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',\n keyGrid: '[role=grid]',\n };\n private keyNavUtils: KeyNavigationUtils;\n private listenersAdded = false;\n private destroy$ = new Subject<void>();\n\n constructor(private zone: NgZone) {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n addListeners() {\n if (this.listenersAdded) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n fromEvent(this.keyNavUtils.grid, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((e: MouseEvent) => {\n // preserve right click for context menus & keyboard mouse control https://apple.stackexchange.com/questions/32715/how-do-i-open-the-context-menu-from-a-mac-keyboard\n if (e.buttons === 1 && !e.ctrlKey) {\n const activeCell = this.keyNavUtils.cells\n ? Array.from(this.keyNavUtils.cells).find(\n c => c === e.target || c === (e.target as HTMLElement).closest(this.config.keyGridCells)\n )\n : null;\n if (activeCell) {\n this.setActiveCell(activeCell);\n\n if (!isActionableItem(e.target as HTMLElement)) {\n this.focusElement(activeCell);\n }\n }\n }\n });\n\n fromEvent(this.keyNavUtils.grid, 'wheel')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.nextCellCoordsEmitter.emit(null);\n });\n\n fromEvent(this.keyNavUtils.grid, 'keydown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((e: KeyboardEvent) => {\n // Skip column resize events\n if (\n (e.target as HTMLElement).classList.contains('drag-handle') &&\n (e.key === Keys.ArrowLeft || e.key === Keys.ArrowRight)\n ) {\n return;\n }\n if (\n e.key === Keys.ArrowUp ||\n e.key === Keys.ArrowDown ||\n e.key === Keys.ArrowLeft ||\n e.key === Keys.ArrowRight ||\n e.key === Keys.End ||\n e.key === Keys.Home ||\n e.key === Keys.PageUp ||\n e.key === Keys.PageDown\n ) {\n const nextCellCoords = this.keyNavUtils.getNextItemCoordinate(e);\n\n if (\n nextCellCoords.y > 0 &&\n (e.key === Keys.ArrowUp || e.key === Keys.ArrowDown || e.key === Keys.PageUp || e.key === Keys.PageDown)\n ) {\n this.keyNavUtils.setAriaRowIndexTo(nextCellCoords);\n\n this.nextCellCoordsEmitter.emit(nextCellCoords);\n }\n\n const activeItem = this.keyNavUtils.rows\n ? (Array.from(this.keyNavUtils.getCellsForRow(nextCellCoords.y))[nextCellCoords.x] as HTMLElement)\n : null;\n\n if (activeItem) {\n this.setActiveCell(activeItem);\n this.focusElement(activeItem, {\n preventScroll: this.preventScrollOnFocus && !!nextCellCoords.ariaRowIndex,\n });\n }\n\n e.preventDefault();\n }\n });\n });\n this.listenersAdded = true;\n }\n\n initializeKeyGrid(host: HTMLElement) {\n this.keyNavUtils = new KeyNavigationUtils(host, this.config);\n this.addListeners();\n this.resetKeyGrid();\n }\n\n resetKeyGrid() {\n this.keyNavUtils.cells?.forEach((i: HTMLElement) => i.setAttribute('tabindex', '-1'));\n const firstCell = this.keyNavUtils.cells ? this.keyNavUtils.cells[0] : null;\n firstCell?.setAttribute('tabindex', '0');\n }\n\n setActiveCell(activeCell: HTMLElement) {\n const prior = this.keyNavUtils.cells\n ? Array.from(this.keyNavUtils.cells).find(c => c.getAttribute('tabindex') === '0')\n : null;\n\n if (prior) {\n prior.setAttribute('tabindex', '-1');\n }\n\n activeCell.setAttribute('tabindex', '0');\n }\n\n focusElement(activeCell: HTMLElement, options: FocusOptions = { preventScroll: false }) {\n if (this.skipItemFocus) {\n return;\n }\n\n let elementToFocus: HTMLElement;\n\n if (activeCell.getAttribute('role') === 'columnheader') {\n elementToFocus = activeCell;\n } else {\n const tabbableElements = getTabbableItems(activeCell);\n elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;\n }\n\n elementToFocus.focus(options);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n booleanAttribute,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ClrPopoverPosition, ClrPopoverService, ClrPopoverType } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridFilterInterface } from './interfaces/filter.interface';\nimport { CustomFilter } from './providers/custom-filter';\nimport { FiltersProvider, RegisteredFilter } from './providers/filters';\nimport { DatagridFilterRegistrar } from './utils/datagrid-filter-registrar';\nimport { KeyNavigationGridController } from './utils/key-navigation-grid.controller';\n\n/**\n * Custom filter that can be added in any column to override the default object property string filter.\n * The reason this is not just an input on DatagridColumn is because we need the filter's template to be projected,\n * since it can be anything (not just a text input).\n */\n@Component({\n selector: 'clr-dg-filter',\n // We register this component as a CustomFilter, for the parent column to detect it.\n providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }],\n template: `\n <button\n class=\"datagrid-filter-toggle\"\n type=\"button\"\n #anchor\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-controls]=\"popoverId\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n [class.datagrid-filter-open]=\"open\"\n [class.datagrid-filtered]=\"active\"\n >\n <cds-icon\n [status]=\"active ? 'info' : null\"\n [shape]=\"active ? 'filter-grid-circle' : 'filter-grid'\"\n solid\n ></cds-icon>\n </button>\n\n <div\n class=\"datagrid-filter\"\n [id]=\"popoverId\"\n cdkTrapFocus\n *clrPopoverContent=\"open; at: popoverPosition; type: popoverType; outsideClickToClose: true; scrollToClose: false\"\n role=\"dialog\"\n [attr.aria-label]=\"commonStrings.keys.datagridFilterDialogAriaLabel\"\n >\n <div class=\"datagrid-filter-close-wrapper\">\n <button type=\"button\" class=\"close\" clrPopoverCloseButton>\n <cds-icon shape=\"window-close\" [attr.title]=\"commonStrings.keys.close\"></cds-icon>\n </button>\n </div>\n\n <ng-content></ng-content>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridFilter<T = any>\n extends DatagridFilterRegistrar<T, ClrDatagridFilterInterface<T>>\n implements CustomFilter, OnDestroy\n{\n @Output('clrDgFilterOpenChange') openChange = new EventEmitter<boolean>(false);\n\n ariaExpanded = false;\n popoverId = uniqueIdFactory();\n\n // Smart Popover\n popoverPosition = ClrPopoverPosition.BOTTOM_RIGHT;\n popoverType = ClrPopoverType.DROPDOWN;\n\n @ViewChild('anchor', { read: ElementRef }) anchor: ElementRef<HTMLButtonElement>;\n\n private subs: Subscription[] = [];\n\n constructor(\n _filters: FiltersProvider<T>,\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService,\n @Optional() private keyNavigation: KeyNavigationGridController\n ) {\n super(_filters);\n this.subs.push(\n popoverService.openChange.subscribe(change => {\n this.ariaExpanded = change;\n this.openChange.emit(change);\n })\n );\n }\n\n @Input({ alias: 'clrDgFilterOpen', transform: booleanAttribute })\n get open() {\n return this.popoverService.open;\n }\n set open(open: boolean) {\n if (this.popoverService.open !== open) {\n this.popoverService.open = open;\n this.openChange.emit(open);\n\n if (this.keyNavigation) {\n this.keyNavigation.skipItemFocus = open;\n }\n }\n }\n\n @Input('clrDgFilter')\n set customFilter(filter: ClrDatagridFilterInterface<T> | RegisteredFilter<T, ClrDatagridFilterInterface<T>>) {\n this.setFilter(filter);\n }\n\n /**\n * Indicates if the filter is currently active\n */\n get active() {\n return !!this.filter && this.filter.isActive();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.subs.forEach(sub => sub.unsubscribe());\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild } from '@angular/core';\nimport { ClrPopoverService } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, DomAdapter } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { DatagridNumericFilterImpl } from './datagrid-numeric-filter-impl';\nimport { ClrDatagridFilter } from '../../datagrid-filter';\nimport { ClrDatagridNumericFilterInterface } from '../../interfaces/numeric-filter.interface';\nimport { CustomFilter } from '../../providers/custom-filter';\nimport { FiltersProvider, RegisteredFilter } from '../../providers/filters';\nimport { DatagridFilterRegistrar } from '../../utils/datagrid-filter-registrar';\n\n@Component({\n selector: 'clr-dg-numeric-filter',\n providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],\n template: `\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <div class=\"datagrid-numeric-filter-form\">\n <clr-number-input-container>\n <label class=\"clr-control-label\">{{ fromLabelValue }}</label>\n <input\n clrNumberInput\n class=\"datagrid-numeric-filter-input\"\n #input_low\n type=\"number\"\n autocomplete=\"off\"\n name=\"low\"\n [(ngModel)]=\"low\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-number-input-container>\n <clr-number-input-container>\n <label class=\"clr-control-label\">{{ toLabelValue }}</label>\n <input\n clrNumberInput\n class=\"datagrid-numeric-filter-input\"\n #input_high\n type=\"number\"\n autocomplete=\"off\"\n name=\"high\"\n [(ngModel)]=\"high\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-number-input-container>\n </div>\n </clr-dg-filter>\n `,\n standalone: false,\n})\nexport class DatagridNumericFilter<T = any>\n extends DatagridFilterRegistrar<T, DatagridNumericFilterImpl<T>>\n implements CustomFilter, AfterViewInit\n{\n @Input('clrFilterMinPlaceholder') minPlaceholder: string;\n @Input('clrFilterMaxPlaceholder') maxPlaceholder: string;\n @Input('clrFilterFromLabel') fromLabel: string;\n @Input('clrFilterToLabel') toLabel: string;\n\n @Output('clrFilterValueChange') filterValueChange = new EventEmitter();\n\n /**\n * Indicates if the filter dropdown is open\n */\n open = false;\n\n /**\n * We need the actual input element to automatically focus on it\n */\n @ViewChild('input_low') input: ElementRef<HTMLInputElement>;\n\n /**\n * We grab the ClrDatagridFilter we wrap to register this StringFilter to it.\n */\n @ViewChild(ClrDatagridFilter) filterContainer: ClrDatagridFilter<T>;\n\n private initFilterValues: [number, number];\n private subscriptions: Subscription[] = [];\n\n constructor(\n filters: FiltersProvider<T>,\n private domAdapter: DomAdapter,\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService,\n private ngZone: NgZone\n ) {\n super(filters);\n }\n\n /**\n * Common setter for the input values\n */\n @Input('clrFilterValue')\n get value() {\n return [this.filter.low, this.filter.high];\n }\n set value(values: [number, number]) {\n if (this.filter && Array.isArray(values)) {\n if (values && (values[0] !== this.filter.low || values[1] !== this.filter.high)) {\n if (typeof values[0] === 'number') {\n this.filter.low = values[0];\n } else {\n this.filter.low = null;\n }\n if (typeof values[1] === 'number') {\n this.filter.high = values[1];\n } else {\n this.filter.high = null;\n }\n this.filterValueChange.emit(values);\n }\n } else {\n this.initFilterValues = values;\n }\n }\n\n /**\n * Customizable filter logic based on high and low values\n */\n @Input('clrDgNumericFilter')\n set customNumericFilter(\n value: ClrDatagridNumericFilterInterface<T> | RegisteredFilter<T, DatagridNumericFilterImpl<T>>\n ) {\n if (value instanceof RegisteredFilter) {\n this.setFilter(value);\n } else {\n this.setFilter(new DatagridNumericFilterImpl(value));\n }\n if (this.initFilterValues) {\n this.value = this.initFilterValues;\n // This initFilterValues should be used only once after the filter registration\n // So deleting this property value to prevent it from being used again\n // if this customStringFilter property is set again\n delete this.initFilterValues;\n }\n }\n\n get maxPlaceholderValue() {\n return this.maxPlaceholder || this.commonStrings.keys.maxValue;\n }\n\n get minPlaceholderValue() {\n return this.minPlaceholder || this.commonStrings.keys.minValue;\n }\n\n get fromLabelValue() {\n return this.fromLabel || this.commonStrings.keys.fromLabel;\n }\n\n get toLabelValue() {\n return this.toLabel || this.commonStrings.keys.toLabel;\n }\n\n get low() {\n if (typeof this.filter.low === 'number' && isFinite(this.filter.low)) {\n return this.filter.low;\n } else {\n // There's not a low limit\n return null;\n }\n }\n set low(low: number | string) {\n if (typeof low === 'number' && low !== this.filter.low) {\n this.filter.low = low;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n } else if (typeof low !== 'number') {\n this.filter.low = null;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n }\n }\n\n get high() {\n if (typeof this.filter.high === 'number' && isFinite(this.filter.high)) {\n return this.filter.high;\n } else {\n // There's not a high limit\n return null;\n }\n }\n set high(high: number | string) {\n if (typeof high === 'number' && high !== this.filter.high) {\n this.filter.high = high;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n } else if (typeof high !== 'number') {\n this.filter.high = null;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n }\n }\n\n ngAfterViewInit() {\n this.subscriptions.push(\n this.popoverService.openChange.subscribe(openChange => {\n this.open = openChange;\n // Note: this is being run outside of the Angular zone because `element.focus()` doesn't require\n // running change detection.\n this.ngZone.runOutsideAngular(() => {\n // The animation frame in used because when this executes, the input isn't displayed.\n // Note: `element.focus()` causes re-layout and this may lead to frame drop on slower devices.\n // `setTimeout` is a macrotask and macrotasks are executed within the current rendering frame.\n // Animation tasks are executed within the next rendering frame.\n requestAnimationFrame(() => {\n this.domAdapter.focus(this.input.nativeElement);\n });\n });\n })\n );\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.subscriptions.forEach(sub => {\n sub.unsubscribe();\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ClrPopoverService } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, DomAdapter } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { DatagridStringFilterImpl } from './datagrid-string-filter-impl';\nimport { ClrDatagridFilter } from '../../datagrid-filter';\nimport { ClrDatagridStringFilterInterface } from '../../interfaces/string-filter.interface';\nimport { CustomFilter } from '../../providers/custom-filter';\nimport { FiltersProvider, RegisteredFilter } from '../../providers/filters';\nimport { DatagridFilterRegistrar } from '../../utils/datagrid-filter-registrar';\n\n@Component({\n selector: 'clr-dg-string-filter',\n providers: [{ provide: CustomFilter, useExisting: DatagridStringFilter }],\n template: `\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <clr-input-container>\n <label>{{ labelValue }}</label>\n <input\n #input\n type=\"text\"\n autocomplete=\"off\"\n name=\"search\"\n [(ngModel)]=\"value\"\n clrInput\n [attr.aria-label]=\"placeholderValue\"\n [placeholder]=\"placeholderValue\"\n />\n </clr-input-container>\n </clr-dg-filter>\n `,\n standalone: false,\n})\nexport class DatagridStringFilter<T = any>\n extends DatagridFilterRegistrar<T, DatagridStringFilterImpl<T>>\n implements CustomFilter, OnChanges, OnDestroy, AfterViewInit\n{\n /**\n * Provide a way to pass external placeholder and aria-label to the filter input\n */\n @Input('clrFilterPlaceholder') placeholder: string;\n @Input('clrFilterLabel') label: string;\n\n @Output('clrFilterValueChange') filterValueChange = new EventEmitter();\n\n /**\n * Indicates if the filter dropdown is open\n */\n open = false;\n\n /**\n * We need the actual input element to automatically focus on it\n */\n @ViewChild('input') input: ElementRef<HTMLInputElement>;\n\n /**\n * We grab the ClrDatagridFilter we wrap to register this StringFilter to it.\n */\n @ViewChild(ClrDatagridFilter) filterContainer: ClrDatagridFilter<T>;\n\n labelValue = '';\n private initFilterValue: string;\n private subs: Subscription[] = [];\n\n constructor(\n filters: FiltersProvider<T>,\n private domAdapter: DomAdapter,\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService,\n private elementRef: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone\n ) {\n super(filters);\n }\n\n /**\n * Customizable filter logic based on a search text\n */\n @Input('clrDgStringFilter')\n set customStringFilter(\n value: ClrDatagridStringFilterInterface<T> | RegisteredFilter<T, DatagridStringFilterImpl<T>>\n ) {\n if (value instanceof RegisteredFilter) {\n this.setFilter(value);\n } else {\n this.setFilter(new DatagridStringFilterImpl(value));\n }\n if (this.initFilterValue) {\n this.value = this.initFilterValue;\n // This initFilterValue should be used only once after the filter registration\n // So deleting this property value to prevent it from being used again\n // if this customStringFilter property is set again\n delete this.initFilterValue;\n }\n }\n\n /**\n * Common setter for the input value\n */\n @Input('clrFilterValue')\n get value() {\n return this.filter.value;\n }\n set value(value: string) {\n if (this.filter && typeof value === 'string') {\n if (!value) {\n value = '';\n }\n if (value !== this.filter.value) {\n this.filter.value = value;\n this.filterValueChange.emit(value);\n }\n } else {\n this.initFilterValue = value;\n }\n }\n\n get placeholderValue() {\n return this.placeholder || this.commonStrings.keys.filterItems;\n }\n\n ngAfterViewInit() {\n this.subs.push(\n this.popoverService.openChange.subscribe(openChange => {\n this.open = openChange;\n // Note: this is being run outside of the Angular zone because `element.focus()` doesn't require\n // running change detection.\n this.ngZone.runOutsideAngular(() => {\n // The animation frame in used because when this executes, the input isn't displayed.\n // Note: `element.focus()` causes re-layout and this may lead to frame drop on slower devices.\n // `setTimeout` is a macrotask and macrotasks are executed within the current rendering frame.\n // Animation tasks are executed within the next rendering frame.\n requestAnimationFrame(() => {\n this.domAdapter.focus(this.input.nativeElement);\n });\n });\n })\n );\n }\n\n ngOnChanges() {\n setTimeout(() => {\n this.setFilterLabel();\n this.cdr.markForCheck();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.subs.forEach(sub => sub.unsubscribe());\n }\n\n /**\n * This is not in a getter to prevent \"expression has changed after it was checked\" errors.\n */\n private setFilterLabel() {\n if (this.label) {\n this.labelValue = this.label;\n\n return;\n }\n\n const columnElement = this.elementRef.nativeElement?.closest('clr-dg-column');\n const columnTitleElement = columnElement?.querySelector('.datagrid-column-title');\n\n this.labelValue = this.commonStrings.parse(this.commonStrings.keys.datagridFilterLabel, {\n COLUMN: columnTitleElement?.textContent.trim() || '',\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ClrPopoverHostDirective } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, HostWrapper } from '@clr/angular/utils';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { DatagridPropertyComparator } from './built-in/comparators/datagrid-property-comparator';\nimport { DatagridNumericFilterImpl } from './built-in/filters/datagrid-numeric-filter-impl';\nimport { DatagridPropertyNumericFilter } from './built-in/filters/datagrid-property-numeric-filter';\nimport { DatagridPropertyStringFilter } from './built-in/filters/datagrid-property-string-filter';\nimport { DatagridStringFilterImpl } from './built-in/filters/datagrid-string-filter-impl';\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ClrDatagridAriaSortOrder, ClrDatagridSortOrder } from './enums/sort-order.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { ClrDatagridComparatorInterface } from './interfaces/comparator.interface';\nimport { ClrDatagridFilterInterface } from './interfaces/filter.interface';\nimport { COLUMN_STATE } from './providers/column-state.provider';\nimport { ColumnsService } from './providers/columns.service';\nimport { CustomFilter } from './providers/custom-filter';\nimport { DetailService } from './providers/detail.service';\nimport { FiltersProvider } from './providers/filters';\nimport { Sort } from './providers/sort';\nimport { HIDDEN_COLUMN_CLASS, PINNED_COLUMN_CLASS } from './render/constants';\nimport { DatagridFilterRegistrar } from './utils/datagrid-filter-registrar';\nimport { WrappedColumn } from './wrapped-column';\n\n@Component({\n selector: 'clr-dg-column',\n template: `\n <div class=\"datagrid-column-flex\">\n <!--\n clrDgPinnable is disabled for now. Restoring it means uncommenting this block together with\n the pinnable input, the clrDgPinnedChange output and togglePinned() below, the\n .datagrid-column-pin styles, the pin/unpin icons in ClrDatagridModule and the\n pinColumn/unpinColumn common strings.\n\n @if (pinnable) {\n <button\n class=\"datagrid-column-pin\"\n type=\"button\"\n [attr.aria-label]=\"pinned ? commonStrings.keys.unpinColumn : commonStrings.keys.pinColumn\"\n (click)=\"togglePinned($event)\"\n >\n <cds-icon [size]=\"'12'\" [shape]=\"pinned ? 'unpin' : 'pin'\" solid aria-hidden=\"true\"></cds-icon>\n </button>\n }\n -->\n @if (sortable) {\n <button class=\"datagrid-column-title\" (click)=\"sort()\" type=\"button\" #titleContainer>\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n <cds-icon\n [shape]=\"sortDirection ? 'arrow' : 'two-way-arrows'\"\n [direction]=\"sortDirection ? sortDirection : 'left'\"\n aria-hidden=\"true\"\n class=\"sort-icon\"\n ></cds-icon>\n </button>\n }\n <!-- I'm really not happy with that select since it's not very scalable -->\n <ng-content select=\"clr-dg-filter, clr-dg-string-filter, clr-dg-numeric-filter\"></ng-content>\n\n @if (field && !customFilter && colType == 'string') {\n <clr-dg-string-filter\n [clrFilterPlaceholder]=\"filterStringPlaceholder\"\n [clrDgStringFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-string-filter>\n }\n @if (field && !customFilter && colType == 'number') {\n <clr-dg-numeric-filter\n [clrFilterMaxPlaceholder]=\"filterNumberMaxPlaceholder\"\n [clrFilterMinPlaceholder]=\"filterNumberMinPlaceholder\"\n [clrDgNumericFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-numeric-filter>\n }\n\n <ng-template #columnTitle>\n <ng-content></ng-content>\n </ng-template>\n\n @if (!sortable) {\n <span class=\"datagrid-column-title\" #titleContainer>\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n </span>\n }\n @if (showSeparator) {\n <clr-dg-column-separator></clr-dg-column-separator>\n }\n </div>\n `,\n hostDirectives: [ClrPopoverHostDirective],\n host: {\n '[class.datagrid-column]': 'true',\n '[attr.aria-sort]': 'ariaSort',\n role: 'columnheader',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class ClrDatagridColumn<T = any>\n extends DatagridFilterRegistrar<T, ClrDatagridFilterInterface<T>>\n implements OnDestroy, OnInit, OnChanges\n{\n @Input('clrFilterStringPlaceholder') filterStringPlaceholder: string;\n @Input('clrFilterNumberMaxPlaceholder') filterNumberMaxPlaceholder: string;\n @Input('clrFilterNumberMinPlaceholder') filterNumberMinPlaceholder: string;\n @Input('clrDgDisableUnsort') disableUnsort = false;\n\n // Disabled for now, together with the toggle in the template above and togglePinned() below.\n // Kept as a line comment rather than a doc comment, so api-extractor does not attach it to the\n // next declaration.\n //\n // /**\n // * Shows a pin toggle in the column header, letting the user pin and unpin the column from within\n // * the datagrid. It only adds the control - the pinned state itself stays on `clrDgPinned`.\n // */\n // @Input({ alias: 'clrDgPinnable', transform: booleanAttribute }) pinnable = false;\n\n @Output('clrDgSortOrderChange') sortOrderChange = new EventEmitter<ClrDatagridSortOrder>();\n // Only togglePinned() ever emitted this, so it is disabled along with the pin toggle.\n // @Output('clrDgPinnedChange') pinnedChange = new EventEmitter<boolean>();\n @Output('clrFilterValueChange') filterValueChange = new EventEmitter();\n\n @ViewChild('titleContainer', { read: ElementRef }) titleContainer: ElementRef<HTMLElement>;\n\n /**\n * A custom filter for this column that can be provided in the projected content\n */\n customFilter = false;\n\n /*\n * What type is this column? This defaults to STRING, but can also be\n * set to NUMBER. Unsupported types default to STRING. Users can set it\n * via the [clrDgColType] input by setting it to 'string' or 'number'.\n */\n private _colType: 'string' | 'number' = 'string';\n\n /*\n * Simple object property shortcut, activates both sorting and filtering\n * based on native comparison of the specified property on the items.\n */\n private _field: string;\n\n /**\n * ClrDatagridComparatorInterface to use when sorting the column\n */\n private _sortBy: ClrDatagridComparatorInterface<T>;\n\n /**\n * Indicates how the column is currently sorted\n */\n private _sortOrder: ClrDatagridSortOrder = ClrDatagridSortOrder.UNSORTED;\n\n private _sortDirection: 'up' | 'down' | null;\n\n // This property holds filter value temporarily while this.filter property is not yet registered\n // When this.filter is registered, this property value would be used update this.filter.value\n //\n private initFilterValue: string | [number, number];\n\n private wrappedInjector: Injector;\n\n /**\n * Subscription to the sort service changes\n */\n private subscriptions: Subscription[] = [];\n\n private _showSeparator = true;\n\n private _pinned = false;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private _sort: Sort<T>,\n filters: FiltersProvider<T>,\n private vcr: ViewContainerRef,\n private detailService: DetailService,\n private changeDetectorRef: ChangeDetectorRef,\n protected commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService,\n @Optional() @Inject(COLUMN_STATE) private columnState: BehaviorSubject<ColumnState>\n ) {\n super(filters);\n this.subscriptions.push(this.listenForSortingChanges());\n this.subscriptions.push(this.listenForDetailPaneChanges());\n }\n\n get isHidden() {\n return this.el.nativeElement.classList.contains(HIDDEN_COLUMN_CLASS);\n }\n\n /**\n * Whether the column is currently rendered as pinned. This can differ from the `pinned` input\n * while the detail pane is open, because pinning is suspended for as long as it shows a single\n * column.\n */\n get isPinned() {\n return this.el.nativeElement.classList.contains(PINNED_COLUMN_CLASS);\n }\n\n get showSeparator() {\n return this._showSeparator;\n }\n set showSeparator(value: boolean) {\n this._showSeparator = value;\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Pins the column to the left of the datagrid, so it stays visible while the remaining\n * columns are scrolled horizontally. Pinned columns keep their declaration order and are\n * rendered before the scrollable ones, right after the built-in row controls.\n */\n @Input({ alias: 'clrDgPinned', transform: booleanAttribute })\n get pinned(): boolean {\n return this._pinned;\n }\n set pinned(value: boolean) {\n if (this._pinned === value) {\n return;\n }\n\n this._pinned = value;\n\n // The column state is what the header and the rows read to decide where to project the\n // column and its cells. It is optional only so the column keeps working when it is used\n // outside the render directives, e.g. in isolated tests.\n if (this.columnState) {\n this.columnsService.emitStateChange(this.columnState, {\n pinned: value,\n changes: [DatagridColumnChanges.PINNED],\n });\n }\n }\n\n // TODO: We might want to make this an enum in the future\n @Input('clrDgColType')\n get colType() {\n return this._colType;\n }\n set colType(value: 'string' | 'number') {\n this._colType = value;\n }\n\n @Input('clrDgField')\n get field() {\n return this._field;\n }\n set field(field: string) {\n if (typeof field === 'string') {\n this._field = field;\n\n if (!this._sortBy) {\n this._sortBy = new DatagridPropertyComparator(field);\n }\n }\n }\n\n @Input('clrDgSortBy')\n get sortBy() {\n return this._sortBy;\n }\n set sortBy(comparator: ClrDatagridComparatorInterface<T> | string) {\n if (typeof comparator === 'string') {\n this._sortBy = new DatagridPropertyComparator(comparator);\n } else if (comparator) {\n this._sortBy = comparator;\n } else if (this.field) {\n this._sortBy = new DatagridPropertyComparator(this.field);\n } else {\n delete this._sortBy;\n }\n }\n\n @Input('clrDgSortOrder')\n get sortOrder() {\n return this._sortOrder;\n }\n set sortOrder(value: ClrDatagridSortOrder) {\n if (typeof value === 'undefined') {\n return;\n }\n\n // only if the incoming order is different from the current one\n if (this._sortOrder === value) {\n return;\n }\n\n switch (value) {\n case ClrDatagridSortOrder.ASC:\n this.sort(false);\n break;\n case ClrDatagridSortOrder.DESC:\n this.sort(true);\n break;\n // the Unsorted case happens when the current state is neither Asc nor Desc\n case ClrDatagridSortOrder.UNSORTED:\n default:\n this._sort.clear();\n this._sortDirection = null;\n break;\n }\n }\n\n @Input('clrFilterValue')\n set updateFilterValue(newValue: string | [number, number]) {\n if (this.filter) {\n if (this.filter instanceof DatagridStringFilterImpl) {\n if (!newValue || typeof newValue !== 'string') {\n newValue = '';\n }\n if (newValue !== this.filter.value) {\n this.filter.value = newValue;\n }\n } else if (this.filter instanceof DatagridNumericFilterImpl) {\n if (!newValue || !(newValue instanceof Array)) {\n newValue = [null, null];\n }\n if (newValue.length === 2 && (newValue[0] !== this.filter.value[0] || newValue[1] !== this.filter.value[1])) {\n this.filter.value = newValue;\n }\n }\n } else {\n this.initFilterValue = newValue;\n }\n }\n\n @ContentChild(CustomFilter)\n set projectedFilter(custom: any) {\n if (custom) {\n this.deleteFilter();\n this.customFilter = true;\n }\n }\n\n /**\n * Indicates if the column is sortable\n */\n get sortable(): boolean {\n return !!this._sortBy;\n }\n\n get ariaSort(): ClrDatagridAriaSortOrder {\n switch (this._sortOrder) {\n case ClrDatagridSortOrder.ASC:\n return ClrDatagridAriaSortOrder.ASC;\n case ClrDatagridSortOrder.DESC:\n return ClrDatagridAriaSortOrder.DESC;\n case ClrDatagridSortOrder.UNSORTED:\n default:\n return ClrDatagridAriaSortOrder.UNSORTED;\n }\n }\n\n get sortDirection(): 'up' | 'down' | null {\n return this._sortDirection;\n }\n\n /**\n * @NOTE type `any` here is to let us pass templateStrictMode, because in our code we try to handle\n * two types of filters String and Number with the same variable but both of them work with different\n * format we got an error for casting. We could not cast anything inside the template so to not mess the\n * casting, the last type is set to `any`\n *\n * Orignial types: string | [number, number]\n */\n get filterValue() {\n if (this.filter instanceof DatagridStringFilterImpl || this.filter instanceof DatagridNumericFilterImpl) {\n return this.filter.value;\n }\n return null;\n }\n set filterValue(newValue: any) {\n if (this.filter instanceof DatagridStringFilterImpl || this.filter instanceof DatagridNumericFilterImpl) {\n this.updateFilterValue = newValue;\n this.filterValueChange.emit(this.filter.value);\n }\n }\n\n get _view() {\n return this.wrappedInjector.get(WrappedColumn, this.vcr).columnView;\n }\n\n ngOnInit() {\n this.wrappedInjector = new HostWrapper(WrappedColumn, this.vcr);\n }\n\n ngAfterViewInit() {\n this.setFilterToggleAriaLabel();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes.colType &&\n changes.colType.currentValue &&\n changes.colType.currentValue !== changes.colType.previousValue\n ) {\n if (!this.customFilter && !this.filter && this.colType && this.field) {\n this.setupDefaultFilter(this.field, this.colType);\n }\n }\n if (changes.field && changes.field.currentValue && changes.field.currentValue !== changes.field.previousValue) {\n if (!this.customFilter && this.colType) {\n this.setupDefaultFilter(this.field, this.colType);\n }\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n\n /**\n * Sorts the datagrid based on this column\n */\n sort(reverse?: boolean) {\n if (!this.sortable) {\n return;\n }\n\n if (!this.disableUnsort && reverse === undefined && this.sortOrder === ClrDatagridSortOrder.DESC) {\n this._sortOrder = ClrDatagridSortOrder.UNSORTED;\n this._sort.clear();\n this._sortDirection = null;\n this.sortOrderChange.emit(this._sortOrder);\n return;\n }\n\n this._sort.toggle(this._sortBy, reverse);\n\n // setting the private variable to not retrigger the setter logic\n this._sortOrder = this._sort.reverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;\n // Sets the correct icon for current sort order\n this._sortDirection = this._sortOrder === ClrDatagridSortOrder.DESC ? 'down' : 'up';\n this.sortOrderChange.emit(this._sortOrder);\n }\n\n // Disabled for now, together with the pin toggle in the template and the clrDgPinnable input.\n //\n // /**\n // * Pins or unpins the column from the header control. Going through the `pinned` setter keeps the\n // * rendering in sync, and the output lets the application follow a change it did not initiate -\n // * without it a one-way [clrDgPinned] binding would write the old value straight back.\n // */\n // protected togglePinned(event: MouseEvent) {\n // // The header is a drop target for the column ordering addon and a click target for the sort\n // // button next to us, so the toggle keeps its click to itself.\n // event.stopPropagation();\n //\n // this.pinned = !this.pinned;\n // this.pinnedChange.emit(this.pinned);\n // }\n\n private listenForDetailPaneChanges() {\n return this.detailService.stateChange.subscribe(state => {\n if (this.showSeparator !== !state) {\n this.showSeparator = !state;\n }\n });\n }\n\n private setFilterToggleAriaLabel() {\n const filterToggle = this.el.nativeElement.querySelector('.datagrid-filter-toggle');\n if (filterToggle) {\n filterToggle.ariaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {\n COLUMN: this?.titleContainer?.nativeElement.textContent.trim().toLocaleLowerCase(),\n });\n }\n }\n\n private listenForSortingChanges() {\n return this._sort.change.subscribe(sort => {\n // Need to manually mark the component to be checked\n // for both activating and deactivating sorting\n this.changeDetectorRef.markForCheck();\n // We're only listening to make sure we emit an event when the column goes from sorted to unsorted\n if (this.sortOrder !== ClrDatagridSortOrder.UNSORTED && sort.comparator !== this._sortBy) {\n this._sortOrder = ClrDatagridSortOrder.UNSORTED;\n this.sortOrderChange.emit(this._sortOrder);\n this._sortDirection = null;\n }\n });\n }\n\n private setupDefaultFilter(field: string, colType: 'string' | 'number') {\n if (colType === 'number') {\n this.setFilter(new DatagridNumericFilterImpl(new DatagridPropertyNumericFilter(field)));\n } else if (colType === 'string') {\n this.setFilter(new DatagridStringFilterImpl(new DatagridPropertyStringFilter(field)));\n }\n if (this.filter && this.initFilterValue) {\n this.updateFilterValue = this.initFilterValue;\n // This initFilterValue should be used only once after the filter registration\n // So deleting this property value to prevent it from being used again\n // if this field property is set again\n delete this.initFilterValue;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nimport { FiltersProvider } from './filters';\nimport { Page } from './page';\nimport { Sort } from './sort';\n\nexport type ClrDatagridItemsIdentityFunction<T> = (item: T) => any;\n\n@Injectable()\nexport class Items<T = any> {\n /**\n * Indicates if the data is currently loading\n */\n loading = false;\n\n /**\n * Subscriptions to the other providers changes.\n */\n private _filtersSub: Subscription;\n private _sortSub: Subscription;\n private _pageSub: Subscription;\n\n /**\n * Whether we should use smart items for this datagrid or let the user handle\n * everything.\n */\n private _smart = false;\n\n /**\n * List of all items in the datagrid\n */\n private _all: T[];\n\n /**\n * Internal temporary step, which we preserve to avoid re-filtering or re-sorting if not necessary\n */\n private _filtered: T[];\n\n /**\n * List of items currently displayed\n */\n private _displayed: T[] = [];\n\n /**\n * The Observable that lets other classes subscribe to items changes\n */\n private _change = new Subject<T[]>();\n\n private _allChanges = new Subject<T[]>();\n\n constructor(\n private _filters: FiltersProvider<T>,\n private _sort: Sort<T>,\n private _page: Page\n ) {}\n\n get smart(): boolean {\n return this._smart;\n }\n\n get all() {\n return this._all;\n }\n set all(items: T[]) {\n this._all = items;\n this.emitAllChanges(items);\n if (this.smart) {\n this._filterItems();\n } else {\n this._displayed = items;\n this.emitChange();\n }\n }\n\n get displayed(): T[] {\n // Ideally we could return an immutable array, but we don't have it in Clarity yet.\n return this._displayed;\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<T[]> {\n return this._change.asObservable();\n }\n\n get allChanges(): Observable<T[]> {\n return this._allChanges.asObservable();\n }\n\n /**\n * Checks if we don't have data to process yet, to abort early operations\n */\n private get uninitialized() {\n return !this._all;\n }\n\n /**\n * Tracking function to identify objects.\n */\n identifyBy: ClrDatagridItemsIdentityFunction<T> = item => item;\n\n /**\n * Cleans up our subscriptions to other providers\n */\n destroy() {\n if (this._filtersSub) {\n this._filtersSub.unsubscribe();\n }\n if (this._sortSub) {\n this._sortSub.unsubscribe();\n }\n if (this._pageSub) {\n this._pageSub.unsubscribe();\n }\n }\n\n smartenDown() {\n this._smart = false;\n\n this.destroy();\n }\n\n smartenUp() {\n this._smart = true;\n /*\n * These observers trigger a chain of function: filter -> sort -> paginate\n * An observer up the chain re-triggers all the operations that follow it.\n */\n this._filtersSub = this._filters.change.subscribe(() => this._filterItems());\n this._sortSub = this._sort.change.subscribe(() => {\n // Special case, if the datagrid went from sorted to unsorted, we have to re-filter\n // to get the original order back\n if (!this._sort.comparator) {\n this._filterItems();\n } else {\n this._sortItems();\n }\n });\n this._pageSub = this._page.change.subscribe(() => this._changePage());\n }\n\n /**\n * Manually recompute the list of displayed items\n */\n refresh() {\n if (this.smart) {\n this._filterItems();\n }\n }\n\n private emitChange() {\n this._change.next(this.displayed);\n }\n\n private emitAllChanges(items: T[]): void {\n this._allChanges.next(items);\n }\n\n /**\n * FiltersProvider items from the raw list\n */\n private _filterItems() {\n if (this.uninitialized) {\n return;\n }\n if (this._filters.hasActiveFilters()) {\n this._filtered = this._all.filter(item => this._filters.accepts(item));\n } else {\n // Work on a shallow copy of the array, to not modify the user's model\n this._filtered = this._all.slice();\n }\n this._page.totalItems = this._filtered.length;\n this._sortItems();\n }\n\n /**\n * Sorts items in the filtered list\n */\n private _sortItems() {\n if (this.uninitialized) {\n return;\n }\n if (this._sort.comparator) {\n this._filtered.sort((a, b) => this._sort.compare(a, b));\n }\n this._changePage();\n }\n\n /**\n * Extracts the current page from the sorted list\n */\n private _changePage() {\n // If we know we have pagination but the page size hasn't been set yet, we wait for it.\n if (this.uninitialized || (this._page.activated && this._page.size === 0)) {\n return;\n }\n if (this._page.size > 0) {\n this._displayed = this._filtered.slice(this._page.firstItem, this._page.lastItem + 1);\n } else {\n this._displayed = this._filtered;\n }\n this.emitChange();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgForOf, NgForOfContext } from '@angular/common';\nimport {\n Directive,\n DoCheck,\n Input,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { Items } from './providers/items';\n\n@Directive({\n selector: '[clrDgItems][clrDgItemsOf]',\n standalone: false,\n})\nexport class ClrDatagridItems<T> implements DoCheck, OnDestroy {\n private iterableProxy: NgForOf<T>;\n private _rawItems: T[];\n private differ: IterableDiffer<T> | null = null;\n private subscriptions: Subscription[] = [];\n\n constructor(\n public template: TemplateRef<NgForOfContext<T>>,\n private differs: IterableDiffers,\n private items: Items,\n vcr: ViewContainerRef\n ) {\n items.smartenUp();\n this.iterableProxy = new NgForOf<T>(vcr, template, differs);\n this.subscriptions.push(\n items.change.subscribe(newItems => {\n this.iterableProxy.ngForOf = newItems;\n this.iterableProxy.ngDoCheck();\n })\n );\n }\n\n @Input('clrDgItemsOf')\n set rawItems(items: T[]) {\n this._rawItems = items ? items : []; // local copy for ngOnChange diffing\n }\n\n @Input('clrDgItemsTrackBy')\n set trackBy(value: TrackByFunction<T>) {\n this.iterableProxy.ngForTrackBy = value;\n }\n\n /**\n * Asserts the correct type of the template context that the directive will render.\n * See https://angular.io/guide/structural-directives#typing-the-directives-context\n *\n * The presence of this method is a signal to the Ivy template type-check compiler that the\n * structural directive renders its template with a specific context type.\n */\n static ngTemplateContextGuard<T>(_dir: ClrDatagridItems<T>, _ctx: unknown): _ctx is NgForOfContext<T> {\n return true;\n }\n\n ngDoCheck() {\n if (!this.differ) {\n this.differ = this.differs.find(this._rawItems).create(this.iterableProxy.ngForTrackBy);\n }\n if (this.differ) {\n const changes = this.differ.diff(this._rawItems);\n if (changes) {\n // TODO: not very efficient right now,\n // but premature optimization is the root of all evil.\n this.items.all = this._rawItems;\n }\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.items.smartenDown();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\nimport { Items } from './providers/items';\n\n@Component({\n selector: 'clr-dg-placeholder',\n template: `\n <div class=\"datagrid-placeholder\" [class.datagrid-empty]=\"emptyDatagrid\">\n @if (emptyDatagrid) {\n <div class=\"datagrid-placeholder-image\"></div>\n }\n <span class=\"datagrid-placeholder-content\">\n @if (emptyDatagrid) {\n <ng-content></ng-content>\n }\n </span>\n </div>\n `,\n host: { '[class.datagrid-placeholder-container]': 'true' },\n standalone: false,\n})\nexport class ClrDatagridPlaceholder<T = any> {\n constructor(private items: Items<T>) {}\n\n /**\n * Tests if the datagrid is empty, meaning it doesn't contain any items\n */\n get emptyDatagrid() {\n return !this.items.loading && (!this.items.displayed || this.items.displayed.length === 0);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, EmbeddedViewRef, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'dg-wrapped-cell',\n template: `\n <ng-template #cellPortal>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class WrappedCell implements AfterViewInit, OnDestroy {\n @ViewChild('cellPortal') templateRef: TemplateRef<void>;\n cellView: EmbeddedViewRef<void>; // the cells projected view\n\n ngAfterViewInit() {\n this.cellView = this.templateRef.createEmbeddedView(null);\n }\n\n ngOnDestroy() {\n this.cellView.destroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChildren, Injector, OnInit, QueryList, ViewContainerRef } from '@angular/core';\nimport { ClrSignpost } from '@clr/angular/popover/signpost';\nimport { HostWrapper } from '@clr/angular/utils';\n\nimport { WrappedCell } from './wrapped-cell';\n\n@Component({\n selector: 'clr-dg-cell',\n template: `<ng-content></ng-content>`,\n host: {\n '[class.datagrid-cell]': 'true',\n '[class.datagrid-signpost-trigger]': 'signpost.length > 0',\n role: 'gridcell',\n },\n standalone: false,\n})\nexport class ClrDatagridCell implements OnInit {\n /*********\n * @property signpost\n *\n * @description\n * @ContentChild is used to detect the presence of a Signpost in the projected content.\n * On the host, we set the .datagrid-signpost-trigger class on the cell when signpost.length is greater than 0.\n *\n */\n @ContentChildren(ClrSignpost) signpost: QueryList<ClrSignpost>;\n\n private wrappedInjector: Injector;\n\n constructor(private vcr: ViewContainerRef) {}\n\n get _view() {\n return this.wrappedInjector.get(WrappedCell, this.vcr).cellView;\n }\n\n ngOnInit() {\n this.wrappedInjector = new HostWrapper(WrappedCell, this.vcr);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ClrLoadingState, IfExpandService } from '@clr/angular/utils';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nlet nbRow = 0;\n\n@Injectable()\nexport class DatagridIfExpandService extends IfExpandService {\n expandableId = '';\n\n private _replace = new BehaviorSubject(false);\n private _animate = new Subject<void>();\n\n constructor() {\n super();\n nbRow++;\n this.expandableId = 'clr-dg-expandable-row-' + nbRow;\n }\n // due to the es5 spec if the set is overridden on base class the getter must also be overridden\n override get expanded(): boolean {\n return this._expanded;\n }\n override set expanded(value: boolean) {\n value = !!value;\n if (value !== this._expanded) {\n this._expanded = value;\n this._animate.next();\n this._expandChange.next(value);\n }\n }\n\n get replace(): Observable<boolean> {\n return this._replace.asObservable();\n }\n\n get animate(): Observable<void> {\n return this._animate.asObservable();\n }\n\n override loadingStateChange(state: ClrLoadingState) {\n super.loadingStateChange(state);\n if (state !== ClrLoadingState.LOADING) {\n this._animate.next();\n }\n }\n\n setReplace(replaceValue: boolean) {\n this._replace.next(replaceValue);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum DatagridDisplayMode {\n DISPLAY,\n CALCULATE,\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum SelectionType {\n /**\n * User cannot select any row in the Datagrid\n */\n None = 'none',\n\n /**\n * User can select only one row at a time in the Datagrid.\n */\n Single = 'single',\n\n /**\n * User can select any number of rows in the Datagrid.\n */\n Multi = 'multi',\n}\n\nconst SELECTION_TYPE_VALUES = new Set<string>(Object.values(SelectionType));\n\nexport function selectionTypeAttribute(value: SelectionType | string): SelectionType {\n if (SELECTION_TYPE_VALUES.has(value as string)) {\n return value as SelectionType;\n }\n throw new Error(`Invalid SelectionType: \"${value}\". Expected one of: ${[...SELECTION_TYPE_VALUES].join(', ')}`);\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, EmbeddedViewRef, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'dg-wrapped-row',\n template: `\n <ng-template #rowPortal>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class WrappedRow implements AfterViewInit, OnDestroy {\n @ViewChild('rowPortal') templateRef: TemplateRef<void>;\n rowView: EmbeddedViewRef<void>; // the rows projected view (in memory)\n\n ngAfterViewInit() {\n // Create the cells view in memory, not the DOM.\n this.rowView = this.templateRef.createEmbeddedView(null);\n }\n\n ngOnDestroy() {\n this.rowView.destroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, IterableDiffer, IterableDiffers, TrackByFunction } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, delay } from 'rxjs/operators';\n\nimport { FiltersProvider } from './filters';\nimport { ClrDatagridItemsIdentityFunction, Items } from './items';\nimport { SelectionType } from '../enums/selection-type';\n\nlet nbSelection = 0;\n\n@Injectable()\nexport class Selection<T = any> {\n id: string;\n preserveSelection = false;\n\n /**\n * Last selection, for use in range selection.\n */\n rangeStart: T;\n\n /**\n * Shift key state, for use in range selection.\n */\n shiftPressed = false;\n\n /** @deprecated since 2.0, remove in 3.0 */\n rowSelectionMode = false;\n\n private lockedRefs: T[] = []; // Ref of locked items\n private _currentSelectionRefs: T[] = [];\n private valueCollector = new Subject<T[]>();\n private _selectionType: SelectionType = SelectionType.None;\n\n /**\n * The current selection\n */\n private _current: T[];\n\n /**\n * The Observable that lets other classes subscribe to selection changes\n */\n private _change = new Subject<T[]>();\n\n /**\n * Subscriptions to the other providers changes.\n */\n private subscriptions: Subscription[] = [];\n\n /**\n * Differ to track changes of multi selection.\n */\n private _differ!: IterableDiffer<T>;\n private identifyBy: ClrDatagridItemsIdentityFunction<T>;\n\n constructor(\n private _items: Items<T>,\n filters: FiltersProvider<T>,\n differs: IterableDiffers\n ) {\n this.id = 'clr-dg-selection' + nbSelection++;\n this.identifyBy = _items.identifyBy;\n this._differ = differs.find(this._current || []).create<T>(this.identifyBy as TrackByFunction<T>);\n\n this.subscriptions.push(\n filters.change.subscribe(() => {\n if (!this.selectable || this.preserveSelection) {\n return;\n }\n this.clearSelection();\n })\n );\n\n this.subscriptions.push(\n _items.allChanges.pipe(delay(0)).subscribe(updatedItems => {\n // Reset the lockedRefs;\n const updateLockedRef: T[] = [];\n\n switch (this.selectionType) {\n case SelectionType.None: {\n break;\n }\n\n case SelectionType.Single: {\n let newSingle: any;\n let selectionUpdated = false;\n\n updatedItems.forEach(item => {\n if (item === null || item === undefined) {\n // Virtual scroll may emit a dense array of undefined slot placeholders. Those must\n // never match the empty single-selection ref (see virtual-scroll + Single).\n return;\n }\n const ref = _items.identifyBy(item);\n // If one of the updated items is the previously selectedSingle, set it as the new one\n if (this.currentSelectionRefs[0] === ref) {\n newSingle = item;\n selectionUpdated = true;\n }\n if (this.lockedRefs.indexOf(ref) > -1) {\n updateLockedRef.push(ref);\n }\n });\n\n if (selectionUpdated) {\n this.current = [newSingle];\n }\n break;\n }\n\n case SelectionType.Multi: {\n let leftOver: any[] = this.current.slice();\n let selectionUpdated = false;\n\n // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that\n // we need to go over every updated item and check to see if there are valid to be\n // locked or not and update it. When only add items that are found in the lockedRefs back.\n //\n // The both loops below that goes over updatedItems could be combined into one.\n updatedItems.forEach(item => {\n if (item === null || item === undefined) {\n return;\n }\n const ref = _items.identifyBy(item);\n if (this.lockedRefs.indexOf(ref) > -1) {\n updateLockedRef.push(ref);\n }\n });\n\n // TODO: revisit this when we work on https://github.com/vmware/clarity/issues/2342\n // currently, the selection is cleared when filter is applied, so the logic inside\n // the if statement below results in broken behavior.\n if (leftOver.length > 0) {\n updatedItems.forEach(item => {\n if (item === null || item === undefined) {\n return;\n }\n const ref = _items.identifyBy(item);\n // Look in current selected refs array if item is selected, and update actual value\n const selectedIndex = this.currentSelectionRefs.indexOf(ref);\n if (selectedIndex > -1) {\n leftOver[selectedIndex] = item;\n selectionUpdated = true;\n }\n });\n\n // Filter out any unmatched items if we're using smart datagrids where we expect all items to be\n // present\n if (_items.smart) {\n leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);\n if (this.current.length !== leftOver.length) {\n selectionUpdated = true;\n }\n }\n\n if (selectionUpdated) {\n this.current = leftOver;\n }\n }\n break;\n }\n\n default: {\n break;\n }\n }\n // Sync locked items\n this.lockedRefs = updateLockedRef;\n })\n );\n\n this.subscriptions.push(this.valueCollector.pipe(debounceTime(0)).subscribe(() => this.emitChange()));\n }\n\n get selectionType(): SelectionType {\n return this._selectionType;\n }\n set selectionType(value: SelectionType) {\n if (value === this.selectionType) {\n return;\n }\n\n this._selectionType = value ?? SelectionType.None;\n\n if (!this._current && this._selectionType !== SelectionType.None) {\n this._current = [];\n }\n }\n\n get current(): T[] {\n return this._current;\n }\n set current(value: T[]) {\n this.updateCurrent(value, true);\n this.updateCurrentSelectionRefs();\n }\n\n get currentSingle(): T {\n return this._current?.length ? this._current[0] : undefined;\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<T[]> {\n return this._change.asObservable();\n }\n\n get selectable(): boolean {\n return this._selectionType !== SelectionType.None;\n }\n\n // Refs of currently selected items\n private get currentSelectionRefs(): T[] {\n return this._currentSelectionRefs;\n }\n\n checkForChanges(): void {\n const changes = this._differ.diff(this._current);\n // @TODO move the identifyBy from items to selection as it's used only here and is not needed in items\n if (this.identifyBy !== this._items.identifyBy) {\n this.identifyBy = this._items.identifyBy;\n }\n if (changes) {\n this.updateCurrentSelectionRefs();\n }\n }\n\n clearSelection(): void {\n this._current = [];\n this._currentSelectionRefs = [];\n this.emitChange();\n }\n\n /**\n * Cleans up our subscriptions to other providers\n */\n destroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n updateCurrent(value: T[], emit: boolean) {\n this._current = value;\n if (emit) {\n this.valueCollector.next(value);\n }\n }\n\n /**\n * Checks if an item is currently selected\n */\n isSelected(item: T): boolean {\n const refIndex = this.currentSelectionRefs.indexOf(this._items.identifyBy(item));\n if (this._selectionType === SelectionType.Single) {\n return refIndex === 0;\n } else if (this._selectionType === SelectionType.Multi) {\n return refIndex >= 0;\n }\n\n return false;\n }\n\n /**\n * Selects or deselects an item\n */\n setSelected(item: T, selected: boolean) {\n const ref = this._items.identifyBy(item);\n const index = this.currentSelectionRefs ? this.currentSelectionRefs.indexOf(ref) : -1;\n\n switch (this._selectionType) {\n case SelectionType.None:\n break;\n case SelectionType.Single:\n if (selected) {\n this.current = [item];\n }\n // in single selection, set currentSingle method should be used\n break;\n case SelectionType.Multi:\n if (index >= 0 && !selected) {\n this.deselectItem(index);\n } else if (index < 0 && selected) {\n this.selectItem(item);\n }\n break;\n default:\n break;\n }\n }\n\n /**\n * Checks if all currently displayed items are selected\n */\n isAllSelected(): boolean {\n if (this._selectionType !== SelectionType.Multi || !this._items.displayed) {\n return false;\n }\n // make sure to exclude the locked items from the list when counting\n const displayedItems: T[] = this._items.displayed.filter(item => {\n return this.isLocked(item) === false;\n });\n\n const nbDisplayed = displayedItems.length;\n if (nbDisplayed < 1) {\n return false;\n }\n const temp: T[] = displayedItems.filter(item => {\n const ref = this._items.identifyBy(item);\n return this.currentSelectionRefs.indexOf(ref) > -1;\n });\n return temp.length === displayedItems.length;\n }\n\n /**\n * Lock and unlock item\n */\n lockItem(item: T, lock: boolean) {\n if (this.canItBeLocked()) {\n const ref = this._items.identifyBy(item);\n if (lock === true) {\n // Add to lockedRef\n this.lockedRefs.push(ref);\n } else {\n // Remove from lockedRef\n this.lockedRefs = this.lockedRefs.filter(lockedItem => ref !== lockedItem);\n }\n }\n }\n\n /**\n * Check is item locked or not by searching into lockedRefs for entry\n */\n isLocked(item: T): boolean {\n /**\n * The check for selectionType will boost the performance by NOT searching\n * into the array when there is no need for that.\n */\n if (this.canItBeLocked()) {\n const ref = this._items.identifyBy(item);\n return this.lockedRefs.indexOf(ref) > -1;\n }\n\n return false;\n }\n\n /**\n * Selects or deselects all currently displayed items\n */\n toggleAll() {\n if (this._selectionType === SelectionType.None || this._selectionType === SelectionType.Single) {\n return;\n }\n /**\n * If every currently displayed item is already selected, we clear them.\n * If at least one item isn't selected, we select every currently displayed item.\n */\n if (this.isAllSelected()) {\n this._items.displayed.forEach(item => {\n const ref = this._items.identifyBy(item);\n const currentIndex = this.currentSelectionRefs.indexOf(ref);\n if (currentIndex > -1 && this.isLocked(item) === false) {\n this.deselectItem(currentIndex);\n }\n });\n } else {\n this._items.displayed.forEach(item => {\n if (!this.isSelected(item) && this.isLocked(item) === false) {\n this.selectItem(item);\n }\n });\n }\n }\n\n /**\n * Selects an item\n */\n private selectItem(item: T): void {\n this.current = this.current.concat(item);\n }\n\n /**\n * Deselects an item\n */\n private deselectItem(indexOfItem: number): void {\n this.current = this.current.slice(0, indexOfItem).concat(this.current.slice(indexOfItem + 1));\n if (indexOfItem < this.currentSelectionRefs.length) {\n // Keep selected refs array in sync\n const removedItems = this.currentSelectionRefs[indexOfItem];\n // locked reference is no longer needed (if any)\n this.lockedRefs = this.lockedRefs.filter(locked => locked !== removedItems[0]);\n }\n }\n\n /**\n * Make sure that it could be locked\n */\n private canItBeLocked(): boolean {\n return this._selectionType !== SelectionType.None;\n }\n\n private emitChange() {\n this._change.next(this.current);\n }\n\n private updateCurrentSelectionRefs() {\n this._currentSelectionRefs = this._current?.map(item => this._items.identifyBy(item)) || [];\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class RowActionService {\n private actionableCount = 0;\n\n /**\n * false means no rows with action\n */\n get hasActionableRow(): boolean {\n return this.actionableCount > 0;\n }\n\n register() {\n this.actionableCount++;\n }\n\n unregister() {\n this.actionableCount--;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\nimport { DetailService } from './detail.service';\n\n@Injectable()\nexport class ExpandableRowsCount {\n private expandableCount = 0;\n\n constructor(private detailService: DetailService) {}\n\n /**\n * false means no rows with action\n * check if details are on, and disable rows entirely\n */\n get hasExpandableRow(): boolean {\n return !this.detailService.enabled && this.expandableCount > 0;\n }\n\n register() {\n this.expandableCount++;\n }\n\n unregister() {\n this.expandableCount--;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { DatagridDisplayMode } from '../enums/display-mode.enum';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { DatagridRenderOrganizer } from '../render/render-organizer';\n\n@Injectable()\nexport class DisplayModeService implements OnDestroy {\n protected _view = new BehaviorSubject(DatagridDisplayMode.DISPLAY);\n\n private subscriptions: Subscription[] = [];\n\n constructor(renderOrganizer: DatagridRenderOrganizer) {\n this.subscriptions.push(\n renderOrganizer\n .filterRenderSteps(DatagridRenderStep.CALCULATE_MODE_ON)\n .subscribe(() => this._view.next(DatagridDisplayMode.CALCULATE))\n );\n\n this.subscriptions.push(\n renderOrganizer\n .filterRenderSteps(DatagridRenderStep.CALCULATE_MODE_OFF)\n .subscribe(() => this._view.next(DatagridDisplayMode.DISPLAY))\n );\n }\n\n get view(): Observable<DatagridDisplayMode> {\n return this._view.asObservable();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, forwardRef, Input, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: 'input[type=radio][clrDgSingleSelectionRadio]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClrDatagridSingleSelectionValueAccessor),\n multi: true,\n },\n ],\n host: {\n '(change)': 'onChange(value)',\n '(blur)': 'onTouched()',\n },\n})\nexport class ClrDatagridSingleSelectionValueAccessor implements ControlValueAccessor {\n @Input() value;\n @Input() clrDgIdentityFn!: (value: any) => unknown;\n\n private state: any;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLInputElement>\n ) {}\n\n onChange: (value: any) => void = () => {};\n\n onTouched: () => void = () => {};\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n writeValue(value: any): void {\n this.state = value;\n this.updateChecked();\n }\n\n private keyOf(value: any): unknown {\n if (value && this.clrDgIdentityFn) {\n return this.clrDgIdentityFn(value);\n }\n return value;\n }\n\n private updateChecked(): void {\n // Never mark the radio as checked when there is no real selection (state is null/undefined)\n // or the row item itself is a virtual-scroll placeholder slot (value is null/undefined).\n // Otherwise keyOf(undefined) === keyOf(undefined) would falsely check the radio.\n if (this.state === null || this.state === undefined || this.value === null || this.value === undefined) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', false);\n return;\n }\n const state = this.keyOf(this.state);\n const value = this.keyOf(this.value);\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', state === value);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, HostListener } from '@angular/core';\n\nimport { Selection } from './providers/selection';\n\n@Directive({\n selector: '.datagrid-select',\n standalone: false,\n})\nexport class ClrDatagridSelectionCellDirective {\n constructor(private readonly selection: Selection) {}\n\n @HostListener('click', ['$event'])\n private onSelectionCellClick(event: MouseEvent & { target: HTMLElement }) {\n // We want to effectively expand the selection click target to the entire selection cell.\n\n // If row selection is enabled, do nothing because the entire selection cell is already clickable.\n if (this.selection.rowSelectionMode) {\n return;\n }\n\n // If click was outside the label/input, forward the click to the input.\n if (event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT') {\n event.target.querySelector('input')?.click();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChildren,\n DOCUMENT,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n Output,\n QueryList,\n Renderer2,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ClrCommonStringsService,\n ClrExpandableAnimationDirective,\n HostWrapper,\n IfExpandService,\n LoadingListener,\n} from '@clr/angular/utils';\nimport { combineLatest, ReplaySubject, Subscription } from 'rxjs';\n\nimport { ClrDatagridCell } from './datagrid-cell';\nimport { DatagridIfExpandService } from './datagrid-if-expanded.service';\nimport { DatagridDisplayMode } from './enums/display-mode.enum';\nimport { SelectionType } from './enums/selection-type';\nimport { ColumnsService } from './providers/columns.service';\nimport { DetailService } from './providers/detail.service';\nimport { DisplayModeService } from './providers/display-mode.service';\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\nimport { Items } from './providers/items';\nimport { RowActionService } from './providers/row-action-service';\nimport { Selection } from './providers/selection';\nimport { WrappedRow } from './wrapped-row';\n\nlet nbRow = 0;\n\n@Component({\n selector: 'clr-dg-row',\n templateUrl: './datagrid-row.html',\n host: {\n '[class.datagrid-row]': 'true',\n '[class.datagrid-row-skeleton]': 'skeletonLoading',\n '[class.datagrid-selected]': 'selected',\n '[attr.aria-owns]': 'id',\n role: 'rowgroup',\n },\n providers: [\n DatagridIfExpandService,\n { provide: IfExpandService, useExisting: DatagridIfExpandService },\n { provide: LoadingListener, useExisting: DatagridIfExpandService },\n ],\n standalone: false,\n})\nexport class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit {\n @Output('clrDgSelectedChange') selectedChanged = new EventEmitter<boolean>(false);\n @Output('clrDgExpandedChange') expandedChange = new EventEmitter<boolean>(false);\n @Input('clrDgDetailDisabled') detailDisabled = false;\n @Input('clrDgDetailHidden') detailHidden = false;\n @Input('clrDgSkeletonLoading') skeletonLoading = false;\n\n id: string;\n radioId: string;\n checkboxId: string;\n expandableId: string;\n replaced: boolean;\n displayCells = false;\n expandAnimationTrigger = false;\n\n /* reference to the enum so that template can access */\n SELECTION_TYPE = SelectionType;\n\n /**\n * @internal\n */\n itemChanges = new ReplaySubject<T>(1);\n\n /*****\n * property dgCells\n *\n * @description\n * A Query List of the ClrDatagrid cells in this row.\n *\n */\n @ContentChildren(ClrDatagridCell) dgCells: QueryList<ClrDatagridCell>;\n\n @ViewChild(ClrExpandableAnimationDirective) expandAnimation: ClrExpandableAnimationDirective;\n @ViewChild('detailButton') detailButton: ElementRef<HTMLButtonElement>;\n @ViewChild('stickyCells', { read: ViewContainerRef }) _stickyCells: ViewContainerRef;\n @ViewChild('pinnedCells', { read: ViewContainerRef }) _pinnedCells: ViewContainerRef;\n @ViewChild('scrollableCells', { read: ViewContainerRef }) _scrollableCells: ViewContainerRef;\n @ViewChild('calculatedCells', { read: ViewContainerRef }) _calculatedCells: ViewContainerRef;\n @ViewChild('fixedCellTemplate') _fixedCellTemplate: TemplateRef<any>;\n\n private _item: T;\n private _selected = false;\n private _detailOpenLabel = '';\n private _detailCloseLabel = '';\n private _rowSelectionLabel = '';\n private wrappedInjector: Injector;\n private subscriptions: Subscription[] = [];\n\n // By default, every item is selectable; it becomes not selectable only if it's explicitly set to false\n private _selectable: boolean | string = true;\n\n constructor(\n public selection: Selection<T>,\n public rowActionService: RowActionService,\n public globalExpandable: ExpandableRowsCount,\n public expand: DatagridIfExpandService,\n public detailService: DetailService,\n private displayMode: DisplayModeService,\n private vcr: ViewContainerRef,\n renderer: Renderer2,\n public el: ElementRef<HTMLElement>,\n public commonStrings: ClrCommonStringsService,\n private items: Items,\n private columnsService: ColumnsService,\n @Inject(DOCUMENT) private document: any\n ) {\n nbRow++;\n this.id = 'clr-dg-row' + nbRow;\n this.radioId = 'clr-dg-row-rd' + nbRow;\n this.checkboxId = 'clr-dg-row-cb' + nbRow;\n this.expandableId = expand.expandableId;\n\n this.subscriptions.push(\n combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {\n if (expandReplaceValue && expandChangeValue) {\n // replaced and expanding\n this.replaced = true;\n renderer.addClass(el.nativeElement, 'datagrid-row-replaced');\n } else {\n this.replaced = false;\n // Handles these cases: not replaced and collapsing & replaced and\n // collapsing and not replaced and expanding.\n renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');\n }\n })\n );\n }\n\n /**\n * Model of the row, to use for selection\n */\n @Input('clrDgItem')\n get item(): T {\n return this._item;\n }\n set item(item: T) {\n this._item = item;\n this.itemChanges.next(item);\n this.clrDgSelectable = this._selectable;\n }\n\n @Input('clrDgSelectable')\n get clrDgSelectable() {\n return !this.selection.isLocked(this.item);\n }\n set clrDgSelectable(value: boolean | string) {\n if (this.item) {\n this.selection.lockItem(this.item, value === 'false' || value === false);\n }\n // Store this value locally, to be initialized when item is initialized\n this._selectable = value;\n }\n\n /**\n * Indicates if the row is selected\n */\n @Input('clrDgSelected')\n get selected() {\n if (this.selection.selectionType === SelectionType.None) {\n return this._selected;\n } else {\n return this.selection.isSelected(this.item);\n }\n }\n set selected(value: boolean | string) {\n if (this.selection.selectionType === SelectionType.None) {\n this._selected = value as boolean;\n } else {\n if (value && this.selection.selectionType === SelectionType.Multi) {\n this.rangeSelect();\n } else {\n this.selection.rangeStart = null;\n }\n this.selection.setSelected(this.item, value as boolean);\n }\n }\n\n @Input('clrDgExpanded')\n get expanded() {\n return this.expand.expanded;\n }\n set expanded(value: boolean | string) {\n this.expand.expanded = value as boolean;\n }\n\n @Input()\n get clrDgDetailOpenLabel(): string {\n return this._detailOpenLabel ? this._detailOpenLabel : this.commonStrings.keys.open;\n }\n set clrDgDetailOpenLabel(label: string) {\n this._detailOpenLabel = label;\n }\n\n @Input()\n get clrDgDetailCloseLabel(): string {\n return this._detailCloseLabel ? this._detailCloseLabel : this.commonStrings.keys.close;\n }\n set clrDgDetailCloseLabel(label: string) {\n this._detailCloseLabel = label;\n }\n\n // CDE-151: Rename this field to clrDgRowSelectionLabel in v16\n @Input()\n get clrDgRowSelectionLabel(): string {\n return this._rowSelectionLabel ? this._rowSelectionLabel : this.commonStrings.keys.select;\n }\n set clrDgRowSelectionLabel(label: string) {\n this._rowSelectionLabel = label;\n }\n\n get _view() {\n return this.wrappedInjector.get(WrappedRow, this.vcr).rowView;\n }\n\n get identifyBy() {\n return this.items.identifyBy;\n }\n\n openDetails(event: MouseEvent, detailButton: HTMLButtonElement) {\n event.stopPropagation();\n\n this.detailService.toggle(this.item, detailButton);\n }\n\n ngOnInit() {\n this.wrappedInjector = new HostWrapper(WrappedRow, this.vcr);\n this.selection.lockItem(this.item, this.clrDgSelectable === false);\n }\n\n ngAfterContentInit() {\n this.dgCells.changes.subscribe(() => {\n this.insertCellViews();\n });\n }\n\n ngAfterViewInit() {\n this.subscriptions.push(\n this.displayMode.view.subscribe(viewChange => {\n // Listen for view changes and move cells around depending on the current displayType\n // remove cell views from display view\n for (let i = this._scrollableCells.length; i > 0; i--) {\n this._scrollableCells.detach();\n }\n // remove cell views of pinned columns from their static container\n for (let i = this._pinnedCells.length; i > 0; i--) {\n this._pinnedCells.detach();\n }\n // remove cell views from calculated view\n for (let i = this._calculatedCells.length; i > 0; i--) {\n this._calculatedCells.detach();\n }\n if (viewChange === DatagridDisplayMode.CALCULATE) {\n this.displayCells = false;\n // Inserts a fixed cell if any of these conditions are true.\n const fixedCellConditions = [\n this.selection.selectionType !== this.SELECTION_TYPE.None,\n this.rowActionService.hasActionableRow,\n this.globalExpandable.hasExpandableRow,\n this.detailService.enabled,\n ];\n fixedCellConditions\n .filter(Boolean)\n .forEach(() => this._calculatedCells.insert(this._fixedCellTemplate.createEmbeddedView(null)));\n this.dgCells.forEach(cell => {\n if (!cell._view.destroyed) {\n this._calculatedCells.insert(cell._view);\n }\n });\n } else {\n this.displayCells = true;\n this.insertCellViews();\n }\n }),\n this.expand.animate.subscribe(() => {\n this.expandAnimationTrigger = !this.expandAnimationTrigger;\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n }\n\n toggle(selected = !this.selected) {\n if (selected !== this.selected) {\n this.selected = selected;\n this.selectedChanged.emit(selected);\n }\n }\n\n toggleExpand(event: MouseEvent) {\n event.stopPropagation();\n\n if (this.expand.expandable) {\n this.expandAnimation.updateStartHeight();\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n }\n }\n\n /**\n * The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.\n * This prevents our intended range-selection, because this text-selection overrides our shift-click event.\n * We need to clear the stored selection range when shift-clicking. This will override the mostly unused shift-click\n * selection browser functionality, which is inconsistently implemented in browsers anyway.\n */\n clearRanges(event: MouseEvent) {\n if (this.selection.rowSelectionMode && event.shiftKey) {\n this.document.getSelection().removeAllRanges();\n // Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();\n // We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by\n // the preventDefault() and they toggle the checkbox second time, effectively retrurning it to not-selected.\n if (window.navigator.userAgent.indexOf('Firefox') !== -1) {\n event.preventDefault();\n this.toggle(true);\n }\n }\n }\n\n /**\n * @deprecated related to clrDgRowSelection, which is deprecated\n */\n protected selectRow(selected = !this.selected, $event) {\n // The label also captures clicks that bubble up to the row event listener, causing\n // this handler to run twice. This exits early to prevent toggling the checkbox twice.\n if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL' || !this._selectable) {\n return;\n }\n if (this.selection.selectionType === this.SELECTION_TYPE.Single) {\n this.selection.current = [this.item];\n } else {\n this.toggle(selected);\n }\n }\n\n /**\n * Projects the cells into the display containers. Cells of pinned columns go into their static\n * container so they stay visible during horizontal scroll; the rest stay scrollable. Cells are\n * matched with their column by declaration index, and iterating in that order keeps both groups\n * aligned with the header.\n */\n private insertCellViews() {\n this.dgCells.forEach((cell, index) => {\n if (cell._view.destroyed) {\n return;\n }\n\n const container = this.columnsService.isPinned(index) ? this._pinnedCells : this._scrollableCells;\n container.insert(cell._view);\n });\n }\n\n private rangeSelect() {\n const items = this.items.displayed;\n if (!items) {\n return;\n }\n const startIx = items.indexOf(this.selection.rangeStart);\n if (\n this.selection.rangeStart &&\n this.selection.current.includes(this.selection.rangeStart) &&\n this.selection.shiftPressed &&\n startIx !== -1\n ) {\n const endIx = items.indexOf(this.item);\n // Using Set to remove duplicates\n const newSelection = new Set(\n this.selection.current.concat(items.slice(Math.min(startIx, endIx), Math.max(startIx, endIx) + 1))\n );\n this.selection.current = [...newSelection];\n } else {\n // page number has changed or\n // no Shift was pressed or\n // rangeStart not yet set\n this.selection.rangeStart = this.item;\n }\n }\n}\n","<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n>\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n @if (selection.selectionType === SELECTION_TYPE.Multi) {\n <div\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n } @if (selection.selectionType === SELECTION_TYPE.Single) {\n <div\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n clrDgSingleSelectionRadio\n [clrDgIdentityFn]=\"identifyBy\"\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [ngModel]=\"selection.currentSingle\"\n (ngModelChange)=\"selection.current = [$event]\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n } @if (rowActionService.hasActionableRow) {\n <div class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\" role=\"gridcell\">\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n } @if (globalExpandable.hasExpandableRow) {\n <div class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\" role=\"gridcell\">\n @if (expand.expandable) { @if (!expand.loading) {\n <button\n tabindex=\"-1\"\n (click)=\"toggleExpand($event)\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expand.hasExpandTemplate && !expand.expanded ? null : expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n } @if (expand.loading) {\n <clr-spinner clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n } }\n </div>\n } @if (detailService.enabled) {\n <div class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\" role=\"gridcell\">\n @if (!detailHidden) {\n <button\n tabindex=\"-1\"\n (click)=\"openDetails($event, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n }\n </div>\n }\n </ng-container>\n </div>\n <div\n class=\"datagrid-row-scrollable\"\n [ngClass]=\"{'is-replaced': replaced && expanded}\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n >\n <div class=\"datagrid-scrolling-cells\">\n <div class=\"datagrid-pinned-cells\">\n <ng-container #pinnedCells></ng-container>\n </div>\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n\n @if (!expand.loading) {\n <ng-template [ngTemplateOutlet]=\"detail\"></ng-template>\n }\n </div>\n</div>\n<!--\nWe need the \"project into template\" hacks because we need this in 2 different places\ndepending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n\n<ng-template #fixedCellTemplate>\n <div class=\"datagrid-fixed-column datagrid-cell\" role=\"gridcell\"></div>\n</ng-template>\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ListRange } from '@angular/cdk/collections';\nimport {\n CDK_VIRTUAL_SCROLL_VIEWPORT,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualForOfContext,\n CdkVirtualScrollable,\n CdkVirtualScrollableElement,\n CdkVirtualScrollViewport,\n FixedSizeVirtualScrollStrategy,\n ScrollDispatcher,\n ViewportRuler,\n VIRTUAL_SCROLL_STRATEGY,\n VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Directive,\n DoCheck,\n ElementRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n EventEmitter,\n forwardRef,\n Inject,\n inject,\n Injector,\n Input,\n IterableDiffers,\n NgZone,\n OnDestroy,\n Output,\n Renderer2,\n runInInjectionContext,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagrid } from './datagrid';\nimport { ClrDatagridVirtualScrollRangeInterface } from './interfaces/virtual-scroll-data-range.interface';\nimport { Items } from './providers/items';\n\ntype CdkVirtualForInputKey =\n | 'cdkVirtualForOf'\n | 'cdkVirtualForTrackBy'\n | 'cdkVirtualForTemplate'\n | 'cdkVirtualForTemplateCacheSize';\n\ntype CdkVirtualForInputs<T> = Partial<Pick<CdkVirtualForOf<T>, CdkVirtualForInputKey>>;\n\ntype CdkFixedSizeVirtualScrollInputs = Pick<CdkFixedSizeVirtualScroll, 'itemSize' | 'minBufferPx' | 'maxBufferPx'>;\n\n@Directive({\n selector: '[clrVirtualScroll],[ClrVirtualScroll]',\n providers: [Items],\n standalone: false,\n})\nexport class ClrDatagridVirtualScrollDirective<T> implements AfterViewInit, DoCheck, OnDestroy {\n @Output() renderedRangeChange = new EventEmitter<ListRange>();\n @Input('clrVirtualPersistItems') persistItems = true;\n\n private _isUserProvidedItemSize = false;\n private _itemSize = 33;\n private _minBufferPx = 200;\n private _maxBufferPx = 400;\n\n private shouldUpdateAriaRowIndexes = false;\n\n private readonly datagridElementRef: ElementRef<HTMLElement>;\n\n private gridRoleElement: HTMLElement | null | undefined;\n private readonly virtualScrollStrategy: FixedSizeVirtualScrollStrategy;\n private virtualScrollViewport: CdkVirtualScrollViewport;\n private cdkVirtualFor: CdkVirtualForOf<T>;\n private subscriptions: Subscription[] = [];\n private topIndex = 0;\n\n // @deprecated remove the mutation observer when `datagrid-compact` class is deleted\n private mutationChanges: MutationObserver = new MutationObserver((mutations: MutationRecord[]) => {\n mutations.forEach((mutation: MutationRecord) => {\n // it is possible this to be called twice because the old class is removed and the new added\n if (\n !this._isUserProvidedItemSize &&\n (mutation.target as HTMLElement).classList.contains('datagrid-compact') &&\n this.itemSize > 25\n ) {\n this.updateItemSize(25);\n }\n });\n });\n\n private cdkVirtualForInputs: CdkVirtualForInputs<T> = {\n cdkVirtualForTrackBy: index => index,\n };\n private _totalItems: number;\n\n constructor(\n private readonly changeDetectorRef: ChangeDetectorRef,\n private iterableDiffers: IterableDiffers,\n private items: Items<T>,\n private readonly ngZone: NgZone,\n private readonly renderer2: Renderer2,\n private readonly templateRef: TemplateRef<CdkVirtualForOfContext<T>>,\n private readonly viewContainerRef: ViewContainerRef,\n private readonly directionality: Directionality,\n private readonly scrollDispatcher: ScrollDispatcher,\n private readonly viewportRuler: ViewportRuler,\n @Inject(forwardRef(() => ClrDatagrid)) private readonly datagrid: ClrDatagrid,\n private readonly injector: EnvironmentInjector\n ) {\n items.smartenUp();\n datagrid.detailService.preventFocusScroll = true;\n\n this.datagridElementRef = datagrid.el;\n\n // default\n this.cdkVirtualForTemplateCacheSize = 20;\n\n const cellHeightToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-cell-height');\n const cellHeightValue = +/calc\\(([0-9]+) \\* calc\\(\\(1rem \\/ 20\\) \\* 1\\)\\)/.exec(cellHeightToken)?.[1];\n\n const borderWidthToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-borderwidth');\n const borderWidthValue = +/calc\\(([0-9]+) \\* \\(1rem \\/ 20\\)\\)/.exec(borderWidthToken)?.[1];\n\n // initially rowHeightValue is calculated based on `--clr-table-row-height` that had a discreet value.\n // currently `--clr-table-row-height` is calculated based on `--clr-table-cell-height` + `--clr-table-borderwidth`\n const rowHeightValue = cellHeightValue + borderWidthValue;\n\n if (rowHeightValue && this.itemSize > rowHeightValue) {\n this.updateItemSize(rowHeightValue);\n }\n\n this.mutationChanges.observe(this.datagridElementRef.nativeElement, {\n attributeFilter: ['class'],\n attributeOldValue: true,\n });\n\n this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n\n get totalContentHeight() {\n return this.virtualScrollViewport?._totalContentHeight() || '';\n }\n\n @Input('clrVirtualRowsOf')\n get cdkVirtualForOf() {\n return this.cdkVirtualForInputs.cdkVirtualForOf;\n }\n set cdkVirtualForOf(value: CdkVirtualForInputs<T>['cdkVirtualForOf']) {\n this.cdkVirtualForInputs.cdkVirtualForOf = value;\n this.items.all = value as T[];\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsTrackBy')\n get cdkVirtualForTrackBy() {\n return this.cdkVirtualForInputs.cdkVirtualForTrackBy;\n }\n set cdkVirtualForTrackBy(value: CdkVirtualForInputs<T>['cdkVirtualForTrackBy']) {\n this.cdkVirtualForInputs.cdkVirtualForTrackBy = value;\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsTemplate')\n get cdkVirtualForTemplate() {\n return this?.cdkVirtualForInputs?.cdkVirtualForTemplate;\n }\n set cdkVirtualForTemplate(value: CdkVirtualForInputs<T>['cdkVirtualForTemplate']) {\n this.cdkVirtualForInputs.cdkVirtualForTemplate = value;\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsTemplateCacheSize')\n get cdkVirtualForTemplateCacheSize() {\n return this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize;\n }\n set cdkVirtualForTemplateCacheSize(value: CdkVirtualForInputs<T>['cdkVirtualForTemplateCacheSize']) {\n this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize = coerceNumberProperty(value);\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsItemSize')\n get itemSize() {\n return this._itemSize;\n }\n set itemSize(value: CdkFixedSizeVirtualScrollInputs['itemSize']) {\n this._isUserProvidedItemSize = true;\n this.updateItemSize(value);\n }\n\n @Input('clrVirtualRowsMinBufferPx')\n get minBufferPx() {\n return this._minBufferPx;\n }\n set minBufferPx(value: CdkFixedSizeVirtualScrollInputs['minBufferPx']) {\n this._minBufferPx = coerceNumberProperty(value);\n this.updateFixedSizeVirtualScrollInputs();\n }\n\n @Input('clrVirtualRowsMaxBufferPx')\n get maxBufferPx() {\n return this._maxBufferPx;\n }\n set maxBufferPx(value: CdkFixedSizeVirtualScrollInputs['maxBufferPx']) {\n this._maxBufferPx = coerceNumberProperty(value);\n this.updateFixedSizeVirtualScrollInputs();\n }\n\n @Input('clrVirtualDataRange')\n set dataRange(range: ClrDatagridVirtualScrollRangeInterface<T>) {\n if (!range) {\n return;\n }\n\n if (this.items.smart) {\n this.items.smartenDown();\n }\n\n this.totalItems = range.total;\n\n this.updateDataRange(range.skip, range.data);\n }\n\n get totalItems() {\n return this._totalItems;\n }\n\n private set totalItems(value: number) {\n this._totalItems = value;\n }\n\n ngAfterViewInit() {\n runInInjectionContext(this.injector, () => {\n this.virtualScrollViewport = this.createVirtualScrollViewportForDatagrid(\n this.changeDetectorRef,\n this.ngZone,\n this.renderer2,\n this.directionality,\n this.scrollDispatcher,\n this.viewportRuler,\n this.datagridElementRef,\n this.virtualScrollStrategy\n );\n\n this.cdkVirtualFor = createCdkVirtualForOfDirective(\n this.viewContainerRef,\n this.templateRef,\n this.iterableDiffers,\n this.virtualScrollViewport,\n this.ngZone\n );\n\n this.virtualScrollViewport.ngOnInit();\n });\n\n this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector<HTMLElement>('[role=\"grid\"]');\n\n this.updateCdkVirtualForInputs();\n\n this.subscriptions.push(\n this.items.change.subscribe(newItems => {\n if (this.items.smart) {\n this.cdkVirtualFor.cdkVirtualForOf = newItems;\n }\n this.shouldUpdateAriaRowIndexes = true;\n }),\n this.cdkVirtualFor.dataStream.subscribe(data => {\n this.updateAriaRowCount(data.length);\n }),\n this.virtualScrollViewport.scrolledIndexChange.subscribe(index => {\n this.topIndex = index;\n }),\n this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {\n this.renderedRangeChange.emit(renderedRange);\n this.shouldUpdateAriaRowIndexes = true;\n }),\n this.datagrid.refresh.subscribe(datagridState => {\n if (datagridState.filters) {\n this.scrollToIndex(0);\n }\n })\n );\n }\n\n ngDoCheck() {\n this.cdkVirtualFor?.ngDoCheck();\n if (this.shouldUpdateAriaRowIndexes) {\n this.updateAriaRowIndexes();\n\n this.shouldUpdateAriaRowIndexes = false;\n }\n }\n\n ngOnDestroy() {\n this.cdkVirtualFor?.ngOnDestroy();\n this.virtualScrollViewport?.ngOnDestroy();\n this.mutationChanges?.disconnect();\n this.subscriptions.forEach(subscription => {\n subscription.unsubscribe();\n });\n }\n\n scrollUp(offset: number, behavior: ScrollBehavior = 'auto') {\n this.scrollToIndex(this.topIndex - offset, behavior);\n }\n\n scrollDown(offset: number, behavior: ScrollBehavior = 'auto') {\n this.scrollToIndex(this.topIndex + offset, behavior);\n }\n\n scrollToIndex(index: number, behavior: ScrollBehavior = 'auto') {\n this.virtualScrollViewport?.scrollToIndex(index, behavior);\n }\n\n private updateDataRange(skip: number, data: T[]) {\n let items = this.cdkVirtualForOf as T[];\n\n if (!this.persistItems || !items || items?.length !== this.totalItems) {\n items = Array(this.totalItems);\n }\n\n items.splice(skip, data.length, ...data);\n\n this.cdkVirtualForOf = Array.from(items);\n }\n\n private updateItemSize(value: CdkFixedSizeVirtualScrollInputs['itemSize']) {\n this._itemSize = coerceNumberProperty(value);\n this.updateFixedSizeVirtualScrollInputs();\n }\n\n private updateCdkVirtualForInputs() {\n if (this.cdkVirtualFor) {\n for (const cdkVirtualForInputKey of Object.keys(this.cdkVirtualForInputs) as CdkVirtualForInputKey[]) {\n if (this.cdkVirtualFor[cdkVirtualForInputKey] !== this.cdkVirtualForInputs[cdkVirtualForInputKey]) {\n (this.cdkVirtualFor as any)[cdkVirtualForInputKey] = this.cdkVirtualForInputs[cdkVirtualForInputKey];\n }\n }\n }\n }\n\n private updateFixedSizeVirtualScrollInputs() {\n if (this.virtualScrollStrategy) {\n this.virtualScrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n }\n\n private updateAriaRowCount(rowCount: number) {\n this.gridRoleElement?.setAttribute('aria-rowcount', rowCount.toString());\n }\n\n private updateAriaRowIndexes() {\n for (let i = 0; i < this.viewContainerRef.length; i++) {\n const viewRef = this.viewContainerRef.get(i) as EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n\n const rootElements: HTMLElement[] = viewRef.rootNodes;\n const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');\n const rowRoleElement = datagridRowElement?.querySelector('[role=\"row\"]');\n\n const newAriaRowIndex = (viewRef.context.index + 1).toString();\n if (rowRoleElement?.getAttribute('aria-rowindex') !== newAriaRowIndex) {\n // aria-rowindex should start with one, not zero, so we have to add one to the zero-based index\n rowRoleElement?.setAttribute('aria-rowindex', newAriaRowIndex);\n }\n }\n }\n\n private createVirtualScrollViewportForDatagrid(\n changeDetectorRef: ChangeDetectorRef,\n ngZone: NgZone,\n renderer2: Renderer2,\n directionality: Directionality,\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler,\n datagridElementRef: ElementRef<HTMLElement>,\n virtualScrollStrategy: FixedSizeVirtualScrollStrategy\n ) {\n const datagridContentElement = datagridElementRef.nativeElement.querySelector<HTMLElement>('.datagrid-content');\n const datagridRowsElement = datagridElementRef.nativeElement.querySelector<HTMLElement>('.datagrid-rows');\n\n const virtualScrollViewport = createCdkVirtualScrollViewport(\n new ElementRef(datagridContentElement),\n new ElementRef(datagridRowsElement),\n changeDetectorRef,\n ngZone,\n renderer2,\n virtualScrollStrategy,\n directionality,\n scrollDispatcher,\n viewportRuler,\n null as any as CdkVirtualScrollableElement\n );\n\n return virtualScrollViewport;\n }\n}\n\nfunction createCdkVirtualScrollViewport(\n datagridDivElementRef: ElementRef<HTMLElement>,\n contentWrapper: ElementRef<HTMLElement>,\n changeDetectorRef: ChangeDetectorRef,\n ngZone: NgZone,\n renderer2: Renderer2,\n virtualScrollStrategy: VirtualScrollStrategy,\n directionality: Directionality,\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler,\n scrollable: CdkVirtualScrollable\n) {\n const virtualScrollViewportInjector = Injector.create({\n parent: inject(EnvironmentInjector),\n providers: [\n { provide: ElementRef, useValue: datagridDivElementRef },\n { provide: ChangeDetectorRef, useValue: changeDetectorRef },\n { provide: NgZone, useValue: ngZone },\n { provide: Renderer2, useValue: renderer2 },\n { provide: VIRTUAL_SCROLL_STRATEGY, useValue: virtualScrollStrategy },\n { provide: Directionality, useValue: directionality },\n { provide: ScrollDispatcher, useValue: scrollDispatcher },\n { provide: ViewportRuler, useValue: viewportRuler },\n { provide: CdkVirtualScrollable, useValue: scrollable },\n { provide: CdkVirtualScrollViewport, useClass: CdkVirtualScrollViewport },\n ],\n });\n const viewPort = virtualScrollViewportInjector.get(CdkVirtualScrollViewport);\n viewPort._contentWrapper = contentWrapper;\n return viewPort;\n}\n\nfunction createCdkVirtualForOfDirective<T>(\n viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<CdkVirtualForOfContext<T>>,\n iterableDiffers: IterableDiffers,\n virtualScrollViewport: CdkVirtualScrollViewport,\n ngZone: NgZone\n) {\n const virtualScrollViewportInjector = Injector.create({\n parent: inject(EnvironmentInjector),\n providers: [{ provide: CDK_VIRTUAL_SCROLL_VIEWPORT, useValue: virtualScrollViewport }],\n });\n\n const cdkVirtualForInjector = Injector.create({\n parent: virtualScrollViewportInjector,\n providers: [\n { provide: ViewContainerRef, useValue: viewContainerRef },\n { provide: TemplateRef, useValue: templateRef },\n { provide: IterableDiffers, useValue: iterableDiffers },\n { provide: NgZone, useValue: ngZone },\n { provide: CdkVirtualForOf, useClass: CdkVirtualForOf },\n ],\n });\n\n return cdkVirtualForInjector.get(CdkVirtualForOf);\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { FiltersProvider } from './filters';\nimport { Page } from './page';\nimport { Sort } from './sort';\nimport { StateDebouncer } from './state-debouncer.provider';\nimport { DatagridPropertyComparator } from '../built-in/comparators/datagrid-property-comparator';\nimport { ClrDatagridStateInterface } from '../interfaces/state.interface';\n\n/**\n * This provider aggregates state changes from the various providers of the Datagrid\n */\n@Injectable()\nexport class StateProvider<T> {\n /**\n * The Observable that lets other classes subscribe to global state changes\n */\n change: Observable<ClrDatagridStateInterface<T>> = this.debouncer.change.pipe(map(() => this.state));\n\n constructor(\n private filters: FiltersProvider<T>,\n private sort: Sort<T>,\n private page: Page,\n private debouncer: StateDebouncer\n ) {}\n\n /*\n * By making this a getter, we open the possibility for a setter in the future.\n * It's been requested a couple times.\n */\n get state(): ClrDatagridStateInterface<T> {\n const state: ClrDatagridStateInterface<T> = {};\n if (this.page.size > 0) {\n state.page = {\n from: this.page.firstItem,\n to: this.page.lastItem,\n size: this.page.size,\n current: this.page.current,\n };\n }\n if (this.sort.comparator) {\n if (this.sort.comparator instanceof DatagridPropertyComparator) {\n /*\n * Special case for the default object property comparator,\n * we give the property name instead of the actual comparator.\n */\n state.sort = { by: (this.sort.comparator as DatagridPropertyComparator<T>).prop, reverse: this.sort.reverse };\n } else {\n state.sort = { by: this.sort.comparator, reverse: this.sort.reverse };\n }\n }\n\n const activeFilters = this.filters.getActiveFilters();\n if (activeFilters.length > 0) {\n state.filters = [];\n for (const filter of activeFilters) {\n if (filter.state) {\n state.filters.push(filter.state);\n } else {\n state.filters.push(filter);\n }\n }\n }\n return state;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, OnDestroy, Renderer2 } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { HIDDEN_COLUMN_CLASS, PINNED_COLUMN_CLASS, STRICT_WIDTH_CLASS } from './constants';\nimport { DatagridRenderOrganizer } from './render-organizer';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { ColumnState } from '../interfaces/column-state.interface';\n\n@Directive({\n selector: 'clr-dg-cell',\n standalone: false,\n})\nexport class DatagridCellRenderer implements OnDestroy {\n private stateSubscription: Subscription;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n organizer: DatagridRenderOrganizer\n ) {\n this.subscriptions.push(\n organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth())\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n if (this.stateSubscription) {\n this.stateSubscription.unsubscribe();\n }\n }\n\n resetState(state: ColumnState) {\n this.setWidth(state);\n this.setHidden(state);\n this.setPinned(state);\n }\n\n setWidth(state: ColumnState) {\n if (state.strictWidth) {\n this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n }\n this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');\n }\n\n setHidden(state: ColumnState) {\n if (state.hidden) {\n this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n }\n }\n\n setPinned(state: ColumnState) {\n if (state.pinned) {\n this.renderer.addClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n }\n }\n\n private clearWidth() {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n this.renderer.setStyle(this.el.nativeElement, 'width', null);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n afterNextRender,\n ContentChildren,\n Directive,\n ElementRef,\n OnDestroy,\n QueryList,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { DatagridCellRenderer } from './cell-renderer';\nimport { DatagridRowDetailRenderer } from './row-detail-renderer';\nimport { ColumnsService } from '../providers/columns.service';\n\n@Directive({\n selector: 'clr-dg-row',\n standalone: false,\n})\nexport class DatagridRowRenderer implements AfterContentInit, OnDestroy {\n @ContentChildren(DatagridCellRenderer) cells: QueryList<DatagridCellRenderer>;\n expandableRows: DatagridRowDetailRenderer[] = [];\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private columnsService: ColumnsService,\n private el: ElementRef<HTMLElement>\n ) {\n afterNextRender(() => this.addDetachedRowsColumnStateChangesListener());\n }\n\n ngAfterContentInit() {\n this.setCellsState(); // case #3 and #4\n this.subscriptions.push(\n this.cells.changes.subscribe(() => {\n this.setCellsState(); // case #2\n // Note on case #2: In the case of dynamic columns, when one column (header/cell together) gets deleted,\n // this.cells.changes emits before this.columnsService.columns gets updated in MainRenderer\n // when this.headers.changes emits as well. So that means there will be n+1 column state providers\n // when this.cells.changes emits. Hence, we should quit earlier there. But this method will be called\n // right after again when this.headers.changes emits. By then, there will be the same number of column state\n // providers as column headers.\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n setCellsState() {\n // This method runs in four cases:\n // 1. When the initial rows appear on the first page.\n // In this case, the method will be called in DatagridMainRenderer.\n // 2. When columns (corresponding header/cells) get added and deleted.\n // In this case, the method will be called in DatagridMainRenderer. (Read the note on this case above).\n // 3. When rows load asynchronously.\n // In this case, the method will be called in this class.\n // 4. When rows load after switching pages.\n // In this case, the method will be called in this class (Basically, same as the case 3).\n if (this.cells.length === this.columnsService.columns.length) {\n this.cells.forEach((cell, index) => {\n if (this.columnsService.columns[index]) {\n cell.resetState(this.columnsService.columns[index].value);\n }\n });\n }\n }\n\n private addDetachedRowsColumnStateChangesListener() {\n this.subscriptions.push(\n // Active rows are already handled by DatagridMainRenderer.columnStateChanged via @ContentChildren.\n // Rows sitting in CDK virtual scroll's template cache for example are detached from the document\n // (element.isConnected = false) and invisible to @ContentChildren, so they miss column state\n // changes. This subscription self-updates the row only when it is detached state.\n this.columnsService.columnsStateChange.subscribe(() => {\n if (!this.el.nativeElement.isConnected) {\n this.setCellsState();\n }\n })\n );\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive } from '@angular/core';\nimport { WillyWonka } from '@clr/angular/utils';\n\n@Directive({\n selector: 'clr-datagrid',\n standalone: false,\n})\nexport class DatagridWillyWonka extends WillyWonka {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, Optional } from '@angular/core';\nimport { OompaLoompa } from '@clr/angular/utils';\n\nimport { DatagridWillyWonka } from './datagrid-willy-wonka';\nimport { RowActionService } from '../providers/row-action-service';\n\n@Directive({\n selector: 'clr-datagrid, clr-dg-row',\n standalone: false,\n})\nexport class ActionableOompaLoompa extends OompaLoompa {\n private rowActions: RowActionService;\n\n constructor(cdr: ChangeDetectorRef, @Optional() willyWonka: DatagridWillyWonka, rowActions: RowActionService) {\n if (!willyWonka) {\n throw new Error('clr-dg-row should only be used inside of a clr-datagrid');\n }\n super(cdr, willyWonka);\n this.rowActions = rowActions;\n }\n\n get flavor() {\n return this.rowActions.hasActionableRow;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, Optional } from '@angular/core';\nimport { OompaLoompa } from '@clr/angular/utils';\n\nimport { DatagridWillyWonka } from './datagrid-willy-wonka';\nimport { ExpandableRowsCount } from '../providers/global-expandable-rows';\n\n@Directive({\n selector: 'clr-datagrid, clr-dg-row',\n standalone: false,\n})\nexport class ExpandableOompaLoompa extends OompaLoompa {\n private expandableCount: ExpandableRowsCount;\n\n constructor(\n cdr: ChangeDetectorRef,\n @Optional() willyWonka: DatagridWillyWonka,\n expandableCount: ExpandableRowsCount\n ) {\n if (!willyWonka) {\n throw new Error('clr-dg-row should only be used inside of a clr-datagrid');\n }\n super(cdr, willyWonka);\n this.expandableCount = expandableCount;\n }\n\n get flavor() {\n return this.expandableCount.hasExpandableRow;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n DOCUMENT,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\nimport { combineLatest, fromEvent, merge, of, Subscription } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nimport { ClrDatagridColumn } from './datagrid-column';\nimport { ClrDatagridItems } from './datagrid-items';\nimport { ClrDatagridPlaceholder } from './datagrid-placeholder';\nimport { ClrDatagridRow } from './datagrid-row';\nimport { ClrDatagridVirtualScrollDirective } from './datagrid-virtual-scroll.directive';\nimport { DatagridDisplayMode } from './enums/display-mode.enum';\nimport { SelectionType, selectionTypeAttribute } from './enums/selection-type';\nimport { ClrDatagridStateInterface } from './interfaces/state.interface';\nimport { ColumnsService } from './providers/columns.service';\nimport { DetailService, MAX_DETAIL_WIDTH } from './providers/detail.service';\nimport { DisplayModeService } from './providers/display-mode.service';\nimport { FiltersProvider } from './providers/filters';\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\nimport { ClrDatagridItemsIdentityFunction, Items } from './providers/items';\nimport { Page } from './providers/page';\nimport { RowActionService } from './providers/row-action-service';\nimport { Selection } from './providers/selection';\nimport { Sort } from './providers/sort';\nimport { StateDebouncer } from './providers/state-debouncer.provider';\nimport { StateProvider } from './providers/state.provider';\nimport { TableSizeService } from './providers/table-size.service';\nimport { DatagridRenderOrganizer } from './render/render-organizer';\nimport { CellCoordinates, KeyNavigationGridController } from './utils/key-navigation-grid.controller';\n\n@Component({\n selector: 'clr-datagrid',\n templateUrl: './datagrid.html',\n providers: [\n Selection,\n Sort,\n FiltersProvider,\n Page,\n Items,\n DatagridRenderOrganizer,\n RowActionService,\n ExpandableRowsCount,\n StateDebouncer,\n DetailService,\n StateProvider,\n TableSizeService,\n ColumnsService,\n DisplayModeService,\n KeyNavigationGridController,\n ],\n host: {\n '[class.datagrid-host]': 'true',\n '[class.datagrid-detail-open]': 'detailService.isOpen',\n '[class.datagrid-detail-overlay]': 'isDetailOverlay',\n '[class.datagrid-virtual-scroll]': '!!virtualScroll',\n },\n standalone: false,\n})\nexport class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, OnDestroy, DoCheck {\n @Input('clrLoadingMoreItems') loadingMoreItems: boolean;\n\n @Input() clrDgSingleSelectionAriaLabel: string = this.commonStrings.keys.singleSelectionAriaLabel;\n @Input() clrDgSingleActionableAriaLabel: string = this.commonStrings.keys.singleActionableAriaLabel;\n @Input() clrDetailExpandableAriaLabel: string = this.commonStrings.keys.detailExpandableAriaLabel;\n\n // Allows disabling of the auto focus on page/state changes (excludes focus management inside of popups)\n @Input() clrDgDisablePageFocus = false;\n\n @Output('clrDgSelectedChange') selectedChanged = new EventEmitter<T[]>(false);\n\n /**\n * Output emitted whenever the data needs to be refreshed, based on user action or external ones\n */\n @Output('clrDgRefresh') refresh = new EventEmitter<ClrDatagridStateInterface<T>>(false);\n\n /**\n * The application can provide custom select all logic.\n */\n @Input('clrDgCustomSelectAllEnabled') customSelectAllEnabled = false;\n @Input('clrDgSelectAllDisabled') selectAllDisabled = false;\n @Output('clrDgCustomSelectAll') customSelectAll = new EventEmitter<boolean>();\n\n /**\n * Expose virtual scroll directive for applications to access its public methods\n */\n @ContentChildren(forwardRef(() => ClrDatagridVirtualScrollDirective)) _virtualScroll: QueryList<\n ClrDatagridVirtualScrollDirective<any>\n >;\n /**\n * We grab the smart iterator from projected content\n */\n @ContentChild(ClrDatagridItems) iterator: ClrDatagridItems<T>;\n\n /**\n * Custom placeholder detection\n */\n @ContentChild(ClrDatagridPlaceholder) placeholder: ClrDatagridPlaceholder<T>;\n\n /**\n * Hideable Column data source / detection.\n */\n @ContentChildren(ClrDatagridColumn) columns: QueryList<ClrDatagridColumn<T>>;\n\n /**\n * When the datagrid is user-managed without the smart iterator, we get the items displayed\n * by querying the projected content. This is needed to keep track of the models currently\n * displayed, typically for selection.\n */\n @ContentChildren(ClrDatagridRow, { emitDistinctChangesOnly: false }) rows: QueryList<ClrDatagridRow<T>>;\n\n @ViewChild('datagrid', { read: ElementRef }) datagrid: ElementRef<HTMLElement>;\n @ViewChild('datagridTable', { read: ElementRef }) datagridTable: ElementRef<HTMLElement>;\n @ViewChild('datagridHeader', { read: ElementRef }) datagridHeader: ElementRef<HTMLElement>;\n @ViewChild('contentWrapper', { read: ElementRef, static: true }) contentWrapper: ElementRef<HTMLElement>;\n @ViewChild('rowsWrapper', { read: ElementRef, static: true }) rowsWrapper: ElementRef<HTMLElement>;\n @ViewChild('scrollableColumns', { read: ViewContainerRef }) scrollableColumns: ViewContainerRef;\n @ViewChild('projectedDisplayColumns', { read: ViewContainerRef }) _projectedDisplayColumns: ViewContainerRef;\n @ViewChild('projectedStickyColumns', { read: ViewContainerRef }) _projectedStickyColumns: ViewContainerRef;\n @ViewChild('projectedCalculationColumns', { read: ViewContainerRef }) _projectedCalculationColumns: ViewContainerRef;\n @ViewChild('displayedRows', { read: ViewContainerRef }) _displayedRows: ViewContainerRef;\n @ViewChild('calculationRows', { read: ViewContainerRef }) _calculationRows: ViewContainerRef;\n @ViewChild('fixedColumnTemplate') _fixedColumnTemplate: TemplateRef<any>;\n @ViewChildren('stickyHeader', { emitDistinctChangesOnly: true }) stickyHeaders: QueryList<ElementRef>;\n\n selectAllId: string;\n activeCellCoords: CellCoordinates;\n\n /* reference to the enum so that template can access */\n SELECTION_TYPE = SelectionType;\n\n @ViewChild('selectAllCheckbox') private selectAllCheckbox: ElementRef<HTMLInputElement>;\n @ViewChild('rowControls', { read: ElementRef }) private rowControls: ElementRef<HTMLElement>;\n\n /**\n * Subscriptions to all the services and queries changes\n */\n private _subscriptions: Subscription[] = [];\n private _virtualScrollSubscriptions: Subscription[] = [];\n\n private cachedRowsHeight = 0;\n private cachedContentHeight = 0;\n private resizeObserver: ResizeObserver = new ResizeObserver(entries => {\n requestAnimationFrame(() => {\n this.handleResizeChanges(entries);\n });\n });\n\n /**\n * Watches the row controls for anything that changes their width without going through a render\n * cycle - a density change, or an application restyling them.\n */\n private rowControlsObserver: ResizeObserver = new ResizeObserver(() => this.updateRowControlsWidth());\n\n constructor(\n private organizer: DatagridRenderOrganizer,\n public items: Items<T>,\n public expandableRows: ExpandableRowsCount,\n public selection: Selection<T>,\n public rowActionService: RowActionService,\n private stateProvider: StateProvider<T>,\n private displayMode: DisplayModeService,\n private renderer: Renderer2,\n public detailService: DetailService,\n @Inject(DOCUMENT) private document: any,\n public el: ElementRef<HTMLElement>,\n private page: Page,\n public commonStrings: ClrCommonStringsService,\n public keyNavigation: KeyNavigationGridController,\n private zone: NgZone,\n private columnsService: ColumnsService\n ) {\n const datagridId = uniqueIdFactory();\n\n this.selectAllId = 'clr-dg-select-all-' + datagridId;\n detailService.id = datagridId;\n }\n\n /**\n * Freezes the datagrid while data is loading\n */\n @Input('clrDgLoading')\n get loading(): boolean {\n return this.items.loading;\n }\n set loading(value: boolean) {\n this.items.loading = value;\n }\n\n /**\n * Selection type\n * - `None`: No rows are selectable.\n * - `Single`: Only one row can be selected at a time.\n * - `Multi`: Multiple rows can be selected.\n *\n * Defaults to `None`.\n */\n @Input({ alias: 'clrDgSelectionType', transform: selectionTypeAttribute })\n get selectionType(): SelectionType {\n return this.selection.selectionType;\n }\n set selectionType(value: SelectionType) {\n this.selection.selectionType = value;\n }\n\n /**\n * Array of all selected items\n */\n @Input('clrDgSelected')\n set selected(value: T[]) {\n value = value || [];\n\n if (value === this.selection.current) {\n return;\n }\n\n this.selection.updateCurrent(value, false);\n }\n\n @Input()\n set clrDgPreserveSelection(state: boolean) {\n this.selection.preserveSelection = state;\n }\n\n /**\n * @deprecated since 2.0, remove in 3.0\n *\n * Selection/Deselection on row click mode\n */\n @Input('clrDgRowSelection')\n set rowSelectionMode(value: boolean) {\n this.selection.rowSelectionMode = value;\n }\n\n @Input('clrDgItemsIdentityFn')\n set identityFn(value: ClrDatagridItemsIdentityFunction<T>) {\n this.items.identifyBy = value;\n }\n\n /**\n * Indicates if all currently displayed items are selected\n */\n get allSelected() {\n return this.selection.isAllSelected();\n }\n set allSelected(value: boolean) {\n if (this.customSelectAllEnabled) {\n this.customSelectAll.emit(value);\n } else {\n /**\n * This is a setter but we ignore the value.\n * It's strange, but it lets us have an indeterminate state where only\n * some of the items are selected.\n */\n this.selection.toggleAll();\n }\n }\n\n get virtualScroll(): ClrDatagridVirtualScrollDirective<any> {\n return this._virtualScroll?.get(0);\n }\n\n protected get isDetailOverlay(): boolean {\n return this.detailService.detailWidth === MAX_DETAIL_WIDTH;\n }\n\n ngAfterContentInit() {\n if (!this.items.smart) {\n this.items.all = this.rows.map((row: ClrDatagridRow<T>) => row.item);\n }\n\n const rowItemsChanges = this.rows.changes.pipe(\n switchMap((rows: ClrDatagridRow<T>[]) =>\n merge(\n // immediate update\n of(rows.map(row => row.item)),\n // subsequent updates once per tick\n combineLatest(rows.map(row => row.itemChanges)).pipe(debounceTime(0))\n )\n )\n );\n\n this._subscriptions.push(\n rowItemsChanges.subscribe(all => {\n if (!this.items.smart) {\n this.items.all = all;\n }\n }),\n this._virtualScroll.changes.subscribe(() => {\n this.toggleVirtualScrollSubscriptions();\n }),\n this.rows.changes.subscribe(() => {\n // Remove any projected rows from the displayedRows container\n // Necessary with Ivy off. See https://github.com/vmware/clarity/issues/4692\n for (let i = this._displayedRows.length - 1; i >= 0; i--) {\n if (this._displayedRows.get(i).destroyed) {\n this._displayedRows.remove(i);\n }\n }\n this.rows.forEach(row => {\n this._displayedRows.insert(row._view);\n });\n this.updateDetailState();\n\n // retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller\n if (this.virtualScroll && this.activeCellCoords) {\n this.zone.runOutsideAngular(() => {\n const row = Array.from(this.rows).find(row => {\n return row.el.nativeElement.children[0].ariaRowIndex === this.activeCellCoords.ariaRowIndex;\n });\n\n if (!row) {\n return;\n }\n\n const activeCell = row.el.nativeElement.querySelectorAll(this.keyNavigation.config.keyGridCells)[\n this.activeCellCoords.x\n ] as HTMLElement;\n\n this.keyNavigation.setActiveCell(activeCell);\n this.keyNavigation.focusElement(activeCell, { preventScroll: true });\n });\n }\n })\n );\n }\n\n /**\n * Our setup happens in the view of some of our components, so we wait for it to be done before starting\n */\n ngAfterViewInit() {\n this.keyNavigation.initializeKeyGrid(this.el.nativeElement);\n\n this.updateDetailState();\n this.zone.runOutsideAngular(() => this.rowControlsObserver.observe(this.rowControls.nativeElement));\n\n // Emit the state only if it is not an empty object.\n // Default state of `ClrDatagridStateInterface` is an empty object.\n // The refresh emit is needed in Server-driven datagrid when pagination is set, but the data is still not requested.\n // The refresh emit should trigger the data request based on the state provided.\n // Alternately because pagination might not be set on initialization emit an empty state will trigger a refresh.\n if (Object.keys(this.stateProvider.state).length > 0) {\n this.refresh.emit(this.stateProvider.state);\n }\n\n this._subscriptions.push(\n this.stickyHeaders.changes.subscribe(() => this.resize()),\n this.stateProvider.change.subscribe(state => this.refresh.emit(state)),\n this.selection.change.subscribe(selection => {\n if (this.selection.selectable) {\n this.selectedChanged.emit(selection);\n }\n }),\n // Reinitialize arrow key navigation on page changes\n this.page.change.subscribe(() => {\n this.keyNavigation.resetKeyGrid();\n if (!this.clrDgDisablePageFocus) {\n this.datagridTable.nativeElement.focus();\n }\n }),\n // A subscription that listens for displayMode changes on the datagrid\n this.displayMode.view.subscribe(viewChange => {\n // Remove any projected columns from the projectedDisplayColumns container\n for (let i = this._projectedDisplayColumns.length; i > 0; i--) {\n this._projectedDisplayColumns.detach();\n }\n // Remove any projected columns from the projectedStickyColumns container\n for (let i = this._projectedStickyColumns.length; i > 0; i--) {\n this._projectedStickyColumns.detach();\n }\n // Remove any projected columns from the projectedCalculationColumns container\n for (let i = this._projectedCalculationColumns.length; i > 0; i--) {\n this._projectedCalculationColumns.detach();\n }\n // Remove any projected rows from the calculationRows container\n for (let i = this._calculationRows.length; i > 0; i--) {\n this._calculationRows.detach();\n }\n // Remove any projected rows from the displayedRows container\n for (let i = this._displayedRows.length; i > 0; i--) {\n this._displayedRows.detach();\n }\n if (viewChange === DatagridDisplayMode.DISPLAY) {\n // Set state, style for the datagrid to DISPLAY and insert row & columns into containers\n this.renderer.removeClass(this.el.nativeElement, 'datagrid-calculate-mode');\n // Pinned columns go into the pinned container so they stay visible during horizontal\n // scroll. Iterating in declaration order keeps both groups in their original order,\n // which is what matches them with the cells of every row.\n this.columns.forEach((column, index) => {\n const container = this.columnsService.isPinned(index)\n ? this._projectedStickyColumns\n : this._projectedDisplayColumns;\n container.insert(column._view);\n });\n this.rows.forEach(row => {\n this._displayedRows.insert(row._view);\n });\n // The row controls are only laid out in this mode, and this is also the point where\n // their number can have changed.\n this.updateRowControlsWidth();\n } else {\n // Set state, style for the datagrid to CALCULATE and insert row & columns into containers\n this.renderer.addClass(this.el.nativeElement, 'datagrid-calculate-mode');\n // Inserts a fixed column if any of these conditions are true.\n const fixedColumnConditions = [\n this.rowActionService.hasActionableRow,\n this.selection.selectionType !== this.SELECTION_TYPE.None,\n this.expandableRows.hasExpandableRow || this.detailService.enabled,\n ];\n fixedColumnConditions\n .filter(Boolean)\n .forEach(() =>\n this._projectedCalculationColumns.insert(this._fixedColumnTemplate.createEmbeddedView(null))\n );\n this.columns.forEach(column => {\n this._projectedCalculationColumns.insert(column._view);\n });\n this.rows.forEach(row => {\n this._calculationRows.insert(row._view);\n });\n }\n })\n );\n\n if (this.virtualScroll) {\n this.toggleVirtualScrollSubscriptions();\n }\n\n // We need to preserve shift state, so it can be used on selection change, regardless of the input event\n // that triggered the change. This helps us to easily resolve the k/b only case together with the mouse selection case.\n this.zone.runOutsideAngular(() => {\n this._subscriptions.push(\n fromEvent(this.document.body, 'keydown').subscribe((event: KeyboardEvent) => {\n if (event.key === 'Shift') {\n this.selection.shiftPressed = true;\n }\n }),\n fromEvent(this.document.body, 'keyup').subscribe((event: KeyboardEvent) => {\n if (event.key === 'Shift') {\n this.selection.shiftPressed = false;\n }\n })\n );\n });\n }\n\n ngDoCheck() {\n // we track for changes on selection.current because it can happen with pushing items\n // instead of overriding the variable\n this.selection.checkForChanges();\n }\n\n ngOnDestroy() {\n this._subscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n this._virtualScrollSubscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n this.resizeObserver.disconnect();\n this.rowControlsObserver.disconnect();\n }\n\n toggleAllSelected($event: any) {\n $event.preventDefault();\n this.selectAllCheckbox?.nativeElement.click();\n }\n\n resize(): void {\n this.organizer.resize();\n }\n\n /**\n * Checks the state of detail panel and if it's opened then\n * find the matching row and trigger the detail panel\n */\n updateDetailState() {\n // Try to update only when there is something cached and its open.\n if (this.detailService.state && this.detailService.isOpen) {\n const row = this.rows.find(\n row => this.items.identifyBy(row.item) === this.items.identifyBy(this.detailService.state)\n );\n\n /**\n * Reopen updated row or close it\n */\n if (row) {\n this.detailService.open(row.item, row.detailButton.nativeElement);\n // always keep open when virtual scroll is available otherwise close it\n } else if (!this.virtualScroll) {\n // Using setTimeout to make sure the inner cycles in rows are done\n setTimeout(() => {\n this.detailService.close();\n });\n }\n }\n }\n\n /**\n * Public method to re-trigger the computation of displayed items manually\n */\n dataChanged() {\n this.items.refresh();\n }\n\n private toggleVirtualScrollSubscriptions() {\n const hasVirtualScroll = !!this.virtualScroll;\n\n // the virtual scroll will handle the scrolling\n this.keyNavigation.preventScrollOnFocus = hasVirtualScroll;\n\n if (hasVirtualScroll && this._virtualScrollSubscriptions.length === 0) {\n // TODO: use `resizeObserver` for all datagrid variants\n this.resizeObserver.observe(this.contentWrapper.nativeElement);\n this.resizeObserver.observe(this.rowsWrapper.nativeElement);\n\n this._virtualScrollSubscriptions.push(\n fromEvent(this.contentWrapper.nativeElement, 'scroll').subscribe(() => {\n if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {\n this.datagridHeader.nativeElement.scrollLeft = this.contentWrapper.nativeElement.scrollLeft;\n }\n }),\n fromEvent(this.datagridHeader.nativeElement, 'scroll').subscribe(() => {\n if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {\n this.contentWrapper.nativeElement.scrollLeft = this.datagridHeader.nativeElement.scrollLeft;\n }\n }),\n this.keyNavigation.nextCellCoordsEmitter.subscribe(cellCoords => {\n if (!cellCoords?.ariaRowIndex) {\n this.activeCellCoords = null;\n return;\n }\n\n if (cellCoords.ariaRowIndex === this.activeCellCoords?.ariaRowIndex) {\n this.activeCellCoords = cellCoords;\n return;\n }\n\n this.activeCellCoords = cellCoords;\n\n // aria-rowindex is always + 1. Check virtual scroller updateAriaRowIndexes method.\n const rowIndex = Number(cellCoords.ariaRowIndex) - 1;\n\n this.virtualScroll.scrollToIndex(rowIndex);\n })\n );\n } else if (!hasVirtualScroll) {\n this.resizeObserver.disconnect();\n this._virtualScrollSubscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n this._virtualScrollSubscriptions = [];\n }\n }\n\n /**\n * Publishes the width of the row controls - the static container holding the select, action and\n * caret cells - as a custom property, which is where the pinned columns read the offset they\n * became static at. They are static right after the controls rather than at the edge of the datagrid,\n * and `position: sticky` always measures its offsets from that edge, so the distance between the\n * two has to be measured and handed to the stylesheet.\n *\n * The header and the rows get their own value: the header renders one caret column for both\n * kinds of caret where a row renders one cell per caret, so the two containers are not\n * necessarily the same width.\n *\n * Nothing reads this property unless a column is pinned - `.datagrid-pinned-cells` is the only\n * consumer, and it is `display: none` while empty - so the measurement is skipped entirely\n * otherwise. It matters on a datagrid with many rows: `getBoundingClientRect()` forces the\n * browser to resolve any pending layout first, and on a large datagrid that resolution is not\n * cheap. Both boxes are read before either write for the same reason - writing the custom\n * property is itself layout-affecting (`.datagrid-pinned-cells` reads it back for its own\n * position and width), so reading again in between would force that resolution twice.\n */\n private updateRowControlsWidth() {\n const headerControls = this.rowControls?.nativeElement;\n if (!headerControls || !this.datagridHeader || !this.columnsService.hasPinnedColumns) {\n return;\n }\n const rowControls: HTMLElement = this.rowsWrapper.nativeElement.querySelector(\n '.datagrid-row-master > .datagrid-row-sticky:not(.datagrid-row-sticky-scroll)'\n );\n\n // Measured from the box rather than from offsetWidth, which is rounded to whole pixels and\n // would leave the pinned columns off by up to a pixel.\n const headerWidth = headerControls.getBoundingClientRect().width;\n // Without a row there is nothing to line up with, so the header is a good enough stand-in.\n const rowWidth = (rowControls || headerControls).getBoundingClientRect().width;\n\n this.setRowControlsWidth(this.datagridHeader.nativeElement, headerWidth);\n this.setRowControlsWidth(this.rowsWrapper.nativeElement, rowWidth);\n }\n\n private setRowControlsWidth(target: HTMLElement, width: number) {\n this.renderer.setStyle(target, '--clr-datagrid-row-controls-width', `${width}px`, RendererStyleFlags2.DashCase);\n }\n\n private handleResizeChanges(entries: ResizeObserverEntry[]) {\n const rowsWrapper = this.rowsWrapper.nativeElement;\n\n for (const entry of entries) {\n if (entry.target === this.contentWrapper.nativeElement) {\n this.cachedContentHeight = entry.contentRect.height;\n }\n if (entry.target === rowsWrapper) {\n this.cachedRowsHeight = entry.contentRect.height;\n }\n }\n\n const scrollClass = 'datagrid-scrollbar-visible';\n\n if (this.cachedRowsHeight > this.cachedContentHeight) {\n this.renderer.addClass(rowsWrapper, scrollClass);\n } else {\n this.renderer.removeClass(rowsWrapper, scrollClass);\n }\n }\n}\n","<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\" #datagridHeader>\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\" #rowControls>\n <!--header for datagrid where you can select multiple rows -->\n @if (selection.selectionType === SELECTION_TYPE.Multi) {\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n @if (!virtualScroll || customSelectAllEnabled) {\n <div class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n [attr.disabled]=\"selectAllDisabled ? true : null\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n }\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n <!-- header for datagrid where you can select one row only -->\n @if (selection.selectionType === SELECTION_TYPE.Single) {\n <div #stickyHeader role=\"columnheader\" class=\"datagrid-column datagrid-select datagrid-fixed-column\">\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n @if (rowActionService.hasActionableRow) {\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n @if (expandableRows.hasExpandableRow || detailService.enabled) {\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n </div>\n <div class=\"datagrid-row-scrollable\">\n <div class=\"datagrid-pinned-cells\">\n <ng-container #projectedStickyColumns></ng-container>\n </div>\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n @if (virtualScroll) {\n <div class=\"datagrid-row-sticky datagrid-row-sticky-scroll\">\n <div class=\"datagrid-column\"></div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"datagrid-content\" [class.datagrid-content-virtual]=\"virtualScroll\" #contentWrapper>\n @if (virtualScroll) {\n <div class=\"datagrid-content-virtual-spacer\" [style.height]=\"virtualScroll?.totalContentHeight\"></div>\n }\n <div role=\"presentation\" #rowsWrapper class=\"datagrid-rows\">\n @if (loadingMoreItems) {\n <clr-dg-row class=\"datagrid-row-loading\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n }\n\n <ng-container #displayedRows></ng-container>\n\n @if (loadingMoreItems) {\n <clr-dg-row class=\"datagrid-row-loading\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n }\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n @if (!placeholder) {\n <clr-dg-placeholder></clr-dg-placeholder>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n @if (loading) {\n <div class=\"datagrid-spinner\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n }\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'clr-dg-action-bar',\n template: `<ng-content></ng-content>`,\n host: { '[class.datagrid-action-bar]': 'true' },\n standalone: false,\n})\nexport class ClrDatagridActionBar {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport { Component, EventEmitter, Inject, Input, OnDestroy, Output, PLATFORM_ID, ViewChild } from '@angular/core';\nimport {\n ClrPopoverHostDirective,\n ClrPopoverPosition,\n ClrPopoverService,\n ClrPopoverType,\n mapPopoverKeyToPosition,\n} from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, ClrKeyFocus, uniqueIdFactory } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { RowActionService } from './providers/row-action-service';\n\nlet clrDgActionId = 0;\n\n@Component({\n selector: 'clr-dg-action-overflow',\n hostDirectives: [ClrPopoverHostDirective],\n template: `\n <button\n tabindex=\"-1\"\n class=\"datagrid-action-toggle\"\n type=\"button\"\n role=\"button\"\n aria-haspopup=\"true\"\n #anchor\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-label]=\"buttonLabel || commonStrings.keys.rowActions\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n (click)=\"$event.stopPropagation()\"\n >\n <cds-icon shape=\"ellipsis-vertical\" [attr.title]=\"buttonLabel || commonStrings.keys.rowActions\"></cds-icon>\n </button>\n\n <div\n class=\"datagrid-action-overflow\"\n [id]=\"popoverId\"\n [attr.aria-hidden]=\"!open\"\n [attr.id]=\"popoverId\"\n clrKeyFocus\n cdkTrapFocus\n (click)=\"closeOverflowContent($event)\"\n *clrPopoverContent=\"\n open;\n at: smartPosition;\n availablePositions: positions;\n outsideClickToClose: true;\n scrollToClose: true\n \"\n >\n <ng-content></ng-content>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridActionOverflow implements OnDestroy {\n @Input('clrDgActionOverflowButtonLabel') buttonLabel: string;\n\n @Output('clrDgActionOverflowOpenChange') openChange = new EventEmitter<boolean>(false);\n\n popoverId = uniqueIdFactory();\n\n smartPosition = ClrPopoverPosition.RIGHT_MIDDLE;\n protected positions = [\n mapPopoverKeyToPosition(ClrPopoverPosition.RIGHT_BOTTOM, ClrPopoverType.DROPDOWN),\n mapPopoverKeyToPosition(ClrPopoverPosition.RIGHT_TOP, ClrPopoverType.DROPDOWN),\n ];\n\n @ViewChild(ClrKeyFocus) private readonly keyFocus: ClrKeyFocus;\n\n private _open = false;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private rowActionService: RowActionService,\n public commonStrings: ClrCommonStringsService,\n @Inject(PLATFORM_ID) private platformId: any,\n private popoverService: ClrPopoverService\n ) {\n rowActionService.register();\n this.subscriptions.push(\n popoverService.openChange.subscribe(openState => {\n this.open = openState;\n }),\n popoverService.popoverVisible.subscribe(visible => {\n if (visible) {\n this.initializeFocus();\n }\n })\n );\n this.popoverId = 'clr-action-menu' + clrDgActionId++;\n }\n\n @Input('clrDgActionOverflowOpen')\n get open() {\n return this._open;\n }\n set open(open: boolean) {\n const openState = !!open;\n if (!!openState !== this.open) {\n // prevents chocolate mess\n this.popoverService.open = openState;\n this.openChange.emit(openState);\n this._open = openState;\n }\n }\n\n ngOnDestroy() {\n this.rowActionService.unregister();\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n closeOverflowContent(event: Event): void {\n this.popoverService.toggleWithEvent(event);\n }\n\n private initializeFocus(): void {\n if (isPlatformBrowser(this.platformId)) {\n const buttons = Array.from(document.querySelectorAll<HTMLButtonElement>('button.action-item'));\n\n if (buttons.length) {\n this.keyFocus.current = 0;\n this.keyFocus.focusableItems = buttons;\n\n this.keyFocus.focusCurrent();\n }\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * This file prevents an import cycle.\n */\n\nimport { TrackByFunction } from '@angular/core';\n\nimport { ColumnState } from './interfaces/column-state.interface';\n\nexport const columnToggleTrackByFn: TrackByFunction<ColumnState> = index => index;\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { ColumnsService } from './providers/columns.service';\n\n@Component({\n selector: 'clr-dg-column-toggle-button',\n template: `\n <button\n class=\"btn btn-sm btn-link switch-button\"\n (click)=\"selectAll()\"\n [disabled]=\"allHideablesVisible\"\n type=\"button\"\n >\n {{ commonStrings.keys.selectAll }}\n </button>\n `,\n standalone: false,\n})\nexport class ClrDatagridColumnToggleButton {\n private allSelected: Subject<boolean> = new EventEmitter();\n\n constructor(\n public commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService\n ) {}\n\n @Output('clrAllSelected')\n get clrAllSelected(): Observable<boolean> {\n return this.allSelected.asObservable();\n }\n\n get allHideablesVisible() {\n return this.hideableColumns().filter(column => column.value.hidden).length === 0;\n }\n\n selectAll() {\n this.hideableColumns().forEach(hideableColumn =>\n this.columnsService.emitStateChange(hideableColumn, {\n hidden: false,\n changes: [DatagridColumnChanges.HIDDEN],\n })\n );\n this.allSelected.next(true);\n }\n\n private hideableColumns(): BehaviorSubject<ColumnState>[] {\n return this.columnsService.columns.filter(column => column.value.hideable);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';\nimport {\n ClrPopoverHostDirective,\n ClrPopoverPosition,\n ClrPopoverService,\n ClrPopoverType,\n} from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { columnToggleTrackByFn } from './datagrid-column-toggle-trackby';\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { ColumnsService } from './providers/columns.service';\n\n@Component({\n selector: 'clr-dg-column-toggle',\n template: `\n <button\n role=\"button\"\n type=\"button\"\n class=\"btn btn-sm column-toggle-action\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-haspopup]=\"'menu'\"\n >\n {{ commonStrings.keys.pickColumns }}\n </button>\n <div\n class=\"column-switch\"\n role=\"dialog\"\n [attr.aria-label]=\"commonStrings.keys.showColumnsMenuDescription\"\n [id]=\"popoverId\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n *clrPopoverContent=\"\n openState;\n at: popoverPosition;\n type: popoverType;\n outsideClickToClose: true;\n scrollToClose: true\n \"\n >\n <div class=\"switch-header\">\n <div class=\"clr-sr-only\" tabindex=\"-1\" #allSelected>{{ commonStrings.keys.allColumnsSelected }}</div>\n <h2>{{ commonStrings.keys.showColumns }}</h2>\n <button\n class=\"btn btn-sm btn-link-neutral toggle-switch-close-button\"\n clrPopoverCloseButton\n type=\"button\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n >\n <cds-icon shape=\"window-close\" aria-hidden=\"true\" [attr.title]=\"commonStrings.keys.close\"></cds-icon>\n <span class=\"clr-sr-only\">{{ commonStrings.keys.close }}</span>\n </button>\n </div>\n <ul class=\"switch-content list-unstyled\">\n @for (columnState of hideableColumnStates; track trackByFn($index, columnState)) {\n <li>\n <clr-checkbox-wrapper>\n <input\n clrCheckbox\n type=\"checkbox\"\n [disabled]=\"hasOnlyOneVisibleColumn && !columnState.hidden\"\n [ngModel]=\"!columnState.hidden\"\n (ngModelChange)=\"toggleColumnState(columnState, !$event)\"\n />\n <label>\n <ng-template [ngTemplateOutlet]=\"columnState.titleTemplateRef\"></ng-template>\n </label>\n </clr-checkbox-wrapper>\n </li>\n }\n </ul>\n <div class=\"switch-footer\">\n <clr-dg-column-toggle-button (clrAllSelected)=\"allColumnsSelected()\"></clr-dg-column-toggle-button>\n </div>\n </div>\n `,\n host: { '[class.column-switch-wrapper]': 'true', '[class.active]': 'openState' },\n hostDirectives: [ClrPopoverHostDirective],\n standalone: false,\n})\nexport class ClrDatagridColumnToggle implements OnDestroy {\n popoverId = uniqueIdFactory();\n openState = false;\n\n // Smart Popover\n popoverPosition = ClrPopoverPosition.TOP_LEFT;\n popoverType = ClrPopoverType.DROPDOWN;\n\n // Without tracking the checkboxes get rerendered on model update, which leads\n // to loss of focus after checkbox toggle.\n readonly trackByFn = columnToggleTrackByFn;\n\n private _allColumnsVisible: boolean;\n private subscription: Subscription;\n\n @ViewChild('allSelected', { read: ElementRef }) private allSelectedElement: ElementRef<HTMLElement>;\n\n constructor(\n public commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService,\n popoverService: ClrPopoverService\n ) {\n this.subscription = popoverService.openChange.subscribe(change => (this.openState = change));\n }\n\n get allColumnsVisible(): boolean {\n return this._allColumnsVisible;\n }\n set allColumnsVisible(value: boolean) {\n this._allColumnsVisible = value;\n }\n\n get hideableColumnStates(): ColumnState[] {\n const hideables = this.columnsService.columns.filter(column => column.value.hideable);\n return hideables.map(column => column.value);\n }\n\n get hasOnlyOneVisibleColumn(): boolean {\n const nbNonHideableColumns = this.columnsService.columns.length - this.hideableColumnStates.length;\n // this should only return true when there is no non-hideable columns.\n return (\n nbNonHideableColumns === 0 && this.hideableColumnStates.filter(columnState => !columnState.hidden).length === 1\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n toggleColumnState(columnState: ColumnState, event: boolean) {\n const columnToToggle = this.columnsService.columns.filter(column => column.value === columnState)[0];\n this.columnsService.emitStateChange(columnToToggle, {\n hidden: event,\n changes: [DatagridColumnChanges.HIDDEN],\n });\n }\n\n toggleSwitchPanel() {\n this.openState = !this.openState;\n }\n\n allColumnsSelected() {\n this.allSelectedElement.nativeElement.focus();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { DetailService } from './providers/detail.service';\n\n@Component({\n selector: 'clr-dg-detail-header',\n host: {\n '[class.datagrid-detail-header]': 'true',\n },\n template: `\n <div #title class=\"datagrid-detail-header-title\" tabindex=\"-1\" [id]=\"titleId\">\n <ng-content></ng-content>\n </div>\n <div class=\"datagrid-detail-pane-close\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-link\"\n (click)=\"detailService.close()\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n >\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridDetailHeader implements AfterViewInit {\n @ViewChild('title') title: ElementRef<HTMLElement>;\n\n constructor(\n public detailService: DetailService,\n public commonStrings: ClrCommonStringsService\n ) {}\n\n get titleId() {\n return `${this.detailService.id}-title`;\n }\n\n ngAfterViewInit(): void {\n this.title.nativeElement.focus();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, Input } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrDatagridDetailHeader } from './datagrid-detail-header';\nimport { DEFAULT_DETAIL_WIDTH, DetailService, MAX_DETAIL_WIDTH, MIN_DETAIL_WIDTH } from './providers/detail.service';\n\n@Component({\n selector: 'clr-dg-detail',\n host: {\n '[class.datagrid-detail-pane]': 'true',\n '[class.datagrid-detail-custom-width]': 'isCustomWidth',\n '[style.width.%]': 'width',\n },\n // We put the @if on the cdkTrapFocus so it doesn't always exist on the page\n // have to test for presence of header for aria-describedby because it was causing unit tests to crash\n template: `\n @if (detailService.isOpen) {\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"!header\"\n class=\"datagrid-detail-pane-content\"\n role=\"dialog\"\n [id]=\"detailService.id\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"labelledBy\"\n [attr.aria-label]=\"label\"\n >\n <div class=\"clr-sr-only\">{{ commonStrings.keys.detailPaneStart }}</div>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\">{{ commonStrings.keys.detailPaneEnd }}</div>\n </div>\n }\n `,\n standalone: false,\n})\nexport class ClrDatagridDetail {\n @Input('clrDetailAriaLabelledBy') ariaLabelledBy: string;\n @Input('clrDetailAriaLabel') ariaLabel: string;\n\n @ContentChild(ClrDatagridDetailHeader) header: ClrDatagridDetailHeader;\n\n constructor(\n public detailService: DetailService,\n public commonStrings: ClrCommonStringsService\n ) {}\n\n @Input('clrDetailWidth')\n get detailWidth(): number {\n return this.detailService.detailWidth;\n }\n set detailWidth(value: number | null | undefined) {\n if (value === null || value === undefined) {\n this.detailService.detailWidth = DEFAULT_DETAIL_WIDTH;\n return;\n }\n\n if (value < MIN_DETAIL_WIDTH) {\n this.detailService.detailWidth = MIN_DETAIL_WIDTH;\n return;\n }\n\n if (value > MAX_DETAIL_WIDTH) {\n this.detailService.detailWidth = MAX_DETAIL_WIDTH;\n return;\n }\n\n this.detailService.detailWidth = value;\n }\n\n get isCustomWidth(): boolean {\n return this.detailWidth !== DEFAULT_DETAIL_WIDTH;\n }\n\n get width(): number | null {\n // Skip the inline style at 100% so the .datagrid-detail-overlay CSS rule takes over\n // without needing !important to override an inline style.\n return this.detailWidth !== MAX_DETAIL_WIDTH ? this.detailWidth : null;\n }\n\n get labelledBy(): string {\n if (this.ariaLabelledBy) {\n return this.header ? `${this.header.titleId} ${this.ariaLabelledBy}` : this.ariaLabelledBy;\n } else if (this.ariaLabel) {\n // If aria-label is set by the end user, do not set aria-labelledby\n return null;\n } else {\n return this.header?.titleId || '';\n }\n }\n\n get label(): string {\n if (!this.ariaLabelledBy) {\n return this.ariaLabel || null;\n } else {\n return null;\n }\n }\n\n close(): void {\n this.detailService.close();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'clr-dg-detail-body',\n template: `\n <div class=\"clr-dg-detail-body-wrapper\">\n <ng-content></ng-content>\n </div>\n `,\n host: {\n '[class.datagrid-detail-body]': 'true',\n },\n standalone: false,\n})\nexport class ClrDatagridDetailBody {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Directive,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { COLUMN_STATE } from './providers/column-state.provider';\nimport { ColumnsService } from './providers/columns.service';\n\n@Directive({\n selector: '[clrDgHideableColumn]',\n standalone: false,\n})\n\n/**\n *\n * @description\n * A structural directive meant to be used inside a clr-dg-column component.\n *\n * <clr-dg-column>\n * <ng-container *clrDgHideableColumn=\"{ hidden: true }\">\n * User ID\n * </ng-container>\n * </clr-dg-column>\n *\n * It sets up state and properties so that columns can be manges for hide/show by a service and an internal\n * datagrid toggle component.\n *\n */\nexport class ClrDatagridHideableColumn implements OnDestroy {\n @Output('clrDgHiddenChange') hiddenChange = new EventEmitter<boolean>();\n\n /**\n *\n * @description\n * Used to initialize the column with either hidden or visible state.\n *\n */\n private _hidden: boolean;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private titleTemplateRef: TemplateRef<any>,\n viewContainerRef: ViewContainerRef,\n private columnsService: ColumnsService,\n @Optional()\n @Inject(COLUMN_STATE)\n private columnState: BehaviorSubject<ColumnState>\n ) {\n viewContainerRef.createEmbeddedView(titleTemplateRef);\n\n if (!columnState) {\n throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');\n }\n }\n\n /**\n *\n * @description\n * Setter fn for the @Input with the same name as this structural directive.\n * It allows the user to pre-configure the column's hide/show state. { hidden: true }\n * It's more verbose but has more Clarity.\n *\n * @example\n * *clrDgHideableColumn\n * *clrDgHideableColumn={hidden: false}\n * *clrDgHideableColumn={hidden: true}\n *\n */\n @Input('clrDgHideableColumn')\n set clrDgHideableColumn(value: { hidden: boolean } | string) {\n if (typeof value === 'string') {\n this.clrDgHidden = false;\n return;\n }\n this.clrDgHidden = value && value.hidden ? value.hidden : false;\n }\n\n @Input('clrDgHidden')\n set clrDgHidden(hidden: boolean) {\n this._hidden = hidden ? hidden : false;\n this.columnsService.emitStateChange(this.columnState, {\n hidden: this._hidden,\n changes: [DatagridColumnChanges.HIDDEN],\n });\n }\n\n ngOnInit() {\n this.columnsService.emitStateChange(this.columnState, {\n hideable: true,\n titleTemplateRef: this.titleTemplateRef,\n hidden: this._hidden,\n changes: [DatagridColumnChanges.HIDDEN],\n });\n\n this.subscriptions.push(\n this.columnState.subscribe((state: ColumnState) => {\n if (state.changes && state.changes.indexOf(DatagridColumnChanges.HIDDEN) > -1) {\n this.hiddenChange.emit(state.hidden); // Can emit through @Output when desugared syntax is used\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Directive,\n EmbeddedViewRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { DetailService } from './providers/detail.service';\n\n@Directive({\n selector: '[clrIfDetail]',\n standalone: false,\n})\nexport class ClrIfDetail implements OnInit, OnDestroy {\n @Output('clrIfDetailChange') stateChange = new EventEmitter<any>(null);\n\n private subscriptions: Subscription[] = [];\n private skip = false; // This keeps us from resetting the input and calling the toggle twice\n private embeddedViewRef: EmbeddedViewRef<any>;\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private detailService: DetailService\n ) {\n detailService.enabled = true;\n }\n\n @Input('clrIfDetail')\n set state(model: any) {\n if (!this.skip) {\n this.detailService.toggle(model);\n }\n this.skip = false;\n }\n\n get viewContext() {\n return { $implicit: this.detailService.state };\n }\n\n ngOnInit() {\n this.subscriptions.push(\n this.detailService.stateChange.subscribe(state => {\n if (state === true) {\n this.togglePanel(true);\n } else {\n this.togglePanel(false);\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n private togglePanel(showPanel: boolean) {\n let stateChangeParams = null;\n\n if (showPanel === true) {\n if (!this.embeddedViewRef) {\n // Create a context forward `Proxy` that will always bind to the user-specified context,\n // without having to re-assign it whenever changes.\n const viewContext = this._createContextForwardProxy();\n this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, viewContext);\n }\n\n this.skip = true;\n stateChangeParams = this.detailService.state;\n } else {\n this.viewContainer.clear();\n this.embeddedViewRef = null;\n }\n\n this.stateChange.emit(stateChangeParams);\n }\n\n /**\n * For a given outlet instance, we create a proxy object that delegates\n * to the user-specified context. This allows changing, or swapping out\n * the context object completely without having to destroy/re-create the view.\n */\n private _createContextForwardProxy() {\n return new Proxy(\n {},\n {\n set: (_target, prop, newValue) => {\n if (!this.viewContext) {\n return false;\n }\n return Reflect.set(this.viewContext, prop, newValue);\n },\n get: (_target, prop, receiver) => {\n if (!this.viewContext) {\n return undefined;\n }\n return Reflect.get(this.viewContext, prop, receiver);\n },\n }\n );\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n Component,\n ContentChildren,\n Input,\n OnDestroy,\n QueryList,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridCell } from './datagrid-cell';\nimport { DatagridIfExpandService } from './datagrid-if-expanded.service';\nimport { SelectionType } from './enums/selection-type';\nimport { ColumnsService } from './providers/columns.service';\nimport { DisplayModeService } from './providers/display-mode.service';\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\nimport { RowActionService } from './providers/row-action-service';\nimport { Selection } from './providers/selection';\n\n/**\n * Generic bland container serving various purposes for Datagrid.\n * For instance, it can help span a text over multiple rows in detail view.\n */\n@Component({\n selector: 'clr-dg-row-detail',\n template: `\n <div class=\"clr-sr-only\">\n {{ beginningOfExpandableContentAriaText }}\n {{ commonStrings.keys.datagridExpandableRowsHelperText }}\n </div>\n <!--\n These two containers mirror the ones in the row above and are only used while the detail is\n column aligned - see columnAligned. They are always rendered so the cells always have\n somewhere to be moved into, and the pinned one takes itself out of the layout while empty.\n -->\n <div class=\"datagrid-pinned-cells\">\n <ng-container #pinnedCells></ng-container>\n </div>\n <ng-container #scrollableCells></ng-container>\n @if (this.cells?.length > 0) {\n <ng-container [ngTemplateOutlet]=\"noCells\"></ng-container>\n <!--\n Where the cells go back to when the detail stops being column aligned, because a column was\n unpinned. A view that has been moved into a container cannot be handed back to the content\n projection it came from, so it needs a container of its own in the same place.\n -->\n <ng-container #plainCells></ng-container>\n }\n @if (this.cells?.length === 0) {\n <clr-dg-cell class=\"datagrid-container\">\n <ng-container [ngTemplateOutlet]=\"noCells\"></ng-container>\n </clr-dg-cell>\n }\n\n <ng-template #noCells>\n <ng-content></ng-content>\n </ng-template>\n <div class=\"clr-sr-only\">{{ endOfExpandableContentAriaText }}</div>\n `,\n host: {\n '[class.datagrid-row-flex]': 'true',\n '[class.datagrid-row-detail]': 'true',\n '[attr.id]': 'expand.expandableId',\n role: 'row',\n },\n standalone: false,\n})\nexport class ClrDatagridRowDetail implements AfterContentInit, AfterViewInit, AfterViewChecked, OnDestroy {\n @Input('clrRowDetailBeginningAriaText') _beginningOfExpandableContentAriaText: string;\n @Input('clrRowDetailEndAriaText') _endOfExpandableContentAriaText: string;\n\n replacedRow = false;\n\n /**\n * Whether the detail lays its cells out in the same columns as the row, which it does when it\n * holds one cell per column and at least one of those columns is pinned. The cells of the pinned\n * columns are then static alongside the ones in the row above.\n */\n columnAligned = false;\n\n /* reference to the enum so that template can access it */\n SELECTION_TYPE = SelectionType;\n\n @ContentChildren(ClrDatagridCell) cells: QueryList<ClrDatagridCell>;\n\n @ViewChild('pinnedCells', { read: ViewContainerRef }) private _pinnedCells: ViewContainerRef;\n @ViewChild('scrollableCells', { read: ViewContainerRef }) private _scrollableCells: ViewContainerRef;\n @ViewChild('plainCells', { read: ViewContainerRef }) private _plainCells: ViewContainerRef;\n\n private subscriptions: Subscription[] = [];\n private cellsMoved = false;\n private lastLayout: string;\n private hadCells: boolean;\n\n constructor(\n public selection: Selection,\n public rowActionService: RowActionService,\n public expand: DatagridIfExpandService,\n public expandableRows: ExpandableRowsCount,\n public commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService,\n private displayMode: DisplayModeService\n ) {}\n\n @Input('clrDgReplace')\n set replace(value: boolean) {\n this.expand.setReplace(!!value);\n }\n\n get beginningOfExpandableContentAriaText() {\n return (\n this._beginningOfExpandableContentAriaText ||\n `${this.commonStrings.keys.datagridExpandableBeginningOf} ${this.commonStrings.keys.datagridExpandableRowContent}`\n );\n }\n\n get endOfExpandableContentAriaText() {\n return (\n this._endOfExpandableContentAriaText ||\n `${this.commonStrings.keys.datagridExpandableEndOf} ${this.commonStrings.keys.datagridExpandableRowContent}`\n );\n }\n\n ngAfterContentInit() {\n this.subscriptions.push(\n this.expand.replace.subscribe(replaceChange => {\n this.replacedRow = replaceChange;\n }),\n // New cells have to be moved even when the columns did not change.\n this.cells.changes.subscribe(() => this.syncColumnAlignment(true))\n );\n }\n\n ngAfterViewInit() {\n this.subscriptions.push(\n // The columns are set up after the detail's content, and pinning one happens later still.\n // Both land as a new render cycle, which is where the cells are moved.\n this.displayMode.view.subscribe(() => this.syncColumnAlignment())\n );\n this.syncColumnAlignment(true);\n this.hadCells = this.cells?.length > 0;\n }\n\n ngAfterViewChecked() {\n // The template holds the content in one of two places, depending on whether the detail has cells\n // of its own, and creating either of them projects the content into it - which takes the cells\n // back out of the containers they were moved into. That happens when a detail turns up with no\n // cells and receives them later, as it does when its content is behind a `clrLoading` template.\n // By this point the swap has happened, so the move can be repeated for good.\n const hasCells = this.cells?.length > 0;\n if (hasCells !== this.hadCells) {\n this.hadCells = hasCells;\n this.syncColumnAlignment(true);\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n /**\n * Moves the cells into the containers that lay them out in the same columns as the row, or back\n * out of them once that stops making sense.\n */\n private syncColumnAlignment(force = false) {\n if (!this._pinnedCells || !this._scrollableCells) {\n return;\n }\n const columns = this.columnsService.columnStates;\n const cells = this.cells ? this.cells.toArray() : [];\n // One cell per column is what makes the two comparable. Pinning is what makes the split worth\n // doing at all: with nothing pinned there is nothing to line up with, and the detail is left\n // exactly as it was authored.\n const columnAligned = cells.length > 0 && cells.length === columns.length && columns.some(column => column.pinned);\n const layout = columnAligned ? columns.map(column => (column.pinned ? '1' : '0')).join('') : '';\n\n if (!force && layout === this.lastLayout) {\n return;\n }\n this.lastLayout = layout;\n this.columnAligned = columnAligned;\n\n if (!columnAligned) {\n // Only worth doing if the cells were moved in the first place. Leaving an untouched detail\n // alone keeps whatever the author wrote between the cells where they wrote it.\n if (this.cellsMoved) {\n cells.forEach(cell => this.moveCell(this._plainCells, cell));\n this.cellsMoved = false;\n }\n return;\n }\n cells.forEach((cell, index) =>\n this.moveCell(this.columnsService.isPinned(index) ? this._pinnedCells : this._scrollableCells, cell)\n );\n this.cellsMoved = true;\n }\n\n private moveCell(container: ViewContainerRef, cell: ClrDatagridCell) {\n if (container && !cell._view.destroyed) {\n container.insert(cell._view);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { SelectionType } from './enums/selection-type';\nimport { ColumnsService } from './providers/columns.service';\nimport { DetailService } from './providers/detail.service';\nimport { Selection } from './providers/selection';\n\n@Component({\n selector: 'clr-dg-footer',\n template: `\n @if (selection.selectionType === SELECTION_TYPE.Multi && selection.current?.length > 0) {\n <div class=\"clr-form-control-disabled\">\n <clr-checkbox-wrapper class=\"datagrid-footer-select\">\n <input clrCheckbox type=\"checkbox\" checked=\"checked\" disabled />\n <label>{{ selection.current.length }}</label>\n <span class=\"clr-sr-only\">{{ commonStrings.keys.selectedRows }}</span>\n </clr-checkbox-wrapper>\n </div>\n }\n @if (!detailService.isOpen) {\n @if (hasHideableColumns) {\n <clr-dg-column-toggle></clr-dg-column-toggle>\n }\n <div class=\"datagrid-footer-description\">\n <ng-content></ng-content>\n </div>\n }\n <ng-content select=\"clr-dg-pagination\"></ng-content>\n `,\n host: {\n '[class.datagrid-footer]': 'true',\n },\n standalone: false,\n})\nexport class ClrDatagridFooter<T = any> {\n /* reference to the enum so that template can access */\n SELECTION_TYPE = SelectionType;\n\n constructor(\n public selection: Selection<T>,\n public detailService: DetailService,\n private columnsService: ColumnsService,\n public commonStrings: ClrCommonStringsService\n ) {}\n\n get hasHideableColumns(): boolean {\n return this.columnsService.hasHideableColumns;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, Input, ViewChild } from '@angular/core';\nimport { ClrControlLabel } from '@clr/angular/forms/common';\nimport { uniqueIdFactory } from '@clr/angular/utils';\n\nimport { Page } from './providers/page';\n\n@Component({\n selector: 'clr-dg-page-size',\n template: `\n <label [for]=\"pageSizeOptionsId\"><ng-content></ng-content></label>\n <div class=\"clr-select-wrapper\">\n <select [id]=\"pageSizeOptionsId\" [class.clr-page-size-select]=\"true\" [(ngModel)]=\"page.size\">\n @for (option of pageSizeOptions; track option) {\n <option [ngValue]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridPageSize {\n @Input('clrPageSizeOptions') pageSizeOptions: number[];\n @Input('clrPageSizeOptionsId') pageSizeOptionsId = uniqueIdFactory();\n\n constructor(public page: Page) {}\n\n @ViewChild(ClrControlLabel, { static: true })\n set label(label: ClrControlLabel) {\n if (label) {\n label.disableGrid();\n }\n }\n\n ngOnInit() {\n if (!this.pageSizeOptions || this.pageSizeOptions.length === 0) {\n this.pageSizeOptions = [this.page.size];\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridPageSize } from './datagrid-page-size';\nimport { DetailService } from './providers/detail.service';\nimport { Page } from './providers/page';\n\n@Component({\n selector: 'clr-dg-pagination',\n template: `\n @if (!detailService.isOpen) {\n @if (_pageSizeComponent) {\n <div class=\"pagination-size\">\n <ng-content select=\"clr-dg-page-size\"></ng-content>\n </div>\n }\n <div class=\"pagination-description\">\n <ng-content></ng-content>\n </div>\n @if (page.last > 1) {\n <div class=\"pagination-list\">\n <button\n type=\"button\"\n class=\"pagination-first\"\n [disabled]=\"page.current <= 1\"\n (click)=\"page.current = 1\"\n [attr.aria-label]=\"commonStrings.keys.firstPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.firstPage }}</span>\n <cds-icon shape=\"step-forward-2\" direction=\"down\"></cds-icon>\n </button>\n <button\n type=\"button\"\n class=\"pagination-previous\"\n [disabled]=\"page.current <= 1\"\n (click)=\"page.current = page.current - 1\"\n [attr.aria-label]=\"commonStrings.keys.previousPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.previousPage }}</span>\n <cds-icon shape=\"angle\" direction=\"left\"></cds-icon>\n </button>\n <div class=\"pagination-pages\">\n @if (!disableCurrentPageInput) {\n <input\n #currentPageInput\n type=\"text\"\n class=\"pagination-current clr-input\"\n [size]=\"page.last.toString().length\"\n [value]=\"page.current\"\n (keydown.enter)=\"updateCurrentPage($event)\"\n (blur)=\"verifyCurrentPage($event)\"\n [attr.aria-label]=\"commonStrings.keys.currentPage\"\n />\n } @else {\n <span>{{ page.current }}</span>\n }\n / <span [attr.aria-label]=\"commonStrings.keys.totalPages\">{{ page.last }}</span>\n </div>\n <button\n type=\"button\"\n class=\"pagination-next\"\n [disabled]=\"page.current >= page.last\"\n (click)=\"page.current = page.current + 1\"\n [attr.aria-label]=\"commonStrings.keys.nextPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.nextPage }}</span>\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n <button\n type=\"button\"\n class=\"pagination-last\"\n [disabled]=\"page.current >= page.last\"\n (click)=\"page.current = page.last\"\n [attr.aria-label]=\"commonStrings.keys.lastPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.lastPage }}</span>\n <cds-icon shape=\"step-forward-2\" direction=\"up\"></cds-icon>\n </button>\n </div>\n }\n }\n @if (detailService.isOpen) {\n <div class=\"pagination-description-compact\">\n {{ page.firstItem + 1 }}-{{ page.lastItem + 1 }} / {{ page.totalItems }}\n </div>\n <div class=\"pagination-list\">\n <button\n type=\"button\"\n class=\"pagination-previous\"\n [disabled]=\"page.current <= 1\"\n (click)=\"page.current = page.current - 1\"\n [attr.aria-label]=\"commonStrings.keys.previousPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.previousPage }}</span>\n <cds-icon shape=\"angle\" direction=\"left\"></cds-icon>\n </button>\n <span>{{ page.current }}</span>\n <button\n type=\"button\"\n class=\"pagination-next\"\n [disabled]=\"page.current >= page.last\"\n (click)=\"page.current = page.current + 1\"\n [attr.aria-label]=\"commonStrings.keys.nextPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.nextPage }}</span>\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n </div>\n }\n `,\n host: { '[class.pagination]': 'true' },\n standalone: false,\n})\nexport class ClrDatagridPagination implements OnDestroy, OnInit {\n @Input('clrDgPageInputDisabled') disableCurrentPageInput: boolean;\n\n @Output('clrDgPageChange') currentChanged = new EventEmitter<number>(false);\n\n @ContentChild(ClrDatagridPageSize) _pageSizeComponent: ClrDatagridPageSize;\n\n @ViewChild('currentPageInput') currentPageInputRef: ElementRef<HTMLInputElement>;\n\n /**\n * Subscription to the page service changes\n */\n private _pageSubscription: Subscription;\n\n constructor(\n public page: Page,\n public commonStrings: ClrCommonStringsService,\n public detailService: DetailService\n ) {\n page.activated = true;\n }\n\n /**\n * Page size\n */\n @Input('clrDgPageSize')\n get pageSize(): number {\n return this.page.size;\n }\n set pageSize(size: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof size === 'number') {\n this.page.size = size;\n }\n }\n\n /**\n * Total items (needed to guess the last page)\n */\n @Input('clrDgTotalItems')\n get totalItems(): number {\n return this.page.totalItems;\n }\n set totalItems(total: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof total === 'number') {\n this.page.totalItems = total;\n }\n }\n\n /**\n * Last page\n */\n @Input('clrDgLastPage')\n get lastPage(): number {\n return this.page.last;\n }\n set lastPage(last: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof last === 'number') {\n this.page.last = last;\n }\n }\n\n /**\n * Current page\n */\n @Input('clrDgPage')\n get currentPage(): number {\n return this.page.current;\n }\n set currentPage(page: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof page === 'number') {\n this.page.current = page;\n }\n }\n\n /**\n * Index of the first item displayed on the current page, starting at 0, -1 if none displayed\n */\n get firstItem(): number {\n return this.page.firstItem;\n }\n\n /**\n * Index of the last item displayed on the current page, starting at 0, -1 if none displayed\n */\n get lastItem(): number {\n return this.page.lastItem;\n }\n\n /**\n * Conditionally adds page numbers before and after the current page\n */\n get middlePages(): number[] {\n const middlePages: number[] = [];\n if (this.page.current > 1) {\n middlePages.push(this.page.current - 1);\n }\n middlePages.push(this.page.current);\n if (this.page.current < this.page.last) {\n middlePages.push(this.page.current + 1);\n }\n return middlePages;\n }\n\n /**********\n * Subscription to the Page service for page changes.\n * Note: this only emits after the datagrid is initialized/stabalized and the page changes.\n */\n ngOnInit() {\n /*\n * Default page size is 10.\n * The reason we set it here and not in the provider itself is because\n * we don't want pagination if this component isn't present in the datagrid.\n */\n if (!this.page.size) {\n this.page.size = 10;\n }\n this._pageSubscription = this.page.change.subscribe(current => this.currentChanged.emit(current));\n }\n\n ngOnDestroy() {\n this.page.resetPageSize(true);\n if (this._pageSubscription) {\n this._pageSubscription.unsubscribe();\n }\n }\n\n /**\n * Moves to the previous page if it exists\n */\n previous() {\n this.page.previous();\n }\n\n /**\n * Moves to the next page if it exists\n */\n next() {\n this.page.next();\n }\n\n verifyCurrentPage(event: any): void {\n const parsed = parseInt(event.target.value, 10);\n if (parsed !== this.page.current) {\n event.target.value = this.page.current;\n }\n }\n\n /**\n * We only update the pagination's current page on enter.\n */\n updateCurrentPage(event: any): void {\n const parsed = parseInt(event.target.value, 10);\n\n // if the input value, is not a number, we don't update the page\n if (!isNaN(parsed)) {\n if (parsed < 1) {\n this.page.current = 1;\n } else if (parsed > this.page.last) {\n this.page.current = this.page.last;\n } else {\n this.page.current = parsed;\n }\n }\n\n /**\n * Set the input's value to the new current page. This is needed because the code\n * above may have changed the value from what the user entered in.\n */\n this.currentPageInputRef.nativeElement.value = this.page.current.toString();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridComparatorInterface } from './comparator.interface';\n\nexport interface ClrDatagridStateInterface<T = any> {\n page?: { from?: number; to?: number; size?: number; current?: number };\n sort?: { by: string | ClrDatagridComparatorInterface<T>; reverse: boolean };\n filters?: any[];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Observable } from 'rxjs';\n\nexport interface ClrDatagridFilterInterface<T, S = any> {\n readonly state?: S;\n\n changes: Observable<any>;\n\n isActive(): boolean;\n\n accepts(item: T): boolean;\n\n equals?(other: ClrDatagridFilterInterface<T, any>): boolean;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridStringFilterInterface<T> {\n accepts(item: T, search: string): boolean;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridNumericFilterInterface<T> {\n accepts(item: T, low: number, high: number): boolean;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridComparatorInterface<T> {\n compare(a: T, b: T): number;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridVirtualScrollRangeInterface<T> {\n total: number;\n skip: number;\n data: T[];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, Optional } from '@angular/core';\n\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\n\n/*\n * I don't think this deserves to be in IfExpanded itself,\n * so I'm adding a second directive on the same selector for now just for the datagrid\n */\n@Directive({\n selector: '[clrIfExpanded]',\n standalone: false,\n})\nexport class DatagridDetailRegisterer {\n constructor(@Optional() private expandableRowsCount: ExpandableRowsCount) {\n if (expandableRowsCount) {\n expandableRowsCount.register();\n }\n }\n\n ngOnDestroy() {\n if (this.expandableRowsCount) {\n this.expandableRowsCount.unregister();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, EventEmitter, Inject, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { HIDDEN_COLUMN_CLASS, PINNED_COLUMN_CLASS, STRICT_WIDTH_CLASS } from './constants';\nimport { DatagridRenderOrganizer } from './render-organizer';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { ColumnState } from '../interfaces/column-state.interface';\nimport { ColumnResizerService } from '../providers/column-resizer.service';\nimport { COLUMN_STATE, COLUMN_STATE_PROVIDER } from '../providers/column-state.provider';\nimport { ColumnsService } from '../providers/columns.service';\n\n@Directive({\n selector: 'clr-dg-column',\n providers: [ColumnResizerService, COLUMN_STATE_PROVIDER],\n standalone: false,\n})\nexport class DatagridHeaderRenderer implements OnDestroy {\n @Output('clrDgColumnResize') resizeEmitter = new EventEmitter<number>();\n\n /**\n * Indicates if the column has a strict width, so it doesn't shrink or expand based on the content.\n */\n private widthSet = false;\n private autoSet = false;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n organizer: DatagridRenderOrganizer,\n private domAdapter: DomAdapter,\n private columnResizerService: ColumnResizerService,\n private columnsService: ColumnsService,\n @Inject(COLUMN_STATE) private columnState: BehaviorSubject<ColumnState>\n ) {\n this.subscriptions.push(\n organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth())\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n getColumnWidthState(): Partial<ColumnState> {\n const strictWidth = this.detectStrictWidth();\n return {\n width: this.computeWidth(strictWidth),\n strictWidth: strictWidth,\n };\n }\n\n setColumnState(index: number) {\n this.columnsService.columns[index] = this.columnState;\n }\n\n setWidth(state: ColumnState) {\n if (state.strictWidth) {\n if (this.columnResizerService.resizedBy) {\n this.resizeEmitter.emit(state.width);\n this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');\n this.widthSet = false;\n }\n // Don't set width if there is a user-defined one. Just add the strict width class.\n this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n this.autoSet = false;\n } else {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');\n this.widthSet = true;\n this.autoSet = true;\n }\n }\n\n setHidden(state: ColumnState) {\n if (state.hidden) {\n this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n }\n }\n\n setPinned(state: ColumnState) {\n if (state.pinned) {\n this.renderer.addClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n }\n }\n\n private clearWidth() {\n // remove the width only if we set it, and it is not changed by dragging.\n if (this.widthSet && !this.columnResizerService.resizedBy) {\n this.renderer.setStyle(this.el.nativeElement, 'width', null);\n }\n if (this.autoSet) {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n }\n }\n\n private detectStrictWidth(): number {\n if (this.columnResizerService.resizedBy) {\n return this.columnResizerService.widthAfterResize;\n } else if (this.autoSet) {\n return 0;\n } else {\n return this.domAdapter.userDefinedWidth(this.el.nativeElement);\n }\n }\n\n private computeWidth(strictWidth: number): number {\n let width: number = strictWidth;\n if (!width) {\n width = this.domAdapter.scrollWidth(this.el.nativeElement);\n }\n return width;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/*\n * This version of the DomAdapter is for use on non-browser platforms, where there are no\n * nativeElements to use for calculations.\n */\n\nimport { Injectable } from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\n\n@Injectable()\nexport class NoopDomAdapter implements DomAdapter {\n userDefinedWidth(_element: any): number {\n return 0;\n }\n\n scrollBarWidth(_element: any) {\n return 0;\n }\n\n scrollWidth(_element: any) {\n return 0;\n }\n\n computedHeight(_element: any): number {\n return 0;\n }\n\n clientRect(_element: any): DOMRect {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0,\n } as DOMRect;\n }\n\n minWidth(_element: any): number {\n return 0;\n }\n\n focus(_element: any): void {\n // Do nothing\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagrid } from '../datagrid';\nimport { DatagridHeaderRenderer } from './header-renderer';\nimport { NoopDomAdapter } from './noop-dom-adapter';\nimport { DatagridRenderOrganizer } from './render-organizer';\nimport { DatagridRowRenderer } from './row-renderer';\nimport { DatagridColumnChanges } from '../enums/column-changes.enum';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { ColumnState, ColumnStateDiff } from '../interfaces/column-state.interface';\nimport { ColumnsService } from '../providers/columns.service';\nimport { DetailService } from '../providers/detail.service';\nimport { Items } from '../providers/items';\nimport { Page } from '../providers/page';\nimport { TableSizeService } from '../providers/table-size.service';\nimport { KeyNavigationGridController } from '../utils/key-navigation-grid.controller';\n\n// Fixes build error\n// @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)\nexport const domAdapterFactory = (platformId: any) => {\n if (isPlatformBrowser(platformId)) {\n return new DomAdapter();\n } else {\n return new NoopDomAdapter();\n }\n};\n\n// Fixes build error\n// @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)\n@Directive({\n selector: 'clr-datagrid',\n providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],\n standalone: false,\n})\nexport class DatagridMainRenderer implements AfterContentInit, AfterViewInit, AfterViewChecked, OnDestroy {\n @ContentChildren(DatagridHeaderRenderer) private headers: QueryList<DatagridHeaderRenderer>;\n @ContentChildren(DatagridRowRenderer) private rows: QueryList<DatagridRowRenderer>;\n\n private _heightSet = false;\n private shouldStabilizeColumns = true;\n private subscriptions: Subscription[] = [];\n private intersectionObserver: IntersectionObserver = null;\n\n /**\n * Indicates if we want to re-compute columns width. This should only happen:\n * 1) When headers change, with columns being added or removed\n * 2) When rows are lazily loaded for the first time\n */\n private columnsSizesStable = false;\n\n constructor(\n private datagrid: ClrDatagrid,\n private organizer: DatagridRenderOrganizer,\n private items: Items,\n private page: Page,\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n detailService: DetailService,\n private tableSizeService: TableSizeService,\n private columnsService: ColumnsService,\n private ngZone: NgZone,\n private keyNavigation: KeyNavigationGridController,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.subscriptions.push(\n organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth())\n );\n\n this.subscriptions.push(\n page.sizeChange.subscribe(() => {\n if (this._heightSet) {\n this.resetDatagridHeight();\n }\n })\n );\n this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));\n this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));\n }\n\n ngOnInit() {\n this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));\n // Datagrid used in other components like Accordion, Tabs or wrapped in onPush component which have their content\n // hidden by default gets initialised without being visible and breakes rendering cycle.\n // Should run only the first time if the datagrid is not visible on first initialization.\n if (this.el.nativeElement.offsetParent === null) {\n this.intersectionObserver = new IntersectionObserver(([entry]) => {\n if ((this.el.nativeElement.offsetParent || entry.isIntersecting) && this.columnsSizesStable) {\n this.columnsSizesStable = false;\n this.changeDetectorRef.markForCheck();\n this.intersectionObserver.disconnect();\n }\n });\n this.intersectionObserver.observe(this.el.nativeElement);\n }\n }\n\n ngAfterContentInit() {\n this.setupColumns();\n\n this.subscriptions.push(\n this.headers.changes.subscribe(() => {\n // TODO: only re-stabilize if a column was added or removed. Reordering is fine.\n // Need to setup columns before stabalizing them\n this.setupColumns();\n this.columnsSizesStable = false;\n this.stabilizeColumns();\n })\n );\n }\n\n // Initialize and set Table width for horizontal scrolling here.\n ngAfterViewInit() {\n this.tableSizeService.table = this.el;\n }\n\n ngAfterViewChecked() {\n if (this.shouldStabilizeColumns) {\n this.stabilizeColumns();\n }\n\n if (this.shouldComputeHeight()) {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.computeDatagridHeight();\n });\n });\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.intersectionObserver?.disconnect();\n }\n\n toggleDetailPane(state: boolean) {\n if (this.headers) {\n if (state && !this.columnsService.hasCache()) {\n this.columnsService.cache();\n\n // The pane leaves room for a single column, and it should be the one the user was already\n // looking at on the left of the row. Pinned columns are rendered before the rest, so that\n // is the first pinned column whenever anything is pinned, and the first declared one\n // otherwise.\n const keptColumn =\n this.columnsService.visibleColumns.find(column => column.pinned) || this.columnsService.visibleColumns[0];\n\n this.columnsService.visibleColumns.forEach(header => {\n if (header !== keptColumn) {\n this.columnsService.emitStateChangeAt(header.columnIndex, {\n changes: [DatagridColumnChanges.HIDDEN],\n hidden: state,\n });\n }\n // That single column is full width, so there is nothing to scroll and nothing to pin\n // against - the column that stays included. Pinning is suspended while the pane is open\n // and restored from the cache when it closes.\n if (header.pinned) {\n this.columnsService.emitStateChangeAt(header.columnIndex, {\n changes: [DatagridColumnChanges.PINNED],\n pinned: false,\n });\n }\n });\n } else if (!state) {\n this.columnsService.resetToLastCache();\n }\n }\n }\n\n private setupColumns() {\n this.headers.forEach((header, index) => header.setColumnState(index));\n this.columnsService.columns.splice(this.headers.length); // Trim any old columns\n // Sets columnIndex for each column\n this.columnsService.columns.forEach((column, index) => {\n this.columnsService.emitStateChange(column, { changes: [DatagridColumnChanges.INITIALIZE], columnIndex: index });\n });\n }\n\n private shouldComputeHeight(): boolean {\n if (!this._heightSet && this.page.size > 0) {\n if (this.items.displayed.length === this.page.size) {\n return true;\n }\n }\n return false;\n }\n\n private computeDatagridHeight() {\n const height = window.getComputedStyle(this.el.nativeElement).height;\n this.renderer.setStyle(this.el.nativeElement, 'height', height);\n this._heightSet = true;\n }\n\n private resetDatagridHeight() {\n this.renderer.setStyle(this.el.nativeElement, 'height', '');\n this._heightSet = false;\n }\n\n /**\n * Makes each header compute its width.\n */\n private computeHeadersWidth() {\n const nbColumns: number = this.headers.length;\n const headerWidths = this.headers.map(header => {\n return header.getColumnWidthState();\n });\n let allStrict = true;\n this.headers.forEach((header, index) => {\n // On the last header column check whether all columns have strict widths.\n // If all columns have strict widths, remove the strict width from the last column and make it the column's\n // minimum width so that when all previous columns shrink, it will get a flexible width and cover the empty\n // gap in the Datagrid.\n const state: ColumnStateDiff = {\n changes: [DatagridColumnChanges.WIDTH],\n ...headerWidths[index],\n };\n\n if (!state.strictWidth) {\n allStrict = false;\n }\n\n if (nbColumns === index + 1 && allStrict) {\n state.strictWidth = 0;\n }\n\n this.columnsService.emitStateChangeAt(index, state);\n });\n }\n\n private columnStateChanged(state: ColumnState) {\n // eslint-disable-next-line eqeqeq\n if (!this.headers || state.columnIndex == null) {\n return;\n }\n const columnIndex = state.columnIndex;\n if (state.changes && state.changes.length) {\n state.changes.forEach(change => {\n switch (change) {\n case DatagridColumnChanges.WIDTH:\n this.headers.get(columnIndex).setWidth(state);\n this.rows.forEach(row => {\n if (row?.cells.length === this.columnsService.columns.length) {\n row.cells.get(columnIndex).setWidth(state);\n row.expandableRows.forEach(expandableRow => {\n expandableRow.cells.get(columnIndex)?.setWidth(state);\n });\n }\n });\n break;\n case DatagridColumnChanges.HIDDEN:\n this.headers.get(columnIndex).setHidden(state);\n this.rows.forEach(row => {\n if (row.cells && row.cells.length) {\n row.cells.get(columnIndex).setHidden(state);\n\n row.expandableRows.forEach(expandableRow => {\n expandableRow.cells.get(columnIndex)?.setHidden(state);\n });\n }\n });\n this.updateColumnSeparatorsVisibility();\n this.keyNavigation.resetKeyGrid();\n break;\n case DatagridColumnChanges.PINNED: {\n // Read before the class is updated below. The state can be re-emitted with the same\n // value, e.g. by resetToLastCache, and relocating the views then is pure overhead.\n const wasPinned = this.datagrid.columns.get(columnIndex)?.isPinned;\n\n this.headers.get(columnIndex).setPinned(state);\n this.rows.forEach(row => {\n if (row.cells && row.cells.length) {\n row.cells.get(columnIndex)?.setPinned(state);\n\n row.expandableRows.forEach(expandableRow => {\n expandableRow.cells.get(columnIndex)?.setPinned(state);\n });\n }\n });\n\n if (wasPinned !== !!state.pinned) {\n this.updateColumnSeparatorsVisibility();\n this.keyNavigation.resetKeyGrid();\n // The column and its cells have to move between the static and the scrollable\n // containers, which happens on the next CALCULATE/DISPLAY cycle. Widths are\n // recomputed there as well, since the flex context of the column changes.\n // Deferring to ngAfterViewChecked keeps us out of the change detection pass that\n // the `clrDgPinned` input setter runs in.\n this.columnsSizesStable = false;\n this.shouldStabilizeColumns = true;\n }\n break;\n }\n case DatagridColumnChanges.INITIALIZE:\n if (state.pinned) {\n this.headers.get(columnIndex).setPinned(state);\n }\n if (state.hideable && state.hidden) {\n this.headers.get(columnIndex).setHidden(state);\n }\n if (state.pinned || (state.hideable && state.hidden)) {\n this.rows.forEach(row => {\n row.setCellsState();\n row.expandableRows.forEach(expandableRow => {\n expandableRow.setCellsState();\n });\n });\n this.updateColumnSeparatorsVisibility();\n }\n break;\n default:\n break;\n }\n });\n }\n }\n\n /**\n * Triggers a whole re-rendring cycle to set column sizes, if needed.\n */\n private stabilizeColumns() {\n if (this.columnsSizesStable) {\n // Nothing to do.\n return;\n }\n // Resize when the rows are loaded.\n if (this.items.displayed.length > 0) {\n this.organizer.resize();\n this.columnsSizesStable = true;\n }\n }\n\n private updateColumnSeparatorsVisibility() {\n const visibleColumns = this.datagrid.columns.filter(column => !column.isHidden);\n // Pinned columns are rendered in the static container, so they always have something after\n // them and keep their separator - it is what marks the boundary with the scrollable columns.\n // Only the last scrollable column has nothing after it and must hide its separator.\n const scrollableColumns = visibleColumns.filter(column => !column.isPinned);\n const lastScrollableColumn = scrollableColumns[scrollableColumns.length - 1];\n visibleColumns.forEach(column => {\n const showSeparator = column !== lastScrollableColumn;\n if (column.showSeparator !== showSeparator) {\n column.showSeparator = showSeparator;\n }\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, OnDestroy } from '@angular/core';\n\nimport { DatagridRowRenderer } from './row-renderer';\nimport { ColumnsService } from '../providers/columns.service';\n\n@Directive({\n selector: 'clr-dg-row-detail',\n standalone: false,\n})\nexport class DatagridRowDetailRenderer extends DatagridRowRenderer implements OnDestroy {\n constructor(\n private parentRow: DatagridRowRenderer,\n columnsService: ColumnsService,\n el: ElementRef<HTMLElement>\n ) {\n super(columnsService, el);\n\n parentRow.expandableRows.push(this);\n }\n\n override ngOnDestroy() {\n this.parentRow.expandableRows = [];\n super.ngOnDestroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ClrCheckboxModule } from '@clr/angular/forms/checkbox';\nimport { ClrInputModule } from '@clr/angular/forms/input';\nimport { ClrNumberInputModule } from '@clr/angular/forms/number-input';\nimport { ClrRadioModule } from '@clr/angular/forms/radio';\nimport { ClrSelectModule } from '@clr/angular/forms/select';\nimport {\n angleDoubleIcon,\n arrowIcon,\n ClarityIcons,\n ClrIcon,\n ellipsisVerticalIcon,\n filterGridCircleIcon,\n filterGridIcon,\n // pinIcon, // disabled with clrDgPinnable\n stepForward2Icon,\n timesIcon,\n twoWayArrowsIcon,\n // unpinIcon, // disabled with clrDgPinnable\n viewColumnsIcon,\n windowCloseIcon,\n} from '@clr/angular/icon';\nimport { ClrPopoverModuleNext } from '@clr/angular/popover/common';\nimport { ClrSpinnerModule } from '@clr/angular/progress/spinner';\nimport {\n CdkDragModule,\n CdkTrapFocusModule,\n ClrConditionalModule,\n ClrExpandableAnimationModule,\n ClrIfExpanded,\n ClrKeyFocusModule,\n ClrLoadingModule,\n ClrOutsideClickModule,\n} from '@clr/angular/utils';\n\nimport { DatagridNumericFilter } from './built-in/filters/datagrid-numeric-filter';\nimport { DatagridStringFilter } from './built-in/filters/datagrid-string-filter';\nimport { ActionableOompaLoompa } from './chocolate/actionable-oompa-loompa';\nimport { DatagridWillyWonka } from './chocolate/datagrid-willy-wonka';\nimport { ExpandableOompaLoompa } from './chocolate/expandable-oompa-loompa';\nimport { ClrDatagrid } from './datagrid';\nimport { ClrDatagridActionBar } from './datagrid-action-bar';\nimport { ClrDatagridActionOverflow } from './datagrid-action-overflow';\nimport { ClrDatagridCell } from './datagrid-cell';\nimport { ClrDatagridColumn } from './datagrid-column';\nimport { ClrDatagridColumnSeparator } from './datagrid-column-separator';\nimport { ClrDatagridColumnToggle } from './datagrid-column-toggle';\nimport { ClrDatagridColumnToggleButton } from './datagrid-column-toggle-button';\nimport { ClrDatagridDetail } from './datagrid-detail';\nimport { ClrDatagridDetailBody } from './datagrid-detail-body';\nimport { ClrDatagridDetailHeader } from './datagrid-detail-header';\nimport { DatagridDetailRegisterer } from './datagrid-detail-registerer';\nimport { ClrDatagridFilter } from './datagrid-filter';\nimport { ClrDatagridFooter } from './datagrid-footer';\nimport { ClrDatagridHideableColumn } from './datagrid-hideable-column';\nimport { ClrIfDetail } from './datagrid-if-detail';\nimport { ClrDatagridItems } from './datagrid-items';\nimport { ClrDatagridPageSize } from './datagrid-page-size';\nimport { ClrDatagridPagination } from './datagrid-pagination';\nimport { ClrDatagridPlaceholder } from './datagrid-placeholder';\nimport { ClrDatagridRow } from './datagrid-row';\nimport { ClrDatagridRowDetail } from './datagrid-row-detail';\nimport { ClrDatagridSelectionCellDirective } from './datagrid-selection-cell.directive';\nimport { ClrDatagridSingleSelectionValueAccessor } from './datagrid-single-selection.directive';\nimport { ClrDatagridVirtualScrollDirective } from './datagrid-virtual-scroll.directive';\nimport { DatagridCellRenderer } from './render/cell-renderer';\nimport { DatagridHeaderRenderer } from './render/header-renderer';\nimport { DatagridMainRenderer } from './render/main-renderer';\nimport { DatagridRowDetailRenderer } from './render/row-detail-renderer';\nimport { DatagridRowRenderer } from './render/row-renderer';\nimport { WrappedCell } from './wrapped-cell';\nimport { WrappedColumn } from './wrapped-column';\nimport { WrappedRow } from './wrapped-row';\n\nexport const CLR_DATAGRID_DIRECTIVES: Type<any>[] = [\n // Core\n ClrDatagrid,\n ClrDatagridActionBar,\n ClrDatagridActionOverflow,\n ClrDatagridCell,\n ClrDatagridColumn,\n ClrDatagridColumnSeparator,\n ClrDatagridDetail,\n ClrDatagridDetailBody,\n ClrDatagridDetailHeader,\n ClrDatagridFilter,\n ClrDatagridFooter,\n ClrDatagridHideableColumn,\n ClrDatagridItems,\n ClrDatagridPageSize,\n ClrDatagridPagination,\n ClrDatagridPlaceholder,\n ClrDatagridRow,\n ClrDatagridRowDetail,\n ClrDatagridSelectionCellDirective,\n ClrDatagridVirtualScrollDirective,\n ClrIfDetail,\n DatagridDetailRegisterer,\n WrappedCell,\n WrappedColumn,\n WrappedRow,\n\n // Renderers\n DatagridCellRenderer,\n DatagridHeaderRenderer,\n DatagridMainRenderer,\n DatagridRowDetailRenderer,\n DatagridRowRenderer,\n\n // Chocolate\n ActionableOompaLoompa,\n DatagridWillyWonka,\n ExpandableOompaLoompa,\n\n // Built-in shortcuts\n DatagridNumericFilter,\n DatagridStringFilter,\n];\n\nconst CLR_DATAGRID_INTERNAL_DIRECTIVES = [ClrDatagridColumnToggle, ClrDatagridColumnToggleButton];\nconst CLR_DATAGRID_STANDALONE_DIRECTIVES = [ClrDatagridSingleSelectionValueAccessor];\nconst CLR_DATAGRID_SHARED_DIRECTIVES = [ClrIfExpanded];\n\n@NgModule({\n imports: [\n CommonModule,\n CdkDragModule,\n CdkTrapFocusModule,\n ClrIcon,\n ClrInputModule,\n ClrRadioModule,\n ClrCheckboxModule,\n ClrNumberInputModule,\n ClrSelectModule,\n FormsModule,\n ClrLoadingModule,\n ClrConditionalModule,\n ClrOutsideClickModule,\n ClrExpandableAnimationModule,\n ClrSpinnerModule,\n ClrPopoverModuleNext,\n ClrKeyFocusModule,\n CLR_DATAGRID_STANDALONE_DIRECTIVES,\n CLR_DATAGRID_SHARED_DIRECTIVES,\n ],\n declarations: [CLR_DATAGRID_DIRECTIVES, CLR_DATAGRID_INTERNAL_DIRECTIVES],\n exports: [CLR_DATAGRID_DIRECTIVES, CLR_DATAGRID_STANDALONE_DIRECTIVES, CLR_DATAGRID_SHARED_DIRECTIVES],\n})\nexport class ClrDatagridModule {\n constructor() {\n ClarityIcons.addIcons(\n ellipsisVerticalIcon,\n viewColumnsIcon,\n windowCloseIcon,\n arrowIcon,\n timesIcon,\n twoWayArrowsIcon,\n stepForward2Icon,\n angleDoubleIcon,\n filterGridCircleIcon,\n filterGridIcon\n // Only the clrDgPinnable toggle used these, so they are disabled along with it.\n // pinIcon,\n // unpinIcon\n );\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './datagrid';\nexport * from './datagrid-action-bar';\nexport * from './datagrid-action-overflow';\nexport * from './datagrid-column';\nexport * from './datagrid-column-toggle';\nexport * from './datagrid-column-toggle-button';\nexport * from './datagrid-column-separator';\nexport * from './datagrid-detail';\nexport * from './datagrid-detail-body';\nexport * from './datagrid-detail-header';\nexport * from './datagrid-hideable-column';\nexport * from './datagrid-filter';\nexport * from './datagrid-if-detail';\nexport * from './datagrid-items';\nexport * from './datagrid-row';\nexport * from './datagrid-row-detail';\nexport * from './datagrid-cell';\nexport * from './datagrid-footer';\nexport * from './datagrid-page-size';\nexport * from './datagrid-pagination';\nexport * from './datagrid-placeholder';\n\nexport * from './interfaces/state.interface';\nexport * from './enums/sort-order.enum';\nexport * from './enums/selection-type';\nexport * from './interfaces/filter.interface';\nexport * from './interfaces/string-filter.interface';\nexport * from './interfaces/numeric-filter.interface';\nexport * from './interfaces/comparator.interface';\nexport * from './interfaces/virtual-scroll-data-range.interface';\n\nexport * from './built-in/filters/datagrid-string-filter';\nexport * from './built-in/filters/datagrid-numeric-filter';\nexport * from './built-in/filters/datagrid-property-string-filter';\nexport * from './built-in/filters/datagrid-property-numeric-filter';\nexport * from './built-in/comparators/datagrid-property-comparator';\n\nexport * from './chocolate/expandable-oompa-loompa';\nexport * from './chocolate/actionable-oompa-loompa';\nexport * from './chocolate/datagrid-willy-wonka';\n\nexport * from './datagrid.module';\n\nexport { Selection } from './providers/selection'; // exported specifically for appfx datagrid;\nexport { ClrDatagridItemsIdentityFunction } from './providers/items';\nexport { ClrDatagridSelectionCellDirective } from './datagrid-selection-cell.directive';\nexport { ClrDatagridVirtualScrollDirective } from './datagrid-virtual-scroll.directive';\nexport { ClrDatagridSingleSelectionValueAccessor } from './datagrid-single-selection.directive';\nexport { DatagridDetailRegisterer } from './datagrid-detail-registerer';\nexport { WrappedCell } from './wrapped-cell';\nexport { WrappedColumn } from './wrapped-column';\nexport { WrappedRow } from './wrapped-row';\nexport { DatagridMainRenderer } from './render/main-renderer';\nexport { DatagridHeaderRenderer } from './render/header-renderer';\nexport { DatagridCellRenderer } from './render/cell-renderer';\nexport { DatagridRowRenderer } from './render/row-renderer';\nexport { DatagridRowDetailRenderer } from './render/row-detail-renderer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.StateDebouncer","i1.Page","i2.StateDebouncer","i1.FiltersProvider","i1","i2.DatagridRenderOrganizer","i3","i4.KeyNavigationGridController","i5","i6","i7.ClrDatagridFilter","i7","i8","i9.ClrDatagridColumnSeparator","i10.DatagridNumericFilter","i11.DatagridStringFilter","i2.Sort","i3.Page","i1.Items","nbRow","i2.FiltersProvider","i1.DetailService","i1.DatagridRenderOrganizer","i1.Selection","i11","i12","i16.ClrDatagridSingleSelectionValueAccessor","i17.ClrDatagridSelectionCellDirective","i4.StateDebouncer","i1.ColumnsService","i1.DatagridWillyWonka","i2.RowActionService","i2.ExpandableRowsCount","i9.Page","i10","i11.KeyNavigationGridController","i12.ColumnsService","i13","i16.ClrDatagridCell","i17.ClrDatagridPlaceholder","i18.ClrDatagridRow","i19.ClrDatagridSelectionCellDirective","i20.DatagridCellRenderer","i21.DatagridRowRenderer","i22.ActionableOompaLoompa","i23.ExpandableOompaLoompa","i4","i2.ColumnsService","i9.ClrDatagridColumnToggleButton","i3.DatagridIfExpandService","i4.ExpandableRowsCount","i6.ColumnsService","i7.DisplayModeService","i9.ClrDatagridCell","i10.DatagridCellRenderer","i2.DetailService","i3.ColumnsService","i7.ClrDatagridColumnToggle","i2","i3.DetailService","i1.ExpandableRowsCount","i1.ClrDatagrid","i3.Items","i4.Page","i5.DetailService","i6.TableSizeService","i7.ColumnsService","i8.KeyNavigationGridController","i1.DatagridRowRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clr-angular-data-datagrid.mjs","sources":["../../../projects/angular/data/datagrid/built-in/nested-property.ts","../../../projects/angular/data/datagrid/built-in/comparators/datagrid-property-comparator.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-property-numeric-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-numeric-filter-impl.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-property-string-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-string-filter-impl.ts","../../../projects/angular/data/datagrid/enums/column-changes.enum.ts","../../../projects/angular/data/datagrid/enums/sort-order.enum.ts","../../../projects/angular/data/datagrid/providers/column-actions.service.ts","../../../projects/angular/data/datagrid/providers/column-state.provider.ts","../../../projects/angular/data/datagrid/providers/custom-filter.ts","../../../projects/angular/data/datagrid/render/constants.ts","../../../projects/angular/data/datagrid/providers/state-debouncer.provider.ts","../../../projects/angular/data/datagrid/providers/page.ts","../../../projects/angular/data/datagrid/providers/filters.ts","../../../projects/angular/data/datagrid/utils/datagrid-filter-registrar.ts","../../../projects/angular/data/datagrid/wrapped-column.ts","../../../projects/angular/data/datagrid/providers/sort.ts","../../../projects/angular/data/datagrid/providers/detail.service.ts","../../../projects/angular/data/datagrid/providers/columns.service.ts","../../../projects/angular/data/datagrid/enums/render-step.enum.ts","../../../projects/angular/data/datagrid/render/render-organizer.ts","../../../projects/angular/data/datagrid/providers/column-resizer.service.ts","../../../projects/angular/data/datagrid/providers/table-size.service.ts","../../../projects/angular/data/datagrid/datagrid-column-separator.ts","../../../projects/angular/data/datagrid/utils/key-navigation-strategies/default.ts","../../../projects/angular/data/datagrid/utils/key-navigation-strategies/expanded-row.ts","../../../projects/angular/data/datagrid/utils/key-navigation-strategies/expanded-columns-row.ts","../../../projects/angular/data/datagrid/utils/key-navigation-utils.ts","../../../projects/angular/data/datagrid/utils/key-navigation-grid.controller.ts","../../../projects/angular/data/datagrid/datagrid-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-numeric-filter.ts","../../../projects/angular/data/datagrid/built-in/filters/datagrid-string-filter.ts","../../../projects/angular/data/datagrid/datagrid-column.ts","../../../projects/angular/data/datagrid/providers/items.ts","../../../projects/angular/data/datagrid/datagrid-items.ts","../../../projects/angular/data/datagrid/datagrid-placeholder.ts","../../../projects/angular/data/datagrid/wrapped-cell.ts","../../../projects/angular/data/datagrid/datagrid-cell.ts","../../../projects/angular/data/datagrid/datagrid-if-expanded.service.ts","../../../projects/angular/data/datagrid/enums/display-mode.enum.ts","../../../projects/angular/data/datagrid/enums/selection-type.ts","../../../projects/angular/data/datagrid/wrapped-row.ts","../../../projects/angular/data/datagrid/providers/selection.ts","../../../projects/angular/data/datagrid/providers/row-action-service.ts","../../../projects/angular/data/datagrid/providers/global-expandable-rows.ts","../../../projects/angular/data/datagrid/providers/display-mode.service.ts","../../../projects/angular/data/datagrid/datagrid-single-selection.directive.ts","../../../projects/angular/data/datagrid/datagrid-selection-cell.directive.ts","../../../projects/angular/data/datagrid/datagrid-row.ts","../../../projects/angular/data/datagrid/datagrid-row.html","../../../projects/angular/data/datagrid/datagrid-virtual-scroll.directive.ts","../../../projects/angular/data/datagrid/providers/state.provider.ts","../../../projects/angular/data/datagrid/render/cell-renderer.ts","../../../projects/angular/data/datagrid/render/row-renderer.ts","../../../projects/angular/data/datagrid/chocolate/datagrid-willy-wonka.ts","../../../projects/angular/data/datagrid/chocolate/actionable-oompa-loompa.ts","../../../projects/angular/data/datagrid/chocolate/expandable-oompa-loompa.ts","../../../projects/angular/data/datagrid/datagrid.ts","../../../projects/angular/data/datagrid/datagrid.html","../../../projects/angular/data/datagrid/datagrid-action-bar.ts","../../../projects/angular/data/datagrid/datagrid-action-overflow.ts","../../../projects/angular/data/datagrid/providers/column-actions-focus-handler.service.ts","../../../projects/angular/data/datagrid/datagrid-column-actions.ts","../../../projects/angular/data/datagrid/datagrid-column-action.ts","../../../projects/angular/data/datagrid/datagrid-column-toggle-trackby.ts","../../../projects/angular/data/datagrid/datagrid-column-toggle-button.ts","../../../projects/angular/data/datagrid/datagrid-column-toggle.ts","../../../projects/angular/data/datagrid/datagrid-detail-header.ts","../../../projects/angular/data/datagrid/datagrid-detail.ts","../../../projects/angular/data/datagrid/datagrid-detail-body.ts","../../../projects/angular/data/datagrid/datagrid-hideable-column.ts","../../../projects/angular/data/datagrid/datagrid-if-detail.ts","../../../projects/angular/data/datagrid/datagrid-row-detail.ts","../../../projects/angular/data/datagrid/datagrid-footer.ts","../../../projects/angular/data/datagrid/datagrid-page-size.ts","../../../projects/angular/data/datagrid/datagrid-pagination.ts","../../../projects/angular/data/datagrid/interfaces/state.interface.ts","../../../projects/angular/data/datagrid/interfaces/filter.interface.ts","../../../projects/angular/data/datagrid/interfaces/string-filter.interface.ts","../../../projects/angular/data/datagrid/interfaces/numeric-filter.interface.ts","../../../projects/angular/data/datagrid/interfaces/comparator.interface.ts","../../../projects/angular/data/datagrid/interfaces/virtual-scroll-data-range.interface.ts","../../../projects/angular/data/datagrid/datagrid-detail-registerer.ts","../../../projects/angular/data/datagrid/render/header-renderer.ts","../../../projects/angular/data/datagrid/render/noop-dom-adapter.ts","../../../projects/angular/data/datagrid/render/main-renderer.ts","../../../projects/angular/data/datagrid/render/row-detail-renderer.ts","../../../projects/angular/data/datagrid/datagrid.module.ts","../../../projects/angular/data/datagrid/index.ts","../../../projects/angular/data/datagrid/clr-angular-data-datagrid.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * Generic accessor for deep object properties\n * that can be specified as simple dot-separated strings.\n */\nexport class NestedProperty<T = any> {\n private splitProp: string[];\n\n constructor(private prop: string) {\n if (prop.indexOf('.') >= 0) {\n this.splitProp = prop.split('.');\n }\n }\n\n // Safe getter for a deep object property, will not throw an error but return\n // undefined if one of the intermediate properties is null or undefined.\n getPropValue(item: T): any {\n if (this.splitProp) {\n let value = item;\n for (const nestedProp of this.splitProp) {\n if (\n value === null ||\n typeof value === 'undefined' ||\n typeof (value as Record<string, any>)[nestedProp] === 'undefined'\n ) {\n return undefined;\n }\n value = (value as Record<string, any>)[nestedProp];\n }\n return value;\n } else {\n return (item as Record<string, any>)[this.prop];\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridComparatorInterface } from '../../interfaces/comparator.interface';\nimport { NestedProperty } from '../nested-property';\n\nexport class DatagridPropertyComparator<T = any> implements ClrDatagridComparatorInterface<T> {\n private nestedProp: NestedProperty<T>;\n\n constructor(public prop: string) {\n this.nestedProp = new NestedProperty(prop);\n }\n\n compare(a: T, b: T): number {\n let propA = this.nestedProp.getPropValue(a);\n let propB = this.nestedProp.getPropValue(b);\n\n if (typeof propA === 'string') {\n propA = propA.toLowerCase();\n }\n\n if (typeof propB === 'string') {\n propB = propB.toLowerCase();\n }\n\n if (typeof propA === 'undefined' || propA === null) {\n if (typeof propB === 'undefined' || propB === null) {\n return 0;\n } else {\n return 1;\n }\n } else {\n if (typeof propB === 'undefined' || propB === null) {\n return -1;\n } else if (propA < propB) {\n return -1;\n } else if (propA > propB) {\n return 1;\n } else {\n return 0;\n }\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridNumericFilterInterface } from '../../interfaces/numeric-filter.interface';\nimport { NestedProperty } from '../nested-property';\n\nexport class DatagridPropertyNumericFilter<T = any> implements ClrDatagridNumericFilterInterface<T> {\n private nestedProp: NestedProperty<T>;\n\n constructor(\n public prop: string,\n public exact = false\n ) {\n this.nestedProp = new NestedProperty(prop);\n }\n\n accepts(item: T, low: number, high: number): boolean {\n const propValue = this.nestedProp.getPropValue(item);\n if (propValue === undefined) {\n return false;\n }\n if (low !== null && (typeof propValue !== 'number' || propValue < low)) {\n return false;\n }\n if (high !== null && (typeof propValue !== 'number' || propValue > high)) {\n return false;\n }\n return true;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { DatagridPropertyNumericFilter } from './datagrid-property-numeric-filter';\nimport { ClrDatagridFilterInterface } from '../../interfaces/filter.interface';\nimport { ClrDatagridNumericFilterInterface } from '../../interfaces/numeric-filter.interface';\n\nexport class DatagridNumericFilterImpl<T = any> implements ClrDatagridFilterInterface<T> {\n /**\n * The Observable required as part of the Filter interface\n */\n private _changes = new Subject<[number, number]>();\n\n /**\n * Internal values and accessor\n */\n private _low: number | null = null;\n private _high: number | null = null;\n\n constructor(public filterFn: ClrDatagridNumericFilterInterface<T>) {}\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get changes(): Observable<[number, number]> {\n return this._changes.asObservable();\n }\n\n get value(): [number, number] {\n return [this._low, this._high];\n }\n set value(vals: [number, number]) {\n const low = vals[0];\n const high = vals[1];\n if (low !== this._low || high !== this._high) {\n this._low = low;\n this._high = high;\n this._changes.next([this._low, this._high]);\n }\n }\n\n get low() {\n return this._low;\n }\n set low(low: number) {\n if (low !== this._low) {\n this._low = low;\n this._changes.next([this._low, this._high]);\n }\n }\n\n get high() {\n return this._high;\n }\n set high(high: number) {\n if (high !== this._high) {\n this._high = high;\n this._changes.next([this._low, this._high]);\n }\n }\n\n get state() {\n if (this.filterFn instanceof DatagridPropertyNumericFilter) {\n return {\n property: this.filterFn.prop,\n low: this._low,\n high: this._high,\n };\n }\n return this;\n }\n\n /**\n * Indicates if the filter is currently active, (at least one input is set)\n */\n isActive(): boolean {\n return this._low !== null || this.high !== null;\n }\n\n /**\n * Tests if an item matches a search text\n */\n accepts(item: T): boolean {\n // We have a filter function in case someone wants to implement a numeric\n // filter that always passes nulls or similar\n return this.filterFn.accepts(item, this._low, this._high);\n }\n\n equals(other: ClrDatagridFilterInterface<T, any>): boolean {\n if (other instanceof DatagridNumericFilterImpl) {\n if (other.filterFn instanceof DatagridPropertyNumericFilter) {\n return (\n this.filterFn instanceof DatagridPropertyNumericFilter &&\n other.filterFn.prop === this.filterFn.prop &&\n other.low === this._low &&\n other.high === this._high\n );\n }\n return other === this;\n }\n return false;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridStringFilterInterface } from '../../interfaces/string-filter.interface';\nimport { NestedProperty } from '../nested-property';\n\nexport class DatagridPropertyStringFilter<T = any> implements ClrDatagridStringFilterInterface<T> {\n private nestedProp: NestedProperty<T>;\n\n constructor(\n public prop: string,\n public exact = false\n ) {\n this.nestedProp = new NestedProperty(prop);\n }\n\n accepts(item: T, search: string): boolean {\n const propValue = this.nestedProp.getPropValue(item);\n if (typeof propValue === 'undefined') {\n return false;\n } else if (this.exact) {\n return ('' + propValue).toLowerCase() === search;\n } else {\n return ('' + propValue).toLowerCase().indexOf(search) >= 0;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { DatagridPropertyStringFilter } from './datagrid-property-string-filter';\nimport { ClrDatagridFilterInterface } from '../../interfaces/filter.interface';\nimport { ClrDatagridStringFilterInterface } from '../../interfaces/string-filter.interface';\n\nexport class DatagridStringFilterImpl<T = any> implements ClrDatagridFilterInterface<T> {\n /**\n * The Observable required as part of the Filter interface\n */\n private _changes = new Subject<string>();\n\n /**\n * Input value converted to lowercase\n */\n private _lowerCaseValue = '';\n\n /**\n * Raw input value\n */\n private _rawValue = '';\n\n constructor(public filterFn: ClrDatagridStringFilterInterface<T>) {}\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get changes(): Observable<string> {\n return this._changes.asObservable();\n }\n\n get lowerCaseValue() {\n return this._lowerCaseValue;\n }\n\n get state() {\n if (this.filterFn instanceof DatagridPropertyStringFilter) {\n return {\n property: this.filterFn.prop,\n value: this.value,\n };\n }\n return this;\n }\n\n get value(): string {\n return this._rawValue;\n }\n /**\n * Common setter for the input value\n */\n set value(value: string) {\n if (!value) {\n value = '';\n }\n if (value !== this._rawValue) {\n this._rawValue = value;\n this._lowerCaseValue = value.toLowerCase().trim();\n this._changes.next(value);\n }\n }\n\n /**\n * Indicates if the filter is currently active, meaning the input is not empty\n */\n isActive(): boolean {\n return !!this.value;\n }\n\n /**\n * Tests if an item matches a search text\n */\n accepts(item: T): boolean {\n // We always test with the lowercase value of the input, to stay case insensitive\n return this.filterFn.accepts(item, this.lowerCaseValue);\n }\n\n equals(other: ClrDatagridFilterInterface<T, any>): boolean {\n if (other instanceof DatagridStringFilterImpl) {\n if (other.filterFn instanceof DatagridPropertyStringFilter) {\n return (\n this.filterFn instanceof DatagridPropertyStringFilter &&\n other.filterFn.prop === this.filterFn.prop &&\n other.value === this.value\n );\n }\n return other === this;\n }\n return false;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum DatagridColumnChanges {\n WIDTH,\n HIDDEN,\n INITIALIZE,\n PINNED,\n}\n\nexport const ALL_COLUMN_CHANGES: DatagridColumnChanges[] = Object.keys(DatagridColumnChanges)\n .map(key => (DatagridColumnChanges as Record<string, any>)[key])\n .filter(key => key === parseInt(key, 10) && key !== DatagridColumnChanges.INITIALIZE); // extracts only integer keys\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * Enumeration representing the sorting order of a datagrid column. It is a constant Enum,\n * i.e. each value needs to be treated as a `number`, starting at index 0.\n *\n * @export\n * @enum {number}\n */\nexport enum ClrDatagridSortOrder {\n UNSORTED = 0,\n ASC = 1,\n DESC = -1,\n}\n\nexport enum ClrDatagridAriaSortOrder {\n UNSORTED = 'none',\n ASC = 'ascending',\n DESC = 'descending',\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, signal } from '@angular/core';\n\n/**\n * The part of a filter that the actions menu needs. Declared here rather than importing\n * ClrDatagridFilter, which would close an import cycle back through this service.\n */\nexport interface ColumnFilterHandle {\n readonly active: boolean;\n\n /**\n * The id of the popover the filter renders its content into, for the menu item that opens it to\n * point `aria-controls` at. Optional because it only exists once the filter has an element to\n * label - a handle can register before then.\n */\n readonly popoverId?: string;\n}\n\n/**\n * Lets `clr-dg-column-actions` and the filter of the same column find each other without either\n * importing the other, and without depending on the order they are declared in.\n *\n * It is provided by `ClrDatagridColumn`, so every filter flavour resolves the same instance - a\n * projected `clr-dg-filter` is a content child of the column, and the `clr-dg-string-filter` and\n * `clr-dg-numeric-filter` the column creates for `clrDgField` live in its view.\n */\n@Injectable()\nexport class ColumnActionsService {\n /**\n * Whether the filter keeps its own toggle in the column header. An actions menu turns this off and\n * opens the filter itself, so the header keeps a single control per column - unless\n * `clrDgKeepFilterInHeader` asks to keep the toggle.\n *\n * A signal rather than a plain flag because the menu and the filter are siblings: either can be\n * created first, and the filter has to react whenever the answer changes.\n */\n readonly filterInHeader = signal(true);\n\n /**\n * Whether the column has an actions menu at all, whatever it does with the filter. While it does,\n * the column drops its own pin toggle, because the menu offers Pin Column instead.\n */\n readonly menuPresent = signal(false);\n\n /** The filter rendered for this column, if it has one. */\n readonly filter = signal<ColumnFilterHandle | null>(null);\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { InjectionToken } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ColumnState } from '../interfaces/column-state.interface';\n\nexport const COLUMN_STATE = new InjectionToken<ColumnState>('COLUMN_STATE');\n\nexport function columnStateFactory() {\n return new BehaviorSubject<ColumnState>({\n changes: [],\n });\n}\n\nexport const COLUMN_STATE_PROVIDER = {\n provide: COLUMN_STATE,\n useFactory: columnStateFactory,\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport abstract class CustomFilter {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport const STRICT_WIDTH_CLASS = 'datagrid-fixed-width';\nexport const HIDDEN_COLUMN_CLASS = 'datagrid-hidden-column';\nexport const PINNED_COLUMN_CLASS = 'datagrid-pinned-column';\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/*\n * This provider implements some form of synchronous debouncing through a lock pattern\n * to avoid emitting multiple state changes for a single user action.\n */\n@Injectable()\nexport class StateDebouncer {\n /*\n * This is the lock, to only emit once all the changes have finished processing\n */\n private nbChanges = 0;\n\n /**\n * The Observable that lets other classes subscribe to global state changes\n */\n private _change = new Subject<void>();\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<void> {\n return this._change.asObservable();\n }\n\n changeStart() {\n this.nbChanges++;\n }\n\n changeDone() {\n if (--this.nbChanges === 0) {\n this._change.next();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { StateDebouncer } from './state-debouncer.provider';\n\n@Injectable()\nexport class Page {\n activated = false;\n\n /**\n * Page size, a value of 0 means no pagination\n */\n private _size = 0;\n\n /**\n * Total items (needed to guess the last page)\n */\n private _totalItems?: number;\n\n /**\n * Last page\n */\n private _last: number;\n\n /**\n * Current page\n */\n private _current = 1;\n\n /**\n * The Observable that lets other classes subscribe to page changes\n */\n private _change = new Subject<number>();\n\n private preventEmit = false;\n private _sizeChange = new Subject<number>();\n\n constructor(private stateDebouncer: StateDebouncer) {}\n\n get size(): number {\n return this._size;\n }\n set size(size: number) {\n const oldSize = this._size;\n if (size !== oldSize) {\n if (!this.preventEmit) {\n this.stateDebouncer.changeStart();\n }\n this._size = size;\n if (size === 0) {\n this._current = 1;\n } else {\n // Yeap. That's the formula to keep the first item from the old page still\n // displayed in the new one.\n this._current = Math.floor((oldSize / size) * (this._current - 1)) + 1;\n }\n // We always emit an event even if the current page index didn't change, because\n // the size changing means the items inside the page are different\n if (!this.preventEmit) {\n this._change.next(this._current);\n this._sizeChange.next(this._size);\n this.stateDebouncer.changeDone();\n }\n }\n this.preventEmit = false;\n }\n\n get totalItems(): number {\n return this._totalItems || 0; // remains 0 if not set to avoid breaking change\n }\n set totalItems(total: number) {\n this._totalItems = total;\n // If we have less items than before, we might need to change the current page\n if (this.current > this.last) {\n this.current = this.last;\n }\n }\n\n get last(): number {\n if (this._last) {\n return this._last;\n }\n // If the last page isn't known, we compute it from the last item's index\n if (this.size > 0 && this.totalItems) {\n return Math.ceil(this.totalItems / this.size);\n }\n return 1;\n }\n set last(page: number) {\n this._last = page;\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<number> {\n return this._change.asObservable();\n }\n\n get sizeChange(): Observable<number> {\n return this._sizeChange.asObservable();\n }\n\n get current(): number {\n return this._current;\n }\n set current(page: number) {\n if (page !== this._current) {\n this.stateDebouncer.changeStart();\n this._current = page;\n this._change.next(page);\n this.stateDebouncer.changeDone();\n }\n }\n\n /**\n * Index of the first item displayed on the current page, starting at 0, -1 if none displayed\n */\n get firstItem(): number {\n if (this._totalItems === 0) {\n return -1;\n }\n\n if (this.size === 0) {\n return 0;\n }\n return (this.current - 1) * this.size;\n }\n\n /**\n * Index of the last item displayed on the current page, starting at 0, -1 if none displayed\n */\n get lastItem(): number {\n if (this._totalItems === 0) {\n return -1;\n }\n\n if (this.size === 0) {\n return this.totalItems - 1;\n }\n let lastInPage = this.current * this.size - 1;\n if (this.totalItems) {\n lastInPage = Math.min(lastInPage, this.totalItems - 1);\n }\n return lastInPage;\n }\n\n /**\n * Moves to the previous page if it exists\n */\n previous() {\n if (this.current > 1) {\n this.current--;\n }\n }\n\n /**\n * Moves to the next page if it exists\n */\n next() {\n if (this.current < this.last) {\n this.current++;\n }\n }\n\n /**\n * Resets the page size to 0\n */\n resetPageSize(preventEmit = false): void {\n this.preventEmit = preventEmit;\n this.size = 0;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { Page } from './page';\nimport { StateDebouncer } from './state-debouncer.provider';\nimport { ClrDatagridFilterInterface } from '../interfaces/filter.interface';\n\n@Injectable()\nexport class FiltersProvider<T = any> {\n /**\n * This subject is the list of filters that changed last, not the whole list.\n * We emit a list rather than just one filter to allow batch changes to several at once.\n */\n private _change = new Subject<ClrDatagridFilterInterface<T>[]>();\n\n /**\n * List of all filters, whether they're active or not\n */\n private _all: RegisteredFilter<T, ClrDatagridFilterInterface<T>>[] = [];\n\n constructor(\n private _page: Page,\n private stateDebouncer: StateDebouncer\n ) {}\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<ClrDatagridFilterInterface<T>[]> {\n return this._change.asObservable();\n }\n\n /**\n * Tests if at least one filter is currently active\n */\n hasActiveFilters(): boolean {\n // We do not use getActiveFilters() because this function will be called much more often\n // and stopping the loop early might be relevant.\n for (const { filter } of this._all) {\n if (filter && filter.isActive()) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns a list of all currently active filters\n */\n getActiveFilters(): ClrDatagridFilterInterface<T>[] {\n const ret: ClrDatagridFilterInterface<T>[] = [];\n for (const { filter } of this._all) {\n if (filter && filter.isActive()) {\n ret.push(filter);\n }\n }\n return ret;\n }\n\n /**\n * Registers a filter, and returns a deregistration function\n */\n add<F extends ClrDatagridFilterInterface<T>>(filter: F): RegisteredFilter<T, F> {\n const subscription = filter.changes.subscribe(() => this.resetPageAndEmitFilterChange([filter]));\n let hasUnregistered = false;\n const registered = new RegisteredFilter(filter, () => {\n if (hasUnregistered) {\n return;\n }\n subscription.unsubscribe();\n const matchIndex = this._all.findIndex(item => item.filter === filter);\n if (matchIndex >= 0) {\n this._all.splice(matchIndex, 1);\n }\n if (filter.isActive()) {\n this.resetPageAndEmitFilterChange([]);\n }\n hasUnregistered = true;\n });\n this._all.push(registered);\n if (filter.isActive()) {\n this.resetPageAndEmitFilterChange([filter]);\n }\n return registered;\n }\n\n /**\n * Accepts an item if it is accepted by all currently active filters\n */\n accepts(item: T): boolean {\n for (const { filter } of this._all) {\n if (filter && filter.isActive() && !filter.accepts(item)) {\n return false;\n }\n }\n return true;\n }\n\n private resetPageAndEmitFilterChange(filters: ClrDatagridFilterInterface<T>[]) {\n this.stateDebouncer.changeStart();\n // filtering may change the page number such that current page number doesn't exist in the filtered dataset.\n // So here we always set the current page to 1 so that it'll fetch first page's data with the given filter.\n this._page.current = 1;\n this._change.next(filters);\n this.stateDebouncer.changeDone();\n }\n}\n\nexport class RegisteredFilter<T, F extends ClrDatagridFilterInterface<T>> {\n constructor(\n public filter: F,\n public unregister: () => void\n ) {}\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, OnDestroy } from '@angular/core';\n\nimport { ClrDatagridFilterInterface } from '../interfaces/filter.interface';\nimport { FiltersProvider, RegisteredFilter } from '../providers/filters';\n\n@Directive()\nexport abstract class DatagridFilterRegistrar<T, F extends ClrDatagridFilterInterface<T>> implements OnDestroy {\n /**\n * @NOTEe Type `any` is set here to be able to pass templateStrictMode\n */\n registered: any;\n\n protected constructor(private filters: FiltersProvider<T>) {}\n\n get filter(): F {\n return this.registered && this.registered.filter;\n }\n\n ngOnDestroy(): void {\n this.deleteFilter();\n }\n\n setFilter(filter: F | RegisteredFilter<T, F>) {\n // If we previously had another filter, we unregister it\n this.deleteFilter();\n if (filter instanceof RegisteredFilter) {\n this.registered = filter;\n } else if (filter) {\n this.registered = this.filters.add(filter);\n }\n }\n\n deleteFilter() {\n if (this.registered) {\n this.registered.unregister();\n delete this.registered;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, EmbeddedViewRef, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'dg-wrapped-column',\n template: `\n <ng-template #columnPortal>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class WrappedColumn implements AfterViewInit, OnDestroy {\n @ViewChild('columnPortal') templateRef: TemplateRef<void>;\n columnView: EmbeddedViewRef<void>; // the columns projected view (in memory)\n\n ngAfterViewInit() {\n // Create the cells view in memory, not the DOM.\n this.columnView = this.templateRef.createEmbeddedView(null);\n }\n\n ngOnDestroy() {\n this.columnView.destroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { StateDebouncer } from './state-debouncer.provider';\nimport { ClrDatagridComparatorInterface } from '../interfaces/comparator.interface';\n\n@Injectable()\nexport class Sort<T = any> {\n /**\n * Currently active comparator\n */\n private _comparator: ClrDatagridComparatorInterface<T>;\n\n /**\n * Ascending order if false, descending if true\n */\n private _reverse = false;\n\n /**\n * The Observable that lets other classes subscribe to sort changes\n */\n private _change = new Subject<Sort<T>>();\n\n constructor(private stateDebouncer: StateDebouncer) {}\n\n get comparator(): ClrDatagridComparatorInterface<T> {\n return this._comparator;\n }\n set comparator(value: ClrDatagridComparatorInterface<T>) {\n this.stateDebouncer.changeStart();\n this._comparator = value;\n this.emitChange();\n this.stateDebouncer.changeDone();\n }\n\n get reverse(): boolean {\n return this._reverse;\n }\n set reverse(value: boolean) {\n this.stateDebouncer.changeStart();\n this._reverse = value;\n this.emitChange();\n this.stateDebouncer.changeDone();\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<Sort<T>> {\n return this._change.asObservable();\n }\n\n /**\n * Sets a comparator as the current one, or toggles reverse if the comparator is already used. The\n * optional forceReverse input parameter allows to override that toggling behavior by sorting in\n * reverse order if `true`.\n *\n * @memberof Sort\n */\n toggle(sortBy: ClrDatagridComparatorInterface<T>, forceReverse?: boolean) {\n this.stateDebouncer.changeStart();\n // We modify private properties directly, to batch the change event\n if (this.comparator === sortBy) {\n this._reverse = typeof forceReverse !== 'undefined' ? forceReverse || !this._reverse : !this._reverse;\n } else {\n this._comparator = sortBy;\n this._reverse = typeof forceReverse !== 'undefined' ? forceReverse : false;\n }\n this.emitChange();\n this.stateDebouncer.changeDone();\n }\n\n /**\n * Clears the current sorting order\n */\n clear() {\n this.comparator = null;\n }\n\n /**\n * Compares two objects according to the current comparator\n */\n compare(a: T, b: T): number {\n return (this.reverse ? -1 : 1) * this.comparator.compare(a, b);\n }\n\n private emitChange() {\n this._change.next(this);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ModalStackService } from '@clr/angular/modal';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport const MAX_DETAIL_WIDTH = 100;\nexport const DEFAULT_DETAIL_WIDTH = 66;\nexport const MIN_DETAIL_WIDTH = 0;\n\n@Injectable()\nexport class DetailService {\n id: string;\n detailWidth = DEFAULT_DETAIL_WIDTH;\n\n private preventScroll = false;\n private toggleState = false;\n private cache: any;\n private button: HTMLButtonElement;\n private _enabled = false;\n private _state = new BehaviorSubject<boolean | null>(this.toggleState);\n\n constructor(private readonly modalStackService: ModalStackService) {}\n\n get enabled(): boolean {\n return this._enabled;\n }\n set enabled(state: boolean) {\n this._enabled = state;\n }\n\n get preventFocusScroll(): boolean {\n return this.preventScroll;\n }\n set preventFocusScroll(preventScroll: boolean) {\n this.preventScroll = preventScroll;\n }\n\n get state() {\n return this.cache;\n }\n\n get stateChange(): Observable<boolean | null> {\n return this._state.asObservable();\n }\n\n get isOpen() {\n return this.toggleState === true;\n }\n\n open(item: any, button?: HTMLButtonElement) {\n this.cache = item;\n this.button = button;\n this.toggleState = true;\n this._state.next(this.toggleState);\n this.modalStackService.trackModalOpen(this);\n }\n\n close() {\n this.toggleState = false;\n this.returnFocus();\n this._state.next(this.toggleState);\n this.modalStackService.trackModalClose(this);\n }\n\n returnFocus() {\n if (this.button) {\n this.button.focus({ preventScroll: this.preventFocusScroll });\n this.button = null;\n }\n }\n\n toggle(item: any, button?: HTMLButtonElement) {\n if (this.isRowOpen(item) || !item) {\n this.close();\n } else {\n this.open(item, button);\n }\n }\n\n isRowOpen(item: any) {\n return !!(this.toggleState && this.cache === item);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ALL_COLUMN_CHANGES } from '../enums/column-changes.enum';\nimport { ColumnState, ColumnStateDiff } from '../interfaces/column-state.interface';\n\n@Injectable()\nexport class ColumnsService {\n columns: BehaviorSubject<ColumnState>[] = [];\n columnsStateChange: BehaviorSubject<ColumnState> = new BehaviorSubject(null);\n\n private _cache: ColumnState[] = [];\n\n get columnStates(): ColumnState[] {\n return this.columns.map(column => column.value);\n }\n\n get hasHideableColumns(): boolean {\n return this.columnStates.filter(state => state.hideable).length > 0;\n }\n\n get visibleColumns(): ColumnState[] {\n return this.columnStates.filter(state => !state.hidden);\n }\n\n get hasPinnedColumns(): boolean {\n return this.columnStates.some(state => state.pinned);\n }\n\n /**\n * Tells whether the column at the given index is pinned (static). Columns and cells are\n * matched by their declaration index, so this is what the header, the rows and a column aligned\n * row detail use to decide which views belong in the static container.\n */\n isPinned(columnIndex: number): boolean {\n return !!this.columns[columnIndex]?.value.pinned;\n }\n\n cache() {\n this._cache = this.columns.map(subject => {\n const value = { ...subject.value };\n delete value.changes;\n return value;\n });\n }\n\n hasCache() {\n return !!this._cache.length;\n }\n\n resetToLastCache() {\n this._cache.forEach((state, index) => {\n // Just emit the exact value from the cache\n const cachedState = { ...state, changes: ALL_COLUMN_CHANGES };\n this.columns[index].next(cachedState);\n this.columnsStateChange.next(cachedState);\n });\n this._cache = [];\n }\n\n // Helper method to emit a change to a column only when there is an actual diff to process for that column\n emitStateChangeAt(columnIndex: number, diff: ColumnStateDiff) {\n if (!this.columns[columnIndex]) {\n return;\n }\n this.emitStateChange(this.columns[columnIndex], diff);\n }\n\n emitStateChange(column: BehaviorSubject<ColumnState>, diff: ColumnStateDiff) {\n const changedState = { ...column.value, ...diff };\n column.next(changedState);\n this.columnsStateChange.next(changedState);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum DatagridRenderStep {\n ALIGN_COLUMNS,\n CALCULATE_MODE_ON,\n CALCULATE_MODE_OFF,\n CLEAR_WIDTHS, // Note this is listened to by both cells and columns\n COMPUTE_COLUMN_WIDTHS,\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { DatagridRenderStep } from '../enums/render-step.enum';\n\n@Injectable()\nexport class DatagridRenderOrganizer {\n protected _renderStep = new Subject<DatagridRenderStep>();\n\n private alreadySized = false;\n\n get renderStep(): Observable<DatagridRenderStep> {\n return this._renderStep.asObservable();\n }\n\n filterRenderSteps(step: DatagridRenderStep) {\n return this.renderStep.pipe(filter(testStep => step === testStep));\n }\n\n resize() {\n this._renderStep.next(DatagridRenderStep.CALCULATE_MODE_ON);\n if (this.alreadySized) {\n this._renderStep.next(DatagridRenderStep.CLEAR_WIDTHS);\n }\n this._renderStep.next(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS);\n this._renderStep.next(DatagridRenderStep.ALIGN_COLUMNS); // NOT USED\n this.alreadySized = true;\n this._renderStep.next(DatagridRenderStep.CALCULATE_MODE_OFF);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ElementRef, Injectable } from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\n\nimport { DatagridRenderOrganizer } from '../render/render-organizer';\n\nconst MIN_COLUMN_WIDTH = 96;\n\n// This service allows DatagridHeaderRenderer and ClrDatagridColumnSeparator\n// to share column resize data with each other.\n\n@Injectable()\nexport class ColumnResizerService {\n // is it within the maximum resize range to the left\n isWithinMaxResizeRange: boolean;\n\n private widthBeforeResize: number;\n private _resizedBy = 0;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private domAdapter: DomAdapter,\n private organizer: DatagridRenderOrganizer\n ) {}\n\n get resizedBy() {\n return this._resizedBy;\n }\n\n get minColumnWidth() {\n return this.domAdapter.minWidth(this.el.nativeElement) || MIN_COLUMN_WIDTH;\n }\n\n get maxResizeRange() {\n return this.widthBeforeResize - this.minColumnWidth;\n }\n\n get widthAfterResize(): number {\n return this.widthBeforeResize + this._resizedBy;\n }\n\n startResize(): void {\n this._resizedBy = 0;\n this.isWithinMaxResizeRange = true;\n this.widthBeforeResize = this.domAdapter.clientRect(this.el.nativeElement).width;\n }\n\n endResize(): void {\n this.organizer.resize();\n }\n\n calculateResize(resizedBy: number): void {\n // calculates the resize amount within the allowed range\n if (resizedBy < -this.maxResizeRange) {\n this._resizedBy = -this.maxResizeRange;\n this.isWithinMaxResizeRange = false;\n } else {\n this._resizedBy = resizedBy;\n this.isWithinMaxResizeRange = true;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport { ElementRef, Inject, Injectable, PLATFORM_ID } from '@angular/core';\n\n/**\n * @description\n * Internal datagrid service that holds a reference to the clr-dg-table element and exposes a method to get height.\n */\n@Injectable()\nexport class TableSizeService {\n private _tableRef: HTMLElement;\n\n constructor(@Inject(PLATFORM_ID) private platformId: any) {}\n\n get tableRef(): HTMLElement {\n return this._tableRef;\n }\n set tableRef(element: HTMLElement) {\n this._tableRef = element;\n }\n\n set table(table: ElementRef<HTMLElement>) {\n if (isPlatformBrowser(this.platformId) && table.nativeElement) {\n this.tableRef = table.nativeElement.querySelector('.datagrid-table');\n }\n }\n\n // Used when resizing columns to show the column border being dragged.\n getColumnDragHeight(): string {\n if (!this.tableRef) {\n return null;\n }\n return `${this.tableRef.clientHeight}px`;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterViewInit,\n Component,\n DOCUMENT,\n ElementRef,\n Inject,\n NgZone,\n OnDestroy,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { ClrCommonStringsService, Keys, uniqueIdFactory } from '@clr/angular/utils';\n\nimport { ColumnResizerService } from './providers/column-resizer.service';\nimport { TableSizeService } from './providers/table-size.service';\n\n// Default resize length on each keyboard move event\nconst KEYBOARD_RESIZE_LENGTH = 12;\n\n@Component({\n selector: 'clr-dg-column-separator',\n template: `\n <button\n type=\"button\"\n class=\"datagrid-column-handle\"\n [attr.aria-label]=\"commonString.keys.columnSeparatorAriaLabel\"\n [attr.aria-describedby]=\"descriptionId\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"showTracker()\"\n (cdkDragMoved)=\"moveTracker($event.distance.x)\"\n (cdkDragEnded)=\"hideTracker(); $event.source._dragRef.reset()\"\n #columnHandle\n ></button>\n <span class=\"clr-sr-only\" [attr.id]=\"descriptionId\">\n {{ commonString.keys.columnSeparatorDescription }}\n </span>\n <div class=\"datagrid-column-resize-tracker\" #resizeTracker></div>\n `,\n host: {\n '[class.datagrid-column-separator]': 'true',\n },\n standalone: false,\n})\nexport class ClrDatagridColumnSeparator implements AfterViewInit, OnDestroy {\n columnSeparatorId = uniqueIdFactory();\n\n private resizeStartedOnKeyDown = false;\n private isWithinMaxResizeRange: boolean;\n private unlisteners: (() => void)[] = [];\n\n @ViewChild('resizeTracker') private resizeTrackerRef: ElementRef<HTMLElement>;\n @ViewChild('columnHandle') private columnHandleRef: ElementRef<HTMLElement>;\n\n constructor(\n private columnResizerService: ColumnResizerService,\n private renderer: Renderer2,\n private ngZone: NgZone,\n private tableSizeService: TableSizeService,\n public commonString: ClrCommonStringsService,\n @Inject(DOCUMENT) private document: any\n ) {}\n\n get descriptionId(): string {\n return `${this.columnSeparatorId}-aria-describedby`;\n }\n\n private get resizeTrackerEl() {\n return this.resizeTrackerRef.nativeElement;\n }\n\n private get columnHandleEl() {\n return this.columnHandleRef.nativeElement;\n }\n\n ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n this.unlisteners.push(\n this.renderer.listen(this.columnHandleEl, 'keydown', event => {\n this.showTrackerOnFirstKeyDown(event);\n this.moveTrackerOnKeyDown(event);\n })\n );\n this.unlisteners.push(\n this.renderer.listen(this.columnHandleEl, 'keyup', event => {\n this.hideTrackerOnKeyUp(event);\n })\n );\n });\n }\n\n ngOnDestroy() {\n this.unlisteners.forEach(unlistener => unlistener());\n }\n\n showTracker(): void {\n this.columnResizerService.startResize();\n const tableHeight = this.tableSizeService.getColumnDragHeight();\n this.renderer.setStyle(this.resizeTrackerEl, 'height', tableHeight);\n this.renderer.setStyle(this.resizeTrackerEl, 'display', 'block');\n }\n\n moveTracker(movedBy: number): void {\n this.columnResizerService.calculateResize(movedBy);\n this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(${this.columnResizerService.resizedBy}px)`);\n this.renderer.setStyle(this.document.body, 'cursor', 'col-resize');\n this.redFlagTracker();\n }\n\n hideTracker(): void {\n this.columnResizerService.endResize();\n this.renderer.setStyle(this.resizeTrackerEl, 'display', 'none');\n this.renderer.setStyle(this.resizeTrackerEl, 'transform', `translateX(0px)`);\n this.renderer.setStyle(this.columnHandleEl, 'transform', `translateX(0px)`);\n this.renderer.setStyle(this.document.body, 'cursor', 'auto');\n }\n\n private showTrackerOnFirstKeyDown(event: KeyboardEvent): void {\n if (!this.resizeStartedOnKeyDown && (this.isArrowLeftKeyEvent(event) || this.isArrowRightKeyEvent(event))) {\n this.resizeStartedOnKeyDown = true;\n this.renderer.addClass(this.resizeTrackerEl, 'on-arrow-key-resize');\n this.showTracker();\n }\n }\n\n private moveTrackerOnKeyDown(event: KeyboardEvent): void {\n if (this.isArrowLeftKeyEvent(event)) {\n event.stopPropagation();\n this.moveTracker(this.columnResizerService.resizedBy - KEYBOARD_RESIZE_LENGTH);\n } else if (this.isArrowRightKeyEvent(event)) {\n event.stopPropagation();\n this.moveTracker(this.columnResizerService.resizedBy + KEYBOARD_RESIZE_LENGTH);\n }\n }\n\n private hideTrackerOnKeyUp(event: KeyboardEvent): void {\n if (this.resizeStartedOnKeyDown && (this.isArrowLeftKeyEvent(event) || this.isArrowRightKeyEvent(event))) {\n this.resizeStartedOnKeyDown = false;\n this.renderer.removeClass(this.resizeTrackerEl, 'on-arrow-key-resize');\n this.hideTracker();\n this.columnHandleEl.focus();\n }\n }\n\n private redFlagTracker(): void {\n if (this.isWithinMaxResizeRange !== this.columnResizerService.isWithinMaxResizeRange) {\n this.isWithinMaxResizeRange = this.columnResizerService.isWithinMaxResizeRange;\n if (!this.isWithinMaxResizeRange) {\n this.renderer.addClass(this.resizeTrackerEl, 'exceeded-max');\n } else {\n this.renderer.removeClass(this.resizeTrackerEl, 'exceeded-max');\n }\n }\n }\n\n private isArrowLeftKeyEvent(event: KeyboardEvent) {\n return event.key === Keys.ArrowLeft;\n }\n\n private isArrowRightKeyEvent(event: KeyboardEvent) {\n return event.key === Keys.ArrowRight;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { KeyNavigationGridStrategyInterface } from '../../interfaces/key-nav-grid-strategy.interface';\nimport { CellCoordinates } from '../key-navigation-grid.controller';\nimport { KeyNavigationUtils } from '../key-navigation-utils';\n\nexport class DefaultKeyNavigationStrategy implements KeyNavigationGridStrategyInterface {\n constructor(protected utils: KeyNavigationUtils) {}\n\n keyUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.y === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y - 1;\n\n const isActionCell = this.utils.isActionCell(currentCellCoords);\n\n if (\n this.utils.isSingleCellExpandedRow(nextCellCoords.y) &&\n !isActionCell &&\n this.utils.isDetailsRow(nextCellCoords.y)\n ) {\n nextCellCoords.x = 0;\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n if (isActionCell) {\n nextCellCoords.y = nextCellCoords.y - 1;\n } else {\n nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n }\n\n return nextCellCoords;\n }\n\n keyDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n if (currentCellCoords.y >= numOfRows) {\n return nextCellCoords;\n }\n\n const isActionCell = this.utils.isActionCell(currentCellCoords);\n nextCellCoords.y = currentCellCoords.y + 1;\n\n if (!isActionCell && this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n\n return nextCellCoords;\n }\n\n keyLeft(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.x === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.x = currentCellCoords.x - 1;\n\n return nextCellCoords;\n }\n\n keyRight(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n // calculate numOfColumns based on header cells.\n const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n nextCellCoords.x = currentCellCoords.x < numOfColumns ? nextCellCoords.x + 1 : nextCellCoords.x;\n\n return nextCellCoords;\n }\n\n keyEnd(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n\n // calculate X based on header cells.\n nextCellCoords.x = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n if (ctrlKey) {\n nextCellCoords.y = numOfRows;\n\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = this.utils.getCellsForRow(nextCellCoords.y).length - 1;\n }\n }\n\n return nextCellCoords;\n }\n\n keyHome(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n nextCellCoords.x = 0;\n\n if (ctrlKey) {\n nextCellCoords.y = 0;\n }\n\n return nextCellCoords;\n }\n\n keyPageUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n } else if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n } else {\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n }\n\n return nextCellCoords;\n }\n\n keyPageDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;\n\n if (this.utils.isActionCell(currentCellCoords) && this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n } else if (this.utils.isDetailsRow(nextCellCoords.y) && this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n } else if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = this.utils.isSingleCellExpandedRow(nextCellCoords.y)\n ? 0\n : nextCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n\n return nextCellCoords;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CellCoordinates } from '../key-navigation-grid.controller';\nimport { DefaultKeyNavigationStrategy } from './default';\n\nexport class ExpandedRowKeyNavigationStrategy extends DefaultKeyNavigationStrategy {\n override keyUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.y === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y - 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(currentCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n switch (true) {\n case this.utils.isDetailsRow(nextCellCoords.y):\n nextCellCoords.x = 0;\n break;\n case this.utils.isDetailsRow(currentCellCoords.y) === false:\n nextCellCoords.x = currentCellCoords.x;\n break;\n default:\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y) && nextCellCoords.y > 0) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n if (currentCellCoords.y >= numOfRows) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y + 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n }\n\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n } else {\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);\n }\n } else {\n nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y;\n }\n\n return nextCellCoords;\n }\n\n override keyLeft(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {\n return super.keyLeft(currentCellCoords);\n }\n\n if (currentCellCoords.x !== 0) {\n nextCellCoords.x = currentCellCoords.x - 1;\n } else if (!this.utils.isActionCell(currentCellCoords)) {\n nextCellCoords.y = currentCellCoords.y - 1;\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y) - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyRight(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {\n return super.keyRight(currentCellCoords);\n }\n\n // calculate numOfColumns based on header cells.\n const numOfColumns = this.utils.rows?.length - 1 ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n if (currentCellCoords.x >= numOfColumns) {\n return nextCellCoords;\n }\n\n if (\n this.utils.isActionCell(currentCellCoords) &&\n currentCellCoords.x === this.utils.actionCellCount(currentCellCoords.x) - 1 &&\n this.utils.isRowReplaced(currentCellCoords.y) &&\n !this.utils.isDetailsRow(currentCellCoords.y)\n ) {\n nextCellCoords.y = currentCellCoords.y + 1;\n nextCellCoords.x = 0;\n } else {\n nextCellCoords.x = currentCellCoords.x + 1;\n }\n\n return nextCellCoords;\n }\n\n override keyEnd(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if ((!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) || ctrlKey) {\n return super.keyEnd(currentCellCoords, ctrlKey);\n }\n\n nextCellCoords.x = this.utils.getCellsForRow(currentCellCoords.y).length - 1;\n\n return nextCellCoords;\n }\n\n override keyHome(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (!this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isRowReplaced(currentCellCoords.y)) {\n return super.keyHome(currentCellCoords, ctrlKey);\n }\n\n nextCellCoords.x = 0;\n nextCellCoords.y = currentCellCoords.y - 1;\n\n if (ctrlKey) {\n nextCellCoords.y = 0;\n }\n\n return nextCellCoords;\n }\n\n override keyPageUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = 0;\n }\n } else if (!this.utils.isDetailsRow(currentCellCoords.y)) {\n if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y)) {\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = this.utils.actionCellCount(nextCellCoords.y);\n }\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyPageDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n if (nextCellCoords.y < numOfRows && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = 0;\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CellCoordinates } from '../key-navigation-grid.controller';\nimport { ExpandedRowKeyNavigationStrategy } from './expanded-row';\n\nexport class ExpandedColumnsRowKeyNavigationStrategy extends ExpandedRowKeyNavigationStrategy {\n override keyUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n if (currentCellCoords.y === 0) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y - 1;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyUp(currentCellCoords);\n }\n\n const isActionCell = this.utils.isActionCell(currentCellCoords);\n\n if (isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n } else if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (!isActionCell && this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n\n return nextCellCoords;\n }\n\n override keyDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const numOfColumns = numOfRows ? this.utils.getCellsForRow(0).length - 1 : 0;\n\n if (currentCellCoords.y >= numOfRows) {\n return nextCellCoords;\n }\n\n nextCellCoords.y = currentCellCoords.y + 1;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyDown(currentCellCoords);\n }\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;\n } else if (this.utils.getCellsForRow(currentCellCoords.y).length > numOfColumns) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n } else {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else {\n nextCellCoords.y = nextCellCoords.y < numOfRows ? nextCellCoords.y + 1 : nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyLeft(currentCellCoords: CellCoordinates) {\n return super.keyLeft(currentCellCoords);\n }\n\n override keyRight(currentCellCoords: CellCoordinates) {\n return super.keyRight(currentCellCoords);\n }\n\n override keyEnd(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n return super.keyEnd(currentCellCoords, ctrlKey);\n }\n\n override keyHome(currentCellCoords: CellCoordinates, ctrlKey: boolean) {\n return super.keyHome(currentCellCoords, ctrlKey);\n }\n\n override keyPageUp(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y - itemsPerPage > 0 ? currentCellCoords.y - itemsPerPage + 1 : 1;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyPageUp(currentCellCoords);\n }\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y)) {\n if (!this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n\n override keyPageDown(currentCellCoords: CellCoordinates) {\n const nextCellCoords = this.utils.createNextCellCoords(currentCellCoords);\n\n const numOfRows = this.utils.rows ? this.utils.rows.length - 1 : 0;\n const itemsPerPage = this.utils.itemsPerPage;\n\n nextCellCoords.y = currentCellCoords.y + itemsPerPage >= numOfRows ? numOfRows : currentCellCoords.y + itemsPerPage;\n\n if (this.utils.isSingleCellExpandedRow(nextCellCoords.y)) {\n return super.keyPageDown(currentCellCoords);\n }\n\n if (!this.utils.isActionCell(currentCellCoords)) {\n if (this.utils.isRowReplaced(nextCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n if (nextCellCoords.y < numOfRows) {\n nextCellCoords.y = nextCellCoords.y + 1;\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(currentCellCoords.y) && !this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x + this.utils.actionCellCount(nextCellCoords.y);\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.x = currentCellCoords.x - this.utils.actionCellCount(currentCellCoords.y);\n }\n } else if (this.utils.isDetailsRow(nextCellCoords.y)) {\n nextCellCoords.y = nextCellCoords.y - 1;\n }\n\n return nextCellCoords;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Keys } from '@clr/angular/utils';\n\nimport { CellCoordinates, KeyNavigationGridConfig } from './key-navigation-grid.controller';\nimport { KeyNavigationGridStrategyInterface } from '../interfaces/key-nav-grid-strategy.interface';\nimport { DefaultKeyNavigationStrategy } from './key-navigation-strategies/default';\nimport { ExpandedColumnsRowKeyNavigationStrategy } from './key-navigation-strategies/expanded-columns-row';\nimport { ExpandedRowKeyNavigationStrategy } from './key-navigation-strategies/expanded-row';\n\nexport class KeyNavigationUtils {\n constructor(\n public host: HTMLElement,\n public config: KeyNavigationGridConfig\n ) {}\n\n get grid() {\n return this.host?.querySelector(this.config.keyGrid);\n }\n\n get rows() {\n return this.host?.querySelectorAll(this.config.keyGridRows) as NodeListOf<HTMLElement>;\n }\n\n get cells() {\n return this.host?.querySelectorAll(this.config.keyGridCells) as NodeListOf<HTMLElement>;\n }\n\n get currentCellCoordinates() {\n const currentCell = this.cells ? Array.from(this.cells).find(i => i.getAttribute('tabindex') === '0') : null;\n const currentRow: HTMLElement = currentCell ? currentCell.closest(this.config.keyGridRows) : null;\n\n const coordinates: CellCoordinates = {\n x:\n currentRow && currentCell\n ? Array.from(currentRow.querySelectorAll(this.config.keyGridCells)).indexOf(currentCell)\n : 0,\n y: currentRow && currentCell && this.rows ? Array.from(this.rows).indexOf(currentRow) : 0,\n };\n\n return coordinates;\n }\n\n get averageRowHeight() {\n const heightSum = Array.from(this.rows.values()).reduce((sum, row) => {\n return sum + row.clientHeight;\n }, 0);\n\n return Math.round(heightSum / this.rows.length);\n }\n\n get itemsPerPage() {\n return Math.floor(this.host?.querySelector('.datagrid').clientHeight / this.averageRowHeight) - 1 || 0;\n }\n\n setAriaRowIndexTo(cellCoords: CellCoordinates) {\n let ariaRowIndex = this.rows[cellCoords.y].getAttribute('aria-rowindex');\n\n if (!ariaRowIndex) {\n ariaRowIndex = this.rows[cellCoords.y - 1].getAttribute('aria-rowindex');\n }\n\n cellCoords.ariaRowIndex = ariaRowIndex;\n }\n\n getNextItemCoordinate(e: KeyboardEvent) {\n const currentCellCoords = this.currentCellCoordinates;\n const strategy = this.getNavStrategy(currentCellCoords);\n\n const inlineStart = this.host.dir === 'rtl' ? Keys.ArrowRight : Keys.ArrowLeft;\n const inlineEnd = this.host.dir === 'rtl' ? Keys.ArrowLeft : Keys.ArrowRight;\n\n switch (e.key) {\n case Keys.ArrowUp:\n return strategy.keyUp(currentCellCoords);\n case Keys.ArrowDown:\n return strategy.keyDown(currentCellCoords);\n case inlineStart:\n return strategy.keyLeft(currentCellCoords);\n case inlineEnd:\n return strategy.keyRight(currentCellCoords);\n case Keys.Home:\n return strategy.keyHome(currentCellCoords, e.ctrlKey);\n case Keys.End:\n return strategy.keyEnd(currentCellCoords, e.ctrlKey);\n case Keys.PageUp:\n return strategy.keyPageUp(currentCellCoords);\n case Keys.PageDown:\n return strategy.keyPageDown(currentCellCoords);\n default:\n return currentCellCoords;\n }\n }\n\n getCellsForRow(index: number) {\n return this.rows[index].querySelectorAll(this.config.keyGridCells);\n }\n\n isExpandedRow(index: number) {\n const selectedElement: HTMLElement = this.rows[index].querySelector('.datagrid-row-detail');\n\n return selectedElement ? selectedElement.style.display !== 'none' : false;\n }\n\n isDetailsRow(index: number) {\n return this.rows[index].classList.contains('datagrid-row-detail');\n }\n\n isRowReplaced(index: number) {\n return !!this.rows[index].closest('clr-dg-row.datagrid-row-replaced');\n }\n\n isSingleCellExpandedRow(index: number) {\n return this.rows[index]?.querySelectorAll(this.config.keyGridCells).length === 1;\n }\n\n actionCellCount(index: number) {\n return this.actionCellsAsArray(index).length;\n }\n\n actionCellsAsArray(index: number) {\n return Array.from(\n this.rows[index].querySelectorAll('.datagrid-row-sticky .datagrid-cell, .datagrid-row-sticky .datagrid-column')\n );\n }\n\n isActionCell(cellCoords: CellCoordinates) {\n return !!this.actionCellsAsArray(cellCoords.y)[cellCoords.x];\n }\n\n createNextCellCoords(cellCoords: CellCoordinates): CellCoordinates {\n return {\n x: cellCoords.x,\n y: cellCoords.y,\n };\n }\n\n private getNavStrategy(currentCellCoords: CellCoordinates): KeyNavigationGridStrategyInterface {\n switch (true) {\n case this.isSingleCellExpandedRow(currentCellCoords.y):\n return new ExpandedRowKeyNavigationStrategy(this);\n case this.isDetailsRow(currentCellCoords.y):\n case this.isExpandedRow(currentCellCoords.y):\n return new ExpandedColumnsRowKeyNavigationStrategy(this);\n default:\n return new DefaultKeyNavigationStrategy(this);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { EventEmitter, Injectable, NgZone, OnDestroy } from '@angular/core';\nimport { Keys } from '@clr/angular/utils';\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { KeyNavigationUtils } from './key-navigation-utils';\n\nconst actionableItemSelectors = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled])',\n 'button:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable=true]',\n '[role=button]:not([disabled])',\n];\n\nexport function getTabbableItems(el: HTMLElement) {\n const tabbableItemSelectors = [...actionableItemSelectors, '[tabindex=\"0\"]:not([disabled])'];\n const tabbableSelector = tabbableItemSelectors.join(',');\n return Array.from(el.querySelectorAll(tabbableSelector)) as HTMLElement[];\n}\n\nfunction isActionableItem(el: HTMLElement) {\n const actionableSelector = actionableItemSelectors.join(',');\n return el.matches(actionableSelector);\n}\n\nexport interface KeyNavigationGridConfig {\n keyGrid: string;\n keyGridRows: string;\n keyGridCells: string;\n}\n\nexport interface CellCoordinates {\n x: number;\n y: number;\n ariaRowIndex?: string;\n}\n\n@Injectable()\nexport class KeyNavigationGridController implements OnDestroy {\n nextCellCoordsEmitter = new EventEmitter<CellCoordinates>(false);\n\n skipItemFocus = false;\n preventScrollOnFocus = false;\n\n config: KeyNavigationGridConfig = {\n keyGridRows: '[role=row]:not(.datagrid-placeholder):not([style*=\"display: none\"])',\n keyGridCells:\n '[role=gridcell]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), [role=columnheader]:not(.datagrid-hidden-column):not(.datagrid-placeholder-content), .datagrid-detail-caret',\n keyGrid: '[role=grid]',\n };\n private keyNavUtils: KeyNavigationUtils;\n private listenersAdded = false;\n private destroy$ = new Subject<void>();\n\n constructor(private zone: NgZone) {}\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n addListeners() {\n if (this.listenersAdded) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n fromEvent(this.keyNavUtils.grid, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((e: MouseEvent) => {\n // preserve right click for context menus & keyboard mouse control https://apple.stackexchange.com/questions/32715/how-do-i-open-the-context-menu-from-a-mac-keyboard\n if (e.buttons === 1 && !e.ctrlKey) {\n const activeCell = this.keyNavUtils.cells\n ? Array.from(this.keyNavUtils.cells).find(\n c => c === e.target || c === (e.target as HTMLElement).closest(this.config.keyGridCells)\n )\n : null;\n if (activeCell) {\n this.setActiveCell(activeCell);\n\n if (!isActionableItem(e.target as HTMLElement)) {\n this.focusElement(activeCell);\n }\n }\n }\n });\n\n fromEvent(this.keyNavUtils.grid, 'wheel')\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => {\n this.nextCellCoordsEmitter.emit(null);\n });\n\n fromEvent(this.keyNavUtils.grid, 'keydown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((e: KeyboardEvent) => {\n // Skip column resize events\n if (\n (e.target as HTMLElement).classList.contains('drag-handle') &&\n (e.key === Keys.ArrowLeft || e.key === Keys.ArrowRight)\n ) {\n return;\n }\n if (\n e.key === Keys.ArrowUp ||\n e.key === Keys.ArrowDown ||\n e.key === Keys.ArrowLeft ||\n e.key === Keys.ArrowRight ||\n e.key === Keys.End ||\n e.key === Keys.Home ||\n e.key === Keys.PageUp ||\n e.key === Keys.PageDown\n ) {\n const nextCellCoords = this.keyNavUtils.getNextItemCoordinate(e);\n\n if (\n nextCellCoords.y > 0 &&\n (e.key === Keys.ArrowUp || e.key === Keys.ArrowDown || e.key === Keys.PageUp || e.key === Keys.PageDown)\n ) {\n this.keyNavUtils.setAriaRowIndexTo(nextCellCoords);\n\n this.nextCellCoordsEmitter.emit(nextCellCoords);\n }\n\n const activeItem = this.keyNavUtils.rows\n ? (Array.from(this.keyNavUtils.getCellsForRow(nextCellCoords.y))[nextCellCoords.x] as HTMLElement)\n : null;\n\n if (activeItem) {\n this.setActiveCell(activeItem);\n this.focusElement(activeItem, {\n preventScroll: this.preventScrollOnFocus && !!nextCellCoords.ariaRowIndex,\n });\n }\n\n e.preventDefault();\n }\n });\n });\n this.listenersAdded = true;\n }\n\n initializeKeyGrid(host: HTMLElement) {\n this.keyNavUtils = new KeyNavigationUtils(host, this.config);\n this.addListeners();\n this.resetKeyGrid();\n }\n\n resetKeyGrid() {\n this.keyNavUtils.cells?.forEach((i: HTMLElement) => i.setAttribute('tabindex', '-1'));\n const firstCell = this.keyNavUtils.cells ? this.keyNavUtils.cells[0] : null;\n firstCell?.setAttribute('tabindex', '0');\n }\n\n setActiveCell(activeCell: HTMLElement) {\n const prior = this.keyNavUtils.cells\n ? Array.from(this.keyNavUtils.cells).find(c => c.getAttribute('tabindex') === '0')\n : null;\n\n if (prior) {\n prior.setAttribute('tabindex', '-1');\n }\n\n activeCell.setAttribute('tabindex', '0');\n }\n\n focusElement(activeCell: HTMLElement, options: FocusOptions = { preventScroll: false }) {\n if (this.skipItemFocus) {\n return;\n }\n\n let elementToFocus: HTMLElement;\n\n if (activeCell.getAttribute('role') === 'columnheader') {\n elementToFocus = activeCell;\n } else {\n const tabbableElements = getTabbableItems(activeCell);\n elementToFocus = tabbableElements.length ? tabbableElements[0] : activeCell;\n }\n\n elementToFocus.focus(options);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n booleanAttribute,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Optional,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ClrPopoverPosition, ClrPopoverService, ClrPopoverType } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridFilterInterface } from './interfaces/filter.interface';\nimport { ColumnActionsService } from './providers/column-actions.service';\nimport { CustomFilter } from './providers/custom-filter';\nimport { FiltersProvider, RegisteredFilter } from './providers/filters';\nimport { DatagridFilterRegistrar } from './utils/datagrid-filter-registrar';\nimport { KeyNavigationGridController } from './utils/key-navigation-grid.controller';\n\n/**\n * Custom filter that can be added in any column to override the default object property string filter.\n * The reason this is not just an input on DatagridColumn is because we need the filter's template to be projected,\n * since it can be anything (not just a text input).\n */\n@Component({\n selector: 'clr-dg-filter',\n // We register this component as a CustomFilter, for the parent column to detect it.\n providers: [{ provide: CustomFilter, useExisting: ClrDatagridFilter }],\n template: `\n <!--\n The toggle stands down when the column has a clr-dg-column-actions menu, which then owns\n opening this filter. Nothing else here changes: the popover is still driven through the\n column's ClrPopoverService, the menu just points its origin at its own trigger instead.\n -->\n @if (columnActions?.filterInHeader() ?? true) {\n <button\n class=\"datagrid-filter-toggle\"\n type=\"button\"\n #anchor\n [attr.aria-expanded]=\"ariaExpanded\"\n [attr.aria-controls]=\"popoverId\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n [class.datagrid-filter-open]=\"open\"\n [class.datagrid-filtered]=\"active\"\n >\n <cds-icon\n [status]=\"active ? 'info' : null\"\n [shape]=\"active ? 'filter-grid-circle' : 'filter-grid'\"\n solid\n ></cds-icon>\n </button>\n }\n\n <div\n class=\"datagrid-filter\"\n [id]=\"popoverId\"\n cdkTrapFocus\n *clrPopoverContent=\"open; at: popoverPosition; type: popoverType; outsideClickToClose: true; scrollToClose: false\"\n role=\"dialog\"\n [attr.aria-label]=\"commonStrings.keys.datagridFilterDialogAriaLabel\"\n >\n <div class=\"datagrid-filter-close-wrapper\">\n <button type=\"button\" class=\"close\" clrPopoverCloseButton>\n <cds-icon shape=\"window-close\" [attr.title]=\"commonStrings.keys.close\"></cds-icon>\n </button>\n </div>\n\n <ng-content></ng-content>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridFilter<T = any>\n extends DatagridFilterRegistrar<T, ClrDatagridFilterInterface<T>>\n implements CustomFilter, OnDestroy\n{\n @Output('clrDgFilterOpenChange') openChange = new EventEmitter<boolean>(false);\n\n ariaExpanded = false;\n popoverId = uniqueIdFactory();\n\n // Smart Popover\n popoverPosition = ClrPopoverPosition.BOTTOM_RIGHT;\n popoverType = ClrPopoverType.DROPDOWN;\n\n @ViewChild('anchor', { read: ElementRef }) anchor: ElementRef<HTMLButtonElement>;\n\n private subs: Subscription[] = [];\n\n constructor(\n _filters: FiltersProvider<T>,\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService,\n @Optional() private keyNavigation: KeyNavigationGridController,\n @Optional() protected columnActions: ColumnActionsService\n ) {\n super(_filters);\n this.subs.push(\n popoverService.openChange.subscribe(change => {\n this.ariaExpanded = change;\n this.openChange.emit(change);\n\n // Set here rather than in the open setter, so it applies however the filter is opened - its\n // own toggle, clrDgFilterOpen, or the column actions menu.\n if (keyNavigation) {\n keyNavigation.skipItemFocus = change;\n }\n })\n );\n\n // Optional so the filter keeps working outside a column, e.g. in isolated tests.\n columnActions?.filter.set(this);\n }\n\n @Input({ alias: 'clrDgFilterOpen', transform: booleanAttribute })\n get open() {\n return this.popoverService.open;\n }\n set open(open: boolean) {\n if (this.popoverService.open !== open) {\n this.popoverService.open = open;\n this.openChange.emit(open);\n }\n }\n\n @Input('clrDgFilter')\n set customFilter(filter: ClrDatagridFilterInterface<T> | RegisteredFilter<T, ClrDatagridFilterInterface<T>>) {\n this.setFilter(filter);\n }\n\n /**\n * Indicates if the filter is currently active\n */\n get active() {\n return !!this.filter && this.filter.isActive();\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.subs.forEach(sub => sub.unsubscribe());\n\n if (this.columnActions?.filter() === this) {\n this.columnActions.filter.set(null);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, ElementRef, EventEmitter, Input, NgZone, Output, ViewChild } from '@angular/core';\nimport { ClrPopoverService } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, DomAdapter } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { DatagridNumericFilterImpl } from './datagrid-numeric-filter-impl';\nimport { ClrDatagridFilter } from '../../datagrid-filter';\nimport { ClrDatagridNumericFilterInterface } from '../../interfaces/numeric-filter.interface';\nimport { CustomFilter } from '../../providers/custom-filter';\nimport { FiltersProvider, RegisteredFilter } from '../../providers/filters';\nimport { DatagridFilterRegistrar } from '../../utils/datagrid-filter-registrar';\n\n@Component({\n selector: 'clr-dg-numeric-filter',\n providers: [{ provide: CustomFilter, useExisting: DatagridNumericFilter }],\n template: `\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <div class=\"datagrid-numeric-filter-form\">\n <clr-number-input-container>\n <label class=\"clr-control-label\">{{ fromLabelValue }}</label>\n <input\n clrNumberInput\n class=\"datagrid-numeric-filter-input\"\n #input_low\n type=\"number\"\n autocomplete=\"off\"\n name=\"low\"\n [(ngModel)]=\"low\"\n [placeholder]=\"minPlaceholderValue\"\n [attr.aria-label]=\"minPlaceholderValue\"\n />\n </clr-number-input-container>\n <clr-number-input-container>\n <label class=\"clr-control-label\">{{ toLabelValue }}</label>\n <input\n clrNumberInput\n class=\"datagrid-numeric-filter-input\"\n #input_high\n type=\"number\"\n autocomplete=\"off\"\n name=\"high\"\n [(ngModel)]=\"high\"\n [placeholder]=\"maxPlaceholderValue\"\n [attr.aria-label]=\"maxPlaceholderValue\"\n />\n </clr-number-input-container>\n </div>\n </clr-dg-filter>\n `,\n standalone: false,\n})\nexport class DatagridNumericFilter<T = any>\n extends DatagridFilterRegistrar<T, DatagridNumericFilterImpl<T>>\n implements CustomFilter, AfterViewInit\n{\n @Input('clrFilterMinPlaceholder') minPlaceholder: string;\n @Input('clrFilterMaxPlaceholder') maxPlaceholder: string;\n @Input('clrFilterFromLabel') fromLabel: string;\n @Input('clrFilterToLabel') toLabel: string;\n\n @Output('clrFilterValueChange') filterValueChange = new EventEmitter();\n\n /**\n * Indicates if the filter dropdown is open\n */\n open = false;\n\n /**\n * We need the actual input element to automatically focus on it\n */\n @ViewChild('input_low') input: ElementRef<HTMLInputElement>;\n\n /**\n * We grab the ClrDatagridFilter we wrap to register this StringFilter to it.\n */\n @ViewChild(ClrDatagridFilter) filterContainer: ClrDatagridFilter<T>;\n\n private initFilterValues: [number, number];\n private subscriptions: Subscription[] = [];\n\n constructor(\n filters: FiltersProvider<T>,\n private domAdapter: DomAdapter,\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService,\n private ngZone: NgZone\n ) {\n super(filters);\n }\n\n /**\n * Common setter for the input values\n */\n @Input('clrFilterValue')\n get value() {\n return [this.filter.low, this.filter.high];\n }\n set value(values: [number, number]) {\n if (this.filter && Array.isArray(values)) {\n if (values && (values[0] !== this.filter.low || values[1] !== this.filter.high)) {\n if (typeof values[0] === 'number') {\n this.filter.low = values[0];\n } else {\n this.filter.low = null;\n }\n if (typeof values[1] === 'number') {\n this.filter.high = values[1];\n } else {\n this.filter.high = null;\n }\n this.filterValueChange.emit(values);\n }\n } else {\n this.initFilterValues = values;\n }\n }\n\n /**\n * Customizable filter logic based on high and low values\n */\n @Input('clrDgNumericFilter')\n set customNumericFilter(\n value: ClrDatagridNumericFilterInterface<T> | RegisteredFilter<T, DatagridNumericFilterImpl<T>>\n ) {\n if (value instanceof RegisteredFilter) {\n this.setFilter(value);\n } else {\n this.setFilter(new DatagridNumericFilterImpl(value));\n }\n if (this.initFilterValues) {\n this.value = this.initFilterValues;\n // This initFilterValues should be used only once after the filter registration\n // So deleting this property value to prevent it from being used again\n // if this customStringFilter property is set again\n delete this.initFilterValues;\n }\n }\n\n get maxPlaceholderValue() {\n return this.maxPlaceholder || this.commonStrings.keys.maxValue;\n }\n\n get minPlaceholderValue() {\n return this.minPlaceholder || this.commonStrings.keys.minValue;\n }\n\n get fromLabelValue() {\n return this.fromLabel || this.commonStrings.keys.fromLabel;\n }\n\n get toLabelValue() {\n return this.toLabel || this.commonStrings.keys.toLabel;\n }\n\n get low() {\n if (typeof this.filter.low === 'number' && isFinite(this.filter.low)) {\n return this.filter.low;\n } else {\n // There's not a low limit\n return null;\n }\n }\n set low(low: number | string) {\n if (typeof low === 'number' && low !== this.filter.low) {\n this.filter.low = low;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n } else if (typeof low !== 'number') {\n this.filter.low = null;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n }\n }\n\n get high() {\n if (typeof this.filter.high === 'number' && isFinite(this.filter.high)) {\n return this.filter.high;\n } else {\n // There's not a high limit\n return null;\n }\n }\n set high(high: number | string) {\n if (typeof high === 'number' && high !== this.filter.high) {\n this.filter.high = high;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n } else if (typeof high !== 'number') {\n this.filter.high = null;\n this.filterValueChange.emit([this.filter.low, this.filter.high]);\n }\n }\n\n ngAfterViewInit() {\n this.subscriptions.push(\n this.popoverService.openChange.subscribe(openChange => {\n this.open = openChange;\n // Note: this is being run outside of the Angular zone because `element.focus()` doesn't require\n // running change detection.\n this.ngZone.runOutsideAngular(() => {\n // The animation frame in used because when this executes, the input isn't displayed.\n // Note: `element.focus()` causes re-layout and this may lead to frame drop on slower devices.\n // `setTimeout` is a macrotask and macrotasks are executed within the current rendering frame.\n // Animation tasks are executed within the next rendering frame.\n requestAnimationFrame(() => {\n this.domAdapter.focus(this.input.nativeElement);\n });\n });\n })\n );\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.subscriptions.forEach(sub => {\n sub.unsubscribe();\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ClrPopoverService } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, DomAdapter } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { DatagridStringFilterImpl } from './datagrid-string-filter-impl';\nimport { ClrDatagridFilter } from '../../datagrid-filter';\nimport { ClrDatagridStringFilterInterface } from '../../interfaces/string-filter.interface';\nimport { CustomFilter } from '../../providers/custom-filter';\nimport { FiltersProvider, RegisteredFilter } from '../../providers/filters';\nimport { DatagridFilterRegistrar } from '../../utils/datagrid-filter-registrar';\n\n@Component({\n selector: 'clr-dg-string-filter',\n providers: [{ provide: CustomFilter, useExisting: DatagridStringFilter }],\n template: `\n <clr-dg-filter [clrDgFilter]=\"registered\" [(clrDgFilterOpen)]=\"open\">\n <clr-input-container>\n <label>{{ labelValue }}</label>\n <input\n #input\n type=\"text\"\n autocomplete=\"off\"\n name=\"search\"\n [(ngModel)]=\"value\"\n clrInput\n [attr.aria-label]=\"placeholderValue\"\n [placeholder]=\"placeholderValue\"\n />\n </clr-input-container>\n </clr-dg-filter>\n `,\n standalone: false,\n})\nexport class DatagridStringFilter<T = any>\n extends DatagridFilterRegistrar<T, DatagridStringFilterImpl<T>>\n implements CustomFilter, OnChanges, OnDestroy, AfterViewInit\n{\n /**\n * Provide a way to pass external placeholder and aria-label to the filter input\n */\n @Input('clrFilterPlaceholder') placeholder: string;\n @Input('clrFilterLabel') label: string;\n\n @Output('clrFilterValueChange') filterValueChange = new EventEmitter();\n\n /**\n * Indicates if the filter dropdown is open\n */\n open = false;\n\n /**\n * We need the actual input element to automatically focus on it\n */\n @ViewChild('input') input: ElementRef<HTMLInputElement>;\n\n /**\n * We grab the ClrDatagridFilter we wrap to register this StringFilter to it.\n */\n @ViewChild(ClrDatagridFilter) filterContainer: ClrDatagridFilter<T>;\n\n labelValue = '';\n private initFilterValue: string;\n private subs: Subscription[] = [];\n\n constructor(\n filters: FiltersProvider<T>,\n private domAdapter: DomAdapter,\n public commonStrings: ClrCommonStringsService,\n private popoverService: ClrPopoverService,\n private elementRef: ElementRef<HTMLElement>,\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone\n ) {\n super(filters);\n }\n\n /**\n * Customizable filter logic based on a search text\n */\n @Input('clrDgStringFilter')\n set customStringFilter(\n value: ClrDatagridStringFilterInterface<T> | RegisteredFilter<T, DatagridStringFilterImpl<T>>\n ) {\n if (value instanceof RegisteredFilter) {\n this.setFilter(value);\n } else {\n this.setFilter(new DatagridStringFilterImpl(value));\n }\n if (this.initFilterValue) {\n this.value = this.initFilterValue;\n // This initFilterValue should be used only once after the filter registration\n // So deleting this property value to prevent it from being used again\n // if this customStringFilter property is set again\n delete this.initFilterValue;\n }\n }\n\n /**\n * Common setter for the input value\n */\n @Input('clrFilterValue')\n get value() {\n return this.filter.value;\n }\n set value(value: string) {\n if (this.filter && typeof value === 'string') {\n if (!value) {\n value = '';\n }\n if (value !== this.filter.value) {\n this.filter.value = value;\n this.filterValueChange.emit(value);\n }\n } else {\n this.initFilterValue = value;\n }\n }\n\n get placeholderValue() {\n return this.placeholder || this.commonStrings.keys.filterItems;\n }\n\n ngAfterViewInit() {\n this.subs.push(\n this.popoverService.openChange.subscribe(openChange => {\n this.open = openChange;\n // Note: this is being run outside of the Angular zone because `element.focus()` doesn't require\n // running change detection.\n this.ngZone.runOutsideAngular(() => {\n // The animation frame in used because when this executes, the input isn't displayed.\n // Note: `element.focus()` causes re-layout and this may lead to frame drop on slower devices.\n // `setTimeout` is a macrotask and macrotasks are executed within the current rendering frame.\n // Animation tasks are executed within the next rendering frame.\n requestAnimationFrame(() => {\n this.domAdapter.focus(this.input.nativeElement);\n });\n });\n })\n );\n }\n\n ngOnChanges() {\n setTimeout(() => {\n this.setFilterLabel();\n this.cdr.markForCheck();\n });\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.subs.forEach(sub => sub.unsubscribe());\n }\n\n /**\n * This is not in a getter to prevent \"expression has changed after it was checked\" errors.\n */\n private setFilterLabel() {\n if (this.label) {\n this.labelValue = this.label;\n\n return;\n }\n\n const columnElement = this.elementRef.nativeElement?.closest('clr-dg-column');\n const columnTitleElement = columnElement?.querySelector('.datagrid-column-title');\n\n this.labelValue = this.commonStrings.parse(this.commonStrings.keys.datagridFilterLabel, {\n COLUMN: columnTitleElement?.textContent.trim() || '',\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n inject,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ClrPopoverHostDirective } from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, HostWrapper } from '@clr/angular/utils';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { DatagridPropertyComparator } from './built-in/comparators/datagrid-property-comparator';\nimport { DatagridNumericFilterImpl } from './built-in/filters/datagrid-numeric-filter-impl';\nimport { DatagridPropertyNumericFilter } from './built-in/filters/datagrid-property-numeric-filter';\nimport { DatagridPropertyStringFilter } from './built-in/filters/datagrid-property-string-filter';\nimport { DatagridStringFilterImpl } from './built-in/filters/datagrid-string-filter-impl';\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ClrDatagridAriaSortOrder, ClrDatagridSortOrder } from './enums/sort-order.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { ClrDatagridComparatorInterface } from './interfaces/comparator.interface';\nimport { ClrDatagridFilterInterface } from './interfaces/filter.interface';\nimport { ColumnActionsService } from './providers/column-actions.service';\nimport { COLUMN_STATE } from './providers/column-state.provider';\nimport { ColumnsService } from './providers/columns.service';\nimport { CustomFilter } from './providers/custom-filter';\nimport { DetailService } from './providers/detail.service';\nimport { FiltersProvider } from './providers/filters';\nimport { Sort } from './providers/sort';\nimport { HIDDEN_COLUMN_CLASS, PINNED_COLUMN_CLASS } from './render/constants';\nimport { DatagridFilterRegistrar } from './utils/datagrid-filter-registrar';\nimport { WrappedColumn } from './wrapped-column';\n\n@Component({\n selector: 'clr-dg-column',\n template: `\n <div class=\"datagrid-column-flex\">\n @if (sortable) {\n <button class=\"datagrid-column-title\" (click)=\"sort()\" type=\"button\" #titleContainer>\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n <cds-icon\n [shape]=\"sortDirection ? 'arrow' : 'two-way-arrows'\"\n [direction]=\"sortDirection ? sortDirection : 'left'\"\n aria-hidden=\"true\"\n class=\"sort-icon\"\n ></cds-icon>\n </button>\n }\n <!-- I'm really not happy with that select since it's not very scalable -->\n <ng-content select=\"clr-dg-filter, clr-dg-string-filter, clr-dg-numeric-filter\"></ng-content>\n\n @if (field && !customFilter && colType == 'string') {\n <clr-dg-string-filter\n [clrFilterPlaceholder]=\"filterStringPlaceholder\"\n [clrDgStringFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-string-filter>\n }\n @if (field && !customFilter && colType == 'number') {\n <clr-dg-numeric-filter\n [clrFilterMaxPlaceholder]=\"filterNumberMaxPlaceholder\"\n [clrFilterMinPlaceholder]=\"filterNumberMinPlaceholder\"\n [clrDgNumericFilter]=\"registered\"\n [(clrFilterValue)]=\"filterValue\"\n ></clr-dg-numeric-filter>\n }\n\n <ng-template #columnTitle>\n <ng-content></ng-content>\n </ng-template>\n\n @if (!sortable) {\n <span class=\"datagrid-column-title\" #titleContainer>\n <ng-container *ngTemplateOutlet=\"columnTitle\"></ng-container>\n </span>\n }\n\n <!--\n The actions menu needs its own slot: the default ng-content lives inside the #columnTitle\n template, which is rendered inside the sort button, so an unselected clr-dg-column-actions\n would end up as a button within a button.\n -->\n <ng-content select=\"clr-dg-column-actions\"></ng-content>\n\n @if (pinnable && !columnActions.menuPresent()) {\n <button\n class=\"datagrid-column-pin\"\n type=\"button\"\n [attr.aria-label]=\"pinned ? commonStrings.keys.unpinColumn : commonStrings.keys.pinColumn\"\n (click)=\"onPinToggleClick($event)\"\n >\n <cds-icon [size]=\"'12'\" [shape]=\"pinned ? 'unpin' : 'pin'\" solid aria-hidden=\"true\"></cds-icon>\n </button>\n }\n\n @if (showSeparator) {\n <clr-dg-column-separator></clr-dg-column-separator>\n }\n </div>\n `,\n hostDirectives: [ClrPopoverHostDirective],\n // Shared by clr-dg-column-actions and this column's filter, whichever order they are created in.\n providers: [ColumnActionsService],\n host: {\n '[class.datagrid-column]': 'true',\n '[attr.aria-sort]': 'ariaSort',\n role: 'columnheader',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class ClrDatagridColumn<T = any>\n extends DatagridFilterRegistrar<T, ClrDatagridFilterInterface<T>>\n implements OnDestroy, OnInit, OnChanges\n{\n @Input('clrFilterStringPlaceholder') filterStringPlaceholder: string;\n @Input('clrFilterNumberMaxPlaceholder') filterNumberMaxPlaceholder: string;\n @Input('clrFilterNumberMinPlaceholder') filterNumberMinPlaceholder: string;\n @Input('clrDgDisableUnsort') disableUnsort = false;\n\n /**\n * Lets the user pin and unpin the column from within the datagrid. It only offers the control - the\n * pinned state itself stays on `clrDgPinned`.\n * The control is a pin toggle in the column header, or Pin Column in the column's\n * `clr-dg-column-actions` when it has one - never both, so the header keeps one control per action.\n */\n @Input({ alias: 'clrDgPinnable', transform: booleanAttribute }) pinnable = false;\n\n @Output('clrDgSortOrderChange') sortOrderChange = new EventEmitter<ClrDatagridSortOrder>();\n @Output('clrDgPinnedChange') pinnedChange = new EventEmitter<boolean>();\n @Output('clrFilterValueChange') filterValueChange = new EventEmitter();\n\n @ViewChild('titleContainer', { read: ElementRef }) titleContainer: ElementRef<HTMLElement>;\n\n /**\n * A custom filter for this column that can be provided in the projected content\n */\n customFilter = false;\n\n // Provided by this column itself, and shared with its actions menu and filter.\n protected readonly columnActions = inject(ColumnActionsService);\n\n /*\n * What type is this column? This defaults to STRING, but can also be\n * set to NUMBER. Unsupported types default to STRING. Users can set it\n * via the [clrDgColType] input by setting it to 'string' or 'number'.\n */\n private _colType: 'string' | 'number' = 'string';\n\n /*\n * Simple object property shortcut, activates both sorting and filtering\n * based on native comparison of the specified property on the items.\n */\n private _field: string;\n\n /**\n * ClrDatagridComparatorInterface to use when sorting the column\n */\n private _sortBy: ClrDatagridComparatorInterface<T>;\n\n /**\n * Indicates how the column is currently sorted\n */\n private _sortOrder: ClrDatagridSortOrder = ClrDatagridSortOrder.UNSORTED;\n\n private _sortDirection: 'up' | 'down' | null;\n\n // This property holds filter value temporarily while this.filter property is not yet registered\n // When this.filter is registered, this property value would be used update this.filter.value\n //\n private initFilterValue: string | [number, number];\n\n private wrappedInjector: Injector;\n\n /**\n * Subscription to the sort service changes\n */\n private subscriptions: Subscription[] = [];\n\n private _showSeparator = true;\n\n private _pinned = false;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private _sort: Sort<T>,\n filters: FiltersProvider<T>,\n private vcr: ViewContainerRef,\n private detailService: DetailService,\n private changeDetectorRef: ChangeDetectorRef,\n protected commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService,\n @Optional() @Inject(COLUMN_STATE) private columnState: BehaviorSubject<ColumnState>\n ) {\n super(filters);\n this.subscriptions.push(this.listenForSortingChanges());\n this.subscriptions.push(this.listenForDetailPaneChanges());\n }\n\n get isHidden() {\n return this.el.nativeElement.classList.contains(HIDDEN_COLUMN_CLASS);\n }\n\n /**\n * Whether the column is currently rendered as pinned. This can differ from the `pinned` input\n * while the detail pane is open, because pinning is suspended for as long as it shows a single\n * column.\n */\n get isPinned() {\n return this.el.nativeElement.classList.contains(PINNED_COLUMN_CLASS);\n }\n\n get showSeparator() {\n return this._showSeparator;\n }\n set showSeparator(value: boolean) {\n this._showSeparator = value;\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Pins the column to the left of the datagrid, so it stays visible while the remaining\n * columns are scrolled horizontally. Pinned columns keep their declaration order and are\n * rendered before the scrollable ones, right after the built-in row controls.\n */\n @Input({ alias: 'clrDgPinned', transform: booleanAttribute })\n get pinned(): boolean {\n return this._pinned;\n }\n set pinned(value: boolean) {\n if (this._pinned === value) {\n return;\n }\n\n this._pinned = value;\n\n // The column state is what the header and the rows read to decide where to project the\n // column and its cells. It is optional only so the column keeps working when it is used\n // outside the render directives, e.g. in isolated tests.\n if (this.columnState) {\n this.columnsService.emitStateChange(this.columnState, {\n pinned: value,\n changes: [DatagridColumnChanges.PINNED],\n });\n }\n }\n\n // TODO: We might want to make this an enum in the future\n @Input('clrDgColType')\n get colType() {\n return this._colType;\n }\n set colType(value: 'string' | 'number') {\n this._colType = value;\n }\n\n @Input('clrDgField')\n get field() {\n return this._field;\n }\n set field(field: string) {\n if (typeof field === 'string') {\n this._field = field;\n\n if (!this._sortBy) {\n this._sortBy = new DatagridPropertyComparator(field);\n }\n }\n }\n\n @Input('clrDgSortBy')\n get sortBy() {\n return this._sortBy;\n }\n set sortBy(comparator: ClrDatagridComparatorInterface<T> | string) {\n if (typeof comparator === 'string') {\n this._sortBy = new DatagridPropertyComparator(comparator);\n } else if (comparator) {\n this._sortBy = comparator;\n } else if (this.field) {\n this._sortBy = new DatagridPropertyComparator(this.field);\n } else {\n delete this._sortBy;\n }\n }\n\n @Input('clrDgSortOrder')\n get sortOrder() {\n return this._sortOrder;\n }\n set sortOrder(value: ClrDatagridSortOrder) {\n if (typeof value === 'undefined') {\n return;\n }\n\n // only if the incoming order is different from the current one\n if (this._sortOrder === value) {\n return;\n }\n\n switch (value) {\n case ClrDatagridSortOrder.ASC:\n this.sort(false);\n break;\n case ClrDatagridSortOrder.DESC:\n this.sort(true);\n break;\n // the Unsorted case happens when the current state is neither Asc nor Desc\n case ClrDatagridSortOrder.UNSORTED:\n default:\n this._sort.clear();\n this._sortDirection = null;\n break;\n }\n }\n\n @Input('clrFilterValue')\n set updateFilterValue(newValue: string | [number, number]) {\n if (this.filter) {\n if (this.filter instanceof DatagridStringFilterImpl) {\n if (!newValue || typeof newValue !== 'string') {\n newValue = '';\n }\n if (newValue !== this.filter.value) {\n this.filter.value = newValue;\n }\n } else if (this.filter instanceof DatagridNumericFilterImpl) {\n if (!newValue || !(newValue instanceof Array)) {\n newValue = [null, null];\n }\n if (newValue.length === 2 && (newValue[0] !== this.filter.value[0] || newValue[1] !== this.filter.value[1])) {\n this.filter.value = newValue;\n }\n }\n } else {\n this.initFilterValue = newValue;\n }\n }\n\n @ContentChild(CustomFilter)\n set projectedFilter(custom: any) {\n if (custom) {\n this.deleteFilter();\n this.customFilter = true;\n }\n }\n\n /**\n * Indicates if the column is sortable\n */\n get sortable(): boolean {\n return !!this._sortBy;\n }\n\n get ariaSort(): ClrDatagridAriaSortOrder {\n switch (this._sortOrder) {\n case ClrDatagridSortOrder.ASC:\n return ClrDatagridAriaSortOrder.ASC;\n case ClrDatagridSortOrder.DESC:\n return ClrDatagridAriaSortOrder.DESC;\n case ClrDatagridSortOrder.UNSORTED:\n default:\n return ClrDatagridAriaSortOrder.UNSORTED;\n }\n }\n\n get sortDirection(): 'up' | 'down' | null {\n return this._sortDirection;\n }\n\n /**\n * @NOTE type `any` here is to let us pass templateStrictMode, because in our code we try to handle\n * two types of filters String and Number with the same variable but both of them work with different\n * format we got an error for casting. We could not cast anything inside the template so to not mess the\n * casting, the last type is set to `any`\n *\n * Orignial types: string | [number, number]\n */\n get filterValue() {\n if (this.filter instanceof DatagridStringFilterImpl || this.filter instanceof DatagridNumericFilterImpl) {\n return this.filter.value;\n }\n return null;\n }\n set filterValue(newValue: any) {\n if (this.filter instanceof DatagridStringFilterImpl || this.filter instanceof DatagridNumericFilterImpl) {\n this.updateFilterValue = newValue;\n this.filterValueChange.emit(this.filter.value);\n }\n }\n\n get _view() {\n return this.wrappedInjector.get(WrappedColumn, this.vcr).columnView;\n }\n\n ngOnInit() {\n this.wrappedInjector = new HostWrapper(WrappedColumn, this.vcr);\n }\n\n ngAfterViewInit() {\n this.setFilterToggleAriaLabel();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n changes.colType &&\n changes.colType.currentValue &&\n changes.colType.currentValue !== changes.colType.previousValue\n ) {\n if (!this.customFilter && !this.filter && this.colType && this.field) {\n this.setupDefaultFilter(this.field, this.colType);\n }\n }\n if (changes.field && changes.field.currentValue && changes.field.currentValue !== changes.field.previousValue) {\n if (!this.customFilter && this.colType) {\n this.setupDefaultFilter(this.field, this.colType);\n }\n }\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n\n /**\n * Sorts the datagrid based on this column\n */\n sort(reverse?: boolean) {\n if (!this.sortable) {\n return;\n }\n\n if (!this.disableUnsort && reverse === undefined && this.sortOrder === ClrDatagridSortOrder.DESC) {\n this.clearSort();\n return;\n }\n\n this._sort.toggle(this._sortBy, reverse);\n\n // setting the private variable to not retrigger the setter logic\n this._sortOrder = this._sort.reverse ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;\n // Sets the correct icon for current sort order\n this._sortDirection = this._sortOrder === ClrDatagridSortOrder.DESC ? 'down' : 'up';\n this.sortOrderChange.emit(this._sortOrder);\n }\n\n /**\n * Returns the datagrid to its unsorted state. Both the tri-state title button and the sort actions\n * in `clr-dg-column-actions` go through here, so the two cannot drift apart.\n */\n clearSort() {\n if (!this.sortable || this._sortOrder === ClrDatagridSortOrder.UNSORTED) {\n return;\n }\n\n this._sortOrder = ClrDatagridSortOrder.UNSORTED;\n this._sort.clear();\n this._sortDirection = null;\n this.sortOrderChange.emit(this._sortOrder);\n }\n\n /**\n * Pins or unpins the column. Going through the `pinned` setter keeps the rendering in sync, and the\n * output lets the application follow a change it did not initiate - without it a one-way\n * [clrDgPinned] binding would write the old value straight back.\n */\n togglePinned() {\n this.pinned = !this.pinned;\n this.pinnedChange.emit(this.pinned);\n }\n\n protected onPinToggleClick(event: MouseEvent) {\n // The header is a drop target for the column ordering addon and a click target for the sort\n // button next to the toggle, so the toggle keeps its click to itself.\n event.stopPropagation();\n this.togglePinned();\n }\n\n private listenForDetailPaneChanges() {\n return this.detailService.stateChange.subscribe(state => {\n if (this.showSeparator !== !state) {\n this.showSeparator = !state;\n }\n });\n }\n\n private setFilterToggleAriaLabel() {\n const filterToggle = this.el.nativeElement.querySelector('.datagrid-filter-toggle');\n if (filterToggle) {\n filterToggle.ariaLabel = this.commonStrings.parse(this.commonStrings.keys.datagridFilterAriaLabel, {\n COLUMN: this?.titleContainer?.nativeElement.textContent.trim().toLocaleLowerCase(),\n });\n }\n }\n\n private listenForSortingChanges() {\n return this._sort.change.subscribe(sort => {\n // Need to manually mark the component to be checked\n // for both activating and deactivating sorting\n this.changeDetectorRef.markForCheck();\n // We're only listening to make sure we emit an event when the column goes from sorted to unsorted\n if (this.sortOrder !== ClrDatagridSortOrder.UNSORTED && sort.comparator !== this._sortBy) {\n this._sortOrder = ClrDatagridSortOrder.UNSORTED;\n this.sortOrderChange.emit(this._sortOrder);\n this._sortDirection = null;\n }\n });\n }\n\n private setupDefaultFilter(field: string, colType: 'string' | 'number') {\n if (colType === 'number') {\n this.setFilter(new DatagridNumericFilterImpl(new DatagridPropertyNumericFilter(field)));\n } else if (colType === 'string') {\n this.setFilter(new DatagridStringFilterImpl(new DatagridPropertyStringFilter(field)));\n }\n if (this.filter && this.initFilterValue) {\n this.updateFilterValue = this.initFilterValue;\n // This initFilterValue should be used only once after the filter registration\n // So deleting this property value to prevent it from being used again\n // if this field property is set again\n delete this.initFilterValue;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nimport { FiltersProvider } from './filters';\nimport { Page } from './page';\nimport { Sort } from './sort';\n\nexport type ClrDatagridItemsIdentityFunction<T> = (item: T) => any;\n\n@Injectable()\nexport class Items<T = any> {\n /**\n * Indicates if the data is currently loading\n */\n loading = false;\n\n /**\n * Subscriptions to the other providers changes.\n */\n private _filtersSub: Subscription;\n private _sortSub: Subscription;\n private _pageSub: Subscription;\n\n /**\n * Whether we should use smart items for this datagrid or let the user handle\n * everything.\n */\n private _smart = false;\n\n /**\n * List of all items in the datagrid\n */\n private _all: T[];\n\n /**\n * Internal temporary step, which we preserve to avoid re-filtering or re-sorting if not necessary\n */\n private _filtered: T[];\n\n /**\n * List of items currently displayed\n */\n private _displayed: T[] = [];\n\n /**\n * The Observable that lets other classes subscribe to items changes\n */\n private _change = new Subject<T[]>();\n\n private _allChanges = new Subject<T[]>();\n\n constructor(\n private _filters: FiltersProvider<T>,\n private _sort: Sort<T>,\n private _page: Page\n ) {}\n\n get smart(): boolean {\n return this._smart;\n }\n\n get all() {\n return this._all;\n }\n set all(items: T[]) {\n this._all = items;\n this.emitAllChanges(items);\n if (this.smart) {\n this._filterItems();\n } else {\n this._displayed = items;\n this.emitChange();\n }\n }\n\n get displayed(): T[] {\n // Ideally we could return an immutable array, but we don't have it in Clarity yet.\n return this._displayed;\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<T[]> {\n return this._change.asObservable();\n }\n\n get allChanges(): Observable<T[]> {\n return this._allChanges.asObservable();\n }\n\n /**\n * Checks if we don't have data to process yet, to abort early operations\n */\n private get uninitialized() {\n return !this._all;\n }\n\n /**\n * Tracking function to identify objects.\n */\n identifyBy: ClrDatagridItemsIdentityFunction<T> = item => item;\n\n /**\n * Cleans up our subscriptions to other providers\n */\n destroy() {\n if (this._filtersSub) {\n this._filtersSub.unsubscribe();\n }\n if (this._sortSub) {\n this._sortSub.unsubscribe();\n }\n if (this._pageSub) {\n this._pageSub.unsubscribe();\n }\n }\n\n smartenDown() {\n this._smart = false;\n\n this.destroy();\n }\n\n smartenUp() {\n this._smart = true;\n /*\n * These observers trigger a chain of function: filter -> sort -> paginate\n * An observer up the chain re-triggers all the operations that follow it.\n */\n this._filtersSub = this._filters.change.subscribe(() => this._filterItems());\n this._sortSub = this._sort.change.subscribe(() => {\n // Special case, if the datagrid went from sorted to unsorted, we have to re-filter\n // to get the original order back\n if (!this._sort.comparator) {\n this._filterItems();\n } else {\n this._sortItems();\n }\n });\n this._pageSub = this._page.change.subscribe(() => this._changePage());\n }\n\n /**\n * Manually recompute the list of displayed items\n */\n refresh() {\n if (this.smart) {\n this._filterItems();\n }\n }\n\n private emitChange() {\n this._change.next(this.displayed);\n }\n\n private emitAllChanges(items: T[]): void {\n this._allChanges.next(items);\n }\n\n /**\n * FiltersProvider items from the raw list\n */\n private _filterItems() {\n if (this.uninitialized) {\n return;\n }\n if (this._filters.hasActiveFilters()) {\n this._filtered = this._all.filter(item => this._filters.accepts(item));\n } else {\n // Work on a shallow copy of the array, to not modify the user's model\n this._filtered = this._all.slice();\n }\n this._page.totalItems = this._filtered.length;\n this._sortItems();\n }\n\n /**\n * Sorts items in the filtered list\n */\n private _sortItems() {\n if (this.uninitialized) {\n return;\n }\n if (this._sort.comparator) {\n this._filtered.sort((a, b) => this._sort.compare(a, b));\n }\n this._changePage();\n }\n\n /**\n * Extracts the current page from the sorted list\n */\n private _changePage() {\n // If we know we have pagination but the page size hasn't been set yet, we wait for it.\n if (this.uninitialized || (this._page.activated && this._page.size === 0)) {\n return;\n }\n if (this._page.size > 0) {\n this._displayed = this._filtered.slice(this._page.firstItem, this._page.lastItem + 1);\n } else {\n this._displayed = this._filtered;\n }\n this.emitChange();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgForOf, NgForOfContext } from '@angular/common';\nimport {\n Directive,\n DoCheck,\n Input,\n IterableDiffer,\n IterableDiffers,\n OnDestroy,\n TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { Items } from './providers/items';\n\n@Directive({\n selector: '[clrDgItems][clrDgItemsOf]',\n standalone: false,\n})\nexport class ClrDatagridItems<T> implements DoCheck, OnDestroy {\n private iterableProxy: NgForOf<T>;\n private _rawItems: T[];\n private differ: IterableDiffer<T> | null = null;\n private subscriptions: Subscription[] = [];\n\n constructor(\n public template: TemplateRef<NgForOfContext<T>>,\n private differs: IterableDiffers,\n private items: Items,\n vcr: ViewContainerRef\n ) {\n items.smartenUp();\n this.iterableProxy = new NgForOf<T>(vcr, template, differs);\n this.subscriptions.push(\n items.change.subscribe(newItems => {\n this.iterableProxy.ngForOf = newItems;\n this.iterableProxy.ngDoCheck();\n })\n );\n }\n\n @Input('clrDgItemsOf')\n set rawItems(items: T[]) {\n this._rawItems = items ? items : []; // local copy for ngOnChange diffing\n }\n\n @Input('clrDgItemsTrackBy')\n set trackBy(value: TrackByFunction<T>) {\n this.iterableProxy.ngForTrackBy = value;\n }\n\n /**\n * Asserts the correct type of the template context that the directive will render.\n * See https://angular.io/guide/structural-directives#typing-the-directives-context\n *\n * The presence of this method is a signal to the Ivy template type-check compiler that the\n * structural directive renders its template with a specific context type.\n */\n static ngTemplateContextGuard<T>(_dir: ClrDatagridItems<T>, _ctx: unknown): _ctx is NgForOfContext<T> {\n return true;\n }\n\n ngDoCheck() {\n if (!this.differ) {\n this.differ = this.differs.find(this._rawItems).create(this.iterableProxy.ngForTrackBy);\n }\n if (this.differ) {\n const changes = this.differ.diff(this._rawItems);\n if (changes) {\n // TODO: not very efficient right now,\n // but premature optimization is the root of all evil.\n this.items.all = this._rawItems;\n }\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.items.smartenDown();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\nimport { Items } from './providers/items';\n\n@Component({\n selector: 'clr-dg-placeholder',\n template: `\n <div class=\"datagrid-placeholder\" [class.datagrid-empty]=\"emptyDatagrid\">\n @if (emptyDatagrid) {\n <div class=\"datagrid-placeholder-image\"></div>\n }\n <span class=\"datagrid-placeholder-content\">\n @if (emptyDatagrid) {\n <ng-content></ng-content>\n }\n </span>\n </div>\n `,\n host: { '[class.datagrid-placeholder-container]': 'true' },\n standalone: false,\n})\nexport class ClrDatagridPlaceholder<T = any> {\n constructor(private items: Items<T>) {}\n\n /**\n * Tests if the datagrid is empty, meaning it doesn't contain any items\n */\n get emptyDatagrid() {\n return !this.items.loading && (!this.items.displayed || this.items.displayed.length === 0);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, EmbeddedViewRef, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'dg-wrapped-cell',\n template: `\n <ng-template #cellPortal>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class WrappedCell implements AfterViewInit, OnDestroy {\n @ViewChild('cellPortal') templateRef: TemplateRef<void>;\n cellView: EmbeddedViewRef<void>; // the cells projected view\n\n ngAfterViewInit() {\n this.cellView = this.templateRef.createEmbeddedView(null);\n }\n\n ngOnDestroy() {\n this.cellView.destroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChildren, Injector, OnInit, QueryList, ViewContainerRef } from '@angular/core';\nimport { ClrSignpost } from '@clr/angular/popover/signpost';\nimport { HostWrapper } from '@clr/angular/utils';\n\nimport { WrappedCell } from './wrapped-cell';\n\n@Component({\n selector: 'clr-dg-cell',\n template: `<ng-content></ng-content>`,\n host: {\n '[class.datagrid-cell]': 'true',\n '[class.datagrid-signpost-trigger]': 'signpost.length > 0',\n role: 'gridcell',\n },\n standalone: false,\n})\nexport class ClrDatagridCell implements OnInit {\n /*********\n * @property signpost\n *\n * @description\n * @ContentChild is used to detect the presence of a Signpost in the projected content.\n * On the host, we set the .datagrid-signpost-trigger class on the cell when signpost.length is greater than 0.\n *\n */\n @ContentChildren(ClrSignpost) signpost: QueryList<ClrSignpost>;\n\n private wrappedInjector: Injector;\n\n constructor(private vcr: ViewContainerRef) {}\n\n get _view() {\n return this.wrappedInjector.get(WrappedCell, this.vcr).cellView;\n }\n\n ngOnInit() {\n this.wrappedInjector = new HostWrapper(WrappedCell, this.vcr);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { ClrLoadingState, IfExpandService } from '@clr/angular/utils';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nlet nbRow = 0;\n\n@Injectable()\nexport class DatagridIfExpandService extends IfExpandService {\n expandableId = '';\n\n private _replace = new BehaviorSubject(false);\n private _animate = new Subject<void>();\n\n constructor() {\n super();\n nbRow++;\n this.expandableId = 'clr-dg-expandable-row-' + nbRow;\n }\n // due to the es5 spec if the set is overridden on base class the getter must also be overridden\n override get expanded(): boolean {\n return this._expanded;\n }\n override set expanded(value: boolean) {\n value = !!value;\n if (value !== this._expanded) {\n this._expanded = value;\n this._animate.next();\n this._expandChange.next(value);\n }\n }\n\n get replace(): Observable<boolean> {\n return this._replace.asObservable();\n }\n\n get animate(): Observable<void> {\n return this._animate.asObservable();\n }\n\n override loadingStateChange(state: ClrLoadingState) {\n super.loadingStateChange(state);\n if (state !== ClrLoadingState.LOADING) {\n this._animate.next();\n }\n }\n\n setReplace(replaceValue: boolean) {\n this._replace.next(replaceValue);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum DatagridDisplayMode {\n DISPLAY,\n CALCULATE,\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport enum SelectionType {\n /**\n * User cannot select any row in the Datagrid\n */\n None = 'none',\n\n /**\n * User can select only one row at a time in the Datagrid.\n */\n Single = 'single',\n\n /**\n * User can select any number of rows in the Datagrid.\n */\n Multi = 'multi',\n}\n\nconst SELECTION_TYPE_VALUES = new Set<string>(Object.values(SelectionType));\n\nexport function selectionTypeAttribute(value: SelectionType | string): SelectionType {\n if (SELECTION_TYPE_VALUES.has(value as string)) {\n return value as SelectionType;\n }\n throw new Error(`Invalid SelectionType: \"${value}\". Expected one of: ${[...SELECTION_TYPE_VALUES].join(', ')}`);\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, EmbeddedViewRef, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'dg-wrapped-row',\n template: `\n <ng-template #rowPortal>\n <ng-content></ng-content>\n </ng-template>\n `,\n standalone: false,\n})\nexport class WrappedRow implements AfterViewInit, OnDestroy {\n @ViewChild('rowPortal') templateRef: TemplateRef<void>;\n rowView: EmbeddedViewRef<void>; // the rows projected view (in memory)\n\n ngAfterViewInit() {\n // Create the cells view in memory, not the DOM.\n this.rowView = this.templateRef.createEmbeddedView(null);\n }\n\n ngOnDestroy() {\n this.rowView.destroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, IterableDiffer, IterableDiffers, TrackByFunction } from '@angular/core';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { debounceTime, delay } from 'rxjs/operators';\n\nimport { FiltersProvider } from './filters';\nimport { ClrDatagridItemsIdentityFunction, Items } from './items';\nimport { SelectionType } from '../enums/selection-type';\n\nlet nbSelection = 0;\n\n@Injectable()\nexport class Selection<T = any> {\n id: string;\n preserveSelection = false;\n\n /**\n * Last selection, for use in range selection.\n */\n rangeStart: T;\n\n /**\n * Shift key state, for use in range selection.\n */\n shiftPressed = false;\n\n /** @deprecated since 2.0, remove in 3.0 */\n rowSelectionMode = false;\n\n private lockedRefs: T[] = []; // Ref of locked items\n private _currentSelectionRefs: T[] = [];\n private valueCollector = new Subject<T[]>();\n private _selectionType: SelectionType = SelectionType.None;\n\n /**\n * The current selection\n */\n private _current: T[];\n\n /**\n * The Observable that lets other classes subscribe to selection changes\n */\n private _change = new Subject<T[]>();\n\n /**\n * Subscriptions to the other providers changes.\n */\n private subscriptions: Subscription[] = [];\n\n /**\n * Differ to track changes of multi selection.\n */\n private _differ!: IterableDiffer<T>;\n private identifyBy: ClrDatagridItemsIdentityFunction<T>;\n\n constructor(\n private _items: Items<T>,\n filters: FiltersProvider<T>,\n differs: IterableDiffers\n ) {\n this.id = 'clr-dg-selection' + nbSelection++;\n this.identifyBy = _items.identifyBy;\n this._differ = differs.find(this._current || []).create<T>(this.identifyBy as TrackByFunction<T>);\n\n this.subscriptions.push(\n filters.change.subscribe(() => {\n if (!this.selectable || this.preserveSelection) {\n return;\n }\n this.clearSelection();\n })\n );\n\n this.subscriptions.push(\n _items.allChanges.pipe(delay(0)).subscribe(updatedItems => {\n // Reset the lockedRefs;\n const updateLockedRef: T[] = [];\n\n switch (this.selectionType) {\n case SelectionType.None: {\n break;\n }\n\n case SelectionType.Single: {\n let newSingle: any;\n let selectionUpdated = false;\n\n updatedItems.forEach(item => {\n if (item === null || item === undefined) {\n // Virtual scroll may emit a dense array of undefined slot placeholders. Those must\n // never match the empty single-selection ref (see virtual-scroll + Single).\n return;\n }\n const ref = _items.identifyBy(item);\n // If one of the updated items is the previously selectedSingle, set it as the new one\n if (this.currentSelectionRefs[0] === ref) {\n newSingle = item;\n selectionUpdated = true;\n }\n if (this.lockedRefs.indexOf(ref) > -1) {\n updateLockedRef.push(ref);\n }\n });\n\n if (selectionUpdated) {\n this.current = [newSingle];\n }\n break;\n }\n\n case SelectionType.Multi: {\n let leftOver: any[] = this.current.slice();\n let selectionUpdated = false;\n\n // Duplicate loop, when the issue is issue#2342 is revisited keep in mind that\n // we need to go over every updated item and check to see if there are valid to be\n // locked or not and update it. When only add items that are found in the lockedRefs back.\n //\n // The both loops below that goes over updatedItems could be combined into one.\n updatedItems.forEach(item => {\n if (item === null || item === undefined) {\n return;\n }\n const ref = _items.identifyBy(item);\n if (this.lockedRefs.indexOf(ref) > -1) {\n updateLockedRef.push(ref);\n }\n });\n\n // TODO: revisit this when we work on https://github.com/vmware/clarity/issues/2342\n // currently, the selection is cleared when filter is applied, so the logic inside\n // the if statement below results in broken behavior.\n if (leftOver.length > 0) {\n updatedItems.forEach(item => {\n if (item === null || item === undefined) {\n return;\n }\n const ref = _items.identifyBy(item);\n // Look in current selected refs array if item is selected, and update actual value\n const selectedIndex = this.currentSelectionRefs.indexOf(ref);\n if (selectedIndex > -1) {\n leftOver[selectedIndex] = item;\n selectionUpdated = true;\n }\n });\n\n // Filter out any unmatched items if we're using smart datagrids where we expect all items to be\n // present\n if (_items.smart) {\n leftOver = leftOver.filter(selected => updatedItems.indexOf(selected) > -1);\n if (this.current.length !== leftOver.length) {\n selectionUpdated = true;\n }\n }\n\n if (selectionUpdated) {\n this.current = leftOver;\n }\n }\n break;\n }\n\n default: {\n break;\n }\n }\n // Sync locked items\n this.lockedRefs = updateLockedRef;\n })\n );\n\n this.subscriptions.push(this.valueCollector.pipe(debounceTime(0)).subscribe(() => this.emitChange()));\n }\n\n get selectionType(): SelectionType {\n return this._selectionType;\n }\n set selectionType(value: SelectionType) {\n if (value === this.selectionType) {\n return;\n }\n\n this._selectionType = value ?? SelectionType.None;\n\n if (!this._current && this._selectionType !== SelectionType.None) {\n this._current = [];\n }\n }\n\n get current(): T[] {\n return this._current;\n }\n set current(value: T[]) {\n this.updateCurrent(value, true);\n this.updateCurrentSelectionRefs();\n }\n\n get currentSingle(): T {\n return this._current?.length ? this._current[0] : undefined;\n }\n\n // We do not want to expose the Subject itself, but the Observable which is read-only\n get change(): Observable<T[]> {\n return this._change.asObservable();\n }\n\n get selectable(): boolean {\n return this._selectionType !== SelectionType.None;\n }\n\n // Refs of currently selected items\n private get currentSelectionRefs(): T[] {\n return this._currentSelectionRefs;\n }\n\n checkForChanges(): void {\n const changes = this._differ.diff(this._current);\n // @TODO move the identifyBy from items to selection as it's used only here and is not needed in items\n if (this.identifyBy !== this._items.identifyBy) {\n this.identifyBy = this._items.identifyBy;\n }\n if (changes) {\n this.updateCurrentSelectionRefs();\n }\n }\n\n clearSelection(): void {\n this._current = [];\n this._currentSelectionRefs = [];\n this.emitChange();\n }\n\n /**\n * Cleans up our subscriptions to other providers\n */\n destroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n updateCurrent(value: T[], emit: boolean) {\n this._current = value;\n if (emit) {\n this.valueCollector.next(value);\n }\n }\n\n /**\n * Checks if an item is currently selected\n */\n isSelected(item: T): boolean {\n const refIndex = this.currentSelectionRefs.indexOf(this._items.identifyBy(item));\n if (this._selectionType === SelectionType.Single) {\n return refIndex === 0;\n } else if (this._selectionType === SelectionType.Multi) {\n return refIndex >= 0;\n }\n\n return false;\n }\n\n /**\n * Selects or deselects an item\n */\n setSelected(item: T, selected: boolean) {\n const ref = this._items.identifyBy(item);\n const index = this.currentSelectionRefs ? this.currentSelectionRefs.indexOf(ref) : -1;\n\n switch (this._selectionType) {\n case SelectionType.None:\n break;\n case SelectionType.Single:\n if (selected) {\n this.current = [item];\n }\n // in single selection, set currentSingle method should be used\n break;\n case SelectionType.Multi:\n if (index >= 0 && !selected) {\n this.deselectItem(index);\n } else if (index < 0 && selected) {\n this.selectItem(item);\n }\n break;\n default:\n break;\n }\n }\n\n /**\n * Checks if all currently displayed items are selected\n */\n isAllSelected(): boolean {\n if (this._selectionType !== SelectionType.Multi || !this._items.displayed) {\n return false;\n }\n // make sure to exclude the locked items from the list when counting\n const displayedItems: T[] = this._items.displayed.filter(item => {\n return this.isLocked(item) === false;\n });\n\n const nbDisplayed = displayedItems.length;\n if (nbDisplayed < 1) {\n return false;\n }\n const temp: T[] = displayedItems.filter(item => {\n const ref = this._items.identifyBy(item);\n return this.currentSelectionRefs.indexOf(ref) > -1;\n });\n return temp.length === displayedItems.length;\n }\n\n /**\n * Lock and unlock item\n */\n lockItem(item: T, lock: boolean) {\n if (this.canItBeLocked()) {\n const ref = this._items.identifyBy(item);\n if (lock === true) {\n // Add to lockedRef\n this.lockedRefs.push(ref);\n } else {\n // Remove from lockedRef\n this.lockedRefs = this.lockedRefs.filter(lockedItem => ref !== lockedItem);\n }\n }\n }\n\n /**\n * Check is item locked or not by searching into lockedRefs for entry\n */\n isLocked(item: T): boolean {\n /**\n * The check for selectionType will boost the performance by NOT searching\n * into the array when there is no need for that.\n */\n if (this.canItBeLocked()) {\n const ref = this._items.identifyBy(item);\n return this.lockedRefs.indexOf(ref) > -1;\n }\n\n return false;\n }\n\n /**\n * Selects or deselects all currently displayed items\n */\n toggleAll() {\n if (this._selectionType === SelectionType.None || this._selectionType === SelectionType.Single) {\n return;\n }\n /**\n * If every currently displayed item is already selected, we clear them.\n * If at least one item isn't selected, we select every currently displayed item.\n */\n if (this.isAllSelected()) {\n this._items.displayed.forEach(item => {\n const ref = this._items.identifyBy(item);\n const currentIndex = this.currentSelectionRefs.indexOf(ref);\n if (currentIndex > -1 && this.isLocked(item) === false) {\n this.deselectItem(currentIndex);\n }\n });\n } else {\n this._items.displayed.forEach(item => {\n if (!this.isSelected(item) && this.isLocked(item) === false) {\n this.selectItem(item);\n }\n });\n }\n }\n\n /**\n * Selects an item\n */\n private selectItem(item: T): void {\n this.current = this.current.concat(item);\n }\n\n /**\n * Deselects an item\n */\n private deselectItem(indexOfItem: number): void {\n this.current = this.current.slice(0, indexOfItem).concat(this.current.slice(indexOfItem + 1));\n if (indexOfItem < this.currentSelectionRefs.length) {\n // Keep selected refs array in sync\n const removedItems = this.currentSelectionRefs[indexOfItem];\n // locked reference is no longer needed (if any)\n this.lockedRefs = this.lockedRefs.filter(locked => locked !== removedItems[0]);\n }\n }\n\n /**\n * Make sure that it could be locked\n */\n private canItBeLocked(): boolean {\n return this._selectionType !== SelectionType.None;\n }\n\n private emitChange() {\n this._change.next(this.current);\n }\n\n private updateCurrentSelectionRefs() {\n this._currentSelectionRefs = this._current?.map(item => this._items.identifyBy(item)) || [];\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class RowActionService {\n private actionableCount = 0;\n\n /**\n * false means no rows with action\n */\n get hasActionableRow(): boolean {\n return this.actionableCount > 0;\n }\n\n register() {\n this.actionableCount++;\n }\n\n unregister() {\n this.actionableCount--;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\n\nimport { DetailService } from './detail.service';\n\n@Injectable()\nexport class ExpandableRowsCount {\n private expandableCount = 0;\n\n constructor(private detailService: DetailService) {}\n\n /**\n * false means no rows with action\n * check if details are on, and disable rows entirely\n */\n get hasExpandableRow(): boolean {\n return !this.detailService.enabled && this.expandableCount > 0;\n }\n\n register() {\n this.expandableCount++;\n }\n\n unregister() {\n this.expandableCount--;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\n\nimport { DatagridDisplayMode } from '../enums/display-mode.enum';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { DatagridRenderOrganizer } from '../render/render-organizer';\n\n@Injectable()\nexport class DisplayModeService implements OnDestroy {\n protected _view = new BehaviorSubject(DatagridDisplayMode.DISPLAY);\n\n private subscriptions: Subscription[] = [];\n\n constructor(renderOrganizer: DatagridRenderOrganizer) {\n this.subscriptions.push(\n renderOrganizer\n .filterRenderSteps(DatagridRenderStep.CALCULATE_MODE_ON)\n .subscribe(() => this._view.next(DatagridDisplayMode.CALCULATE))\n );\n\n this.subscriptions.push(\n renderOrganizer\n .filterRenderSteps(DatagridRenderStep.CALCULATE_MODE_OFF)\n .subscribe(() => this._view.next(DatagridDisplayMode.DISPLAY))\n );\n }\n\n get view(): Observable<DatagridDisplayMode> {\n return this._view.asObservable();\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, forwardRef, Input, Renderer2 } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Directive({\n selector: 'input[type=radio][clrDgSingleSelectionRadio]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ClrDatagridSingleSelectionValueAccessor),\n multi: true,\n },\n ],\n host: {\n '(change)': 'onChange(value)',\n '(blur)': 'onTouched()',\n },\n})\nexport class ClrDatagridSingleSelectionValueAccessor implements ControlValueAccessor {\n @Input() value;\n @Input() clrDgIdentityFn!: (value: any) => unknown;\n\n private state: any;\n\n constructor(\n private renderer: Renderer2,\n private elementRef: ElementRef<HTMLInputElement>\n ) {}\n\n onChange: (value: any) => void = () => {};\n\n onTouched: () => void = () => {};\n\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n\n writeValue(value: any): void {\n this.state = value;\n this.updateChecked();\n }\n\n private keyOf(value: any): unknown {\n if (value && this.clrDgIdentityFn) {\n return this.clrDgIdentityFn(value);\n }\n return value;\n }\n\n private updateChecked(): void {\n // Never mark the radio as checked when there is no real selection (state is null/undefined)\n // or the row item itself is a virtual-scroll placeholder slot (value is null/undefined).\n // Otherwise keyOf(undefined) === keyOf(undefined) would falsely check the radio.\n if (this.state === null || this.state === undefined || this.value === null || this.value === undefined) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', false);\n return;\n }\n const state = this.keyOf(this.state);\n const value = this.keyOf(this.value);\n this.renderer.setProperty(this.elementRef.nativeElement, 'checked', state === value);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, HostListener } from '@angular/core';\n\nimport { Selection } from './providers/selection';\n\n@Directive({\n selector: '.datagrid-select',\n standalone: false,\n})\nexport class ClrDatagridSelectionCellDirective {\n constructor(private readonly selection: Selection) {}\n\n @HostListener('click', ['$event'])\n private onSelectionCellClick(event: MouseEvent & { target: HTMLElement }) {\n // We want to effectively expand the selection click target to the entire selection cell.\n\n // If row selection is enabled, do nothing because the entire selection cell is already clickable.\n if (this.selection.rowSelectionMode) {\n return;\n }\n\n // If click was outside the label/input, forward the click to the input.\n if (event.target.tagName !== 'LABEL' && event.target.tagName !== 'INPUT') {\n event.target.querySelector('input')?.click();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChildren,\n DOCUMENT,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n Output,\n QueryList,\n Renderer2,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport {\n ClrCommonStringsService,\n ClrExpandableAnimationDirective,\n HostWrapper,\n IfExpandService,\n LoadingListener,\n} from '@clr/angular/utils';\nimport { combineLatest, ReplaySubject, Subscription } from 'rxjs';\n\nimport { ClrDatagridCell } from './datagrid-cell';\nimport { DatagridIfExpandService } from './datagrid-if-expanded.service';\nimport { DatagridDisplayMode } from './enums/display-mode.enum';\nimport { SelectionType } from './enums/selection-type';\nimport { ColumnsService } from './providers/columns.service';\nimport { DetailService } from './providers/detail.service';\nimport { DisplayModeService } from './providers/display-mode.service';\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\nimport { Items } from './providers/items';\nimport { RowActionService } from './providers/row-action-service';\nimport { Selection } from './providers/selection';\nimport { WrappedRow } from './wrapped-row';\n\nlet nbRow = 0;\n\n@Component({\n selector: 'clr-dg-row',\n templateUrl: './datagrid-row.html',\n host: {\n '[class.datagrid-row]': 'true',\n '[class.datagrid-row-skeleton]': 'skeletonLoading',\n '[class.datagrid-selected]': 'selected',\n '[attr.aria-owns]': 'id',\n role: 'rowgroup',\n },\n providers: [\n DatagridIfExpandService,\n { provide: IfExpandService, useExisting: DatagridIfExpandService },\n { provide: LoadingListener, useExisting: DatagridIfExpandService },\n ],\n standalone: false,\n})\nexport class ClrDatagridRow<T = any> implements AfterContentInit, AfterViewInit {\n @Output('clrDgSelectedChange') selectedChanged = new EventEmitter<boolean>(false);\n @Output('clrDgExpandedChange') expandedChange = new EventEmitter<boolean>(false);\n @Input('clrDgDetailDisabled') detailDisabled = false;\n @Input('clrDgDetailHidden') detailHidden = false;\n @Input('clrDgSkeletonLoading') skeletonLoading = false;\n\n id: string;\n radioId: string;\n checkboxId: string;\n expandableId: string;\n replaced: boolean;\n displayCells = false;\n expandAnimationTrigger = false;\n\n /* reference to the enum so that template can access */\n SELECTION_TYPE = SelectionType;\n\n /**\n * @internal\n */\n itemChanges = new ReplaySubject<T>(1);\n\n /*****\n * property dgCells\n *\n * @description\n * A Query List of the ClrDatagrid cells in this row.\n *\n */\n @ContentChildren(ClrDatagridCell) dgCells: QueryList<ClrDatagridCell>;\n\n @ViewChild(ClrExpandableAnimationDirective) expandAnimation: ClrExpandableAnimationDirective;\n @ViewChild('detailButton') detailButton: ElementRef<HTMLButtonElement>;\n @ViewChild('stickyCells', { read: ViewContainerRef }) _stickyCells: ViewContainerRef;\n @ViewChild('pinnedCells', { read: ViewContainerRef }) _pinnedCells: ViewContainerRef;\n @ViewChild('scrollableCells', { read: ViewContainerRef }) _scrollableCells: ViewContainerRef;\n @ViewChild('calculatedCells', { read: ViewContainerRef }) _calculatedCells: ViewContainerRef;\n @ViewChild('fixedCellTemplate') _fixedCellTemplate: TemplateRef<any>;\n\n private _item: T;\n private _selected = false;\n private _detailOpenLabel = '';\n private _detailCloseLabel = '';\n private _rowSelectionLabel = '';\n private wrappedInjector: Injector;\n private subscriptions: Subscription[] = [];\n\n /**\n * The placeholder cells we create from `fixedCellTemplate` for the calculate pass. Unlike the\n * cell views, which belong to their `WrappedCell`, these are created here on every pass, so\n * they are ours to destroy. Detaching them from the container only unlinks them - the views\n * themselves would stay alive and keep the whole row, and the datagrid with it, in memory.\n */\n private fixedCellViews: EmbeddedViewRef<void>[] = [];\n\n // By default, every item is selectable; it becomes not selectable only if it's explicitly set to false\n private _selectable: boolean | string = true;\n\n constructor(\n public selection: Selection<T>,\n public rowActionService: RowActionService,\n public globalExpandable: ExpandableRowsCount,\n public expand: DatagridIfExpandService,\n public detailService: DetailService,\n private displayMode: DisplayModeService,\n private vcr: ViewContainerRef,\n renderer: Renderer2,\n public el: ElementRef<HTMLElement>,\n public commonStrings: ClrCommonStringsService,\n private items: Items,\n private columnsService: ColumnsService,\n @Inject(DOCUMENT) private document: any\n ) {\n nbRow++;\n this.id = 'clr-dg-row' + nbRow;\n this.radioId = 'clr-dg-row-rd' + nbRow;\n this.checkboxId = 'clr-dg-row-cb' + nbRow;\n this.expandableId = expand.expandableId;\n\n this.subscriptions.push(\n combineLatest(expand.replace, expand.expandChange).subscribe(([expandReplaceValue, expandChangeValue]) => {\n if (expandReplaceValue && expandChangeValue) {\n // replaced and expanding\n this.replaced = true;\n renderer.addClass(el.nativeElement, 'datagrid-row-replaced');\n } else {\n this.replaced = false;\n // Handles these cases: not replaced and collapsing & replaced and\n // collapsing and not replaced and expanding.\n renderer.removeClass(el.nativeElement, 'datagrid-row-replaced');\n }\n })\n );\n }\n\n /**\n * Model of the row, to use for selection\n */\n @Input('clrDgItem')\n get item(): T {\n return this._item;\n }\n set item(item: T) {\n this._item = item;\n this.itemChanges.next(item);\n this.clrDgSelectable = this._selectable;\n }\n\n @Input('clrDgSelectable')\n get clrDgSelectable() {\n return !this.selection.isLocked(this.item);\n }\n set clrDgSelectable(value: boolean | string) {\n if (this.item) {\n this.selection.lockItem(this.item, value === 'false' || value === false);\n }\n // Store this value locally, to be initialized when item is initialized\n this._selectable = value;\n }\n\n /**\n * Indicates if the row is selected\n */\n @Input('clrDgSelected')\n get selected() {\n if (this.selection.selectionType === SelectionType.None) {\n return this._selected;\n } else {\n return this.selection.isSelected(this.item);\n }\n }\n set selected(value: boolean | string) {\n if (this.selection.selectionType === SelectionType.None) {\n this._selected = value as boolean;\n } else {\n if (value && this.selection.selectionType === SelectionType.Multi) {\n this.rangeSelect();\n } else {\n this.selection.rangeStart = null;\n }\n this.selection.setSelected(this.item, value as boolean);\n }\n }\n\n @Input('clrDgExpanded')\n get expanded() {\n return this.expand.expanded;\n }\n set expanded(value: boolean | string) {\n this.expand.expanded = value as boolean;\n }\n\n @Input()\n get clrDgDetailOpenLabel(): string {\n return this._detailOpenLabel ? this._detailOpenLabel : this.commonStrings.keys.open;\n }\n set clrDgDetailOpenLabel(label: string) {\n this._detailOpenLabel = label;\n }\n\n @Input()\n get clrDgDetailCloseLabel(): string {\n return this._detailCloseLabel ? this._detailCloseLabel : this.commonStrings.keys.close;\n }\n set clrDgDetailCloseLabel(label: string) {\n this._detailCloseLabel = label;\n }\n\n // CDE-151: Rename this field to clrDgRowSelectionLabel in v16\n @Input()\n get clrDgRowSelectionLabel(): string {\n return this._rowSelectionLabel ? this._rowSelectionLabel : this.commonStrings.keys.select;\n }\n set clrDgRowSelectionLabel(label: string) {\n this._rowSelectionLabel = label;\n }\n\n get _view() {\n return this.wrappedInjector.get(WrappedRow, this.vcr).rowView;\n }\n\n get identifyBy() {\n return this.items.identifyBy;\n }\n\n openDetails(event: MouseEvent, detailButton: HTMLButtonElement) {\n event.stopPropagation();\n\n this.detailService.toggle(this.item, detailButton);\n }\n\n ngOnInit() {\n this.wrappedInjector = new HostWrapper(WrappedRow, this.vcr);\n this.selection.lockItem(this.item, this.clrDgSelectable === false);\n }\n\n ngAfterContentInit() {\n this.dgCells.changes.subscribe(() => {\n this.insertCellViews();\n });\n }\n\n ngAfterViewInit() {\n this.subscriptions.push(\n this.displayMode.view.subscribe(viewChange => {\n // Listen for view changes and move cells around depending on the current displayType\n // remove cell views from display view\n for (let i = this._scrollableCells.length; i > 0; i--) {\n this._scrollableCells.detach();\n }\n // remove cell views of pinned columns from their static container\n for (let i = this._pinnedCells.length; i > 0; i--) {\n this._pinnedCells.detach();\n }\n // remove cell views from calculated view\n this.destroyFixedCellViews();\n for (let i = this._calculatedCells.length; i > 0; i--) {\n this._calculatedCells.detach();\n }\n if (viewChange === DatagridDisplayMode.CALCULATE) {\n this.displayCells = false;\n // Inserts a fixed cell if any of these conditions are true.\n const fixedCellConditions = [\n this.selection.selectionType !== this.SELECTION_TYPE.None,\n this.rowActionService.hasActionableRow,\n this.globalExpandable.hasExpandableRow,\n this.detailService.enabled,\n ];\n fixedCellConditions.filter(Boolean).forEach(() => {\n const fixedCellView = this._fixedCellTemplate.createEmbeddedView(null);\n this.fixedCellViews.push(fixedCellView);\n this._calculatedCells.insert(fixedCellView);\n });\n this.dgCells.forEach(cell => {\n if (!cell._view.destroyed) {\n this._calculatedCells.insert(cell._view);\n }\n });\n } else {\n this.displayCells = true;\n this.insertCellViews();\n }\n }),\n this.expand.animate.subscribe(() => {\n this.expandAnimationTrigger = !this.expandAnimationTrigger;\n })\n );\n }\n\n ngOnDestroy() {\n this.destroyFixedCellViews();\n this.subscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n }\n\n toggle(selected = !this.selected) {\n if (selected !== this.selected) {\n this.selected = selected;\n this.selectedChanged.emit(selected);\n }\n }\n\n toggleExpand(event: MouseEvent) {\n event.stopPropagation();\n\n if (this.expand.expandable) {\n this.expandAnimation.updateStartHeight();\n this.expanded = !this.expanded;\n this.expandedChange.emit(this.expanded);\n }\n }\n\n /**\n * The default behavior in Chrome and Firefox for shift-clicking on a label is to perform text-selection.\n * This prevents our intended range-selection, because this text-selection overrides our shift-click event.\n * We need to clear the stored selection range when shift-clicking. This will override the mostly unused shift-click\n * selection browser functionality, which is inconsistently implemented in browsers anyway.\n */\n clearRanges(event: MouseEvent) {\n if (this.selection.rowSelectionMode && event.shiftKey) {\n this.document.getSelection().removeAllRanges();\n // Firefox is too persistent about its text-selection behaviour. So we need to add a preventDefault();\n // We should not try to enforce this on the other browsers, though, because their toggle cycle does not get canceled by\n // the preventDefault() and they toggle the checkbox second time, effectively retrurning it to not-selected.\n if (window.navigator.userAgent.indexOf('Firefox') !== -1) {\n event.preventDefault();\n this.toggle(true);\n }\n }\n }\n\n /**\n * @deprecated related to clrDgRowSelection, which is deprecated\n */\n protected selectRow(selected = !this.selected, $event) {\n // The label also captures clicks that bubble up to the row event listener, causing\n // this handler to run twice. This exits early to prevent toggling the checkbox twice.\n if (!this.selection.rowSelectionMode || $event.target.tagName === 'LABEL' || !this._selectable) {\n return;\n }\n if (this.selection.selectionType === this.SELECTION_TYPE.Single) {\n this.selection.current = [this.item];\n } else {\n this.toggle(selected);\n }\n }\n\n private destroyFixedCellViews() {\n // On teardown Angular has already destroyed the views in our container by the time it runs our\n // `ngOnDestroy`, so only the calculate/display transition has live ones to release here.\n this.fixedCellViews.forEach(view => {\n if (!view.destroyed) {\n view.destroy();\n }\n });\n this.fixedCellViews = [];\n }\n\n /**\n * Projects the cells into the display containers. Cells of pinned columns go into their static\n * container so they stay visible during horizontal scroll; the rest stay scrollable. Cells are\n * matched with their column by declaration index, and iterating in that order keeps both groups\n * aligned with the header.\n */\n private insertCellViews() {\n this.dgCells.forEach((cell, index) => {\n if (cell._view.destroyed) {\n return;\n }\n\n const container = this.columnsService.isPinned(index) ? this._pinnedCells : this._scrollableCells;\n container.insert(cell._view);\n });\n }\n\n private rangeSelect() {\n const items = this.items.displayed;\n if (!items) {\n return;\n }\n const startIx = items.indexOf(this.selection.rangeStart);\n if (\n this.selection.rangeStart &&\n this.selection.current.includes(this.selection.rangeStart) &&\n this.selection.shiftPressed &&\n startIx !== -1\n ) {\n const endIx = items.indexOf(this.item);\n // Using Set to remove duplicates\n const newSelection = new Set(\n this.selection.current.concat(items.slice(Math.min(startIx, endIx), Math.max(startIx, endIx) + 1))\n );\n this.selection.current = [...newSelection];\n } else {\n // page number has changed or\n // no Shift was pressed or\n // rangeStart not yet set\n this.selection.rangeStart = this.item;\n }\n }\n}\n","<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n<div\n role=\"row\"\n [id]=\"id\"\n class=\"datagrid-row-master datagrid-row-flex\"\n (mousedown)=\"clearRanges($event)\"\n (click)=\"selectRow(!selected, $event)\"\n [class.datagrid-row-clickable]=\"selection.rowSelectionMode\"\n [class.datagrid-row-detail-open]=\"detailService.isRowOpen(item)\"\n>\n <div class=\"datagrid-row-sticky\">\n <!-- Sticky elements here -->\n <ng-container #stickyCells>\n @if (selection.selectionType === SELECTION_TYPE.Multi) {\n <div\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <div class=\"clr-checkbox-wrapper\">\n <input\n tabindex=\"-1\"\n type=\"checkbox\"\n [ngModel]=\"selected\"\n (ngModelChange)=\"toggle($event)\"\n [id]=\"checkboxId\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"checkboxId\" class=\"clr-control-label clr-col-null\" (click)=\"clearRanges($event)\">\n <span class=\"clr-sr-only\">{{clrDgRowSelectionLabel || commonStrings.keys.select}}</span>\n </label>\n </div>\n </div>\n } @if (selection.selectionType === SELECTION_TYPE.Single) {\n <div\n class=\"datagrid-select datagrid-fixed-column datagrid-cell\"\n [ngClass]=\"{ 'clr-form-control-disabled': !clrDgSelectable }\"\n role=\"gridcell\"\n >\n <clr-radio-wrapper>\n <input\n tabindex=\"-1\"\n type=\"radio\"\n clrRadio\n clrDgSingleSelectionRadio\n [clrDgIdentityFn]=\"identifyBy\"\n [id]=\"radioId\"\n [name]=\"selection.id + '-radio'\"\n [value]=\"item\"\n [ngModel]=\"selection.currentSingle\"\n (ngModelChange)=\"selection.current = [$event]\"\n [disabled]=\"clrDgSelectable ? null : true\"\n [attr.aria-disabled]=\"clrDgSelectable ? null : true\"\n />\n <label class=\"clr-control-label clr-col-null\" [for]=\"radioId\">\n <span class=\"clr-sr-only\">{{ clrDgRowSelectionLabel || commonStrings.keys.select }}</span>\n </label>\n </clr-radio-wrapper>\n </div>\n } @if (rowActionService.hasActionableRow) {\n <div class=\"datagrid-row-actions datagrid-fixed-column datagrid-cell\" role=\"gridcell\">\n <ng-content select=\"clr-dg-action-overflow\"></ng-content>\n </div>\n } @if (globalExpandable.hasExpandableRow) {\n <div class=\"datagrid-expandable-caret datagrid-fixed-column datagrid-cell\" role=\"gridcell\">\n @if (expand.expandable) { @if (!expand.loading) {\n <button\n tabindex=\"-1\"\n (click)=\"toggleExpand($event)\"\n type=\"button\"\n class=\"datagrid-expandable-caret-button\"\n [attr.aria-expanded]=\"expand.expanded\"\n [attr.aria-label]=\"expand.expanded ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-controls]=\"expand.hasExpandTemplate && !expand.expanded ? null : expandableId\"\n >\n <cds-icon\n shape=\"angle\"\n class=\"datagrid-expandable-caret-icon\"\n [direction]=\"expand.expanded ? 'down' : 'right'\"\n [attr.title]=\"expand.expanded ? commonStrings.keys.collapse : commonStrings.keys.expand\"\n ></cds-icon>\n </button>\n } @if (expand.loading) {\n <clr-spinner clrSmall>{{ commonStrings.keys.loading }}</clr-spinner>\n } }\n </div>\n } @if (detailService.enabled) {\n <div class=\"datagrid-detail-caret datagrid-fixed-column datagrid-cell\" role=\"gridcell\">\n @if (!detailHidden) {\n <button\n tabindex=\"-1\"\n (click)=\"openDetails($event, detailButton)\"\n type=\"button\"\n #detailButton\n class=\"datagrid-detail-caret-button\"\n [disabled]=\"detailDisabled\"\n [class.is-open]=\"detailService.isRowOpen(item)\"\n [attr.aria-label]=\"detailService.isRowOpen(item) ? clrDgDetailCloseLabel : clrDgDetailOpenLabel\"\n [attr.aria-expanded]=\"detailService.isRowOpen(item)\"\n [attr.aria-controls]=\"detailService.id\"\n aria-haspopup=\"dialog\"\n >\n <cds-icon\n shape=\"angle-double\"\n [direction]=\"detailService.isRowOpen(item) ? 'left' : 'right'\"\n class=\"datagrid-detail-caret-icon\"\n [attr.title]=\"detailService.isRowOpen(item) ? commonStrings.keys.close: commonStrings.keys.open\"\n ></cds-icon>\n </button>\n }\n </div>\n }\n </ng-container>\n </div>\n <div\n class=\"datagrid-row-scrollable\"\n [ngClass]=\"{'is-replaced': replaced && expanded}\"\n [clrExpandableAnimation]=\"expandAnimationTrigger\"\n >\n <div class=\"datagrid-scrolling-cells\">\n <div class=\"datagrid-pinned-cells\">\n <ng-container #pinnedCells></ng-container>\n </div>\n <ng-content select=\"clr-dg-cell\"></ng-content>\n <ng-container #scrollableCells></ng-container>\n </div>\n\n @if (!expand.loading) {\n <ng-template [ngTemplateOutlet]=\"detail\"></ng-template>\n }\n </div>\n</div>\n<!--\nWe need the \"project into template\" hacks because we need this in 2 different places\ndepending on whether the details replace the row or not.\n-->\n<ng-template #detail>\n <ng-content select=\"clr-dg-row-detail\"></ng-content>\n</ng-template>\n\n<ng-container #calculatedCells></ng-container>\n\n<ng-template #fixedCellTemplate>\n <div class=\"datagrid-fixed-column datagrid-cell\" role=\"gridcell\"></div>\n</ng-template>\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directionality } from '@angular/cdk/bidi';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ListRange } from '@angular/cdk/collections';\nimport {\n CDK_VIRTUAL_SCROLL_VIEWPORT,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualForOfContext,\n CdkVirtualScrollable,\n CdkVirtualScrollableElement,\n CdkVirtualScrollViewport,\n FixedSizeVirtualScrollStrategy,\n ScrollDispatcher,\n ViewportRuler,\n VIRTUAL_SCROLL_STRATEGY,\n VirtualScrollStrategy,\n} from '@angular/cdk/scrolling';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n createEnvironmentInjector,\n Directive,\n DoCheck,\n ElementRef,\n EmbeddedViewRef,\n EnvironmentInjector,\n EventEmitter,\n forwardRef,\n Inject,\n inject,\n Input,\n IterableDiffers,\n NgZone,\n OnDestroy,\n Output,\n Renderer2,\n runInInjectionContext,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagrid } from './datagrid';\nimport { ClrDatagridVirtualScrollRangeInterface } from './interfaces/virtual-scroll-data-range.interface';\nimport { Items } from './providers/items';\n\ntype CdkVirtualForInputKey =\n 'cdkVirtualForOf' | 'cdkVirtualForTrackBy' | 'cdkVirtualForTemplate' | 'cdkVirtualForTemplateCacheSize';\n\ntype CdkVirtualForInputs<T> = Partial<Pick<CdkVirtualForOf<T>, CdkVirtualForInputKey>>;\n\ntype CdkFixedSizeVirtualScrollInputs = Pick<CdkFixedSizeVirtualScroll, 'itemSize' | 'minBufferPx' | 'maxBufferPx'>;\n\n@Directive({\n selector: '[clrVirtualScroll],[ClrVirtualScroll]',\n providers: [Items],\n standalone: false,\n})\nexport class ClrDatagridVirtualScrollDirective<T> implements AfterViewInit, DoCheck, OnDestroy {\n @Output() renderedRangeChange = new EventEmitter<ListRange>();\n @Input('clrVirtualPersistItems') persistItems = true;\n\n private _isUserProvidedItemSize = false;\n private _itemSize = 33;\n private _minBufferPx = 200;\n private _maxBufferPx = 400;\n\n private shouldUpdateAriaRowIndexes = false;\n\n private readonly datagridElementRef: ElementRef<HTMLElement>;\n\n private gridRoleElement: HTMLElement | null | undefined;\n private readonly virtualScrollStrategy: FixedSizeVirtualScrollStrategy;\n private virtualScrollViewport: CdkVirtualScrollViewport;\n private cdkVirtualFor: CdkVirtualForOf<T>;\n private subscriptions: Subscription[] = [];\n private topIndex = 0;\n\n /**\n * Injectors for the CDK virtual scroll instances we create by hand, in the order they have to be\n * destroyed. Destroying them is what runs the CDK teardown: their `ngOnDestroy` and, importantly,\n * the `DestroyRef` cleanup `CdkVirtualScrollViewport` registers for the effect it creates on the\n * application injector. Leaving them alive keeps that effect registered, which retains the\n * viewport and the entire datagrid view tree for as long as the application lives.\n */\n private readonly cdkInjectors: EnvironmentInjector[] = [];\n\n // @deprecated remove the mutation observer when `datagrid-compact` class is deleted\n private mutationChanges: MutationObserver = new MutationObserver((mutations: MutationRecord[]) => {\n mutations.forEach((mutation: MutationRecord) => {\n // it is possible this to be called twice because the old class is removed and the new added\n if (\n !this._isUserProvidedItemSize &&\n (mutation.target as HTMLElement).classList.contains('datagrid-compact') &&\n this.itemSize > 25\n ) {\n this.updateItemSize(25);\n }\n });\n });\n\n private cdkVirtualForInputs: CdkVirtualForInputs<T> = {\n cdkVirtualForTrackBy: index => index,\n };\n private _totalItems: number;\n\n constructor(\n private readonly changeDetectorRef: ChangeDetectorRef,\n private iterableDiffers: IterableDiffers,\n private items: Items<T>,\n private readonly ngZone: NgZone,\n private readonly renderer2: Renderer2,\n private readonly templateRef: TemplateRef<CdkVirtualForOfContext<T>>,\n private readonly viewContainerRef: ViewContainerRef,\n private readonly directionality: Directionality,\n private readonly scrollDispatcher: ScrollDispatcher,\n private readonly viewportRuler: ViewportRuler,\n @Inject(forwardRef(() => ClrDatagrid)) private readonly datagrid: ClrDatagrid,\n private readonly injector: EnvironmentInjector\n ) {\n items.smartenUp();\n datagrid.detailService.preventFocusScroll = true;\n\n this.datagridElementRef = datagrid.el;\n\n // default\n this.cdkVirtualForTemplateCacheSize = 20;\n\n const cellHeightToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-cell-height');\n const cellHeightValue = +/calc\\(([0-9]+) \\* calc\\(\\(1rem \\/ 20\\) \\* 1\\)\\)/.exec(cellHeightToken)?.[1];\n\n const borderWidthToken = window.getComputedStyle(document.body).getPropertyValue('--clr-table-borderwidth');\n const borderWidthValue = +/calc\\(([0-9]+) \\* \\(1rem \\/ 20\\)\\)/.exec(borderWidthToken)?.[1];\n\n // initially rowHeightValue is calculated based on `--clr-table-row-height` that had a discreet value.\n // currently `--clr-table-row-height` is calculated based on `--clr-table-cell-height` + `--clr-table-borderwidth`\n const rowHeightValue = cellHeightValue + borderWidthValue;\n\n if (rowHeightValue && this.itemSize > rowHeightValue) {\n this.updateItemSize(rowHeightValue);\n }\n\n this.mutationChanges.observe(this.datagridElementRef.nativeElement, {\n attributeFilter: ['class'],\n attributeOldValue: true,\n });\n\n this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n\n get totalContentHeight() {\n return this.virtualScrollViewport?._totalContentHeight() || '';\n }\n\n @Input('clrVirtualRowsOf')\n get cdkVirtualForOf() {\n return this.cdkVirtualForInputs.cdkVirtualForOf;\n }\n set cdkVirtualForOf(value: CdkVirtualForInputs<T>['cdkVirtualForOf']) {\n this.cdkVirtualForInputs.cdkVirtualForOf = value;\n this.items.all = value as T[];\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsTrackBy')\n get cdkVirtualForTrackBy() {\n return this.cdkVirtualForInputs.cdkVirtualForTrackBy;\n }\n set cdkVirtualForTrackBy(value: CdkVirtualForInputs<T>['cdkVirtualForTrackBy']) {\n this.cdkVirtualForInputs.cdkVirtualForTrackBy = value;\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsTemplate')\n get cdkVirtualForTemplate() {\n return this?.cdkVirtualForInputs?.cdkVirtualForTemplate;\n }\n set cdkVirtualForTemplate(value: CdkVirtualForInputs<T>['cdkVirtualForTemplate']) {\n this.cdkVirtualForInputs.cdkVirtualForTemplate = value;\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsTemplateCacheSize')\n get cdkVirtualForTemplateCacheSize() {\n return this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize;\n }\n set cdkVirtualForTemplateCacheSize(value: CdkVirtualForInputs<T>['cdkVirtualForTemplateCacheSize']) {\n this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize = coerceNumberProperty(value);\n this.updateCdkVirtualForInputs();\n }\n\n @Input('clrVirtualRowsItemSize')\n get itemSize() {\n return this._itemSize;\n }\n set itemSize(value: CdkFixedSizeVirtualScrollInputs['itemSize']) {\n this._isUserProvidedItemSize = true;\n this.updateItemSize(value);\n }\n\n @Input('clrVirtualRowsMinBufferPx')\n get minBufferPx() {\n return this._minBufferPx;\n }\n set minBufferPx(value: CdkFixedSizeVirtualScrollInputs['minBufferPx']) {\n this._minBufferPx = coerceNumberProperty(value);\n this.updateFixedSizeVirtualScrollInputs();\n }\n\n @Input('clrVirtualRowsMaxBufferPx')\n get maxBufferPx() {\n return this._maxBufferPx;\n }\n set maxBufferPx(value: CdkFixedSizeVirtualScrollInputs['maxBufferPx']) {\n this._maxBufferPx = coerceNumberProperty(value);\n this.updateFixedSizeVirtualScrollInputs();\n }\n\n @Input('clrVirtualDataRange')\n set dataRange(range: ClrDatagridVirtualScrollRangeInterface<T>) {\n if (!range) {\n return;\n }\n\n if (this.items.smart) {\n this.items.smartenDown();\n }\n\n this.totalItems = range.total;\n\n this.updateDataRange(range.skip, range.data);\n }\n\n get totalItems() {\n return this._totalItems;\n }\n\n private set totalItems(value: number) {\n this._totalItems = value;\n }\n\n ngAfterViewInit() {\n runInInjectionContext(this.injector, () => {\n this.virtualScrollViewport = this.createVirtualScrollViewportForDatagrid(\n this.changeDetectorRef,\n this.ngZone,\n this.renderer2,\n this.directionality,\n this.scrollDispatcher,\n this.viewportRuler,\n this.datagridElementRef,\n this.virtualScrollStrategy\n );\n\n this.cdkVirtualFor = this.createCdkVirtualForOfDirective(\n this.viewContainerRef,\n this.templateRef,\n this.iterableDiffers,\n this.virtualScrollViewport,\n this.ngZone\n );\n\n this.virtualScrollViewport.ngOnInit();\n });\n\n this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector<HTMLElement>('[role=\"grid\"]');\n\n this.updateCdkVirtualForInputs();\n\n this.subscriptions.push(\n this.items.change.subscribe(newItems => {\n if (this.items.smart) {\n this.cdkVirtualFor.cdkVirtualForOf = newItems;\n }\n this.shouldUpdateAriaRowIndexes = true;\n }),\n this.cdkVirtualFor.dataStream.subscribe(data => {\n this.updateAriaRowCount(data.length);\n }),\n this.virtualScrollViewport.scrolledIndexChange.subscribe(index => {\n this.topIndex = index;\n }),\n this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {\n this.renderedRangeChange.emit(renderedRange);\n this.shouldUpdateAriaRowIndexes = true;\n }),\n this.datagrid.refresh.subscribe(datagridState => {\n if (datagridState.filters) {\n this.scrollToIndex(0);\n }\n })\n );\n }\n\n ngDoCheck() {\n this.cdkVirtualFor?.ngDoCheck();\n if (this.shouldUpdateAriaRowIndexes) {\n this.updateAriaRowIndexes();\n\n this.shouldUpdateAriaRowIndexes = false;\n }\n }\n\n ngOnDestroy() {\n // Ours first: CDK teardown emits on the streams we subscribe to, and third-party teardown that\n // throws must not be able to leave our own observer and subscriptions behind.\n this.mutationChanges?.disconnect();\n this.subscriptions.forEach(subscription => {\n subscription.unsubscribe();\n });\n\n try {\n // Destroying the injectors calls `ngOnDestroy` on the CDK instances they created and runs the\n // `DestroyRef` cleanup CDK registered for them, so we must not call those hooks ourselves.\n this.cdkInjectors.forEach(injector => injector.destroy());\n } finally {\n // An injector cannot be destroyed twice, so drop them even if one of them threw.\n this.cdkInjectors.length = 0;\n }\n }\n\n scrollUp(offset: number, behavior: ScrollBehavior = 'auto') {\n this.scrollToIndex(this.topIndex - offset, behavior);\n }\n\n scrollDown(offset: number, behavior: ScrollBehavior = 'auto') {\n this.scrollToIndex(this.topIndex + offset, behavior);\n }\n\n scrollToIndex(index: number, behavior: ScrollBehavior = 'auto') {\n this.virtualScrollViewport?.scrollToIndex(index, behavior);\n }\n\n private updateDataRange(skip: number, data: T[]) {\n let items = this.cdkVirtualForOf as T[];\n\n if (!this.persistItems || !items || items?.length !== this.totalItems) {\n items = Array(this.totalItems);\n }\n\n items.splice(skip, data.length, ...data);\n\n this.cdkVirtualForOf = Array.from(items);\n }\n\n private updateItemSize(value: CdkFixedSizeVirtualScrollInputs['itemSize']) {\n this._itemSize = coerceNumberProperty(value);\n this.updateFixedSizeVirtualScrollInputs();\n }\n\n private updateCdkVirtualForInputs() {\n if (this.cdkVirtualFor) {\n for (const cdkVirtualForInputKey of Object.keys(this.cdkVirtualForInputs) as CdkVirtualForInputKey[]) {\n if (this.cdkVirtualFor[cdkVirtualForInputKey] !== this.cdkVirtualForInputs[cdkVirtualForInputKey]) {\n (this.cdkVirtualFor as any)[cdkVirtualForInputKey] = this.cdkVirtualForInputs[cdkVirtualForInputKey];\n }\n }\n }\n }\n\n private updateFixedSizeVirtualScrollInputs() {\n if (this.virtualScrollStrategy) {\n this.virtualScrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);\n }\n }\n\n private updateAriaRowCount(rowCount: number) {\n this.gridRoleElement?.setAttribute('aria-rowcount', rowCount.toString());\n }\n\n private updateAriaRowIndexes() {\n for (let i = 0; i < this.viewContainerRef.length; i++) {\n const viewRef = this.viewContainerRef.get(i) as EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n\n const rootElements: HTMLElement[] = viewRef.rootNodes;\n const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');\n const rowRoleElement = datagridRowElement?.querySelector('[role=\"row\"]');\n\n const newAriaRowIndex = (viewRef.context.index + 1).toString();\n if (rowRoleElement?.getAttribute('aria-rowindex') !== newAriaRowIndex) {\n // aria-rowindex should start with one, not zero, so we have to add one to the zero-based index\n rowRoleElement?.setAttribute('aria-rowindex', newAriaRowIndex);\n }\n }\n }\n\n private createVirtualScrollViewportForDatagrid(\n changeDetectorRef: ChangeDetectorRef,\n ngZone: NgZone,\n renderer2: Renderer2,\n directionality: Directionality,\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler,\n datagridElementRef: ElementRef<HTMLElement>,\n virtualScrollStrategy: FixedSizeVirtualScrollStrategy\n ) {\n const datagridContentElement = datagridElementRef.nativeElement.querySelector<HTMLElement>('.datagrid-content');\n const datagridRowsElement = datagridElementRef.nativeElement.querySelector<HTMLElement>('.datagrid-rows');\n\n return this.createCdkVirtualScrollViewport(\n new ElementRef(datagridContentElement),\n new ElementRef(datagridRowsElement),\n changeDetectorRef,\n ngZone,\n renderer2,\n virtualScrollStrategy,\n directionality,\n scrollDispatcher,\n viewportRuler,\n null as any as CdkVirtualScrollableElement\n );\n }\n\n private createCdkVirtualScrollViewport(\n datagridDivElementRef: ElementRef<HTMLElement>,\n contentWrapper: ElementRef<HTMLElement>,\n changeDetectorRef: ChangeDetectorRef,\n ngZone: NgZone,\n renderer2: Renderer2,\n virtualScrollStrategy: VirtualScrollStrategy,\n directionality: Directionality,\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler,\n scrollable: CdkVirtualScrollable\n ) {\n const injector = createEnvironmentInjector(\n [\n { provide: ElementRef, useValue: datagridDivElementRef },\n { provide: ChangeDetectorRef, useValue: changeDetectorRef },\n { provide: NgZone, useValue: ngZone },\n { provide: Renderer2, useValue: renderer2 },\n { provide: VIRTUAL_SCROLL_STRATEGY, useValue: virtualScrollStrategy },\n { provide: CdkVirtualScrollable, useValue: scrollable },\n { provide: CdkVirtualScrollViewport, useClass: CdkVirtualScrollViewport },\n ],\n this.createApplicationInjector(directionality, scrollDispatcher, viewportRuler)\n );\n\n const virtualScrollViewport = injector.get(CdkVirtualScrollViewport);\n virtualScrollViewport._contentWrapper = contentWrapper;\n\n // Registered before the caller creates anything else, so a half-finished init still tears down\n // what it did manage to create.\n this.cdkInjectors.push(injector);\n\n return virtualScrollViewport;\n }\n\n /**\n * `Directionality`, `ScrollDispatcher` and `ViewportRuler` belong to the application, not to us.\n * Angular registers every value an injector hands out that has an `ngOnDestroy` - `useValue`\n * providers included - and calls it from `injector.destroy()`, so putting them in an injector we\n * destroy would end scroll, resize and text-direction notification for the whole application the\n * first time a virtual scroll datagrid goes away. They live in this parent, which nothing destroys,\n * so the viewport still resolves the very instances our host injector gave us - including a\n * `Directionality` overridden by an ancestor `[dir]`.\n */\n private createApplicationInjector(\n directionality: Directionality,\n scrollDispatcher: ScrollDispatcher,\n viewportRuler: ViewportRuler\n ) {\n return createEnvironmentInjector(\n [\n { provide: Directionality, useValue: directionality },\n { provide: ScrollDispatcher, useValue: scrollDispatcher },\n { provide: ViewportRuler, useValue: viewportRuler },\n ],\n inject(EnvironmentInjector)\n );\n }\n\n private createCdkVirtualForOfDirective<T>(\n viewContainerRef: ViewContainerRef,\n templateRef: TemplateRef<CdkVirtualForOfContext<T>>,\n iterableDiffers: IterableDiffers,\n virtualScrollViewport: CdkVirtualScrollViewport,\n ngZone: NgZone\n ) {\n // `CdkVirtualForOf` resolves the viewport with `skipSelf`, so it has to come from a parent\n // injector rather than the one that provides `CdkVirtualForOf` itself. That parent holds nothing\n // but the value provider, and destroying it would run the viewport's `ngOnDestroy` a second time\n // on top of the one its own injector already runs, so it is left to be garbage collected.\n const virtualScrollViewportInjector = createEnvironmentInjector(\n [{ provide: CDK_VIRTUAL_SCROLL_VIEWPORT, useValue: virtualScrollViewport }],\n inject(EnvironmentInjector)\n );\n\n const cdkVirtualForInjector = createEnvironmentInjector(\n [\n { provide: ViewContainerRef, useValue: viewContainerRef },\n { provide: TemplateRef, useValue: templateRef },\n { provide: IterableDiffers, useValue: iterableDiffers },\n { provide: NgZone, useValue: ngZone },\n { provide: CdkVirtualForOf, useClass: CdkVirtualForOf },\n ],\n virtualScrollViewportInjector\n );\n\n // `CdkVirtualForOf` reads from the viewport, so it has to go away first.\n this.cdkInjectors.unshift(cdkVirtualForInjector);\n\n return cdkVirtualForInjector.get<CdkVirtualForOf<T>>(CdkVirtualForOf);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { FiltersProvider } from './filters';\nimport { Page } from './page';\nimport { Sort } from './sort';\nimport { StateDebouncer } from './state-debouncer.provider';\nimport { DatagridPropertyComparator } from '../built-in/comparators/datagrid-property-comparator';\nimport { ClrDatagridStateInterface } from '../interfaces/state.interface';\n\n/**\n * This provider aggregates state changes from the various providers of the Datagrid\n */\n@Injectable()\nexport class StateProvider<T> {\n /**\n * The Observable that lets other classes subscribe to global state changes\n */\n change: Observable<ClrDatagridStateInterface<T>> = this.debouncer.change.pipe(map(() => this.state));\n\n constructor(\n private filters: FiltersProvider<T>,\n private sort: Sort<T>,\n private page: Page,\n private debouncer: StateDebouncer\n ) {}\n\n /*\n * By making this a getter, we open the possibility for a setter in the future.\n * It's been requested a couple times.\n */\n get state(): ClrDatagridStateInterface<T> {\n const state: ClrDatagridStateInterface<T> = {};\n if (this.page.size > 0) {\n state.page = {\n from: this.page.firstItem,\n to: this.page.lastItem,\n size: this.page.size,\n current: this.page.current,\n };\n }\n if (this.sort.comparator) {\n if (this.sort.comparator instanceof DatagridPropertyComparator) {\n /*\n * Special case for the default object property comparator,\n * we give the property name instead of the actual comparator.\n */\n state.sort = { by: (this.sort.comparator as DatagridPropertyComparator<T>).prop, reverse: this.sort.reverse };\n } else {\n state.sort = { by: this.sort.comparator, reverse: this.sort.reverse };\n }\n }\n\n const activeFilters = this.filters.getActiveFilters();\n if (activeFilters.length > 0) {\n state.filters = [];\n for (const filter of activeFilters) {\n if (filter.state) {\n state.filters.push(filter.state);\n } else {\n state.filters.push(filter);\n }\n }\n }\n return state;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, OnDestroy, Renderer2 } from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { HIDDEN_COLUMN_CLASS, PINNED_COLUMN_CLASS, STRICT_WIDTH_CLASS } from './constants';\nimport { DatagridRenderOrganizer } from './render-organizer';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { ColumnState } from '../interfaces/column-state.interface';\n\n@Directive({\n selector: 'clr-dg-cell',\n standalone: false,\n})\nexport class DatagridCellRenderer implements OnDestroy {\n private stateSubscription: Subscription;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n organizer: DatagridRenderOrganizer\n ) {\n this.subscriptions.push(\n organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth())\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n if (this.stateSubscription) {\n this.stateSubscription.unsubscribe();\n }\n }\n\n resetState(state: ColumnState) {\n this.setWidth(state);\n this.setHidden(state);\n this.setPinned(state);\n }\n\n setWidth(state: ColumnState) {\n if (state.strictWidth) {\n this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n }\n this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');\n }\n\n setHidden(state: ColumnState) {\n if (state.hidden) {\n this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n }\n }\n\n setPinned(state: ColumnState) {\n if (state.pinned) {\n this.renderer.addClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n }\n }\n\n private clearWidth() {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n this.renderer.setStyle(this.el.nativeElement, 'width', null);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n afterNextRender,\n ContentChildren,\n Directive,\n ElementRef,\n OnDestroy,\n QueryList,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { DatagridCellRenderer } from './cell-renderer';\nimport { DatagridRowDetailRenderer } from './row-detail-renderer';\nimport { ColumnsService } from '../providers/columns.service';\n\n@Directive({\n selector: 'clr-dg-row',\n standalone: false,\n})\nexport class DatagridRowRenderer implements AfterContentInit, OnDestroy {\n @ContentChildren(DatagridCellRenderer) cells: QueryList<DatagridCellRenderer>;\n expandableRows: DatagridRowDetailRenderer[] = [];\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private columnsService: ColumnsService,\n private el: ElementRef<HTMLElement>\n ) {\n afterNextRender(() => this.addDetachedRowsColumnStateChangesListener());\n }\n\n ngAfterContentInit() {\n this.setCellsState(); // case #3 and #4\n this.subscriptions.push(\n this.cells.changes.subscribe(() => {\n this.setCellsState(); // case #2\n // Note on case #2: In the case of dynamic columns, when one column (header/cell together) gets deleted,\n // this.cells.changes emits before this.columnsService.columns gets updated in MainRenderer\n // when this.headers.changes emits as well. So that means there will be n+1 column state providers\n // when this.cells.changes emits. Hence, we should quit earlier there. But this method will be called\n // right after again when this.headers.changes emits. By then, there will be the same number of column state\n // providers as column headers.\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n setCellsState() {\n // This method runs in four cases:\n // 1. When the initial rows appear on the first page.\n // In this case, the method will be called in DatagridMainRenderer.\n // 2. When columns (corresponding header/cells) get added and deleted.\n // In this case, the method will be called in DatagridMainRenderer. (Read the note on this case above).\n // 3. When rows load asynchronously.\n // In this case, the method will be called in this class.\n // 4. When rows load after switching pages.\n // In this case, the method will be called in this class (Basically, same as the case 3).\n if (this.cells.length === this.columnsService.columns.length) {\n this.cells.forEach((cell, index) => {\n if (this.columnsService.columns[index]) {\n cell.resetState(this.columnsService.columns[index].value);\n }\n });\n }\n }\n\n private addDetachedRowsColumnStateChangesListener() {\n this.subscriptions.push(\n // Active rows are already handled by DatagridMainRenderer.columnStateChanged via @ContentChildren.\n // Rows sitting in CDK virtual scroll's template cache for example are detached from the document\n // (element.isConnected = false) and invisible to @ContentChildren, so they miss column state\n // changes. This subscription self-updates the row only when it is detached state.\n this.columnsService.columnsStateChange.subscribe(() => {\n if (!this.el.nativeElement.isConnected) {\n this.setCellsState();\n }\n })\n );\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive } from '@angular/core';\nimport { WillyWonka } from '@clr/angular/utils';\n\n@Directive({\n selector: 'clr-datagrid',\n standalone: false,\n})\nexport class DatagridWillyWonka extends WillyWonka {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, Optional } from '@angular/core';\nimport { OompaLoompa } from '@clr/angular/utils';\n\nimport { DatagridWillyWonka } from './datagrid-willy-wonka';\nimport { RowActionService } from '../providers/row-action-service';\n\n@Directive({\n selector: 'clr-datagrid, clr-dg-row',\n standalone: false,\n})\nexport class ActionableOompaLoompa extends OompaLoompa {\n private rowActions: RowActionService;\n\n constructor(cdr: ChangeDetectorRef, @Optional() willyWonka: DatagridWillyWonka, rowActions: RowActionService) {\n if (!willyWonka) {\n throw new Error('clr-dg-row should only be used inside of a clr-datagrid');\n }\n super(cdr, willyWonka);\n this.rowActions = rowActions;\n }\n\n get flavor() {\n return this.rowActions.hasActionableRow;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, Optional } from '@angular/core';\nimport { OompaLoompa } from '@clr/angular/utils';\n\nimport { DatagridWillyWonka } from './datagrid-willy-wonka';\nimport { ExpandableRowsCount } from '../providers/global-expandable-rows';\n\n@Directive({\n selector: 'clr-datagrid, clr-dg-row',\n standalone: false,\n})\nexport class ExpandableOompaLoompa extends OompaLoompa {\n private expandableCount: ExpandableRowsCount;\n\n constructor(\n cdr: ChangeDetectorRef,\n @Optional() willyWonka: DatagridWillyWonka,\n expandableCount: ExpandableRowsCount\n ) {\n if (!willyWonka) {\n throw new Error('clr-dg-row should only be used inside of a clr-datagrid');\n }\n super(cdr, willyWonka);\n this.expandableCount = expandableCount;\n }\n\n get flavor() {\n return this.expandableCount.hasExpandableRow;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n DOCUMENT,\n ElementRef,\n EmbeddedViewRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n Output,\n QueryList,\n Renderer2,\n RendererStyleFlags2,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewContainerRef,\n} from '@angular/core';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\nimport { combineLatest, fromEvent, merge, of, Subscription } from 'rxjs';\nimport { debounceTime, switchMap } from 'rxjs/operators';\n\nimport { ClrDatagridColumn } from './datagrid-column';\nimport { ClrDatagridItems } from './datagrid-items';\nimport { ClrDatagridPlaceholder } from './datagrid-placeholder';\nimport { ClrDatagridRow } from './datagrid-row';\nimport { ClrDatagridVirtualScrollDirective } from './datagrid-virtual-scroll.directive';\nimport { DatagridDisplayMode } from './enums/display-mode.enum';\nimport { SelectionType, selectionTypeAttribute } from './enums/selection-type';\nimport { ClrDatagridStateInterface } from './interfaces/state.interface';\nimport { ColumnsService } from './providers/columns.service';\nimport { DetailService, MAX_DETAIL_WIDTH } from './providers/detail.service';\nimport { DisplayModeService } from './providers/display-mode.service';\nimport { FiltersProvider } from './providers/filters';\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\nimport { ClrDatagridItemsIdentityFunction, Items } from './providers/items';\nimport { Page } from './providers/page';\nimport { RowActionService } from './providers/row-action-service';\nimport { Selection } from './providers/selection';\nimport { Sort } from './providers/sort';\nimport { StateDebouncer } from './providers/state-debouncer.provider';\nimport { StateProvider } from './providers/state.provider';\nimport { TableSizeService } from './providers/table-size.service';\nimport { DatagridRenderOrganizer } from './render/render-organizer';\nimport { CellCoordinates, KeyNavigationGridController } from './utils/key-navigation-grid.controller';\n\n@Component({\n selector: 'clr-datagrid',\n templateUrl: './datagrid.html',\n providers: [\n Selection,\n Sort,\n FiltersProvider,\n Page,\n Items,\n DatagridRenderOrganizer,\n RowActionService,\n ExpandableRowsCount,\n StateDebouncer,\n DetailService,\n StateProvider,\n TableSizeService,\n ColumnsService,\n DisplayModeService,\n KeyNavigationGridController,\n ],\n host: {\n '[class.datagrid-host]': 'true',\n '[class.datagrid-detail-open]': 'detailService.isOpen',\n '[class.datagrid-detail-overlay]': 'isDetailOverlay',\n '[class.datagrid-virtual-scroll]': '!!virtualScroll',\n },\n standalone: false,\n})\nexport class ClrDatagrid<T = any> implements AfterContentInit, AfterViewInit, OnDestroy, DoCheck {\n @Input('clrLoadingMoreItems') loadingMoreItems: boolean;\n\n @Input() clrDgSingleSelectionAriaLabel: string = this.commonStrings.keys.singleSelectionAriaLabel;\n @Input() clrDgSingleActionableAriaLabel: string = this.commonStrings.keys.singleActionableAriaLabel;\n @Input() clrDetailExpandableAriaLabel: string = this.commonStrings.keys.detailExpandableAriaLabel;\n\n // Allows disabling of the auto focus on page/state changes (excludes focus management inside of popups)\n @Input() clrDgDisablePageFocus = false;\n\n @Output('clrDgSelectedChange') selectedChanged = new EventEmitter<T[]>(false);\n\n /**\n * Output emitted whenever the data needs to be refreshed, based on user action or external ones\n */\n @Output('clrDgRefresh') refresh = new EventEmitter<ClrDatagridStateInterface<T>>(false);\n\n /**\n * The application can provide custom select all logic.\n */\n @Input('clrDgCustomSelectAllEnabled') customSelectAllEnabled = false;\n @Input('clrDgSelectAllDisabled') selectAllDisabled = false;\n @Output('clrDgCustomSelectAll') customSelectAll = new EventEmitter<boolean>();\n\n /**\n * Expose virtual scroll directive for applications to access its public methods\n */\n @ContentChildren(forwardRef(() => ClrDatagridVirtualScrollDirective)) _virtualScroll: QueryList<\n ClrDatagridVirtualScrollDirective<any>\n >;\n /**\n * We grab the smart iterator from projected content\n */\n @ContentChild(ClrDatagridItems) iterator: ClrDatagridItems<T>;\n\n /**\n * Custom placeholder detection\n */\n @ContentChild(ClrDatagridPlaceholder) placeholder: ClrDatagridPlaceholder<T>;\n\n /**\n * Hideable Column data source / detection.\n */\n @ContentChildren(ClrDatagridColumn) columns: QueryList<ClrDatagridColumn<T>>;\n\n /**\n * When the datagrid is user-managed without the smart iterator, we get the items displayed\n * by querying the projected content. This is needed to keep track of the models currently\n * displayed, typically for selection.\n */\n @ContentChildren(ClrDatagridRow, { emitDistinctChangesOnly: false }) rows: QueryList<ClrDatagridRow<T>>;\n\n @ViewChild('datagrid', { read: ElementRef }) datagrid: ElementRef<HTMLElement>;\n @ViewChild('datagridTable', { read: ElementRef }) datagridTable: ElementRef<HTMLElement>;\n @ViewChild('datagridHeader', { read: ElementRef }) datagridHeader: ElementRef<HTMLElement>;\n @ViewChild('contentWrapper', { read: ElementRef, static: true }) contentWrapper: ElementRef<HTMLElement>;\n @ViewChild('rowsWrapper', { read: ElementRef, static: true }) rowsWrapper: ElementRef<HTMLElement>;\n @ViewChild('scrollableColumns', { read: ViewContainerRef }) scrollableColumns: ViewContainerRef;\n @ViewChild('projectedDisplayColumns', { read: ViewContainerRef }) _projectedDisplayColumns: ViewContainerRef;\n @ViewChild('projectedStickyColumns', { read: ViewContainerRef }) _projectedStickyColumns: ViewContainerRef;\n @ViewChild('projectedCalculationColumns', { read: ViewContainerRef }) _projectedCalculationColumns: ViewContainerRef;\n @ViewChild('displayedRows', { read: ViewContainerRef }) _displayedRows: ViewContainerRef;\n @ViewChild('calculationRows', { read: ViewContainerRef }) _calculationRows: ViewContainerRef;\n @ViewChild('fixedColumnTemplate') _fixedColumnTemplate: TemplateRef<any>;\n @ViewChildren('stickyHeader', { emitDistinctChangesOnly: true }) stickyHeaders: QueryList<ElementRef>;\n\n selectAllId: string;\n activeCellCoords: CellCoordinates;\n\n /* reference to the enum so that template can access */\n SELECTION_TYPE = SelectionType;\n\n @ViewChild('selectAllCheckbox') private selectAllCheckbox: ElementRef<HTMLInputElement>;\n @ViewChild('rowControls', { read: ElementRef }) private rowControls: ElementRef<HTMLElement>;\n\n /**\n * Subscriptions to all the services and queries changes\n */\n private _subscriptions: Subscription[] = [];\n private _virtualScrollSubscriptions: Subscription[] = [];\n\n /**\n * The placeholder columns we create from `fixedColumnTemplate` for the calculate pass. Unlike\n * the column views, which belong to their `WrappedColumn`, these are created here on every\n * pass, so they are ours to destroy. Detaching them from the container only unlinks them - the\n * views themselves would stay alive and keep the whole datagrid in memory.\n */\n private fixedColumnViews: EmbeddedViewRef<void>[] = [];\n\n private cachedRowsHeight = 0;\n private cachedContentHeight = 0;\n private resizeObserver: ResizeObserver = new ResizeObserver(entries => {\n requestAnimationFrame(() => {\n this.handleResizeChanges(entries);\n });\n });\n\n /**\n * Watches the row controls for anything that changes their width without going through a render\n * cycle - a density change, or an application restyling them.\n */\n private rowControlsObserver: ResizeObserver = new ResizeObserver(() => this.updateRowControlsWidth());\n\n constructor(\n private organizer: DatagridRenderOrganizer,\n public items: Items<T>,\n public expandableRows: ExpandableRowsCount,\n public selection: Selection<T>,\n public rowActionService: RowActionService,\n private stateProvider: StateProvider<T>,\n private displayMode: DisplayModeService,\n private renderer: Renderer2,\n public detailService: DetailService,\n @Inject(DOCUMENT) private document: any,\n public el: ElementRef<HTMLElement>,\n private page: Page,\n public commonStrings: ClrCommonStringsService,\n public keyNavigation: KeyNavigationGridController,\n private zone: NgZone,\n private columnsService: ColumnsService\n ) {\n const datagridId = uniqueIdFactory();\n\n this.selectAllId = 'clr-dg-select-all-' + datagridId;\n detailService.id = datagridId;\n }\n\n /**\n * Freezes the datagrid while data is loading\n */\n @Input('clrDgLoading')\n get loading(): boolean {\n return this.items.loading;\n }\n set loading(value: boolean) {\n this.items.loading = value;\n }\n\n /**\n * Selection type\n * - `None`: No rows are selectable.\n * - `Single`: Only one row can be selected at a time.\n * - `Multi`: Multiple rows can be selected.\n *\n * Defaults to `None`.\n */\n @Input({ alias: 'clrDgSelectionType', transform: selectionTypeAttribute })\n get selectionType(): SelectionType {\n return this.selection.selectionType;\n }\n set selectionType(value: SelectionType) {\n this.selection.selectionType = value;\n }\n\n /**\n * Array of all selected items\n */\n @Input('clrDgSelected')\n set selected(value: T[]) {\n value = value || [];\n\n if (value === this.selection.current) {\n return;\n }\n\n this.selection.updateCurrent(value, false);\n }\n\n @Input()\n set clrDgPreserveSelection(state: boolean) {\n this.selection.preserveSelection = state;\n }\n\n /**\n * @deprecated since 2.0, remove in 3.0\n *\n * Selection/Deselection on row click mode\n */\n @Input('clrDgRowSelection')\n set rowSelectionMode(value: boolean) {\n this.selection.rowSelectionMode = value;\n }\n\n @Input('clrDgItemsIdentityFn')\n set identityFn(value: ClrDatagridItemsIdentityFunction<T>) {\n this.items.identifyBy = value;\n }\n\n /**\n * Indicates if all currently displayed items are selected\n */\n get allSelected() {\n return this.selection.isAllSelected();\n }\n set allSelected(value: boolean) {\n if (this.customSelectAllEnabled) {\n this.customSelectAll.emit(value);\n } else {\n /**\n * This is a setter but we ignore the value.\n * It's strange, but it lets us have an indeterminate state where only\n * some of the items are selected.\n */\n this.selection.toggleAll();\n }\n }\n\n get virtualScroll(): ClrDatagridVirtualScrollDirective<any> {\n return this._virtualScroll?.get(0);\n }\n\n protected get isDetailOverlay(): boolean {\n return this.detailService.detailWidth === MAX_DETAIL_WIDTH;\n }\n\n ngAfterContentInit() {\n if (!this.items.smart) {\n this.items.all = this.rows.map((row: ClrDatagridRow<T>) => row.item);\n }\n\n const rowItemsChanges = this.rows.changes.pipe(\n switchMap((rows: ClrDatagridRow<T>[]) =>\n merge(\n // immediate update\n of(rows.map(row => row.item)),\n // subsequent updates once per tick\n combineLatest(rows.map(row => row.itemChanges)).pipe(debounceTime(0))\n )\n )\n );\n\n this._subscriptions.push(\n rowItemsChanges.subscribe(all => {\n if (!this.items.smart) {\n this.items.all = all;\n }\n }),\n this._virtualScroll.changes.subscribe(() => {\n this.toggleVirtualScrollSubscriptions();\n }),\n this.rows.changes.subscribe(() => {\n // Remove any projected rows from the displayedRows container\n // Necessary with Ivy off. See https://github.com/vmware/clarity/issues/4692\n for (let i = this._displayedRows.length - 1; i >= 0; i--) {\n if (this._displayedRows.get(i).destroyed) {\n this._displayedRows.remove(i);\n }\n }\n this.rows.forEach(row => {\n this._displayedRows.insert(row._view);\n });\n this.updateDetailState();\n\n // retain active cell when navigating with Up/Down Arrows, PageUp and PageDown buttons in virtual scroller\n if (this.virtualScroll && this.activeCellCoords) {\n this.zone.runOutsideAngular(() => {\n const row = Array.from(this.rows).find(row => {\n return row.el.nativeElement.children[0].ariaRowIndex === this.activeCellCoords.ariaRowIndex;\n });\n\n if (!row) {\n return;\n }\n\n const activeCell = row.el.nativeElement.querySelectorAll(this.keyNavigation.config.keyGridCells)[\n this.activeCellCoords.x\n ] as HTMLElement;\n\n this.keyNavigation.setActiveCell(activeCell);\n this.keyNavigation.focusElement(activeCell, { preventScroll: true });\n });\n }\n })\n );\n }\n\n /**\n * Our setup happens in the view of some of our components, so we wait for it to be done before starting\n */\n ngAfterViewInit() {\n this.keyNavigation.initializeKeyGrid(this.el.nativeElement);\n\n this.updateDetailState();\n this.zone.runOutsideAngular(() => this.rowControlsObserver.observe(this.rowControls.nativeElement));\n\n // Emit the state only if it is not an empty object.\n // Default state of `ClrDatagridStateInterface` is an empty object.\n // The refresh emit is needed in Server-driven datagrid when pagination is set, but the data is still not requested.\n // The refresh emit should trigger the data request based on the state provided.\n // Alternately because pagination might not be set on initialization emit an empty state will trigger a refresh.\n if (Object.keys(this.stateProvider.state).length > 0) {\n this.refresh.emit(this.stateProvider.state);\n }\n\n this._subscriptions.push(\n this.stickyHeaders.changes.subscribe(() => this.resize()),\n this.stateProvider.change.subscribe(state => this.refresh.emit(state)),\n this.selection.change.subscribe(selection => {\n if (this.selection.selectable) {\n this.selectedChanged.emit(selection);\n }\n }),\n // Reinitialize arrow key navigation on page changes\n this.page.change.subscribe(() => {\n this.keyNavigation.resetKeyGrid();\n if (!this.clrDgDisablePageFocus) {\n this.datagridTable.nativeElement.focus();\n }\n }),\n // A subscription that listens for displayMode changes on the datagrid\n this.displayMode.view.subscribe(viewChange => {\n // Remove any projected columns from the projectedDisplayColumns container\n for (let i = this._projectedDisplayColumns.length; i > 0; i--) {\n this._projectedDisplayColumns.detach();\n }\n // Remove any projected columns from the projectedStickyColumns container\n for (let i = this._projectedStickyColumns.length; i > 0; i--) {\n this._projectedStickyColumns.detach();\n }\n // Remove any projected columns from the projectedCalculationColumns container\n this.destroyFixedColumnViews();\n for (let i = this._projectedCalculationColumns.length; i > 0; i--) {\n this._projectedCalculationColumns.detach();\n }\n // Remove any projected rows from the calculationRows container\n for (let i = this._calculationRows.length; i > 0; i--) {\n this._calculationRows.detach();\n }\n // Remove any projected rows from the displayedRows container\n for (let i = this._displayedRows.length; i > 0; i--) {\n this._displayedRows.detach();\n }\n if (viewChange === DatagridDisplayMode.DISPLAY) {\n // Set state, style for the datagrid to DISPLAY and insert row & columns into containers\n this.renderer.removeClass(this.el.nativeElement, 'datagrid-calculate-mode');\n // Pinned columns go into the pinned container so they stay visible during horizontal\n // scroll. Iterating in declaration order keeps both groups in their original order,\n // which is what matches them with the cells of every row.\n this.columns.forEach((column, index) => {\n const container = this.columnsService.isPinned(index)\n ? this._projectedStickyColumns\n : this._projectedDisplayColumns;\n container.insert(column._view);\n });\n this.rows.forEach(row => {\n this._displayedRows.insert(row._view);\n });\n // The row controls are only laid out in this mode, and this is also the point where\n // their number can have changed.\n this.updateRowControlsWidth();\n } else {\n // Set state, style for the datagrid to CALCULATE and insert row & columns into containers\n this.renderer.addClass(this.el.nativeElement, 'datagrid-calculate-mode');\n // Inserts a fixed column if any of these conditions are true.\n const fixedColumnConditions = [\n this.rowActionService.hasActionableRow,\n this.selection.selectionType !== this.SELECTION_TYPE.None,\n this.expandableRows.hasExpandableRow || this.detailService.enabled,\n ];\n fixedColumnConditions.filter(Boolean).forEach(() => {\n const fixedColumnView = this._fixedColumnTemplate.createEmbeddedView(null);\n this.fixedColumnViews.push(fixedColumnView);\n this._projectedCalculationColumns.insert(fixedColumnView);\n });\n this.columns.forEach(column => {\n this._projectedCalculationColumns.insert(column._view);\n });\n this.rows.forEach(row => {\n this._calculationRows.insert(row._view);\n });\n }\n })\n );\n\n if (this.virtualScroll) {\n this.toggleVirtualScrollSubscriptions();\n }\n\n // We need to preserve shift state, so it can be used on selection change, regardless of the input event\n // that triggered the change. This helps us to easily resolve the k/b only case together with the mouse selection case.\n this.zone.runOutsideAngular(() => {\n this._subscriptions.push(\n fromEvent(this.document.body, 'keydown').subscribe((event: KeyboardEvent) => {\n if (event.key === 'Shift') {\n this.selection.shiftPressed = true;\n }\n }),\n fromEvent(this.document.body, 'keyup').subscribe((event: KeyboardEvent) => {\n if (event.key === 'Shift') {\n this.selection.shiftPressed = false;\n }\n })\n );\n });\n }\n\n ngDoCheck() {\n // we track for changes on selection.current because it can happen with pushing items\n // instead of overriding the variable\n this.selection.checkForChanges();\n }\n\n ngOnDestroy() {\n this.destroyFixedColumnViews();\n this._subscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n this._virtualScrollSubscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n this.resizeObserver.disconnect();\n this.rowControlsObserver.disconnect();\n // If the detail pane is left open, close it so the DetailService unregisters itself from the\n // root ModalStackService instead of staying referenced there after this datagrid is gone.\n if (this.detailService.isOpen) {\n this.detailService.close();\n }\n }\n\n toggleAllSelected($event: any) {\n $event.preventDefault();\n this.selectAllCheckbox?.nativeElement.click();\n }\n\n resize(): void {\n this.organizer.resize();\n }\n\n /**\n * Checks the state of detail panel and if it's opened then\n * find the matching row and trigger the detail panel\n */\n updateDetailState() {\n // Try to update only when there is something cached and its open.\n if (this.detailService.state && this.detailService.isOpen) {\n const row = this.rows.find(\n row => this.items.identifyBy(row.item) === this.items.identifyBy(this.detailService.state)\n );\n\n /**\n * Reopen updated row or close it\n */\n if (row) {\n this.detailService.open(row.item, row.detailButton.nativeElement);\n // always keep open when virtual scroll is available otherwise close it\n } else if (!this.virtualScroll) {\n // Using setTimeout to make sure the inner cycles in rows are done\n setTimeout(() => {\n this.detailService.close();\n });\n }\n }\n }\n\n /**\n * Public method to re-trigger the computation of displayed items manually\n */\n dataChanged() {\n this.items.refresh();\n }\n\n private destroyFixedColumnViews() {\n // On teardown Angular has already destroyed the views in our container by the time it runs our\n // `ngOnDestroy`, so only the calculate/display transition has live ones to release here.\n this.fixedColumnViews.forEach(view => {\n if (!view.destroyed) {\n view.destroy();\n }\n });\n this.fixedColumnViews = [];\n }\n\n private toggleVirtualScrollSubscriptions() {\n const hasVirtualScroll = !!this.virtualScroll;\n\n // the virtual scroll will handle the scrolling\n this.keyNavigation.preventScrollOnFocus = hasVirtualScroll;\n\n if (hasVirtualScroll && this._virtualScrollSubscriptions.length === 0) {\n // TODO: use `resizeObserver` for all datagrid variants\n this.resizeObserver.observe(this.contentWrapper.nativeElement);\n this.resizeObserver.observe(this.rowsWrapper.nativeElement);\n\n this._virtualScrollSubscriptions.push(\n fromEvent(this.contentWrapper.nativeElement, 'scroll').subscribe(() => {\n if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {\n this.datagridHeader.nativeElement.scrollLeft = this.contentWrapper.nativeElement.scrollLeft;\n }\n }),\n fromEvent(this.datagridHeader.nativeElement, 'scroll').subscribe(() => {\n if (this.datagridHeader.nativeElement.scrollLeft !== this.contentWrapper.nativeElement.scrollLeft) {\n this.contentWrapper.nativeElement.scrollLeft = this.datagridHeader.nativeElement.scrollLeft;\n }\n }),\n this.keyNavigation.nextCellCoordsEmitter.subscribe(cellCoords => {\n if (!cellCoords?.ariaRowIndex) {\n this.activeCellCoords = null;\n return;\n }\n\n if (cellCoords.ariaRowIndex === this.activeCellCoords?.ariaRowIndex) {\n this.activeCellCoords = cellCoords;\n return;\n }\n\n this.activeCellCoords = cellCoords;\n\n // aria-rowindex is always + 1. Check virtual scroller updateAriaRowIndexes method.\n const rowIndex = Number(cellCoords.ariaRowIndex) - 1;\n\n this.virtualScroll.scrollToIndex(rowIndex);\n })\n );\n } else if (!hasVirtualScroll) {\n this.resizeObserver.disconnect();\n this._virtualScrollSubscriptions.forEach((sub: Subscription) => sub.unsubscribe());\n this._virtualScrollSubscriptions = [];\n }\n }\n\n /**\n * Publishes the width of the row controls - the static container holding the select, action and\n * caret cells - as a custom property, which is where the pinned columns read the offset they\n * became static at. They are static right after the controls rather than at the edge of the datagrid,\n * and `position: sticky` always measures its offsets from that edge, so the distance between the\n * two has to be measured and handed to the stylesheet.\n *\n * The header and the rows get their own value: the header renders one caret column for both\n * kinds of caret where a row renders one cell per caret, so the two containers are not\n * necessarily the same width.\n *\n * Nothing reads this property unless a column is pinned - `.datagrid-pinned-cells` is the only\n * consumer, and it is `display: none` while empty - so the measurement is skipped entirely\n * otherwise. It matters on a datagrid with many rows: `getBoundingClientRect()` forces the\n * browser to resolve any pending layout first, and on a large datagrid that resolution is not\n * cheap. Both boxes are read before either write for the same reason - writing the custom\n * property is itself layout-affecting (`.datagrid-pinned-cells` reads it back for its own\n * position and width), so reading again in between would force that resolution twice.\n */\n private updateRowControlsWidth() {\n const headerControls = this.rowControls?.nativeElement;\n if (!headerControls || !this.datagridHeader || !this.columnsService.hasPinnedColumns) {\n return;\n }\n const rowControls: HTMLElement = this.rowsWrapper.nativeElement.querySelector(\n '.datagrid-row-master > .datagrid-row-sticky:not(.datagrid-row-sticky-scroll)'\n );\n\n // Measured from the box rather than from offsetWidth, which is rounded to whole pixels and\n // would leave the pinned columns off by up to a pixel.\n const headerWidth = headerControls.getBoundingClientRect().width;\n // Without a row there is nothing to line up with, so the header is a good enough stand-in.\n const rowWidth = (rowControls || headerControls).getBoundingClientRect().width;\n\n this.setRowControlsWidth(this.datagridHeader.nativeElement, headerWidth);\n this.setRowControlsWidth(this.rowsWrapper.nativeElement, rowWidth);\n }\n\n private setRowControlsWidth(target: HTMLElement, width: number) {\n this.renderer.setStyle(target, '--clr-datagrid-row-controls-width', `${width}px`, RendererStyleFlags2.DashCase);\n }\n\n private handleResizeChanges(entries: ResizeObserverEntry[]) {\n const rowsWrapper = this.rowsWrapper.nativeElement;\n\n for (const entry of entries) {\n if (entry.target === this.contentWrapper.nativeElement) {\n this.cachedContentHeight = entry.contentRect.height;\n }\n if (entry.target === rowsWrapper) {\n this.cachedRowsHeight = entry.contentRect.height;\n }\n }\n\n const scrollClass = 'datagrid-scrollbar-visible';\n\n if (this.cachedRowsHeight > this.cachedContentHeight) {\n this.renderer.addClass(rowsWrapper, scrollClass);\n } else {\n this.renderer.removeClass(rowsWrapper, scrollClass);\n }\n }\n}\n","<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<ng-content select=\"clr-dg-action-bar\"></ng-content>\n<div class=\"datagrid-outer-wrapper\">\n <div class=\"datagrid-inner-wrapper\">\n <div class=\"datagrid\" #datagrid [attr.aria-hidden]=\"detailService.isOpen ? true : null\">\n <div class=\"datagrid-table-wrapper\">\n <div role=\"grid\" class=\"datagrid-table\" tabindex=\"-1\" #datagridTable>\n <div role=\"rowgroup\" class=\"datagrid-header\" #datagridHeader>\n <div role=\"row\" class=\"datagrid-row\">\n <div class=\"datagrid-row-master datagrid-row-flex\">\n <div class=\"datagrid-row-sticky\" #rowControls>\n <!--header for datagrid where you can select multiple rows -->\n @if (selection.selectionType === SELECTION_TYPE.Multi) {\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-select datagrid-fixed-column\"\n (keydown.space)=\"toggleAllSelected($event)\"\n >\n @if (!virtualScroll || customSelectAllEnabled) {\n <div class=\"clr-checkbox-wrapper\">\n <!-- We need to move focus and space-key handling to the parent because of keyboard arrow key navigation,\n which is not able to transfer focus directly on the input when focused with the tab key -->\n <input\n #selectAllCheckbox\n type=\"checkbox\"\n [id]=\"selectAllId\"\n [(ngModel)]=\"allSelected\"\n [attr.aria-label]=\"commonStrings.keys.selectAll\"\n tabindex=\"-1\"\n [attr.disabled]=\"selectAllDisabled ? true : null\"\n />\n <!-- Usage of class clr-col-null here prevents clr-col-* classes from being added when a datagrid is wrapped inside clrForm -->\n <label [for]=\"selectAllId\" class=\"clr-control-label clr-col-null\">\n <span class=\"clr-sr-only\">{{commonStrings.keys.selectAll}}</span>\n </label>\n </div>\n }\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n <!-- header for datagrid where you can select one row only -->\n @if (selection.selectionType === SELECTION_TYPE.Single) {\n <div #stickyHeader role=\"columnheader\" class=\"datagrid-column datagrid-select datagrid-fixed-column\">\n <div class=\"clr-sr-only\">{{clrDgSingleSelectionAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n <!-- header for single row action; only displayType if we have at least one actionable row in datagrid -->\n @if (rowActionService.hasActionableRow) {\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-row-actions datagrid-fixed-column\"\n >\n <div class=\"clr-sr-only\">{{clrDgSingleActionableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n <!-- header for carets; only displayType if we have at least one expandable row in datagrid -->\n @if (expandableRows.hasExpandableRow || detailService.enabled) {\n <div\n #stickyHeader\n role=\"columnheader\"\n class=\"datagrid-column datagrid-expandable-caret datagrid-fixed-column\"\n >\n <div class=\"clr-sr-only\">{{clrDetailExpandableAriaLabel}}</div>\n <div class=\"datagrid-column-separator\"></div>\n </div>\n }\n </div>\n <div class=\"datagrid-row-scrollable\">\n <div class=\"datagrid-pinned-cells\">\n <ng-container #projectedStickyColumns></ng-container>\n </div>\n <ng-container #projectedDisplayColumns></ng-container>\n </div>\n @if (virtualScroll) {\n <div class=\"datagrid-row-sticky datagrid-row-sticky-scroll\">\n <div class=\"datagrid-column\"></div>\n </div>\n }\n </div>\n </div>\n </div>\n\n <div class=\"datagrid-content\" [class.datagrid-content-virtual]=\"virtualScroll\" #contentWrapper>\n @if (virtualScroll) {\n <div class=\"datagrid-content-virtual-spacer\" [style.height]=\"virtualScroll?.totalContentHeight\"></div>\n }\n <div role=\"presentation\" #rowsWrapper class=\"datagrid-rows\">\n @if (loadingMoreItems) {\n <clr-dg-row class=\"datagrid-row-loading\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n }\n\n <ng-container #displayedRows></ng-container>\n\n @if (loadingMoreItems) {\n <clr-dg-row class=\"datagrid-row-loading\">\n <clr-dg-cell>\n <clr-spinner clrMedium></clr-spinner>\n <span>{{ commonStrings.keys.loading }}</span>\n </clr-dg-cell>\n </clr-dg-row>\n }\n\n <!-- Custom placeholder overrides the default empty one -->\n <ng-content select=\"clr-dg-placeholder\"></ng-content>\n @if (!placeholder) {\n <clr-dg-placeholder></clr-dg-placeholder>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n <ng-content select=\"clr-dg-footer\"></ng-content>\n @if (loading) {\n <div class=\"datagrid-spinner\">\n <clr-spinner clrMedium>Loading</clr-spinner>\n </div>\n }\n </div>\n <ng-content select=\"[clrIfDetail],clr-dg-detail\"></ng-content>\n</div>\n\n<div class=\"datagrid-calculation-table\">\n <div class=\"datagrid-calculation-header\">\n <ng-container #projectedCalculationColumns></ng-container>\n </div>\n <ng-container #calculationRows></ng-container>\n</div>\n\n<ng-template #fixedColumnTemplate>\n <div class=\"datagrid-column datagrid-fixed-column\"></div>\n</ng-template>\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'clr-dg-action-bar',\n template: `<ng-content></ng-content>`,\n host: { '[class.datagrid-action-bar]': 'true' },\n standalone: false,\n})\nexport class ClrDatagridActionBar {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport { Component, EventEmitter, Inject, Input, OnDestroy, Output, PLATFORM_ID, ViewChild } from '@angular/core';\nimport {\n ClrPopoverHostDirective,\n ClrPopoverPosition,\n ClrPopoverService,\n ClrPopoverType,\n mapPopoverKeyToPosition,\n} from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, ClrKeyFocus, uniqueIdFactory } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { RowActionService } from './providers/row-action-service';\n\nlet clrDgActionId = 0;\n\n@Component({\n selector: 'clr-dg-action-overflow',\n hostDirectives: [ClrPopoverHostDirective],\n template: `\n <button\n tabindex=\"-1\"\n class=\"datagrid-action-toggle\"\n type=\"button\"\n role=\"button\"\n aria-haspopup=\"true\"\n #anchor\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-label]=\"buttonLabel || commonStrings.keys.rowActions\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n (click)=\"$event.stopPropagation()\"\n >\n <cds-icon shape=\"ellipsis-vertical\" [attr.title]=\"buttonLabel || commonStrings.keys.rowActions\"></cds-icon>\n </button>\n\n <div\n class=\"datagrid-action-overflow\"\n [id]=\"popoverId\"\n [attr.aria-hidden]=\"!open\"\n [attr.id]=\"popoverId\"\n clrKeyFocus\n cdkTrapFocus\n (click)=\"closeOverflowContent($event)\"\n *clrPopoverContent=\"\n open;\n at: smartPosition;\n availablePositions: positions;\n outsideClickToClose: true;\n scrollToClose: true\n \"\n >\n <ng-content></ng-content>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridActionOverflow implements OnDestroy {\n @Input('clrDgActionOverflowButtonLabel') buttonLabel: string;\n\n @Output('clrDgActionOverflowOpenChange') openChange = new EventEmitter<boolean>(false);\n\n popoverId = uniqueIdFactory();\n\n smartPosition = ClrPopoverPosition.RIGHT_MIDDLE;\n protected positions = [\n mapPopoverKeyToPosition(ClrPopoverPosition.RIGHT_BOTTOM, ClrPopoverType.DROPDOWN),\n mapPopoverKeyToPosition(ClrPopoverPosition.RIGHT_TOP, ClrPopoverType.DROPDOWN),\n ];\n\n @ViewChild(ClrKeyFocus) private readonly keyFocus: ClrKeyFocus;\n\n private _open = false;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private rowActionService: RowActionService,\n public commonStrings: ClrCommonStringsService,\n @Inject(PLATFORM_ID) private platformId: any,\n private popoverService: ClrPopoverService\n ) {\n rowActionService.register();\n this.subscriptions.push(\n popoverService.openChange.subscribe(openState => {\n this.open = openState;\n }),\n popoverService.popoverVisible.subscribe(visible => {\n if (visible) {\n this.initializeFocus();\n }\n })\n );\n this.popoverId = 'clr-action-menu' + clrDgActionId++;\n }\n\n @Input('clrDgActionOverflowOpen')\n get open() {\n return this._open;\n }\n set open(open: boolean) {\n const openState = !!open;\n if (!!openState !== this.open) {\n // prevents chocolate mess\n this.popoverService.open = openState;\n this.openChange.emit(openState);\n this._open = openState;\n }\n }\n\n ngOnDestroy() {\n this.rowActionService.unregister();\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n closeOverflowContent(event: Event): void {\n this.popoverService.toggleWithEvent(event);\n }\n\n private initializeFocus(): void {\n if (isPlatformBrowser(this.platformId)) {\n const buttons = Array.from(document.querySelectorAll<HTMLButtonElement>('button.action-item'));\n\n if (buttons.length) {\n this.keyFocus.current = 0;\n this.keyFocus.focusableItems = buttons;\n\n this.keyFocus.focusCurrent();\n }\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { DropdownFocusHandler } from '@clr/angular/popover/dropdown';\nimport { FocusableItem } from '@clr/angular/utils';\n\n/**\n * The focus handler of the `clr-dg-column-actions` menu, with the items projected into the menu\n * appended to the ones it declares. ClrDropdownMenu only hands over its own content query, which\n * cannot see projected items, and it hands it over again whenever that query changes - so the\n * projected ones are added here, where every one of those hand-overs passes through.\n */\n@Injectable()\nexport class ColumnActionsFocusHandler extends DropdownFocusHandler {\n private ownItems: FocusableItem[] = [];\n private projectedItems: FocusableItem[] = [];\n\n override addChildren(children: FocusableItem[]) {\n this.ownItems = children;\n super.addChildren([...children, ...this.projectedItems]);\n }\n\n // The menu resets its children when it closes, and the items it declared go with it.\n override resetChildren() {\n this.ownItems = [];\n super.resetChildren();\n }\n\n setProjectedItems(items: FocusableItem[]) {\n this.projectedItems = items;\n this.addChildren(this.ownItems);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n afterNextRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n inject,\n Injector,\n Input,\n OnDestroy,\n Optional,\n QueryList,\n SkipSelf,\n ViewChild,\n} from '@angular/core';\nimport { ClrPopoverContent, ClrPopoverService } from '@clr/angular/popover/common';\nimport {\n ClrDropdown,\n ClrDropdownMenu,\n DropdownFocusHandler,\n ROOT_DROPDOWN_PROVIDER,\n RootDropdownService,\n} from '@clr/angular/popover/dropdown';\nimport { ClrCommonStringsService, FOCUS_SERVICE_PROVIDER, FocusableItem } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridColumn } from './datagrid-column';\nimport { ClrDatagridSortOrder } from './enums/sort-order.enum';\nimport { ColumnActionsFocusHandler } from './providers/column-actions-focus-handler.service';\nimport { ColumnActionsService } from './providers/column-actions.service';\nimport { FiltersProvider } from './providers/filters';\n\n/**\n * Groups the actions of a single column behind one menu in the column header. It only gathers\n * controls that already exist on the column - the behavior itself stays on `ClrDatagridColumn`,\n * so the menu and the header controls can never drift apart.\n *\n * Each item is rendered only when the column can actually perform it, so the menu never offers a\n * dead option - that covers both what the column can never do, such as sorting when it is not\n * sortable, and what it cannot do right now, such as clearing a sort while nothing is sorted.\n * Anything projected into the component is appended after the built-in items.\n *\n * A column that has a filter gets a filter action automatically, and the filter drops its own toggle\n * for as long as this menu is present - the header keeps one control per column rather than two. The\n * trigger also takes over showing that the column is filtered, which the toggle used to do.\n * `clrDgKeepFilterInHeader` opts back into the toggle, and then the menu drops the filter action in\n * exchange: a column offers one way to reach its filter, never both at once.\n *\n * Projected items can be `clrDgColumnAction`s, plain `clrDropdownItem`s, or a nested `clr-dropdown`.\n * They join the arrow key order after the built-in items as long as they are projected directly -\n * an item wrapped in an element of its own is not found. A nested dropdown's own items stay in its\n * own menu.\n *\n * The component is the dropdown itself rather than wrapping one, so that a projected item can reach\n * it: injection resolves from where a node is declared, and an item declared outside this component\n * would sit outside the injector of any `clr-dropdown` in its template.\n */\n@Component({\n selector: 'clr-dg-column-actions',\n template: `\n <button\n class=\"datagrid-column-actions-toggle\"\n type=\"button\"\n clrDropdownTrigger\n [class.datagrid-column-actions-filtered]=\"filterActive\"\n [attr.aria-label]=\"triggerLabel\"\n >\n <cds-icon\n [size]=\"filterActive ? '16' : '12'\"\n [shape]=\"filterActive ? 'ellipsis-grid-circle' : 'ellipsis-vertical'\"\n [status]=\"filterActive ? 'info' : null\"\n aria-hidden=\"true\"\n />\n </button>\n\n <clr-dropdown-menu *clrIfOpen clrPosition=\"bottom-right\">\n @if (column.sortable) {\n <!--\n The two directions are one exclusive setting rather than two commands, so they are radio\n items: the applied one is then announced as such. The active class alone would leave it\n visible only to a sighted user - the column header's aria-sort is not read from in here.\n -->\n <button\n type=\"button\"\n clrDropdownItem\n role=\"menuitemradio\"\n [attr.aria-checked]=\"sortOrder === ClrDatagridSortOrder.ASC\"\n [class.active]=\"sortOrder === ClrDatagridSortOrder.ASC\"\n (click)=\"sort(false)\"\n >\n <cds-icon shape=\"arrow\" direction=\"up\" aria-hidden=\"true\"></cds-icon>\n {{ commonStrings.keys.sortColumnAscending }}\n </button>\n <button\n type=\"button\"\n clrDropdownItem\n role=\"menuitemradio\"\n [attr.aria-checked]=\"sortOrder === ClrDatagridSortOrder.DESC\"\n [class.active]=\"sortOrder === ClrDatagridSortOrder.DESC\"\n (click)=\"sort(true)\"\n >\n <cds-icon shape=\"arrow\" direction=\"down\" aria-hidden=\"true\"></cds-icon>\n {{ commonStrings.keys.sortColumnDescending }}\n </button>\n @if (canClearSort) {\n <button type=\"button\" clrDropdownItem (click)=\"column.clearSort()\">\n <cds-icon shape=\"times\" aria-hidden=\"true\"></cds-icon>\n {{ commonStrings.keys.clearColumnSort }}\n </button>\n }\n }\n\n @if (column.pinnable) {\n @if (column.sortable) {\n <div class=\"dropdown-divider\" role=\"separator\"></div>\n }\n <button type=\"button\" clrDropdownItem (click)=\"togglePinned()\">\n <cds-icon\n [shape]=\"column.pinned ? 'unpin' : 'pin'\"\n solid\n size=\"12\"\n style=\"margin: 2px;\"\n aria-hidden=\"true\"\n ></cds-icon>\n {{ column.pinned ? commonStrings.keys.unpinColumn : commonStrings.keys.pinColumn }}\n </button>\n }\n\n @if (hasFilter && !keepFilterInHeader) {\n @if (column.sortable || column.pinnable) {\n <div class=\"dropdown-divider\" role=\"separator\"></div>\n }\n <!--\n This item stands in for the filter's own toggle, so it takes over the state that toggle\n announced: that it opens a dialog, and whether that dialog is open right now.\n -->\n <button\n type=\"button\"\n #trigger\n clrDropdownItem\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"filterOpen\"\n [attr.aria-controls]=\"filterPopoverId\"\n (click)=\"openFilter($event)\"\n >\n <cds-icon [shape]=\"filterActive ? 'filter-grid-circle' : 'filter-grid'\" solid aria-hidden=\"true\"></cds-icon>\n {{ commonStrings.keys.filterColumn }}\n </button>\n }\n\n <ng-content></ng-content>\n </clr-dropdown-menu>\n `,\n host: {\n '[class.datagrid-column-actions]': 'true',\n },\n // ClrDropdown's providers are not inherited, so they have to be repeated for this component to be\n // one. Its host directives and host bindings - the popover host, and the dropdown classes - are\n // inherited, and must not be repeated.\n providers: [\n ROOT_DROPDOWN_PROVIDER,\n FOCUS_SERVICE_PROVIDER,\n ColumnActionsFocusHandler,\n { provide: DropdownFocusHandler, useExisting: ColumnActionsFocusHandler },\n { provide: FocusableItem, useExisting: ColumnActionsFocusHandler },\n { provide: ClrDropdown, useExisting: ClrDatagridColumnActions },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class ClrDatagridColumnActions extends ClrDropdown implements AfterViewInit, OnDestroy {\n // Exposed so the template can compare against the enum.\n protected readonly ClrDatagridSortOrder = ClrDatagridSortOrder;\n\n private _keepFilterInHeader = false;\n private _menuPopoverContent: ClrPopoverContent | undefined;\n\n @ViewChild('trigger', { read: ElementRef }) private trigger: ElementRef<HTMLButtonElement>;\n\n // Named for this component rather than inherited: ClrDropdown keeps its own private list.\n private subs: Subscription[] = [];\n private projectedItemsSubscription: Subscription;\n private readonly columnActionsFocusHandler = inject(ColumnActionsFocusHandler);\n\n constructor(\n protected column: ClrDatagridColumn,\n protected commonStrings: ClrCommonStringsService,\n private columnActions: ColumnActionsService,\n // The column's own popover service, shared with its filter. This component brings its own for\n // the menu, so the menu and the filter never fight over one overlay - which is also why this one\n // has to be resolved from the column rather than from here.\n @SkipSelf() private columnPopover: ClrPopoverService,\n private changeDetectorRef: ChangeDetectorRef,\n private injector: Injector,\n @Optional() private filters: FiltersProvider,\n @SkipSelf() @Optional() parent: ClrDropdown,\n popoverService: ClrPopoverService,\n focusHandler: DropdownFocusHandler,\n dropdownService: RootDropdownService\n ) {\n super(parent, popoverService, focusHandler, changeDetectorRef, dropdownService);\n\n this.isMenuClosable = false;\n\n // Tells the filter to drop its own toggle - from here on this menu is the only way to open it,\n // unless clrDgKeepFilterInHeader asked to keep both. Reading the backing field rather than the\n // getter covers the default: Angular only invokes the setter above when the input is actually\n // bound, and by then the field initializer has already run.\n columnActions.filterInHeader.set(this._keepFilterInHeader);\n // Tells the column to drop its pin toggle, since Pin Column is offered here instead.\n columnActions.menuPresent.set(true);\n }\n\n /**\n * Keeps the filter's own toggle in the column header instead of moving it into this menu, and the\n * menu drops its filter action in exchange - a column offers one way to reach its filter at a\n * time, never two.\n */\n @Input({ alias: 'clrDgKeepFilterInHeader', transform: booleanAttribute })\n get keepFilterInHeader(): boolean {\n return this._keepFilterInHeader;\n }\n set keepFilterInHeader(value: boolean) {\n this._keepFilterInHeader = value;\n this.columnActions.filterInHeader.set(value);\n }\n\n /**\n * The menu is a live view of the column, so the label has to be read at render time rather than\n * cached - the column title can change, and so can the sort state it reports.\n */\n protected get triggerLabel(): string {\n const title = this.column.titleContainer?.nativeElement.textContent.trim();\n\n return title\n ? this.commonStrings.parse(this.commonStrings.keys.datagridColumnActionsAriaLabel, { COLUMN: title })\n : this.commonStrings.keys.columnActions;\n }\n\n protected get sortOrder(): ClrDatagridSortOrder {\n return this.column.sortOrder;\n }\n\n protected get canClearSort(): boolean {\n return this.sortOrder !== ClrDatagridSortOrder.UNSORTED && !this.column.disableUnsort;\n }\n\n protected get hasFilter(): boolean {\n return !!this.columnActions.filter();\n }\n\n /**\n * Hiding the filter toggle also hides the only sign that a column is filtered, so the trigger and\n * the filter action carry that state instead.\n */\n protected get filterActive(): boolean {\n return !!this.columnActions.filter()?.active && !this.keepFilterInHeader;\n }\n\n /**\n * Whether the filter this menu opens is open, for the filter action to report the same way the\n * toggle it replaced did. Read from the column's popover service rather than from the filter,\n * because that service is what the action opens.\n */\n protected get filterOpen(): boolean {\n return this.columnPopover.open;\n }\n\n /**\n * The popover the filter action opens, so it can point at what it controls - again the same thing\n * the replaced toggle pointed at.\n */\n protected get filterPopoverId(): string | null {\n return this.columnActions.filter()?.popoverId ?? null;\n }\n\n /**\n * The items projected into the menu. The menu's own content query cannot see them, so they are\n * handed to the focus handler from here.\n *\n * Only direct children are queried, not descendants: a nested `clr-dropdown` is one item here - its\n * focus handler - and the items inside it belong to its own menu, not to this one.\n */\n @ContentChildren(FocusableItem)\n private set projectedItems(items: QueryList<FocusableItem>) {\n this.projectedItemsSubscription?.unsubscribe();\n this.projectedItemsSubscription = items.changes.subscribe(() =>\n this.columnActionsFocusHandler.setProjectedItems(items.toArray())\n );\n this.columnActionsFocusHandler.setProjectedItems(items.toArray());\n }\n\n @ViewChild(ClrDropdownMenu, { read: ClrPopoverContent })\n private set menuPopoverContent(popoverContent: ClrPopoverContent | undefined) {\n this._menuPopoverContent = popoverContent;\n\n // A dropdown menu closes on scroll by default. This one stays open so that pinning or\n // reordering a column - which can itself move the page under the menu - does not also close it.\n if (popoverContent) {\n popoverContent.scrollToClose = false;\n }\n }\n\n ngAfterViewInit() {\n // The trigger and the filter action show whether the column is filtered, and this component is\n // OnPush, so it has to be told when a filter value changes.\n if (this.filters) {\n this.subs.push(this.filters.change.subscribe(() => this.changeDetectorRef.markForCheck()));\n }\n\n // Same for the filter action reporting whether the filter is open: opening it goes through this\n // template and refreshes the view on its own, but closing it does not - that is an outside click\n // or an escape key handled by the overlay, and the item would be left announcing itself expanded.\n this.subs.push(\n this.columnPopover.openChange.subscribe(open => {\n this.changeDetectorRef.markForCheck();\n\n // openFilter() links the filter's popover to this menu's so they scroll together.\n // Clearing it here keeps the link scoped to one filter opening.\n if (!open) {\n this.columnPopover.parent = null;\n }\n })\n );\n }\n\n override ngOnDestroy() {\n super.ngOnDestroy();\n this.subs.forEach(sub => sub.unsubscribe());\n this.projectedItemsSubscription?.unsubscribe();\n // Hands the filter and the pin their own toggles back, in case the menu is removed while the\n // column stays.\n this.columnActions.filterInHeader.set(true);\n this.columnActions.menuPresent.set(false);\n\n // doesn't really matter who the current column popover parent is. The original value is null returning it to that.\n this.columnPopover.parent = null;\n }\n\n /**\n * Returns focus to the trigger before closing, the same order `clrDropdownItem` uses - moving focus\n * first means it lands correctly even when the action opens a modal.\n */\n closeMenu() {\n this.focusHandler.focus();\n this.popoverService.open = false;\n }\n\n /**\n * Re-anchors the open menu to the trigger, for an action that moves the column it belongs to\n * instead of closing the menu behind it.\n *\n * Deferred to after the next render rather than run straight away, because the action that asked\n * for this has only just been clicked - the column is relocated by the change detection that\n * follows, so measuring the trigger now would re-anchor the menu to where it already is.\n */\n repositionMenu() {\n afterNextRender(() => this.popoverService.updatePosition(), { injector: this.injector });\n }\n\n /**\n * Moves focus to one of the projected actions, keeping the menu's keyboard handling in step with\n * it.\n *\n * Called by `clrDgColumnAction` when the item takes focus, so that focusing an item by any means -\n * including a plain `focus()` from outside, after an action rebuilt the menu - leaves space and\n * enter acting on that same item rather than on whatever the menu focused when it opened.\n */\n focusAction(item: FocusableItem) {\n this.focusHandler.moveTo(item);\n }\n\n /**\n * The menu states a direction rather than cycling through them, so asking for the direction the\n * column already has is a no-op.\n *\n * The guard is needed because `Sort.toggle()` reads `forceReverse: false` as \"toggle\" rather than\n * \"ascending\" - `forceReverse || !this._reverse` falls through to the toggle for a falsy value - so\n * `sort(false)` on an already ascending column would flip it to descending. The tri-state title\n * button never hits that path, because it always calls `sort()` without an argument.\n */\n protected sort(descending: boolean) {\n const requested = descending ? ClrDatagridSortOrder.DESC : ClrDatagridSortOrder.ASC;\n\n if (this.sortOrder !== requested) {\n this.column.sort(descending);\n }\n }\n\n /**\n * Pins or unpins the column, then re-anchors this menu to the trigger.\n *\n * Pinning moves the column between the datagrid's static and scrollable containers, and the\n * trigger this menu is anchored to travels with it - far enough that the menu would otherwise be\n * left hanging next to where the column used to be. The menu stays open on purpose, so the action\n * it now offers is the one that undoes the pin the user just applied.\n *\n * The columns are relocated on the render cycle the pinned state change schedules, not while this\n * runs, so the overlay can only be re-anchored once that has happened - which `repositionMenu`\n * takes care of.\n */\n protected togglePinned() {\n this.column.togglePinned();\n this.repositionMenu();\n }\n\n /**\n * Opens the filter of this column, anchored to the \"Filter Column\" menu item itself (`#trigger`\n * above), so the popover positions off the item that was actually clicked rather than the kebab.\n *\n * The popover is driven through the column's ClrPopoverService rather than through\n * `ClrDatagridFilter.open`, because that is the one thing every filter flavour has in common - a\n * projected clr-dg-filter, and the string and numeric filters the column builds for clrDgField,\n * all share this service. Setting `origin` is all it takes to re-anchor it: `clrPopoverOrigin` is\n * itself only an assignment to that property, and with the toggle gone nothing else claims it.\n *\n * `parent` links the filter's popover to this menu's, so that scrolling while both are open closes\n * or repositions them together rather than leaving one behind. It is cleared again once the filter\n * closes, in the `openChange` subscription below, so it never outlives the menu session that set it.\n */\n protected openFilter(event: Event) {\n // reroute filter popover origin to filter trigger and set dropdown menu as parent.\n this.columnPopover.origin = this.trigger;\n this.columnPopover.parent = this._menuPopoverContent;\n\n // The popover closes on an outside click, and ignores exactly one event while doing so: the one\n // that opened it. Without this, the very click on this menu item would close the filter again.\n this.columnPopover.openEvent = event;\n this.columnPopover.open = true;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { booleanAttribute, Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';\nimport { ClrDropdownItem, RootDropdownService } from '@clr/angular/popover/dropdown';\nimport { BASIC_FOCUSABLE_ITEM_PROVIDER, FocusableItem } from '@clr/angular/utils';\n\nimport { ClrDatagridColumnActions } from './datagrid-column-actions';\n\n/**\n * An application provided item in a `clr-dg-column-actions` menu. It is the dropdown item - same\n * inputs, styling and arrow key order - with what a column action needs on top: it closes the menu\n * when picked, or re-anchors it after an action that leaves it open.\n */\n@Directive({\n selector: '[clrDgColumnAction]',\n providers: [BASIC_FOCUSABLE_ITEM_PROVIDER],\n standalone: false,\n})\nexport class ClrDatagridColumnAction extends ClrDropdownItem {\n /**\n * Whether activating this item should close the menu.\n */\n @Input({ alias: 'clrCanClosePopover', transform: booleanAttribute }) canClosePopover = true;\n\n constructor(\n private columnActions: ClrDatagridColumnActions,\n item: FocusableItem,\n dropdownService: RootDropdownService,\n el: ElementRef,\n renderer: Renderer2\n ) {\n super(columnActions, dropdownService, item, el, renderer);\n }\n\n // Space and enter both turn into a click, so this covers the keyboard as well.\n @HostListener('click')\n protected onColumnActionClick() {\n if (this.disabled) {\n return;\n }\n\n if (this.canClosePopover) {\n this.columnActions.closeMenu();\n } else {\n this.columnActions.repositionMenu();\n }\n }\n\n /**\n * Focus can arrive from anywhere - the arrow keys, or a plain `focus()` from an application that\n * moved the column this action belongs to and rebuilt the menu. Reporting it keeps space and enter\n * acting on this item rather than on whatever the menu focused when it opened.\n */\n @HostListener('focus')\n protected onFocus() {\n this.columnActions.focusAction(this.focusableItem);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/**\n * This file prevents an import cycle.\n */\n\nimport { TrackByFunction } from '@angular/core';\n\nimport { ColumnState } from './interfaces/column-state.interface';\n\nexport const columnToggleTrackByFn: TrackByFunction<ColumnState> = index => index;\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { ColumnsService } from './providers/columns.service';\n\n@Component({\n selector: 'clr-dg-column-toggle-button',\n template: `\n <button\n class=\"btn btn-sm btn-link switch-button\"\n (click)=\"selectAll()\"\n [disabled]=\"allHideablesVisible\"\n type=\"button\"\n >\n {{ commonStrings.keys.selectAll }}\n </button>\n `,\n standalone: false,\n})\nexport class ClrDatagridColumnToggleButton {\n private allSelected: Subject<boolean> = new EventEmitter();\n\n constructor(\n public commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService\n ) {}\n\n @Output('clrAllSelected')\n get clrAllSelected(): Observable<boolean> {\n return this.allSelected.asObservable();\n }\n\n get allHideablesVisible() {\n return this.hideableColumns().filter(column => column.value.hidden).length === 0;\n }\n\n selectAll() {\n this.hideableColumns().forEach(hideableColumn =>\n this.columnsService.emitStateChange(hideableColumn, {\n hidden: false,\n changes: [DatagridColumnChanges.HIDDEN],\n })\n );\n this.allSelected.next(true);\n }\n\n private hideableColumns(): BehaviorSubject<ColumnState>[] {\n return this.columnsService.columns.filter(column => column.value.hideable);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';\nimport {\n ClrPopoverHostDirective,\n ClrPopoverPosition,\n ClrPopoverService,\n ClrPopoverType,\n} from '@clr/angular/popover/common';\nimport { ClrCommonStringsService, uniqueIdFactory } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { columnToggleTrackByFn } from './datagrid-column-toggle-trackby';\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { ColumnsService } from './providers/columns.service';\n\n@Component({\n selector: 'clr-dg-column-toggle',\n template: `\n <button\n role=\"button\"\n type=\"button\"\n class=\"btn btn-sm column-toggle-action\"\n clrPopoverOrigin\n clrPopoverOpenCloseButton\n [attr.aria-controls]=\"popoverId\"\n [attr.aria-expanded]=\"openState\"\n [attr.aria-haspopup]=\"'menu'\"\n >\n {{ commonStrings.keys.pickColumns }}\n </button>\n <div\n class=\"column-switch\"\n role=\"dialog\"\n [attr.aria-label]=\"commonStrings.keys.showColumnsMenuDescription\"\n [id]=\"popoverId\"\n cdkTrapFocus\n cdkTrapFocusAutoCapture\n *clrPopoverContent=\"\n openState;\n at: popoverPosition;\n type: popoverType;\n outsideClickToClose: true;\n scrollToClose: true\n \"\n >\n <div class=\"switch-header\">\n <div class=\"clr-sr-only\" tabindex=\"-1\" #allSelected>{{ commonStrings.keys.allColumnsSelected }}</div>\n <h2>{{ commonStrings.keys.showColumns }}</h2>\n <button\n class=\"btn btn-sm btn-link-neutral toggle-switch-close-button\"\n clrPopoverCloseButton\n type=\"button\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n >\n <cds-icon shape=\"window-close\" aria-hidden=\"true\" [attr.title]=\"commonStrings.keys.close\"></cds-icon>\n <span class=\"clr-sr-only\">{{ commonStrings.keys.close }}</span>\n </button>\n </div>\n <ul class=\"switch-content list-unstyled\">\n @for (columnState of hideableColumnStates; track trackByFn($index, columnState)) {\n <li>\n <clr-checkbox-wrapper>\n <input\n clrCheckbox\n type=\"checkbox\"\n [disabled]=\"hasOnlyOneVisibleColumn && !columnState.hidden\"\n [ngModel]=\"!columnState.hidden\"\n (ngModelChange)=\"toggleColumnState(columnState, !$event)\"\n />\n <label>\n <ng-template [ngTemplateOutlet]=\"columnState.titleTemplateRef\"></ng-template>\n </label>\n </clr-checkbox-wrapper>\n </li>\n }\n </ul>\n <div class=\"switch-footer\">\n <clr-dg-column-toggle-button (clrAllSelected)=\"allColumnsSelected()\"></clr-dg-column-toggle-button>\n </div>\n </div>\n `,\n host: { '[class.column-switch-wrapper]': 'true', '[class.active]': 'openState' },\n hostDirectives: [ClrPopoverHostDirective],\n standalone: false,\n})\nexport class ClrDatagridColumnToggle implements OnDestroy {\n popoverId = uniqueIdFactory();\n openState = false;\n\n // Smart Popover\n popoverPosition = ClrPopoverPosition.TOP_LEFT;\n popoverType = ClrPopoverType.DROPDOWN;\n\n // Without tracking the checkboxes get rerendered on model update, which leads\n // to loss of focus after checkbox toggle.\n readonly trackByFn = columnToggleTrackByFn;\n\n private _allColumnsVisible: boolean;\n private subscription: Subscription;\n\n @ViewChild('allSelected', { read: ElementRef }) private allSelectedElement: ElementRef<HTMLElement>;\n\n constructor(\n public commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService,\n popoverService: ClrPopoverService\n ) {\n this.subscription = popoverService.openChange.subscribe(change => (this.openState = change));\n }\n\n get allColumnsVisible(): boolean {\n return this._allColumnsVisible;\n }\n set allColumnsVisible(value: boolean) {\n this._allColumnsVisible = value;\n }\n\n get hideableColumnStates(): ColumnState[] {\n const hideables = this.columnsService.columns.filter(column => column.value.hideable);\n return hideables.map(column => column.value);\n }\n\n get hasOnlyOneVisibleColumn(): boolean {\n const nbNonHideableColumns = this.columnsService.columns.length - this.hideableColumnStates.length;\n // this should only return true when there is no non-hideable columns.\n return (\n nbNonHideableColumns === 0 && this.hideableColumnStates.filter(columnState => !columnState.hidden).length === 1\n );\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n toggleColumnState(columnState: ColumnState, event: boolean) {\n const columnToToggle = this.columnsService.columns.filter(column => column.value === columnState)[0];\n this.columnsService.emitStateChange(columnToToggle, {\n hidden: event,\n changes: [DatagridColumnChanges.HIDDEN],\n });\n }\n\n toggleSwitchPanel() {\n this.openState = !this.openState;\n }\n\n allColumnsSelected() {\n this.allSelectedElement.nativeElement.focus();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { DetailService } from './providers/detail.service';\n\n@Component({\n selector: 'clr-dg-detail-header',\n host: {\n '[class.datagrid-detail-header]': 'true',\n },\n template: `\n <div #title class=\"datagrid-detail-header-title\" tabindex=\"-1\" [id]=\"titleId\">\n <ng-content></ng-content>\n </div>\n <div class=\"datagrid-detail-pane-close\">\n <button\n type=\"button\"\n class=\"btn btn-icon btn-link\"\n (click)=\"detailService.close()\"\n [attr.aria-label]=\"commonStrings.keys.close\"\n >\n <cds-icon shape=\"times\"></cds-icon>\n </button>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridDetailHeader implements AfterViewInit {\n @ViewChild('title') title: ElementRef<HTMLElement>;\n\n constructor(\n public detailService: DetailService,\n public commonStrings: ClrCommonStringsService\n ) {}\n\n get titleId() {\n return `${this.detailService.id}-title`;\n }\n\n ngAfterViewInit(): void {\n this.title.nativeElement.focus();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, ContentChild, Input } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { ClrDatagridDetailHeader } from './datagrid-detail-header';\nimport { DEFAULT_DETAIL_WIDTH, DetailService, MAX_DETAIL_WIDTH, MIN_DETAIL_WIDTH } from './providers/detail.service';\n\n@Component({\n selector: 'clr-dg-detail',\n host: {\n '[class.datagrid-detail-pane]': 'true',\n '[class.datagrid-detail-custom-width]': 'isCustomWidth',\n '[style.width.%]': 'width',\n },\n // We put the @if on the cdkTrapFocus so it doesn't always exist on the page\n // have to test for presence of header for aria-describedby because it was causing unit tests to crash\n template: `\n @if (detailService.isOpen) {\n <div\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"!header\"\n class=\"datagrid-detail-pane-content\"\n role=\"dialog\"\n [id]=\"detailService.id\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"labelledBy\"\n [attr.aria-label]=\"label\"\n >\n <div class=\"clr-sr-only\">{{ commonStrings.keys.detailPaneStart }}</div>\n <ng-content></ng-content>\n <div class=\"clr-sr-only\">{{ commonStrings.keys.detailPaneEnd }}</div>\n </div>\n }\n `,\n standalone: false,\n})\nexport class ClrDatagridDetail {\n @Input('clrDetailAriaLabelledBy') ariaLabelledBy: string;\n @Input('clrDetailAriaLabel') ariaLabel: string;\n\n @ContentChild(ClrDatagridDetailHeader) header: ClrDatagridDetailHeader;\n\n constructor(\n public detailService: DetailService,\n public commonStrings: ClrCommonStringsService\n ) {}\n\n @Input('clrDetailWidth')\n get detailWidth(): number {\n return this.detailService.detailWidth;\n }\n set detailWidth(value: number | null | undefined) {\n if (value === null || value === undefined) {\n this.detailService.detailWidth = DEFAULT_DETAIL_WIDTH;\n return;\n }\n\n if (value < MIN_DETAIL_WIDTH) {\n this.detailService.detailWidth = MIN_DETAIL_WIDTH;\n return;\n }\n\n if (value > MAX_DETAIL_WIDTH) {\n this.detailService.detailWidth = MAX_DETAIL_WIDTH;\n return;\n }\n\n this.detailService.detailWidth = value;\n }\n\n get isCustomWidth(): boolean {\n return this.detailWidth !== DEFAULT_DETAIL_WIDTH;\n }\n\n get width(): number | null {\n // Skip the inline style at 100% so the .datagrid-detail-overlay CSS rule takes over\n // without needing !important to override an inline style.\n return this.detailWidth !== MAX_DETAIL_WIDTH ? this.detailWidth : null;\n }\n\n get labelledBy(): string {\n if (this.ariaLabelledBy) {\n return this.header ? `${this.header.titleId} ${this.ariaLabelledBy}` : this.ariaLabelledBy;\n } else if (this.ariaLabel) {\n // If aria-label is set by the end user, do not set aria-labelledby\n return null;\n } else {\n return this.header?.titleId || '';\n }\n }\n\n get label(): string {\n if (!this.ariaLabelledBy) {\n return this.ariaLabel || null;\n } else {\n return null;\n }\n }\n\n close(): void {\n this.detailService.close();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'clr-dg-detail-body',\n template: `\n <div class=\"clr-dg-detail-body-wrapper\">\n <ng-content></ng-content>\n </div>\n `,\n host: {\n '[class.datagrid-detail-body]': 'true',\n },\n standalone: false,\n})\nexport class ClrDatagridDetailBody {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Directive,\n EventEmitter,\n Inject,\n Input,\n OnDestroy,\n Optional,\n Output,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { DatagridColumnChanges } from './enums/column-changes.enum';\nimport { ColumnState } from './interfaces/column-state.interface';\nimport { COLUMN_STATE } from './providers/column-state.provider';\nimport { ColumnsService } from './providers/columns.service';\n\n@Directive({\n selector: '[clrDgHideableColumn]',\n standalone: false,\n})\n\n/**\n *\n * @description\n * A structural directive meant to be used inside a clr-dg-column component.\n *\n * <clr-dg-column>\n * <ng-container *clrDgHideableColumn=\"{ hidden: true }\">\n * User ID\n * </ng-container>\n * </clr-dg-column>\n *\n * It sets up state and properties so that columns can be manges for hide/show by a service and an internal\n * datagrid toggle component.\n *\n */\nexport class ClrDatagridHideableColumn implements OnDestroy {\n @Output('clrDgHiddenChange') hiddenChange = new EventEmitter<boolean>();\n\n /**\n *\n * @description\n * Used to initialize the column with either hidden or visible state.\n *\n */\n private _hidden: boolean;\n\n private subscriptions: Subscription[] = [];\n\n constructor(\n private titleTemplateRef: TemplateRef<any>,\n viewContainerRef: ViewContainerRef,\n private columnsService: ColumnsService,\n @Optional()\n @Inject(COLUMN_STATE)\n private columnState: BehaviorSubject<ColumnState>\n ) {\n viewContainerRef.createEmbeddedView(titleTemplateRef);\n\n if (!columnState) {\n throw new Error('The *clrDgHideableColumn directive can only be used inside of a clr-dg-column component.');\n }\n }\n\n /**\n *\n * @description\n * Setter fn for the @Input with the same name as this structural directive.\n * It allows the user to pre-configure the column's hide/show state. { hidden: true }\n * It's more verbose but has more Clarity.\n *\n * @example\n * *clrDgHideableColumn\n * *clrDgHideableColumn={hidden: false}\n * *clrDgHideableColumn={hidden: true}\n *\n */\n @Input('clrDgHideableColumn')\n set clrDgHideableColumn(value: { hidden: boolean } | string) {\n if (typeof value === 'string') {\n this.clrDgHidden = false;\n return;\n }\n this.clrDgHidden = value && value.hidden ? value.hidden : false;\n }\n\n @Input('clrDgHidden')\n set clrDgHidden(hidden: boolean) {\n this._hidden = hidden ? hidden : false;\n this.columnsService.emitStateChange(this.columnState, {\n hidden: this._hidden,\n changes: [DatagridColumnChanges.HIDDEN],\n });\n }\n\n ngOnInit() {\n this.columnsService.emitStateChange(this.columnState, {\n hideable: true,\n titleTemplateRef: this.titleTemplateRef,\n hidden: this._hidden,\n changes: [DatagridColumnChanges.HIDDEN],\n });\n\n this.subscriptions.push(\n this.columnState.subscribe((state: ColumnState) => {\n if (state.changes && state.changes.indexOf(DatagridColumnChanges.HIDDEN) > -1) {\n this.hiddenChange.emit(state.hidden); // Can emit through @Output when desugared syntax is used\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Directive,\n EmbeddedViewRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { DetailService } from './providers/detail.service';\n\n@Directive({\n selector: '[clrIfDetail]',\n standalone: false,\n})\nexport class ClrIfDetail implements OnInit, OnDestroy {\n @Output('clrIfDetailChange') stateChange = new EventEmitter<any>(null);\n\n private subscriptions: Subscription[] = [];\n private skip = false; // This keeps us from resetting the input and calling the toggle twice\n private embeddedViewRef: EmbeddedViewRef<any>;\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private detailService: DetailService\n ) {\n detailService.enabled = true;\n }\n\n @Input('clrIfDetail')\n set state(model: any) {\n if (!this.skip) {\n this.detailService.toggle(model);\n }\n this.skip = false;\n }\n\n get viewContext() {\n return { $implicit: this.detailService.state };\n }\n\n ngOnInit() {\n this.subscriptions.push(\n this.detailService.stateChange.subscribe(state => {\n if (state === true) {\n this.togglePanel(true);\n } else {\n this.togglePanel(false);\n }\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n private togglePanel(showPanel: boolean) {\n let stateChangeParams = null;\n\n if (showPanel === true) {\n if (!this.embeddedViewRef) {\n // Create a context forward `Proxy` that will always bind to the user-specified context,\n // without having to re-assign it whenever changes.\n const viewContext = this._createContextForwardProxy();\n this.embeddedViewRef = this.viewContainer.createEmbeddedView(this.templateRef, viewContext);\n }\n\n this.skip = true;\n stateChangeParams = this.detailService.state;\n } else {\n this.viewContainer.clear();\n this.embeddedViewRef = null;\n }\n\n this.stateChange.emit(stateChangeParams);\n }\n\n /**\n * For a given outlet instance, we create a proxy object that delegates\n * to the user-specified context. This allows changing, or swapping out\n * the context object completely without having to destroy/re-create the view.\n */\n private _createContextForwardProxy() {\n return new Proxy(\n {},\n {\n set: (_target, prop, newValue) => {\n if (!this.viewContext) {\n return false;\n }\n return Reflect.set(this.viewContext, prop, newValue);\n },\n get: (_target, prop, receiver) => {\n if (!this.viewContext) {\n return undefined;\n }\n return Reflect.get(this.viewContext, prop, receiver);\n },\n }\n );\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n Component,\n ContentChildren,\n Input,\n OnDestroy,\n QueryList,\n ViewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridCell } from './datagrid-cell';\nimport { DatagridIfExpandService } from './datagrid-if-expanded.service';\nimport { SelectionType } from './enums/selection-type';\nimport { ColumnsService } from './providers/columns.service';\nimport { DisplayModeService } from './providers/display-mode.service';\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\nimport { RowActionService } from './providers/row-action-service';\nimport { Selection } from './providers/selection';\n\n/**\n * Generic bland container serving various purposes for Datagrid.\n * For instance, it can help span a text over multiple rows in detail view.\n */\n@Component({\n selector: 'clr-dg-row-detail',\n template: `\n <div class=\"clr-sr-only\">\n {{ beginningOfExpandableContentAriaText }}\n {{ commonStrings.keys.datagridExpandableRowsHelperText }}\n </div>\n <!--\n These two containers mirror the ones in the row above and are only used while the detail is\n column aligned - see columnAligned. They are always rendered so the cells always have\n somewhere to be moved into, and the pinned one takes itself out of the layout while empty.\n -->\n <div class=\"datagrid-pinned-cells\">\n <ng-container #pinnedCells></ng-container>\n </div>\n <ng-container #scrollableCells></ng-container>\n @if (this.cells?.length > 0) {\n <ng-container [ngTemplateOutlet]=\"noCells\"></ng-container>\n <!--\n Where the cells go back to when the detail stops being column aligned, because a column was\n unpinned. A view that has been moved into a container cannot be handed back to the content\n projection it came from, so it needs a container of its own in the same place.\n -->\n <ng-container #plainCells></ng-container>\n }\n @if (this.cells?.length === 0) {\n <clr-dg-cell class=\"datagrid-container\">\n <ng-container [ngTemplateOutlet]=\"noCells\"></ng-container>\n </clr-dg-cell>\n }\n\n <ng-template #noCells>\n <ng-content></ng-content>\n </ng-template>\n <div class=\"clr-sr-only\">{{ endOfExpandableContentAriaText }}</div>\n `,\n host: {\n '[class.datagrid-row-flex]': 'true',\n '[class.datagrid-row-detail]': 'true',\n '[attr.id]': 'expand.expandableId',\n role: 'row',\n },\n standalone: false,\n})\nexport class ClrDatagridRowDetail implements AfterContentInit, AfterViewInit, AfterViewChecked, OnDestroy {\n @Input('clrRowDetailBeginningAriaText') _beginningOfExpandableContentAriaText: string;\n @Input('clrRowDetailEndAriaText') _endOfExpandableContentAriaText: string;\n\n replacedRow = false;\n\n /**\n * Whether the detail lays its cells out in the same columns as the row, which it does when it\n * holds one cell per column and at least one of those columns is pinned. The cells of the pinned\n * columns are then static alongside the ones in the row above.\n */\n columnAligned = false;\n\n /* reference to the enum so that template can access it */\n SELECTION_TYPE = SelectionType;\n\n @ContentChildren(ClrDatagridCell) cells: QueryList<ClrDatagridCell>;\n\n @ViewChild('pinnedCells', { read: ViewContainerRef }) private _pinnedCells: ViewContainerRef;\n @ViewChild('scrollableCells', { read: ViewContainerRef }) private _scrollableCells: ViewContainerRef;\n @ViewChild('plainCells', { read: ViewContainerRef }) private _plainCells: ViewContainerRef;\n\n private subscriptions: Subscription[] = [];\n private cellsMoved = false;\n private lastLayout: string;\n private hadCells: boolean;\n\n constructor(\n public selection: Selection,\n public rowActionService: RowActionService,\n public expand: DatagridIfExpandService,\n public expandableRows: ExpandableRowsCount,\n public commonStrings: ClrCommonStringsService,\n private columnsService: ColumnsService,\n private displayMode: DisplayModeService\n ) {}\n\n @Input('clrDgReplace')\n set replace(value: boolean) {\n this.expand.setReplace(!!value);\n }\n\n get beginningOfExpandableContentAriaText() {\n return (\n this._beginningOfExpandableContentAriaText ||\n `${this.commonStrings.keys.datagridExpandableBeginningOf} ${this.commonStrings.keys.datagridExpandableRowContent}`\n );\n }\n\n get endOfExpandableContentAriaText() {\n return (\n this._endOfExpandableContentAriaText ||\n `${this.commonStrings.keys.datagridExpandableEndOf} ${this.commonStrings.keys.datagridExpandableRowContent}`\n );\n }\n\n ngAfterContentInit() {\n this.subscriptions.push(\n this.expand.replace.subscribe(replaceChange => {\n this.replacedRow = replaceChange;\n }),\n // New cells have to be moved even when the columns did not change.\n this.cells.changes.subscribe(() => this.syncColumnAlignment(true))\n );\n }\n\n ngAfterViewInit() {\n this.subscriptions.push(\n // The columns are set up after the detail's content, and pinning one happens later still.\n // Both land as a new render cycle, which is where the cells are moved.\n this.displayMode.view.subscribe(() => this.syncColumnAlignment())\n );\n this.syncColumnAlignment(true);\n this.hadCells = this.cells?.length > 0;\n }\n\n ngAfterViewChecked() {\n // The template holds the content in one of two places, depending on whether the detail has cells\n // of its own, and creating either of them projects the content into it - which takes the cells\n // back out of the containers they were moved into. That happens when a detail turns up with no\n // cells and receives them later, as it does when its content is behind a `clrLoading` template.\n // By this point the swap has happened, so the move can be repeated for good.\n const hasCells = this.cells?.length > 0;\n if (hasCells !== this.hadCells) {\n this.hadCells = hasCells;\n this.syncColumnAlignment(true);\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n /**\n * Moves the cells into the containers that lay them out in the same columns as the row, or back\n * out of them once that stops making sense.\n */\n private syncColumnAlignment(force = false) {\n if (!this._pinnedCells || !this._scrollableCells) {\n return;\n }\n const columns = this.columnsService.columnStates;\n const cells = this.cells ? this.cells.toArray() : [];\n // One cell per column is what makes the two comparable. Pinning is what makes the split worth\n // doing at all: with nothing pinned there is nothing to line up with, and the detail is left\n // exactly as it was authored.\n const columnAligned = cells.length > 0 && cells.length === columns.length && columns.some(column => column.pinned);\n const layout = columnAligned ? columns.map(column => (column.pinned ? '1' : '0')).join('') : '';\n\n if (!force && layout === this.lastLayout) {\n return;\n }\n this.lastLayout = layout;\n this.columnAligned = columnAligned;\n\n if (!columnAligned) {\n // Only worth doing if the cells were moved in the first place. Leaving an untouched detail\n // alone keeps whatever the author wrote between the cells where they wrote it.\n if (this.cellsMoved) {\n cells.forEach(cell => this.moveCell(this._plainCells, cell));\n this.cellsMoved = false;\n }\n return;\n }\n cells.forEach((cell, index) =>\n this.moveCell(this.columnsService.isPinned(index) ? this._pinnedCells : this._scrollableCells, cell)\n );\n this.cellsMoved = true;\n }\n\n private moveCell(container: ViewContainerRef, cell: ClrDatagridCell) {\n if (container && !cell._view.destroyed) {\n container.insert(cell._view);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component } from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\n\nimport { SelectionType } from './enums/selection-type';\nimport { ColumnsService } from './providers/columns.service';\nimport { DetailService } from './providers/detail.service';\nimport { Selection } from './providers/selection';\n\n@Component({\n selector: 'clr-dg-footer',\n template: `\n @if (selection.selectionType === SELECTION_TYPE.Multi && selection.current?.length > 0) {\n <div class=\"clr-form-control-disabled\">\n <clr-checkbox-wrapper class=\"datagrid-footer-select\">\n <input clrCheckbox type=\"checkbox\" checked=\"checked\" disabled />\n <label>{{ selection.current.length }}</label>\n <span class=\"clr-sr-only\">{{ commonStrings.keys.selectedRows }}</span>\n </clr-checkbox-wrapper>\n </div>\n }\n @if (!detailService.isOpen) {\n @if (hasHideableColumns) {\n <clr-dg-column-toggle></clr-dg-column-toggle>\n }\n <div class=\"datagrid-footer-description\">\n <ng-content></ng-content>\n </div>\n }\n <ng-content select=\"clr-dg-pagination\"></ng-content>\n `,\n host: {\n '[class.datagrid-footer]': 'true',\n },\n standalone: false,\n})\nexport class ClrDatagridFooter<T = any> {\n /* reference to the enum so that template can access */\n SELECTION_TYPE = SelectionType;\n\n constructor(\n public selection: Selection<T>,\n public detailService: DetailService,\n private columnsService: ColumnsService,\n public commonStrings: ClrCommonStringsService\n ) {}\n\n get hasHideableColumns(): boolean {\n return this.columnsService.hasHideableColumns;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, Input, ViewChild } from '@angular/core';\nimport { ClrControlLabel } from '@clr/angular/forms/common';\nimport { uniqueIdFactory } from '@clr/angular/utils';\n\nimport { Page } from './providers/page';\n\n@Component({\n selector: 'clr-dg-page-size',\n template: `\n <label [for]=\"pageSizeOptionsId\"><ng-content></ng-content></label>\n <div class=\"clr-select-wrapper\">\n <select [id]=\"pageSizeOptionsId\" [class.clr-page-size-select]=\"true\" [(ngModel)]=\"page.size\">\n @for (option of pageSizeOptions; track option) {\n <option [ngValue]=\"option\">{{ option }}</option>\n }\n </select>\n </div>\n `,\n standalone: false,\n})\nexport class ClrDatagridPageSize {\n @Input('clrPageSizeOptions') pageSizeOptions: number[];\n @Input('clrPageSizeOptionsId') pageSizeOptionsId = uniqueIdFactory();\n\n constructor(public page: Page) {}\n\n @ViewChild(ClrControlLabel, { static: true })\n set label(label: ClrControlLabel) {\n if (label) {\n label.disableGrid();\n }\n }\n\n ngOnInit() {\n if (!this.pageSizeOptions || this.pageSizeOptions.length === 0) {\n this.pageSizeOptions = [this.page.size];\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { ClrCommonStringsService } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagridPageSize } from './datagrid-page-size';\nimport { DetailService } from './providers/detail.service';\nimport { Page } from './providers/page';\n\n@Component({\n selector: 'clr-dg-pagination',\n template: `\n @if (!detailService.isOpen) {\n @if (_pageSizeComponent) {\n <div class=\"pagination-size\">\n <ng-content select=\"clr-dg-page-size\"></ng-content>\n </div>\n }\n <div class=\"pagination-description\">\n <ng-content></ng-content>\n </div>\n @if (page.last > 1) {\n <div class=\"pagination-list\">\n <button\n type=\"button\"\n class=\"pagination-first\"\n [disabled]=\"page.current <= 1\"\n (click)=\"page.current = 1\"\n [attr.aria-label]=\"commonStrings.keys.firstPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.firstPage }}</span>\n <cds-icon shape=\"step-forward-2\" direction=\"down\"></cds-icon>\n </button>\n <button\n type=\"button\"\n class=\"pagination-previous\"\n [disabled]=\"page.current <= 1\"\n (click)=\"page.current = page.current - 1\"\n [attr.aria-label]=\"commonStrings.keys.previousPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.previousPage }}</span>\n <cds-icon shape=\"angle\" direction=\"left\"></cds-icon>\n </button>\n <div class=\"pagination-pages\">\n @if (!disableCurrentPageInput) {\n <input\n #currentPageInput\n type=\"text\"\n class=\"pagination-current clr-input\"\n [size]=\"page.last.toString().length\"\n [value]=\"page.current\"\n (keydown.enter)=\"updateCurrentPage($event)\"\n (blur)=\"verifyCurrentPage($event)\"\n [attr.aria-label]=\"commonStrings.keys.currentPage\"\n />\n } @else {\n <span>{{ page.current }}</span>\n }\n / <span [attr.aria-label]=\"commonStrings.keys.totalPages\">{{ page.last }}</span>\n </div>\n <button\n type=\"button\"\n class=\"pagination-next\"\n [disabled]=\"page.current >= page.last\"\n (click)=\"page.current = page.current + 1\"\n [attr.aria-label]=\"commonStrings.keys.nextPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.nextPage }}</span>\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n <button\n type=\"button\"\n class=\"pagination-last\"\n [disabled]=\"page.current >= page.last\"\n (click)=\"page.current = page.last\"\n [attr.aria-label]=\"commonStrings.keys.lastPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.lastPage }}</span>\n <cds-icon shape=\"step-forward-2\" direction=\"up\"></cds-icon>\n </button>\n </div>\n }\n }\n @if (detailService.isOpen) {\n <div class=\"pagination-description-compact\">\n {{ page.firstItem + 1 }}-{{ page.lastItem + 1 }} / {{ page.totalItems }}\n </div>\n <div class=\"pagination-list\">\n <button\n type=\"button\"\n class=\"pagination-previous\"\n [disabled]=\"page.current <= 1\"\n (click)=\"page.current = page.current - 1\"\n [attr.aria-label]=\"commonStrings.keys.previousPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.previousPage }}</span>\n <cds-icon shape=\"angle\" direction=\"left\"></cds-icon>\n </button>\n <span>{{ page.current }}</span>\n <button\n type=\"button\"\n class=\"pagination-next\"\n [disabled]=\"page.current >= page.last\"\n (click)=\"page.current = page.current + 1\"\n [attr.aria-label]=\"commonStrings.keys.nextPage\"\n >\n <span class=\"clr-sr-only\">{{ commonStrings.keys.nextPage }}</span>\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n </div>\n }\n `,\n host: { '[class.pagination]': 'true' },\n standalone: false,\n})\nexport class ClrDatagridPagination implements OnDestroy, OnInit {\n @Input('clrDgPageInputDisabled') disableCurrentPageInput: boolean;\n\n @Output('clrDgPageChange') currentChanged = new EventEmitter<number>(false);\n\n @ContentChild(ClrDatagridPageSize) _pageSizeComponent: ClrDatagridPageSize;\n\n @ViewChild('currentPageInput') currentPageInputRef: ElementRef<HTMLInputElement>;\n\n /**\n * Subscription to the page service changes\n */\n private _pageSubscription: Subscription;\n\n constructor(\n public page: Page,\n public commonStrings: ClrCommonStringsService,\n public detailService: DetailService\n ) {\n page.activated = true;\n }\n\n /**\n * Page size\n */\n @Input('clrDgPageSize')\n get pageSize(): number {\n return this.page.size;\n }\n set pageSize(size: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof size === 'number') {\n this.page.size = size;\n }\n }\n\n /**\n * Total items (needed to guess the last page)\n */\n @Input('clrDgTotalItems')\n get totalItems(): number {\n return this.page.totalItems;\n }\n set totalItems(total: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof total === 'number') {\n this.page.totalItems = total;\n }\n }\n\n /**\n * Last page\n */\n @Input('clrDgLastPage')\n get lastPage(): number {\n return this.page.last;\n }\n set lastPage(last: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof last === 'number') {\n this.page.last = last;\n }\n }\n\n /**\n * Current page\n */\n @Input('clrDgPage')\n get currentPage(): number {\n return this.page.current;\n }\n set currentPage(page: number) {\n // todo(v16): Remove this check. The property type used to be `string | number`. I kept this check to maintain the no-op if you pass a string.\n if (typeof page === 'number') {\n this.page.current = page;\n }\n }\n\n /**\n * Index of the first item displayed on the current page, starting at 0, -1 if none displayed\n */\n get firstItem(): number {\n return this.page.firstItem;\n }\n\n /**\n * Index of the last item displayed on the current page, starting at 0, -1 if none displayed\n */\n get lastItem(): number {\n return this.page.lastItem;\n }\n\n /**\n * Conditionally adds page numbers before and after the current page\n */\n get middlePages(): number[] {\n const middlePages: number[] = [];\n if (this.page.current > 1) {\n middlePages.push(this.page.current - 1);\n }\n middlePages.push(this.page.current);\n if (this.page.current < this.page.last) {\n middlePages.push(this.page.current + 1);\n }\n return middlePages;\n }\n\n /**********\n * Subscription to the Page service for page changes.\n * Note: this only emits after the datagrid is initialized/stabalized and the page changes.\n */\n ngOnInit() {\n /*\n * Default page size is 10.\n * The reason we set it here and not in the provider itself is because\n * we don't want pagination if this component isn't present in the datagrid.\n */\n if (!this.page.size) {\n this.page.size = 10;\n }\n this._pageSubscription = this.page.change.subscribe(current => this.currentChanged.emit(current));\n }\n\n ngOnDestroy() {\n this.page.resetPageSize(true);\n if (this._pageSubscription) {\n this._pageSubscription.unsubscribe();\n }\n }\n\n /**\n * Moves to the previous page if it exists\n */\n previous() {\n this.page.previous();\n }\n\n /**\n * Moves to the next page if it exists\n */\n next() {\n this.page.next();\n }\n\n verifyCurrentPage(event: any): void {\n const parsed = parseInt(event.target.value, 10);\n if (parsed !== this.page.current) {\n event.target.value = this.page.current;\n }\n }\n\n /**\n * We only update the pagination's current page on enter.\n */\n updateCurrentPage(event: any): void {\n const parsed = parseInt(event.target.value, 10);\n\n // if the input value, is not a number, we don't update the page\n if (!isNaN(parsed)) {\n if (parsed < 1) {\n this.page.current = 1;\n } else if (parsed > this.page.last) {\n this.page.current = this.page.last;\n } else {\n this.page.current = parsed;\n }\n }\n\n /**\n * Set the input's value to the new current page. This is needed because the code\n * above may have changed the value from what the user entered in.\n */\n this.currentPageInputRef.nativeElement.value = this.page.current.toString();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ClrDatagridComparatorInterface } from './comparator.interface';\n\nexport interface ClrDatagridStateInterface<T = any> {\n page?: { from?: number; to?: number; size?: number; current?: number };\n sort?: { by: string | ClrDatagridComparatorInterface<T>; reverse: boolean };\n filters?: any[];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Observable } from 'rxjs';\n\nexport interface ClrDatagridFilterInterface<T, S = any> {\n readonly state?: S;\n\n changes: Observable<any>;\n\n isActive(): boolean;\n\n accepts(item: T): boolean;\n\n equals?(other: ClrDatagridFilterInterface<T, any>): boolean;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridStringFilterInterface<T> {\n accepts(item: T, search: string): boolean;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridNumericFilterInterface<T> {\n accepts(item: T, low: number, high: number): boolean;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridComparatorInterface<T> {\n compare(a: T, b: T): number;\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport interface ClrDatagridVirtualScrollRangeInterface<T> {\n total: number;\n skip: number;\n data: T[];\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, Optional } from '@angular/core';\n\nimport { ExpandableRowsCount } from './providers/global-expandable-rows';\n\n/*\n * I don't think this deserves to be in IfExpanded itself,\n * so I'm adding a second directive on the same selector for now just for the datagrid\n */\n@Directive({\n selector: '[clrIfExpanded]',\n standalone: false,\n})\nexport class DatagridDetailRegisterer {\n constructor(@Optional() private expandableRowsCount: ExpandableRowsCount) {\n if (expandableRowsCount) {\n expandableRowsCount.register();\n }\n }\n\n ngOnDestroy() {\n if (this.expandableRowsCount) {\n this.expandableRowsCount.unregister();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, EventEmitter, Inject, OnDestroy, Output, Renderer2 } from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\nimport { BehaviorSubject, Subscription } from 'rxjs';\n\nimport { HIDDEN_COLUMN_CLASS, PINNED_COLUMN_CLASS, STRICT_WIDTH_CLASS } from './constants';\nimport { DatagridRenderOrganizer } from './render-organizer';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { ColumnState } from '../interfaces/column-state.interface';\nimport { ColumnResizerService } from '../providers/column-resizer.service';\nimport { COLUMN_STATE, COLUMN_STATE_PROVIDER } from '../providers/column-state.provider';\nimport { ColumnsService } from '../providers/columns.service';\n\n@Directive({\n selector: 'clr-dg-column',\n providers: [ColumnResizerService, COLUMN_STATE_PROVIDER],\n standalone: false,\n})\nexport class DatagridHeaderRenderer implements OnDestroy {\n @Output('clrDgColumnResize') resizeEmitter = new EventEmitter<number>();\n\n /**\n * Indicates if the column has a strict width, so it doesn't shrink or expand based on the content.\n */\n private widthSet = false;\n private autoSet = false;\n private subscriptions: Subscription[] = [];\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n organizer: DatagridRenderOrganizer,\n private domAdapter: DomAdapter,\n private columnResizerService: ColumnResizerService,\n private columnsService: ColumnsService,\n @Inject(COLUMN_STATE) private columnState: BehaviorSubject<ColumnState>\n ) {\n this.subscriptions.push(\n organizer.filterRenderSteps(DatagridRenderStep.CLEAR_WIDTHS).subscribe(() => this.clearWidth())\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n getColumnWidthState(): Partial<ColumnState> {\n const strictWidth = this.detectStrictWidth();\n return {\n width: this.computeWidth(strictWidth),\n strictWidth: strictWidth,\n };\n }\n\n setColumnState(index: number) {\n this.columnsService.columns[index] = this.columnState;\n }\n\n setWidth(state: ColumnState) {\n if (state.strictWidth) {\n if (this.columnResizerService.resizedBy) {\n this.resizeEmitter.emit(state.width);\n this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');\n this.widthSet = false;\n }\n // Don't set width if there is a user-defined one. Just add the strict width class.\n this.renderer.addClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n this.autoSet = false;\n } else {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n this.renderer.setStyle(this.el.nativeElement, 'width', state.width + 'px');\n this.widthSet = true;\n this.autoSet = true;\n }\n }\n\n setHidden(state: ColumnState) {\n if (state.hidden) {\n this.renderer.addClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, HIDDEN_COLUMN_CLASS);\n }\n }\n\n setPinned(state: ColumnState) {\n if (state.pinned) {\n this.renderer.addClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n } else {\n this.renderer.removeClass(this.el.nativeElement, PINNED_COLUMN_CLASS);\n }\n }\n\n private clearWidth() {\n // remove the width only if we set it, and it is not changed by dragging.\n if (this.widthSet && !this.columnResizerService.resizedBy) {\n this.renderer.setStyle(this.el.nativeElement, 'width', null);\n }\n if (this.autoSet) {\n this.renderer.removeClass(this.el.nativeElement, STRICT_WIDTH_CLASS);\n }\n }\n\n private detectStrictWidth(): number {\n if (this.columnResizerService.resizedBy) {\n return this.columnResizerService.widthAfterResize;\n } else if (this.autoSet) {\n return 0;\n } else {\n return this.domAdapter.userDefinedWidth(this.el.nativeElement);\n }\n }\n\n private computeWidth(strictWidth: number): number {\n let width: number = strictWidth;\n if (!width) {\n width = this.domAdapter.scrollWidth(this.el.nativeElement);\n }\n return width;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n/*\n * This version of the DomAdapter is for use on non-browser platforms, where there are no\n * nativeElements to use for calculations.\n */\n\nimport { Injectable } from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\n\n@Injectable()\nexport class NoopDomAdapter implements DomAdapter {\n userDefinedWidth(_element: any): number {\n return 0;\n }\n\n scrollBarWidth(_element: any) {\n return 0;\n }\n\n scrollWidth(_element: any) {\n return 0;\n }\n\n computedHeight(_element: any): number {\n return 0;\n }\n\n clientRect(_element: any): DOMRect {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0,\n } as DOMRect;\n }\n\n minWidth(_element: any): number {\n return 0;\n }\n\n focus(_element: any): void {\n // Do nothing\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n ElementRef,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport { DomAdapter } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { ClrDatagrid } from '../datagrid';\nimport { DatagridHeaderRenderer } from './header-renderer';\nimport { NoopDomAdapter } from './noop-dom-adapter';\nimport { DatagridRenderOrganizer } from './render-organizer';\nimport { DatagridRowRenderer } from './row-renderer';\nimport { DatagridColumnChanges } from '../enums/column-changes.enum';\nimport { DatagridRenderStep } from '../enums/render-step.enum';\nimport { ColumnState, ColumnStateDiff } from '../interfaces/column-state.interface';\nimport { ColumnsService } from '../providers/columns.service';\nimport { DetailService } from '../providers/detail.service';\nimport { Items } from '../providers/items';\nimport { Page } from '../providers/page';\nimport { TableSizeService } from '../providers/table-size.service';\nimport { KeyNavigationGridController } from '../utils/key-navigation-grid.controller';\n\n// Fixes build error\n// @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)\nexport const domAdapterFactory = (platformId: any) => {\n if (isPlatformBrowser(platformId)) {\n return new DomAdapter();\n } else {\n return new NoopDomAdapter();\n }\n};\n\n// Fixes build error\n// @dynamic (https://github.com/angular/angular/issues/19698#issuecomment-338340211)\n@Directive({\n selector: 'clr-datagrid',\n providers: [{ provide: DomAdapter, useFactory: domAdapterFactory, deps: [PLATFORM_ID] }],\n standalone: false,\n})\nexport class DatagridMainRenderer implements AfterContentInit, AfterViewInit, AfterViewChecked, OnDestroy {\n @ContentChildren(DatagridHeaderRenderer) private headers: QueryList<DatagridHeaderRenderer>;\n @ContentChildren(DatagridRowRenderer) private rows: QueryList<DatagridRowRenderer>;\n\n private _heightSet = false;\n private shouldStabilizeColumns = true;\n private subscriptions: Subscription[] = [];\n private intersectionObserver: IntersectionObserver = null;\n\n /**\n * Indicates if we want to re-compute columns width. This should only happen:\n * 1) When headers change, with columns being added or removed\n * 2) When rows are lazily loaded for the first time\n */\n private columnsSizesStable = false;\n\n constructor(\n private datagrid: ClrDatagrid,\n private organizer: DatagridRenderOrganizer,\n private items: Items,\n private page: Page,\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n detailService: DetailService,\n private tableSizeService: TableSizeService,\n private columnsService: ColumnsService,\n private ngZone: NgZone,\n private keyNavigation: KeyNavigationGridController,\n private changeDetectorRef: ChangeDetectorRef\n ) {\n this.subscriptions.push(\n organizer.filterRenderSteps(DatagridRenderStep.COMPUTE_COLUMN_WIDTHS).subscribe(() => this.computeHeadersWidth())\n );\n\n this.subscriptions.push(\n page.sizeChange.subscribe(() => {\n if (this._heightSet) {\n this.resetDatagridHeight();\n }\n })\n );\n this.subscriptions.push(detailService.stateChange.subscribe(state => this.toggleDetailPane(state)));\n this.subscriptions.push(items.change.subscribe(() => (this.shouldStabilizeColumns = true)));\n }\n\n ngOnInit() {\n this.columnsService.columnsStateChange.subscribe(change => this.columnStateChanged(change));\n // Datagrid used in other components like Accordion, Tabs or wrapped in onPush component which have their content\n // hidden by default gets initialised without being visible and breakes rendering cycle.\n // Should run only the first time if the datagrid is not visible on first initialization.\n if (this.el.nativeElement.offsetParent === null) {\n this.intersectionObserver = new IntersectionObserver(([entry]) => {\n if ((this.el.nativeElement.offsetParent || entry.isIntersecting) && this.columnsSizesStable) {\n this.columnsSizesStable = false;\n this.changeDetectorRef.markForCheck();\n this.intersectionObserver.disconnect();\n }\n });\n this.intersectionObserver.observe(this.el.nativeElement);\n }\n }\n\n ngAfterContentInit() {\n this.setupColumns();\n\n this.subscriptions.push(\n this.headers.changes.subscribe(() => {\n // TODO: only re-stabilize if a column was added or removed. Reordering is fine.\n // Need to setup columns before stabalizing them\n this.setupColumns();\n this.columnsSizesStable = false;\n this.stabilizeColumns();\n })\n );\n }\n\n // Initialize and set Table width for horizontal scrolling here.\n ngAfterViewInit() {\n this.tableSizeService.table = this.el;\n }\n\n ngAfterViewChecked() {\n if (this.shouldStabilizeColumns) {\n this.stabilizeColumns();\n }\n\n if (this.shouldComputeHeight()) {\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.computeDatagridHeight();\n });\n });\n }\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.intersectionObserver?.disconnect();\n }\n\n toggleDetailPane(state: boolean) {\n if (this.headers) {\n if (state && !this.columnsService.hasCache()) {\n this.columnsService.cache();\n\n // The pane leaves room for a single column, and it should be the one the user was already\n // looking at on the left of the row. Pinned columns are rendered before the rest, so that\n // is the first pinned column whenever anything is pinned, and the first declared one\n // otherwise.\n const keptColumn =\n this.columnsService.visibleColumns.find(column => column.pinned) || this.columnsService.visibleColumns[0];\n\n this.columnsService.visibleColumns.forEach(header => {\n if (header !== keptColumn) {\n this.columnsService.emitStateChangeAt(header.columnIndex, {\n changes: [DatagridColumnChanges.HIDDEN],\n hidden: state,\n });\n }\n // That single column is full width, so there is nothing to scroll and nothing to pin\n // against - the column that stays included. Pinning is suspended while the pane is open\n // and restored from the cache when it closes.\n if (header.pinned) {\n this.columnsService.emitStateChangeAt(header.columnIndex, {\n changes: [DatagridColumnChanges.PINNED],\n pinned: false,\n });\n }\n });\n } else if (!state) {\n this.columnsService.resetToLastCache();\n }\n }\n }\n\n private setupColumns() {\n this.headers.forEach((header, index) => header.setColumnState(index));\n this.columnsService.columns.splice(this.headers.length); // Trim any old columns\n // Sets columnIndex for each column\n this.columnsService.columns.forEach((column, index) => {\n this.columnsService.emitStateChange(column, { changes: [DatagridColumnChanges.INITIALIZE], columnIndex: index });\n });\n }\n\n private shouldComputeHeight(): boolean {\n if (!this._heightSet && this.page.size > 0) {\n if (this.items.displayed.length === this.page.size) {\n return true;\n }\n }\n return false;\n }\n\n private computeDatagridHeight() {\n const height = window.getComputedStyle(this.el.nativeElement).height;\n this.renderer.setStyle(this.el.nativeElement, 'height', height);\n this._heightSet = true;\n }\n\n private resetDatagridHeight() {\n this.renderer.setStyle(this.el.nativeElement, 'height', '');\n this._heightSet = false;\n }\n\n /**\n * Makes each header compute its width.\n */\n private computeHeadersWidth() {\n const nbColumns: number = this.headers.length;\n const headerWidths = this.headers.map(header => {\n return header.getColumnWidthState();\n });\n let allStrict = true;\n this.headers.forEach((header, index) => {\n // On the last header column check whether all columns have strict widths.\n // If all columns have strict widths, remove the strict width from the last column and make it the column's\n // minimum width so that when all previous columns shrink, it will get a flexible width and cover the empty\n // gap in the Datagrid.\n const state: ColumnStateDiff = {\n changes: [DatagridColumnChanges.WIDTH],\n ...headerWidths[index],\n };\n\n if (!state.strictWidth) {\n allStrict = false;\n }\n\n if (nbColumns === index + 1 && allStrict) {\n state.strictWidth = 0;\n }\n\n this.columnsService.emitStateChangeAt(index, state);\n });\n }\n\n private columnStateChanged(state: ColumnState) {\n // eslint-disable-next-line eqeqeq\n if (!this.headers || state.columnIndex == null) {\n return;\n }\n const columnIndex = state.columnIndex;\n if (state.changes && state.changes.length) {\n state.changes.forEach(change => {\n switch (change) {\n case DatagridColumnChanges.WIDTH:\n this.headers.get(columnIndex).setWidth(state);\n this.rows.forEach(row => {\n if (row?.cells.length === this.columnsService.columns.length) {\n row.cells.get(columnIndex).setWidth(state);\n row.expandableRows.forEach(expandableRow => {\n expandableRow.cells.get(columnIndex)?.setWidth(state);\n });\n }\n });\n break;\n case DatagridColumnChanges.HIDDEN:\n this.headers.get(columnIndex).setHidden(state);\n this.rows.forEach(row => {\n if (row.cells && row.cells.length) {\n row.cells.get(columnIndex).setHidden(state);\n\n row.expandableRows.forEach(expandableRow => {\n expandableRow.cells.get(columnIndex)?.setHidden(state);\n });\n }\n });\n this.updateColumnSeparatorsVisibility();\n this.keyNavigation.resetKeyGrid();\n break;\n case DatagridColumnChanges.PINNED: {\n // Read before the class is updated below. The state can be re-emitted with the same\n // value, e.g. by resetToLastCache, and relocating the views then is pure overhead.\n const wasPinned = this.datagrid.columns.get(columnIndex)?.isPinned;\n\n this.headers.get(columnIndex).setPinned(state);\n this.rows.forEach(row => {\n if (row.cells && row.cells.length) {\n row.cells.get(columnIndex)?.setPinned(state);\n\n row.expandableRows.forEach(expandableRow => {\n expandableRow.cells.get(columnIndex)?.setPinned(state);\n });\n }\n });\n\n if (wasPinned !== !!state.pinned) {\n this.updateColumnSeparatorsVisibility();\n this.keyNavigation.resetKeyGrid();\n // The column and its cells have to move between the static and the scrollable\n // containers, which happens on the next CALCULATE/DISPLAY cycle. Widths are\n // recomputed there as well, since the flex context of the column changes.\n // Deferring to ngAfterViewChecked keeps us out of the change detection pass that\n // the `clrDgPinned` input setter runs in.\n this.columnsSizesStable = false;\n this.shouldStabilizeColumns = true;\n }\n break;\n }\n case DatagridColumnChanges.INITIALIZE:\n if (state.pinned) {\n this.headers.get(columnIndex).setPinned(state);\n }\n if (state.hideable && state.hidden) {\n this.headers.get(columnIndex).setHidden(state);\n }\n if (state.pinned || (state.hideable && state.hidden)) {\n this.rows.forEach(row => {\n row.setCellsState();\n row.expandableRows.forEach(expandableRow => {\n expandableRow.setCellsState();\n });\n });\n this.updateColumnSeparatorsVisibility();\n }\n break;\n default:\n break;\n }\n });\n }\n }\n\n /**\n * Triggers a whole re-rendring cycle to set column sizes, if needed.\n */\n private stabilizeColumns() {\n if (this.columnsSizesStable) {\n // Nothing to do.\n return;\n }\n // Resize when the rows are loaded.\n if (this.items.displayed.length > 0) {\n this.organizer.resize();\n this.columnsSizesStable = true;\n }\n }\n\n private updateColumnSeparatorsVisibility() {\n const visibleColumns = this.datagrid.columns.filter(column => !column.isHidden);\n // Pinned columns are rendered in the static container, so they always have something after\n // them and keep their separator - it is what marks the boundary with the scrollable columns.\n // Only the last scrollable column has nothing after it and must hide its separator.\n const scrollableColumns = visibleColumns.filter(column => !column.isPinned);\n const lastScrollableColumn = scrollableColumns[scrollableColumns.length - 1];\n visibleColumns.forEach(column => {\n const showSeparator = column !== lastScrollableColumn;\n if (column.showSeparator !== showSeparator) {\n column.showSeparator = showSeparator;\n }\n });\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, OnDestroy } from '@angular/core';\n\nimport { DatagridRowRenderer } from './row-renderer';\nimport { ColumnsService } from '../providers/columns.service';\n\n@Directive({\n selector: 'clr-dg-row-detail',\n standalone: false,\n})\nexport class DatagridRowDetailRenderer extends DatagridRowRenderer implements OnDestroy {\n constructor(\n private parentRow: DatagridRowRenderer,\n columnsService: ColumnsService,\n el: ElementRef<HTMLElement>\n ) {\n super(columnsService, el);\n\n parentRow.expandableRows.push(this);\n }\n\n override ngOnDestroy() {\n this.parentRow.expandableRows = [];\n super.ngOnDestroy();\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ClrCheckboxModule } from '@clr/angular/forms/checkbox';\nimport { ClrInputModule } from '@clr/angular/forms/input';\nimport { ClrNumberInputModule } from '@clr/angular/forms/number-input';\nimport { ClrRadioModule } from '@clr/angular/forms/radio';\nimport { ClrSelectModule } from '@clr/angular/forms/select';\nimport {\n angleDoubleIcon,\n arrowIcon,\n ClarityIcons,\n ClrIcon,\n ellipsisGridCircleIcon,\n ellipsisVerticalIcon,\n filterGridCircleIcon,\n filterGridIcon,\n pinIcon,\n stepForward2Icon,\n timesIcon,\n twoWayArrowsIcon,\n unpinIcon,\n viewColumnsIcon,\n windowCloseIcon,\n} from '@clr/angular/icon';\nimport { ClrPopoverModuleNext } from '@clr/angular/popover/common';\nimport { ClrDropdownModule } from '@clr/angular/popover/dropdown';\nimport { ClrSpinnerModule } from '@clr/angular/progress/spinner';\nimport {\n CdkDragModule,\n CdkTrapFocusModule,\n ClrConditionalModule,\n ClrExpandableAnimationModule,\n ClrIfExpanded,\n ClrKeyFocusModule,\n ClrLoadingModule,\n ClrOutsideClickModule,\n} from '@clr/angular/utils';\n\nimport { DatagridNumericFilter } from './built-in/filters/datagrid-numeric-filter';\nimport { DatagridStringFilter } from './built-in/filters/datagrid-string-filter';\nimport { ActionableOompaLoompa } from './chocolate/actionable-oompa-loompa';\nimport { DatagridWillyWonka } from './chocolate/datagrid-willy-wonka';\nimport { ExpandableOompaLoompa } from './chocolate/expandable-oompa-loompa';\nimport { ClrDatagrid } from './datagrid';\nimport { ClrDatagridActionBar } from './datagrid-action-bar';\nimport { ClrDatagridActionOverflow } from './datagrid-action-overflow';\nimport { ClrDatagridCell } from './datagrid-cell';\nimport { ClrDatagridColumn } from './datagrid-column';\nimport { ClrDatagridColumnAction } from './datagrid-column-action';\nimport { ClrDatagridColumnActions } from './datagrid-column-actions';\nimport { ClrDatagridColumnSeparator } from './datagrid-column-separator';\nimport { ClrDatagridColumnToggle } from './datagrid-column-toggle';\nimport { ClrDatagridColumnToggleButton } from './datagrid-column-toggle-button';\nimport { ClrDatagridDetail } from './datagrid-detail';\nimport { ClrDatagridDetailBody } from './datagrid-detail-body';\nimport { ClrDatagridDetailHeader } from './datagrid-detail-header';\nimport { DatagridDetailRegisterer } from './datagrid-detail-registerer';\nimport { ClrDatagridFilter } from './datagrid-filter';\nimport { ClrDatagridFooter } from './datagrid-footer';\nimport { ClrDatagridHideableColumn } from './datagrid-hideable-column';\nimport { ClrIfDetail } from './datagrid-if-detail';\nimport { ClrDatagridItems } from './datagrid-items';\nimport { ClrDatagridPageSize } from './datagrid-page-size';\nimport { ClrDatagridPagination } from './datagrid-pagination';\nimport { ClrDatagridPlaceholder } from './datagrid-placeholder';\nimport { ClrDatagridRow } from './datagrid-row';\nimport { ClrDatagridRowDetail } from './datagrid-row-detail';\nimport { ClrDatagridSelectionCellDirective } from './datagrid-selection-cell.directive';\nimport { ClrDatagridSingleSelectionValueAccessor } from './datagrid-single-selection.directive';\nimport { ClrDatagridVirtualScrollDirective } from './datagrid-virtual-scroll.directive';\nimport { DatagridCellRenderer } from './render/cell-renderer';\nimport { DatagridHeaderRenderer } from './render/header-renderer';\nimport { DatagridMainRenderer } from './render/main-renderer';\nimport { DatagridRowDetailRenderer } from './render/row-detail-renderer';\nimport { DatagridRowRenderer } from './render/row-renderer';\nimport { WrappedCell } from './wrapped-cell';\nimport { WrappedColumn } from './wrapped-column';\nimport { WrappedRow } from './wrapped-row';\n\nexport const CLR_DATAGRID_DIRECTIVES: Type<any>[] = [\n // Core\n ClrDatagrid,\n ClrDatagridActionBar,\n ClrDatagridActionOverflow,\n ClrDatagridCell,\n ClrDatagridColumn,\n ClrDatagridColumnAction,\n ClrDatagridColumnActions,\n ClrDatagridColumnSeparator,\n ClrDatagridDetail,\n ClrDatagridDetailBody,\n ClrDatagridDetailHeader,\n ClrDatagridFilter,\n ClrDatagridFooter,\n ClrDatagridHideableColumn,\n ClrDatagridItems,\n ClrDatagridPageSize,\n ClrDatagridPagination,\n ClrDatagridPlaceholder,\n ClrDatagridRow,\n ClrDatagridRowDetail,\n ClrDatagridSelectionCellDirective,\n ClrDatagridVirtualScrollDirective,\n ClrIfDetail,\n DatagridDetailRegisterer,\n WrappedCell,\n WrappedColumn,\n WrappedRow,\n\n // Renderers\n DatagridCellRenderer,\n DatagridHeaderRenderer,\n DatagridMainRenderer,\n DatagridRowDetailRenderer,\n DatagridRowRenderer,\n\n // Chocolate\n ActionableOompaLoompa,\n DatagridWillyWonka,\n ExpandableOompaLoompa,\n\n // Built-in shortcuts\n DatagridNumericFilter,\n DatagridStringFilter,\n];\n\nconst CLR_DATAGRID_INTERNAL_DIRECTIVES = [ClrDatagridColumnToggle, ClrDatagridColumnToggleButton];\nconst CLR_DATAGRID_STANDALONE_DIRECTIVES = [ClrDatagridSingleSelectionValueAccessor];\nconst CLR_DATAGRID_SHARED_DIRECTIVES = [ClrIfExpanded];\n\n@NgModule({\n imports: [\n CommonModule,\n CdkDragModule,\n CdkTrapFocusModule,\n ClrIcon,\n ClrInputModule,\n ClrRadioModule,\n ClrCheckboxModule,\n ClrNumberInputModule,\n ClrSelectModule,\n FormsModule,\n ClrLoadingModule,\n ClrConditionalModule,\n ClrOutsideClickModule,\n ClrExpandableAnimationModule,\n ClrSpinnerModule,\n ClrPopoverModuleNext,\n ClrDropdownModule,\n ClrKeyFocusModule,\n CLR_DATAGRID_STANDALONE_DIRECTIVES,\n CLR_DATAGRID_SHARED_DIRECTIVES,\n ],\n declarations: [CLR_DATAGRID_DIRECTIVES, CLR_DATAGRID_INTERNAL_DIRECTIVES],\n exports: [CLR_DATAGRID_DIRECTIVES, CLR_DATAGRID_STANDALONE_DIRECTIVES, CLR_DATAGRID_SHARED_DIRECTIVES],\n})\nexport class ClrDatagridModule {\n constructor() {\n ClarityIcons.addIcons(\n ellipsisVerticalIcon,\n ellipsisGridCircleIcon,\n viewColumnsIcon,\n windowCloseIcon,\n arrowIcon,\n timesIcon,\n twoWayArrowsIcon,\n stepForward2Icon,\n angleDoubleIcon,\n filterGridCircleIcon,\n filterGridIcon,\n pinIcon,\n unpinIcon\n );\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './datagrid';\nexport * from './datagrid-action-bar';\nexport * from './datagrid-action-overflow';\nexport * from './datagrid-column';\nexport * from './datagrid-column-action';\nexport * from './datagrid-column-actions';\nexport * from './datagrid-column-toggle';\nexport * from './datagrid-column-toggle-button';\nexport * from './datagrid-column-separator';\nexport * from './datagrid-detail';\nexport * from './datagrid-detail-body';\nexport * from './datagrid-detail-header';\nexport * from './datagrid-hideable-column';\nexport * from './datagrid-filter';\nexport * from './datagrid-if-detail';\nexport * from './datagrid-items';\nexport * from './datagrid-row';\nexport * from './datagrid-row-detail';\nexport * from './datagrid-cell';\nexport * from './datagrid-footer';\nexport * from './datagrid-page-size';\nexport * from './datagrid-pagination';\nexport * from './datagrid-placeholder';\n\nexport * from './interfaces/state.interface';\nexport * from './enums/sort-order.enum';\nexport * from './enums/selection-type';\nexport * from './interfaces/filter.interface';\nexport * from './interfaces/string-filter.interface';\nexport * from './interfaces/numeric-filter.interface';\nexport * from './interfaces/comparator.interface';\nexport * from './interfaces/virtual-scroll-data-range.interface';\n\nexport * from './built-in/filters/datagrid-string-filter';\nexport * from './built-in/filters/datagrid-numeric-filter';\nexport * from './built-in/filters/datagrid-property-string-filter';\nexport * from './built-in/filters/datagrid-property-numeric-filter';\nexport * from './built-in/comparators/datagrid-property-comparator';\n\nexport * from './chocolate/expandable-oompa-loompa';\nexport * from './chocolate/actionable-oompa-loompa';\nexport * from './chocolate/datagrid-willy-wonka';\n\nexport * from './datagrid.module';\n\nexport { Selection } from './providers/selection'; // exported specifically for appfx datagrid;\nexport { ClrDatagridItemsIdentityFunction } from './providers/items';\nexport { ClrDatagridSelectionCellDirective } from './datagrid-selection-cell.directive';\nexport { ClrDatagridVirtualScrollDirective } from './datagrid-virtual-scroll.directive';\nexport { ClrDatagridSingleSelectionValueAccessor } from './datagrid-single-selection.directive';\nexport { DatagridDetailRegisterer } from './datagrid-detail-registerer';\nexport { WrappedCell } from './wrapped-cell';\nexport { WrappedColumn } from './wrapped-column';\nexport { WrappedRow } from './wrapped-row';\nexport { DatagridMainRenderer } from './render/main-renderer';\nexport { DatagridHeaderRenderer } from './render/header-renderer';\nexport { DatagridCellRenderer } from './render/cell-renderer';\nexport { DatagridRowRenderer } from './render/row-renderer';\nexport { DatagridRowDetailRenderer } from './render/row-detail-renderer';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.StateDebouncer","i1.Page","i2.StateDebouncer","i1.FiltersProvider","i1","i2.DatagridRenderOrganizer","i3","i4.KeyNavigationGridController","i5.ColumnActionsService","i6","i4","i7.ClrDatagridFilter","i5","i7","i8","i9.ClrDatagridColumnSeparator","i10.DatagridNumericFilter","i11.DatagridStringFilter","i2.Sort","i3.Page","i1.Items","nbRow","i2.FiltersProvider","i1.DetailService","i1.DatagridRenderOrganizer","i1.Selection","i11","i12","i16.ClrDatagridSingleSelectionValueAccessor","i17.ClrDatagridSelectionCellDirective","i4.StateDebouncer","i1.ColumnsService","i1.DatagridWillyWonka","i2.RowActionService","i2.ExpandableRowsCount","i9.Page","i10","i11.KeyNavigationGridController","i12.ColumnsService","i13","i16.ClrDatagridCell","i17.ClrDatagridPlaceholder","i18.ClrDatagridRow","i19.ClrDatagridSelectionCellDirective","i20.DatagridCellRenderer","i21.DatagridRowRenderer","i22.ActionableOompaLoompa","i23.ExpandableOompaLoompa","i1.ClrDatagridColumn","i3.ColumnActionsService","i5.FiltersProvider","i1.ClrDatagridColumnActions","i2.ColumnsService","i9.ClrDatagridColumnToggleButton","i3.DatagridIfExpandService","i4.ExpandableRowsCount","i6.ColumnsService","i7.DisplayModeService","i9.ClrDatagridCell","i10.DatagridCellRenderer","i2.DetailService","i3.ColumnsService","i7.ClrDatagridColumnToggle","i2","i3.DetailService","i1.ExpandableRowsCount","i1.ClrDatagrid","i3.Items","i4.Page","i5.DetailService","i6.TableSizeService","i7.ColumnsService","i8.KeyNavigationGridController","i1.DatagridRowRenderer"],"mappings":"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"}
|