@siemens/ngx-datatable
Version:
ngx-datatable is an Angular table grid component for presenting large and complex data.
1 lines • 377 kB
Source Map (JSON)
{"version":3,"file":"siemens-ngx-datatable.mjs","sources":["../../../projects/ngx-datatable/src/lib/components/body/body-group-header-template.directive.ts","../../../projects/ngx-datatable/src/lib/components/body/body-group-header.directive.ts","../../../projects/ngx-datatable/src/lib/components/body/body-row-def.component.ts","../../../projects/ngx-datatable/src/lib/components/body/summary/summary-row.directive.ts","../../../projects/ngx-datatable/src/lib/components/columns/column-cell.directive.ts","../../../projects/ngx-datatable/src/lib/components/columns/column-ghost-cell.directive.ts","../../../projects/ngx-datatable/src/lib/components/columns/column-header.directive.ts","../../../projects/ngx-datatable/src/lib/components/columns/tree.directive.ts","../../../projects/ngx-datatable/src/lib/components/columns/column.directive.ts","../../../projects/ngx-datatable/src/lib/directives/scroll-container.directive.ts","../../../projects/ngx-datatable/src/lib/ngx-datatable.config.ts","../../../projects/ngx-datatable/src/lib/services/scrollbar-helper.service.ts","../../../projects/ngx-datatable/src/lib/utils/column.ts","../../../projects/ngx-datatable/src/lib/utils/camel-case.ts","../../../projects/ngx-datatable/src/lib/utils/column-prop-getters.ts","../../../projects/ngx-datatable/src/lib/utils/id.ts","../../../projects/ngx-datatable/src/lib/utils/sort.ts","../../../projects/ngx-datatable/src/lib/utils/column-helper.ts","../../../projects/ngx-datatable/src/lib/utils/math.ts","../../../projects/ngx-datatable/src/lib/utils/number-or-undefined-attribute.ts","../../../projects/ngx-datatable/src/lib/utils/table-token.ts","../../../projects/ngx-datatable/src/lib/utils/tree.ts","../../../projects/ngx-datatable/src/lib/utils/keys.ts","../../../projects/ngx-datatable/src/lib/utils/row-height-cache.ts","../../../projects/ngx-datatable/src/lib/utils/selection.ts","../../../projects/ngx-datatable/src/lib/components/datatable-configuration.ts","../../../projects/ngx-datatable/src/lib/components/body/body-group-wrapper.component.ts","../../../projects/ngx-datatable/src/lib/components/body/body-row-wrapper.component.ts","../../../projects/ngx-datatable/src/lib/components/body/body-cell.component.ts","../../../projects/ngx-datatable/src/lib/components/body/body-row.component.ts","../../../projects/ngx-datatable/src/lib/components/body/body-row.directive.ts","../../../projects/ngx-datatable/src/lib/components/body/ghost-loader/ghost-loader.component.ts","../../../projects/ngx-datatable/src/lib/components/body/ghost-loader/ghost-loader.component.html","../../../projects/ngx-datatable/src/lib/components/body/scroller.component.ts","../../../projects/ngx-datatable/src/lib/components/body/summary/summary-row.component.ts","../../../projects/ngx-datatable/src/lib/components/body/body.component.ts","../../../projects/ngx-datatable/src/lib/components/body/progress-bar.component.ts","../../../projects/ngx-datatable/src/lib/components/footer/pager.component.ts","../../../projects/ngx-datatable/src/lib/components/footer/footer.component.ts","../../../projects/ngx-datatable/src/lib/components/footer/footer-template.directive.ts","../../../projects/ngx-datatable/src/lib/components/footer/footer.directive.ts","../../../projects/ngx-datatable/src/lib/directives/datatable-draggable.directive.ts","../../../projects/ngx-datatable/src/lib/components/header/header-cell.component.ts","../../../projects/ngx-datatable/src/lib/components/header/header.component.ts","../../../projects/ngx-datatable/src/lib/components/row-detail/row-detail-template.directive.ts","../../../projects/ngx-datatable/src/lib/components/row-detail/row-detail.directive.ts","../../../projects/ngx-datatable/src/lib/components/datatable.component.ts","../../../projects/ngx-datatable/src/lib/components/datatable.component.html","../../../projects/ngx-datatable/src/lib/directives/disable-row.directive.ts","../../../projects/ngx-datatable/src/lib/ngx-datatable.module.ts","../../../projects/ngx-datatable/src/lib/types/public.types.ts","../../../projects/ngx-datatable/src/public-api.ts","../../../projects/ngx-datatable/src/siemens-ngx-datatable.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\nimport { GroupContext } from '../../types/public.types';\n\n@Directive({\n selector: '[ngx-datatable-group-header-template]'\n})\nexport class DatatableGroupHeaderTemplateDirective {\n static ngTemplateContextGuard(\n directive: DatatableGroupHeaderTemplateDirective,\n context: unknown\n ): context is GroupContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, input, output, contentChild, computed } from '@angular/core';\n\nimport { Group, GroupContext, GroupToggleEvents, Row } from '../../types/public.types';\nimport { DatatableGroupHeaderTemplateDirective } from './body-group-header-template.directive';\n\n@Directive({\n selector: 'ngx-datatable-group-header'\n})\nexport class DatatableGroupHeaderDirective<TRow extends Row = any> {\n /**\n * Row height is required when virtual scroll is enabled.\n */\n readonly rowHeight = input<number | ((group?: Group<TRow>, index?: number) => number)>(0);\n\n /**\n * Show checkbox at group header to select all rows of the group.\n */\n readonly checkboxable = input(false);\n\n readonly _templateInput = input<TemplateRef<GroupContext<TRow>>>(undefined, {\n alias: 'template'\n });\n\n readonly _templateQuery = contentChild(DatatableGroupHeaderTemplateDirective, {\n read: TemplateRef\n });\n\n readonly template = computed(() => this._templateInput() ?? this._templateQuery() ?? null);\n\n /**\n * Track toggling of group visibility\n */\n readonly toggle = output<GroupToggleEvents<TRow>>();\n\n /**\n * Toggle the expansion of a group\n */\n toggleExpandGroup(group: Group<TRow>): void {\n this.toggle.emit({\n type: 'group',\n value: group\n });\n }\n\n /**\n * Expand all groups\n */\n expandAllGroups(): void {\n this.toggle.emit({\n type: 'all',\n value: true\n });\n }\n\n /**\n * Collapse all groups\n */\n collapseAllGroups(): void {\n this.toggle.emit({\n type: 'all',\n value: false\n });\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n Component,\n Directive,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n OnInit,\n TemplateRef,\n ViewContainerRef,\n input,\n booleanAttribute\n} from '@angular/core';\n\nimport { RowOrGroup } from '../../types/public.types';\n\n/**\n * Renders the datatable's normal row inside a custom row wrapper declared with\n * {@link DatatableRowDefDirective}. Use this as the root content of the\n * `ng-template` and apply row-level directives or classes to it.\n *\n * @example\n * ```html\n * <ngx-datatable>\n * <ng-template rowDef>\n * <datatable-row-def appCustomRowDirective class=\"custom-row\" />\n * </ng-template>\n * </ngx-datatable>\n * ```\n */\n@Component({\n selector: 'datatable-row-def',\n imports: [NgTemplateOutlet],\n template: `@if (rowDef.rowDefInternal().rowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"rowDef.rowDefInternal().rowTemplate\"\n [ngTemplateOutletContext]=\"rowContext\"\n />\n }`,\n styleUrl: './body-row-def.component.scss'\n})\nexport class DatatableRowDefComponent {\n private host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n rowDef = inject(ROW_DEF_TOKEN);\n rowContext = {\n ...this.rowDef.rowDefInternal(),\n disabled: this.rowDef.rowDefInternalDisabled()\n };\n\n /**\n * When `true`, clones of this row get the measured column widths stamped onto them.\n * The clone is detached from the table grid, it has no parent tracks to inherit.\n */\n readonly preserveColumnWidthsOnClone = input(false, { transform: booleanAttribute });\n\n constructor() {\n effect(onCleanup => {\n if (!this.preserveColumnWidthsOnClone()) {\n return;\n }\n const originalCloneNode = this.host.cloneNode;\n this.host.cloneNode = (deep?: boolean) => {\n const clone = originalCloneNode.call(this.host, deep) as HTMLElement;\n const gridTemplateColumns = this.measureGridTemplateColumns();\n if (gridTemplateColumns) {\n clone.style.gridTemplateColumns = gridTemplateColumns;\n }\n return clone;\n };\n onCleanup(() => (this.host.cloneNode = originalCloneNode));\n });\n }\n\n private measureGridTemplateColumns(): string {\n const cells = this.host.querySelectorAll<HTMLElement>('datatable-body-cell');\n return Array.from(cells)\n .map(cell => `${cell.getBoundingClientRect().width}px`)\n .join(' ');\n }\n}\n\n/**\n * Marks an `ng-template` as the custom wrapper for each rendered table row.\n *\n * The template must contain a {@link DatatableRowDefComponent}, which renders\n * the table's regular row inside the wrapper. Apply row-level directives or\n * classes to that component.\n *\n * @example\n * ```html\n * <ngx-datatable>\n * <ng-template rowDef>\n * <datatable-row-def appCustomRowDirective class=\"custom-row\" />\n * </ng-template>\n * </ngx-datatable>\n * ```\n */\n@Directive({\n selector: '[rowDef]'\n})\nexport class DatatableRowDefDirective {\n static ngTemplateContextGuard(\n _dir: DatatableRowDefDirective,\n ctx: unknown\n ): ctx is RowDefContext {\n return true;\n }\n}\n\n/**\n * @internal To be used internally by ngx-datatable.\n */\n@Directive({\n selector: '[rowDefInternal]'\n})\nexport class DatatableRowDefInternalDirective implements OnInit {\n vc = inject(ViewContainerRef);\n\n readonly rowDefInternal = input.required<RowDefContext>();\n readonly rowDefInternalDisabled = input<boolean>();\n\n ngOnInit(): void {\n this.vc.createEmbeddedView(\n this.rowDefInternal().template,\n {\n ...this.rowDefInternal()\n },\n {\n injector: Injector.create({\n providers: [\n {\n provide: ROW_DEF_TOKEN,\n useValue: this\n }\n ]\n })\n }\n );\n }\n}\nconst ROW_DEF_TOKEN = new InjectionToken<DatatableRowDefInternalDirective>('RowDef');\ninterface RowDefContext {\n template: TemplateRef<unknown>;\n rowTemplate: TemplateRef<unknown>;\n row: RowOrGroup<unknown>;\n index: number;\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Directive that provides custom content for the summary row.\n * When applied, the summary row renders the provided template instead of\n * computing per-column aggregate values, enabling use cases like summary action bars.\n *\n * The row is rendered with sticky positioning at the top of the datatable body.\n *\n * @example\n * ```html\n * <ngx-datatable [rows]=\"rows\" selectionType=\"checkbox\" [(selected)]=\"selected\">\n * @if (selected.length) {\n * <ng-template ngx-datatable-summary-row>\n * <span>{{ selected.length }} selected</span>\n * <button (click)=\"delete()\">Delete</button>\n * </ng-template>\n * }\n * </ngx-datatable>\n * ```\n */\n@Directive({\n selector: '[ngx-datatable-summary-row]'\n})\nexport class DatatableSummaryRowDirective {\n readonly template = inject(TemplateRef<void>);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\nimport { CellContext } from '../../types/public.types';\n\n@Directive({\n selector: '[ngx-datatable-cell-template]'\n})\nexport class DataTableColumnCellDirective {\n template = inject<TemplateRef<CellContext>>(TemplateRef);\n\n static ngTemplateContextGuard(dir: DataTableColumnCellDirective, ctx: any): ctx is CellContext {\n return true;\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[ngx-datatable-ghost-cell-template]'\n})\nexport class DataTableColumnGhostCellDirective {\n static ngTemplateContextGuard(\n directive: DataTableColumnGhostCellDirective,\n context: unknown\n ): context is void {\n return true;\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { HeaderCellContext } from '../../types/public.types';\n\n@Directive({\n selector: '[ngx-datatable-header-template]'\n})\nexport class DataTableColumnHeaderDirective {\n static ngTemplateContextGuard(\n directive: DataTableColumnHeaderDirective,\n context: unknown\n ): context is HeaderCellContext {\n return true;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngx-datatable-tree-toggle]'\n})\nexport class DataTableColumnCellTreeToggle {\n template = inject<TemplateRef<any>>(TemplateRef);\n}\n","import {\n booleanAttribute,\n computed,\n contentChild,\n Directive,\n input,\n numberAttribute,\n PipeTransform,\n Signal,\n TemplateRef\n} from '@angular/core';\n\nimport { CellContext, HeaderCellContext, Row } from '../../types/public.types';\nimport { TableColumn, TableColumnProp } from '../../types/table-column.type';\nimport { DataTableColumnCellDirective } from './column-cell.directive';\nimport { DataTableColumnGhostCellDirective } from './column-ghost-cell.directive';\nimport { DataTableColumnHeaderDirective } from './column-header.directive';\nimport { DataTableColumnCellTreeToggle } from './tree.directive';\n\n@Directive({\n selector: 'ngx-datatable-column'\n})\nexport class DataTableColumnDirective<TRow extends Row> {\n /**\n * Column label. When omitted, the property value is used and decamelized.\n */\n readonly name = input<string>();\n\n /**\n * Property used to bind row values. When omitted, the name is converted to camel case.\n */\n readonly prop = input<TableColumnProp>();\n\n readonly bindAsUnsafeHtml = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the column is frozen to the left. Default value: `false`.\n */\n readonly frozenLeft = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the column is frozen to the right. Default value: `false`.\n */\n readonly frozenRight = input(false, { transform: booleanAttribute });\n\n /**\n * Grow factor relative to other columns. Available extra width is distributed\n * proportionally according to all columns' `flexGrow` values. Default value: `0`.\n */\n readonly flexGrow = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n\n /**\n * Whether the user can manually resize the column. Default value: `true`.\n */\n readonly resizeable = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n\n /**\n * Custom client-side sort comparator. It receives cell values and their\n * respective rows; a standard two-argument comparison function is also supported.\n */\n readonly comparator = input<\n ((valueA: any, valueB: any, rowA: TRow, rowB: TRow) => number) | undefined\n >();\n\n /**\n * Custom pipe used to transform cell values.\n */\n readonly pipe = input<PipeTransform | undefined>();\n\n /**\n * Whether row values can be sorted by this column. Default value: `true`.\n */\n readonly sortable = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n\n /**\n * Whether the column can be dragged to reorder it. Default value: `true`.\n */\n readonly draggable = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n\n /**\n * Whether the column can automatically resize to fill extra space. Default value: `true`.\n */\n readonly canAutoResize = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n\n /**\n * Minimum column width in pixels.\n */\n readonly minWidth = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n\n /**\n * Default column width in pixels. Default value: `150`.\n */\n readonly width = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n\n /**\n * Maximum column width in pixels.\n */\n readonly maxWidth = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n\n /**\n * Whether the column displays a selection checkbox. Only applies when selection mode is `checkbox`.\n */\n readonly checkboxable = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the header displays a selection checkbox. Only applies when selection mode is `checkbox`.\n */\n readonly headerCheckboxable = input(false, { transform: booleanAttribute });\n\n /**\n * CSS classes to apply to the header cell.\n */\n readonly headerClass = input<\n string | ((data: { column: TableColumn }) => string | Record<string, boolean>) | undefined\n >();\n\n /**\n * CSS classes to apply to the body cell.\n */\n readonly cellClass = input<\n | string\n | ((data: {\n row: TRow;\n group?: TRow[];\n column: TableColumn<TRow>;\n value: any;\n rowHeight: number;\n }) => string | Record<string, boolean>)\n | undefined\n >();\n readonly isTreeColumn = input(false, { transform: booleanAttribute });\n readonly treeLevelIndent = input<number | undefined>();\n readonly summaryFunc = input<((cells: any[]) => any) | undefined>();\n readonly summaryTemplate = input<TemplateRef<any> | undefined>();\n\n /**\n * Template used to render body cells.\n */\n readonly cellTemplateInput = input<TemplateRef<CellContext<TRow>> | undefined>(undefined, {\n alias: 'cellTemplate'\n });\n readonly cellTemplateQuery = contentChild(DataTableColumnCellDirective, { read: TemplateRef });\n\n /**\n * Template used to render header cells.\n */\n readonly headerTemplateInput = input<TemplateRef<HeaderCellContext> | undefined>(undefined, {\n alias: 'headerTemplate'\n });\n readonly headerTemplateQuery = contentChild(DataTableColumnHeaderDirective, {\n read: TemplateRef\n });\n\n readonly treeToggleTemplateInput = input<TemplateRef<any> | undefined>(undefined, {\n alias: 'treeToggleTemplate'\n });\n readonly treeToggleTemplateQuery = contentChild(DataTableColumnCellTreeToggle, {\n read: TemplateRef\n });\n\n readonly ghostCellTemplateInput = input<TemplateRef<void> | undefined>(undefined, {\n alias: 'ghostCellTemplate'\n });\n readonly ghostCellTemplateQuery = contentChild(DataTableColumnGhostCellDirective, {\n read: TemplateRef\n });\n\n /**\n * Computed property that returns the column configuration as a TableColumn object\n */\n readonly column: Signal<TableColumn<TRow>> = computed(() => ({\n name: this.name(),\n prop: this.prop(),\n bindAsUnsafeHtml: this.bindAsUnsafeHtml(),\n frozenLeft: this.frozenLeft(),\n frozenRight: this.frozenRight(),\n flexGrow: this.flexGrow(),\n resizeable: this.resizeable(),\n comparator: this.comparator(),\n pipe: this.pipe(),\n sortable: this.sortable(),\n draggable: this.draggable(),\n canAutoResize: this.canAutoResize(),\n minWidth: this.minWidth(),\n width: this.width(),\n maxWidth: this.maxWidth(),\n checkboxable: this.checkboxable(),\n headerCheckboxable: this.headerCheckboxable(),\n headerClass: this.headerClass(),\n cellClass: this.cellClass(),\n isTreeColumn: this.isTreeColumn(),\n treeLevelIndent: this.treeLevelIndent(),\n summaryFunc: this.summaryFunc(),\n summaryTemplate: this.summaryTemplate(),\n cellTemplate: this.cellTemplateInput() ?? this.cellTemplateQuery(),\n headerTemplate: this.headerTemplateInput() ?? this.headerTemplateQuery(),\n treeToggleTemplate: this.treeToggleTemplateInput() ?? this.treeToggleTemplateQuery(),\n ghostCellTemplate: this.ghostCellTemplateInput() ?? this.ghostCellTemplateQuery()\n }));\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { ScrollToRowOptions } from '../types/public.types';\n\n/**\n * Marks the `role=\"table\"` css-grid as the single scroll container that owns\n * both the horizontal and vertical scroll. Descendant components (e.g. the\n * scroller) and the datatable interact with the container through these methods\n * instead of reaching for the native element.\n */\n@Directive({\n selector: '[datatableScrollContainer]'\n})\nexport class ScrollContainerDirective {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n /** Current vertical scroll offset of the container. */\n get scrollTop(): number {\n return this.element.scrollTop;\n }\n\n /** Whether the container's content overflows it vertically. */\n get verticalScrollVisible(): boolean {\n return this.element.scrollHeight > this.element.clientHeight;\n }\n\n setScrollTop(value: number): void {\n this.element.scrollTop = value;\n }\n\n scrollTo(top: number, options?: ScrollToRowOptions): void {\n this.element.scrollTo({ top, behavior: options?.behavior });\n }\n\n /** Subscribes to scroll events, returning a function that unsubscribes. */\n listenToScroll(listener: (event: Event) => void): () => void {\n this.element.addEventListener('scroll', listener, { passive: true });\n return () => this.element.removeEventListener('scroll', listener);\n }\n}\n","import { InjectionToken, Provider } from '@angular/core';\n\n/** Interface for messages to override default table texts. */\nexport interface NgxDatatableMessages {\n /** Message to show when the array is present but empty */\n emptyMessage?: string;\n /** Footer total message */\n totalMessage?: string;\n /** Footer selected message */\n selectedMessage?: string;\n /** Pager screen reader message for the first page button */\n ariaFirstPageMessage?: string;\n /**\n * Pager screen reader message for the n-th page button.\n * It will be rendered as: `{{ariaPageNMessage}} {{n}}`.\n */\n ariaPageNMessage?: string;\n /** Pager screen reader message for the previous page button */\n ariaPreviousPageMessage?: string;\n /** Pager screen reader message for the next page button */\n ariaNextPageMessage?: string;\n /** Pager screen reader message for the last page button */\n ariaLastPageMessage?: string;\n /** Row checkbox aria label */\n ariaRowCheckboxMessage?: string;\n /** Header checkbox aria label */\n ariaHeaderCheckboxMessage?: string;\n /** Group header checkbox aria label */\n ariaGroupHeaderCheckboxMessage?: string;\n /** Loading indicator aria label */\n ariaLoadingMessage?: string;\n}\n\n/** CSS classes for icons that override the default table icons. */\nexport interface NgxDatatableCssClasses {\n sortAscending?: string;\n sortDescending?: string;\n sortUnset?: string;\n pagerLeftArrow?: string;\n pagerRightArrow?: string;\n pagerPrevious?: string;\n pagerNext?: string;\n treeStatusLoading?: string;\n treeStatusExpanded?: string;\n treeStatusCollapsed?: string;\n}\n\n/** Interface definition for ngx-datatable global configuration. */\nexport interface NgxDatatableConfig {\n messages?: NgxDatatableMessages;\n cssClasses?: NgxDatatableCssClasses;\n headerHeight?: number | 'auto';\n footerHeight?: number;\n rowHeight?: number | 'auto' | ((row: any) => number);\n defaultColumnWidth?: number;\n}\n\nexport const NGX_DATATABLE_CONFIG = new InjectionToken<NgxDatatableConfig>('ngx-datatable.config');\n\n/**\n * Interface definition for INgxDatatableConfig global configuration.\n *\n * @deprecated Use {@link NgxDatatableConfig} instead.\n */\nexport type INgxDatatableConfig = NgxDatatableConfig;\n\n/**\n * Provides a global configuration for ngx-datatable.\n *\n * @param overrides The overrides of the table configuration.\n */\nexport const providedNgxDatatableConfig = (overrides: NgxDatatableConfig): Provider => {\n return {\n provide: NGX_DATATABLE_CONFIG,\n useValue: overrides\n };\n};\n","import { inject, Service, DOCUMENT } from '@angular/core';\n\n/**\n * Gets the width of the scrollbar. Nesc for windows\n * http://stackoverflow.com/a/13382873/888165\n */\n@Service()\nexport class ScrollbarHelper {\n private document = inject(DOCUMENT);\n\n width: number = this.getWidth();\n\n getWidth(): number {\n const outer = this.document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n this.document.body.appendChild(outer);\n\n const widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n const inner = this.document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n const widthWithScroll = inner.offsetWidth;\n this.document.body.removeChild(outer);\n\n return widthNoScroll - widthWithScroll;\n }\n}\n","import {\n ColumnGroupWidth,\n PinnedColumns,\n TableColumnGroup,\n TableColumnInternal\n} from '../types/internal.types';\n\n/**\n * Returns the columns by pin.\n */\nexport const columnsByPin = (cols: TableColumnInternal[]) => {\n const ret: TableColumnGroup = {\n left: [],\n center: [],\n right: []\n };\n\n if (cols) {\n for (const col of cols) {\n if (col.frozenLeft) {\n ret.left.push(col);\n } else if (col.frozenRight) {\n ret.right.push(col);\n } else {\n ret.center.push(col);\n }\n }\n }\n\n return ret;\n};\n\n/**\n * Returns the widths of all group sets of a column\n */\nexport const columnGroupWidths = (\n groups: TableColumnGroup,\n all: TableColumnInternal[]\n): ColumnGroupWidth => {\n return {\n left: columnTotalWidth(groups.left),\n center: columnTotalWidth(groups.center),\n right: columnTotalWidth(groups.right),\n total: Math.floor(columnTotalWidth(all))\n };\n};\n\n/**\n * Calculates the total width of all columns\n */\nexport const columnTotalWidth = (columns?: TableColumnInternal[]) => {\n return columns?.reduce((total, column) => total + column.width(), 0) ?? 0;\n};\n\n/**\n * Builds the `grid-template-columns` value for the combined css-grid.\n * Produces one track per column, sized by the column's current width, in the\n * pinned render order (left, center, right). Header and body rows share this\n * single definition so every cell aligns to the same column tracks.\n *\n * `minWidth`/`maxWidth` are baked into the track via `clamp()`/`min()`/`max()`\n * so the constraints are enforced once on the shared grid instead of per cell.\n */\nexport const gridColumnTemplate = (cols: PinnedColumns[]): string => {\n return cols\n .flatMap(group => group.columns)\n .map(column => gridColumnTrack(column))\n .join(' ');\n};\n\nconst gridColumnTrack = (column: TableColumnInternal): string => {\n const width = `${column.width()}px`;\n const min = column.minWidth ? `${column.minWidth}px` : undefined;\n const max = column.maxWidth ? `${column.maxWidth}px` : undefined;\n if (min && max) {\n return `clamp(${min}, ${width}, ${max})`;\n }\n if (min) {\n return `max(${min}, ${width})`;\n }\n if (max) {\n return `min(${max}, ${width})`;\n }\n return width;\n};\n\nexport const columnsByPinArr = (val: TableColumnInternal[]): PinnedColumns[] => {\n const colsByPin = columnsByPin(val);\n return [\n { type: 'left' as const, columns: colsByPin.left },\n { type: 'center' as const, columns: colsByPin.center },\n { type: 'right' as const, columns: colsByPin.right }\n ];\n};\n","/**\n * Converts strings from something to camel case\n * http://stackoverflow.com/questions/10425287/convert-dash-separated-string-to-camelcase\n */\nexport const camelCase = (str: string): string => {\n // Replace special characters with a space\n str = str.replace(/[^a-zA-Z0-9 ]/g, ' ');\n // put a space before an uppercase letter\n str = str.replace(/([a-z](?=[A-Z]))/g, '$1 ');\n\n // Lower case first character and some other stuff\n str = str\n .replace(/([^a-zA-Z0-9 ])|^[0-9]+/g, '')\n .trim()\n .toLowerCase();\n\n // uppercase characters preceded by a space or number\n str = str.replace(/([ 0-9]+)([a-zA-Z])/g, (a, b, c) => {\n return b.trim() + c.toUpperCase();\n });\n\n return str;\n};\n\n/**\n * Converts strings from camel case to words\n * http://stackoverflow.com/questions/7225407/convert-camelcasetext-to-camel-case-text\n */\nexport const deCamelCase = (str: string): string => {\n return str.replace(/([A-Z])/g, match => ` ${match}`).replace(/^./, match => match.toUpperCase());\n};\n","import { TableColumnProp } from '../types/table-column.type';\n\n// maybe rename this file to prop-getters.ts\n\nexport type ValueGetter = (obj: any, prop: TableColumnProp) => any;\n\n/**\n * Always returns the empty string ''\n */\nexport const emptyStringGetter = (): string => {\n return '';\n};\n\n/**\n * Returns the appropriate getter function for this kind of prop.\n * If prop == null, returns the emptyStringGetter.\n */\nexport const getterForProp = (prop: TableColumnProp | undefined): ValueGetter => {\n // TODO requires better typing which will also involve adjust TableColum. So postponing it.\n if (prop == null) {\n return emptyStringGetter;\n }\n\n if (typeof prop === 'number') {\n return numericIndexGetter as ValueGetter;\n } else {\n // deep or simple\n if (prop.includes('.')) {\n return deepValueGetter as ValueGetter;\n } else {\n return shallowValueGetter as ValueGetter;\n }\n }\n};\n\n/**\n * Returns the value at this numeric index.\n * @param row array of values\n * @param index numeric index\n * @returns any or '' if invalid index\n */\nexport const numericIndexGetter = (row: any[], index: number): any => {\n if (row == null) {\n return '';\n }\n // mimic behavior of deepValueGetter\n if (!row || index == null) {\n return row;\n }\n\n const value = row[index];\n if (value == null) {\n return '';\n }\n return value;\n};\n\n/**\n * Returns the value of a field.\n * (more efficient than deepValueGetter)\n * @param obj object containing the field\n * @param fieldName field name string\n */\nexport const shallowValueGetter = (obj: any, fieldName: string): any => {\n if (obj == null) {\n return '';\n }\n if (!obj || !fieldName) {\n return obj;\n }\n\n const value = obj[fieldName];\n if (value == null) {\n return '';\n }\n return value;\n};\n\n/**\n * Returns a deep object given a string. zoo['animal.type']\n */\nexport const deepValueGetter = (obj: any, path: string): any => {\n if (obj == null) {\n return '';\n }\n if (!obj || !path) {\n return obj;\n }\n\n // check if path matches a root-level field\n // { \"a.b.c\": 123 }\n let current = obj[path];\n if (current !== undefined) {\n return current;\n }\n\n current = obj;\n const splits = path.split('.');\n\n if (splits.length) {\n for (const split of splits) {\n current = current[split];\n\n // if found undefined, return empty string\n if (current === undefined || current === null) {\n return '';\n }\n }\n }\n\n return current;\n};\n","/**\n * Creates a unique object id.\n * http://stackoverflow.com/questions/6248666/how-to-generate-short-uid-like-ax4j9z-in-js\n */\nexport const id = () => {\n return ('0000' + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);\n};\n","import { SortableTableColumnInternal, TableColumnInternal } from '../types/internal.types';\nimport { Group, SortDirection, SortPropDir, SortType } from '../types/public.types';\nimport { TableColumnProp } from '../types/table-column.type';\nimport { getterForProp } from './column-prop-getters';\n\n/**\n * Gets the next sort direction\n */\nexport const nextSortDir = (\n sortType: SortType,\n current: SortDirection | 'desc' | 'asc' | undefined\n): SortDirection | undefined => {\n if (sortType === 'single') {\n if (current === 'asc') {\n return 'desc';\n } else {\n return 'asc';\n }\n } else {\n if (!current) {\n return 'asc';\n } else if (current === 'asc') {\n return 'desc';\n } else if (current === 'desc') {\n return undefined;\n }\n // avoid TS7030: Not all code paths return a value.\n return undefined;\n }\n};\n\n/**\n * Adapted from fueld-ui on 6/216\n * https://github.com/FuelInteractive/fuel-ui/tree/master/src/pipes/OrderBy\n */\nexport const orderByComparator = (a: any, b: any): number => {\n if (a === null || typeof a === 'undefined') {\n a = 0;\n }\n if (b === null || typeof b === 'undefined') {\n b = 0;\n }\n if (a instanceof Date && b instanceof Date) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n } else if (isNaN(parseFloat(a)) || !isFinite(a) || isNaN(parseFloat(b)) || !isFinite(b)) {\n // Convert to string in case of a=0 or b=0\n a = String(a);\n b = String(b);\n // Isn't a number so lowercase the string to properly compare\n if (a.toLowerCase() < b.toLowerCase()) {\n return -1;\n }\n if (a.toLowerCase() > b.toLowerCase()) {\n return 1;\n }\n } else {\n // Parse strings as numbers to compare properly\n if (parseFloat(a) < parseFloat(b)) {\n return -1;\n }\n if (parseFloat(a) > parseFloat(b)) {\n return 1;\n }\n }\n\n // equal each other\n return 0;\n};\n\n/**\n * creates a shallow copy of the `rows` input and returns the sorted copy. this function\n * does not sort the `rows` argument in place\n */\nexport const sortRows = <TRow>(\n rows: TRow[],\n columns: TableColumnInternal[],\n dirs: SortPropDir[],\n sortOnGroupHeader?: SortPropDir\n): TRow[] => {\n if (!rows) {\n return [];\n }\n if (!dirs?.length || !columns) {\n return [...rows];\n }\n\n const temp = [...rows];\n const cols = columns.reduce(\n (obj, col) => {\n if (col.sortable) {\n obj[col.prop] = col.comparator;\n }\n return obj;\n },\n {} as Record<TableColumnProp, SortableTableColumnInternal['comparator'] | undefined>\n );\n\n // cache valueGetter and compareFn so that they\n // do not need to be looked-up in the sort function body\n const cachedDirs = dirs.map(dir => {\n // When sorting on group header, override prop to 'key'\n const prop = sortOnGroupHeader?.prop === dir.prop ? 'key' : dir.prop;\n // SortDirs may contain columns that are not sortable, so compareFn would be undefined. In that case just return a comparator that returns 0.\n const compareFn = cols[dir.prop] ?? (() => 0);\n return {\n prop,\n dir: dir.dir,\n valueGetter: getterForProp(prop),\n compareFn\n };\n });\n\n return temp.sort((rowA: TRow, rowB: TRow) => {\n for (const cachedDir of cachedDirs) {\n // Get property and valuegetters for column to be sorted\n const { prop, valueGetter } = cachedDir;\n // Get A and B cell values from rows based on properties of the columns\n const propA = valueGetter(rowA, prop);\n const propB = valueGetter(rowB, prop);\n\n // Compare function gets five parameters:\n // Two cell values to be compared as propA and propB\n // Two rows corresponding to the cells as rowA and rowB\n // Direction of the sort for this column as SortDirection\n // Compare can be a standard JS comparison function (a,b) => -1|0|1\n // as additional parameters are silently ignored. The whole row and sort\n // direction enable more complex sort logic.\n const comparison =\n cachedDir.dir !== 'desc'\n ? cachedDir.compareFn(propA, propB, rowA, rowB)\n : -cachedDir.compareFn(propA, propB, rowA, rowB);\n\n // Don't return 0 yet in case of needing to sort by next property\n if (comparison !== 0) {\n return comparison;\n }\n }\n\n return 0;\n });\n};\n\nexport const sortGroupedRows = <TRow>(\n groupedRows: Group<TRow>[],\n columns: TableColumnInternal[],\n dirs: SortPropDir[],\n sortOnGroupHeader: SortPropDir | undefined\n): Group<TRow>[] => {\n if (sortOnGroupHeader) {\n groupedRows = sortRows(groupedRows, columns, dirs, sortOnGroupHeader);\n }\n return groupedRows.map(group => ({ ...group, value: sortRows(group.value, columns, dirs) }));\n};\n","import { signal } from '@angular/core';\n\nimport { TableColumnInternal } from '../types/internal.types';\nimport { Row } from '../types/public.types';\nimport { TableColumn } from '../types/table-column.type';\nimport { camelCase, deCamelCase } from './camel-case';\nimport { getterForProp } from './column-prop-getters';\nimport { id } from './id';\nimport { orderByComparator } from './sort';\n\nexport const toInternalColumn = <T extends Row>(\n columns: TableColumn<T>[],\n defaultColumnWidth = 150\n): TableColumnInternal<T>[] => {\n let hasTreeColumn = false;\n // TS fails to infer the type here.\n return (columns as TableColumn<T>[]).map(column => {\n const prop = column.prop ?? (column.name ? camelCase(column.name) : undefined);\n // Only one column should hold the tree view,\n // Thus if multiple columns are provided with\n // isTreeColumn as true, we take only the first one\n const isTreeColumn = !!column.isTreeColumn && !hasTreeColumn;\n hasTreeColumn = hasTreeColumn || isTreeColumn;\n // TODO: add check if prop or name is provided if sorting is enabled.\n\n return {\n ...column,\n $$id: id(),\n $$originalColumn: column,\n $$valueGetter: getterForProp(prop),\n prop,\n name: column.name ?? (prop ? deCamelCase(String(prop)) : ''),\n resizeable: column.resizeable ?? true,\n sortable: column.sortable ?? true,\n comparator: column.comparator ?? orderByComparator,\n draggable: column.draggable ?? true,\n canAutoResize: column.canAutoResize ?? true,\n width: signal(column.width ?? defaultColumnWidth),\n isTreeColumn,\n // in case of the directive, those are getters, so call them explicitly.\n headerTemplate: column.headerTemplate,\n cellTemplate: column.cellTemplate,\n summaryTemplate: column.summaryTemplate,\n ghostCellTemplate: column.ghostCellTemplate,\n treeToggleTemplate: column.treeToggleTemplate\n } as TableColumnInternal; // TS cannot cast here\n });\n};\n\nexport const toPublicColumn = (column: TableColumnInternal): TableColumn => {\n return {\n ...column.$$originalColumn,\n checkboxable: column.checkboxable,\n frozenLeft: column.frozenLeft,\n frozenRight: column.frozenRight,\n flexGrow: column.flexGrow,\n minWidth: column.minWidth,\n maxWidth: column.maxWidth,\n width: column.width(),\n resizeable: column.resizeable,\n comparator: column.comparator,\n pipe: column.pipe,\n sortable: column.sortable,\n draggable: column.draggable,\n canAutoResize: column.canAutoResize,\n name: column.name,\n prop: column.prop,\n bindAsUnsafeHtml: column.bindAsUnsafeHtml,\n cellTemplate: column.cellTemplate,\n ghostCellTemplate: column.ghostCellTemplate,\n headerTemplate: column.headerTemplate,\n treeToggleTemplate: column.treeToggleTemplate,\n cellClass: column.cellClass,\n headerClass: column.headerClass,\n headerCheckboxable: column.headerCheckboxable,\n isTreeColumn: column.isTreeColumn,\n treeLevelIndent: column.treeLevelIndent,\n summaryFunc: column.summaryFunc,\n summaryTemplate: column.summaryTemplate\n };\n};\n","import { TableColumnGroup, TableColumnInternal } from '../types/internal.types';\nimport { TableColumn, TableColumnProp } from '../types/table-column.type';\nimport { columnsByPin, columnTotalWidth } from './column';\n\n/**\n * Calculates the Total Flex Grow\n */\nexport const getTotalFlexGrow = (columns: TableColumnInternal[]) => {\n let totalFlexGrow = 0;\n\n for (const c of columns) {\n totalFlexGrow += c.flexGrow ?? 0;\n }\n\n return totalFlexGrow;\n};\n\n/**\n * Adjusts the column widths.\n * Inspired by: https://github.com/facebookarchive/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js\n */\nexport const adjustColumnWidths = (allColumns: TableColumnInternal[], expectedWidth: number) => {\n const columnsWidth = columnTotalWidth(allColumns);\n const totalFlexGrow = getTotalFlexGrow(allColumns);\n const colsByGroup = columnsByPin(allColumns);\n\n if (columnsWidth !== expectedWidth) {\n scaleColumns(colsByGroup, expectedWidth, totalFlexGrow);\n }\n};\n\n/**\n * Resizes columns based on the flexGrow property, while respecting manually set widths\n */\nconst scaleColumns = (colsByGroup: TableColumnGroup, maxWidth: number, totalFlexGrow: number) => {\n const columns: TableColumnInternal[] = Object.values(colsByGroup).flat();\n let remainingWidth = maxWidth;\n\n // calculate total width and flexgrow points for columns that can be resized\n for (const column of columns) {\n if (column.$$oldWidth) {\n // when manually resized, switch off auto-resize\n column.canAutoResize = false;\n }\n if (!column.canAutoResize) {\n remainingWidth -= column.width();\n totalFlexGrow -= column.flexGrow ?? 0;\n } else {\n column.width.set(0);\n }\n }\n\n const hasMinWidth: Record<TableColumnProp, boolean> = {};\n\n // resize columns until no width is left to be distributed\n do {\n const widthPerFlexPoint = remainingWidth / totalFlexGrow;\n remainingWidth = 0;\n\n for (const column of columns) {\n // if the column can be resize and it hasn't reached its minimum width yet\n if (column.canAutoResize && !hasMinWidth[column.prop]) {\n const newWidth = column.width() + (column.flexGrow ?? 0) * widthPerFlexPoint;\n if (column.minWidth !== undefined && newWidth < column.minWidth) {\n remainingWidth += newWidth - column.minWidth;\n column.width.set(column.minWidth);\n hasMinWidth[column.prop] = true;\n } else {\n column.width.set(newWidth);\n }\n }\n }\n } while (remainingWidth !== 0);\n\n // Adjust for any remaining offset in computed widths vs maxWidth\n const totalWidthAchieved = columns.reduce((acc, col) => acc + col.width(), 0);\n const delta = maxWidth - totalWidthAchieved;\n\n if (delta === 0) {\n return;\n }\n\n // adjust the first column that can be auto-resized respecting the min/max widths\n for (const col of columns.filter(c => c.canAutoResize).sort((a, b) => a.width() - b.width())) {\n if (\n (delta > 0 && (!col.maxWidth || col.width() + delta <= col.maxWidth)) ||\n (delta < 0 && (!col.minWidth || col.width() + delta >= col.minWidth))\n ) {\n col.width.update(value => value + delta);\n break;\n }\n }\n};\n\n/**\n * Forces the width of the columns to\n * distribute equally but overflowing when necessary\n *\n * Rules:\n *\n * - If combined withs are less than the total width of the grid,\n * proportion the widths given the min / max / normal widths to fill the width.\n *\n * - If the combined widths, exceed the total width of the grid,\n * use the standard widths.\n *\n * - If a column is resized, it should always use that width\n *\n * - The proportional widths should never fall below min size if specified.\n *\n * - If the grid starts off small but then becomes greater than the size ( + / - )\n * the width should use the original width; not the newly proportioned widths.\n */\nexport const forceFillColumnWidths = (\n allColumns: TableColumnInternal[],\n expectedWidth: number,\n startIdx: number,\n allowBleed: boolean,\n defaultColWidth = 150,\n verticalScrollWidth = 0\n) => {\n const columnsToResize = allColumns\n .slice(startIdx + 1, allColumns.length)\n .filter(c => c.canAutoResize !== false);\n\n let additionWidthPerColumn: number;\n let exceedsWindow: boolean;\n let contentWidth = getContentWidth(allColumns, defaultColWidth);\n let remainingWidth = expectedWidth - contentWidth;\n const initialRemainingWidth = remainingWidth;\n const columnsProcessed: any[] = [];\n const remainingWidthLimit = 1; // when to stop\n\n // This loop takes care of the\n do {\n additionWidthPerColumn = remainingWidth / columnsToResize.length;\n exceedsWindow = contentWidth >= expectedWidth;\n\n for (const column of columnsToResize) {\n // don't bleed if the initialRemainingWidth is same as verticalScrollWidth\n if (exceedsWindow && allowBleed && initialRemainingWidth !== -1 * verticalScrollWidth) {\n column.width.update(value => value || defaultColWidth);\n } else {\n const newSize = (column.width() || defaultColWidth) + additionWidthPerColumn;\n\n if (column.minWidth && newSize < column.minWidth) {\n column.width.set(column.minWidth);\n columnsProcessed.push(column);\n } else if (column.maxWidth && newSize > column.maxWidth) {\n column.width.set(column.maxWidth);\n columnsProcessed.push(column);\n } else {\n column.width.set(newSize);\n }\n }\n\n column.width.update(value => Math.max(0, value));\n }\n\n contentWidth = getContentWidth(allColumns, defaultColWidth);\n remainingWidth = expectedWidth - contentWidth;\n removeProcessedColumns(columnsToResize, columnsProcessed);\n } while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);\n};\n\n/**\n * Remove the processed columns from the current active columns.\n */\nconst removeProcessedColumns = (\n columnsToResize: TableColumnInternal[],\n columnsProcessed: TableColumnInternal[]\n) => {\n for (const column of columnsProcessed) {\n const index = columnsToResize.indexOf(column);\n columnsToResize.splice(index, 1);\n }\n};\n\n/**\n * Gets the width of the columns\n */\nconst getContentWidth = (allColumns: TableColumnInternal[], defaultColWidth = 150): number => {\n let contentWidth = 0;\n\n for (const column of allColumns) {\n contentWidth += column.width() || defaultColWidth;\n }\n\n return contentWidth;\n};\n","import { numberAttribute } from '@angular/core';\n\n/**\n * Same as {@link numberAttribute} but returns `undefined` if the value is `undefined`.\n * {@link numberAttribute} would return `NaN` in that case.\n * @param value\n */\n// Must be a function.\n// eslint-disable-next-line prefer-arrow/prefer-arrow-functions\nexport function numberOrUndefinedAttribute(value: unknown | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n return numberAttribute(value);\n}\n","import { InjectionToken } from '@angular/core';\n\nimport type { DatatableComponent } from '../components/datatable.component';\n\n/**\n * This token is created to break cycling import error which occurs when we import\n * DatatableComponent in DataTableRowWrapperComponent.\n */\nexport const DATATABLE_COMPONENT_TOKEN = new InjectionToken<DatatableComponent>(\n 'DatatableComponentToken'\n);\n","import { Row } from '../types/public.types';\nimport { TableColumnProp } from '../types/table-column.type';\nimport { getterForProp } from './column-prop-getters';\n\nexport type OptionalValueGetter = ((row: any) => any) | undefined;\nexport const optionalGetterForProp = (prop: TableColumnProp | undefined): OptionalValueGetter => {\n return prop ? row => getterForProp(prop)(row, prop) : undefined;\n};\n\n/**\n * This functions rearrange items by their parents\n * Also sets the level value to each of the items\n *\n * Note: Expecting each item has a property called parentId\n * Note: This algorithm will fail if a list has two or more items with same ID\n * Note: Cyclic relationships are broken by treating one node in the cycle as a root\n *\n * For example,\n *\n * Input\n *\n * id -> parent\n * 1 -> 0\n * 2 -> 0\n * 3 -> 1\n * 4 -> 1\n * 5 -> 2\n * 7 -> 8\n * 6 -> 3\n *\n *\n * Output\n * id -> level\n * 1 -> 0\n * --3 -> 1\n * ----6 -> 2\n * --4 -> 1\n * 2 -> 0\n * --5 -> 1\n * 7 -> 8\n *\n *\n * @param rows\n *\n */\nexport const groupRowsByParents = <TRow extends Row>(\n rows: (TRow | undefined)[],\n from?: OptionalValueGetter,\n to?: OptionalValueGetter\n): (TRow | undefined)[] => {\n if (from && to) {\n const treeRows = rows.filter(row => !!row).map(row => new TreeNode(row));\n const uniqIDs = new Map(treeRows.map(node => [to(node.row), node]));\n\n const resolved = new Set<TreeNode<TRow>>();\n const resolveLevel = (node: TreeNode<TRow>, visited: Set<TreeNode<TRow>>): number => {\n if (resolved.has(node)) {\n return node.row.level!;\n }\n if (visited.has(node)) {\n return Infinity;\n }\n visited.add(node);\n\n const parent = uniqIDs.get(from(node.row));\n if (parent && parent !== node) {\n const parentLevel = resolveLevel(parent, visited);\n if (parentLevel !== Infinity) {\n node.row.level = parentLevel + 1;\n } else {\n node.row.level = 0;\n }\n } else {\n node.row.level = 0;\n }\n\n visited.delete(node);\n resolved.add(node);\n return node.row.level;\n };\n\n for (const node of treeRows) {\n if (!resolved.has(node)) {\n resolveLevel(node, new Set());\n }\n }\n\n for (const node of treeRows) {\n const parent = uniqIDs.get(from(node.row));\n if (parent && parent !== node && node.row.level! > 0) {\n node.parent = parent;\n parent.children.push(node);\n }\n }\n\n const rootNodes = treeRows.filter(n => !n.parent);\n\n return rootNodes.flatMap(child => child.flatten());\n } else {\n return rows;\n }\n};\n\nclass TreeNode<TRow extends Row> {\n public row: TRow;\n public parent?: TreeNode<TRow>;\n public children: TreeNode<TRow>[];\n\n constructor(row: TRow) {\n this.row = row;\n this.children = [];\n }\n\n flatten(): TRow[] {\n if (this.row.treeStatus === 'expanded') {\n return [this.row, ...this.children.flatMap(child => child.flatten())];\n } else {\n return [this.row];\n }\n }\n}\n\nexport const expandToRow = <TRow extends Row>(\n targetRow: TRow,\n rows: (TRow | undefined)[],\n from?: OptionalValueGetter,\n to?: OptionalValueGetter\n) => {\n if (from && to) {\n const uniqIDs = new Map(rows.filter(row => !!row).map(node => [to(node), node]));\n const visitedRowIds = new Set<unknown>();\n let currentRow: TRow | undefined = targetRow;\n\n while (currentRow) {\n const currentRowId = to(currentRow);\n if (visitedRowIds.has(currentRowId)) {\n // cycle detected, abort to avoid an infinite loop\n break;\n }\n visitedRowIds.add(currentRowId);\n\n if (currentRow.treeStatus === 'collapsed') {\n currentRow.treeStatus = 'expanded';\n }\n currentRow = uniqIDs.get(from(currentRow));\n }\n }\n};\n","export const ARROW_UP = 'ArrowUp';\nexport const ARROW_DOWN = 'ArrowDown';\nexport const ENTER = 'Enter';\nexport const ESCAPE = 'Escape';\nexport const ARROW_LEFT = 'ArrowLeft';\nexport const ARROW_RIGHT = 'ArrowRight';\n","/**\n * This object contains the cache of the various row heights that are present inside\n * the data table. Its based on Fenwick tree data structure that helps with\n * querying sums that have time complexity of log n.\n *\n * Fenwick Tree Credits: http://petr-mitrichev.blogspot.com/2013/05/fenwick-tree-range-updates.html\n * https://github.com/mikolalysenko/fenwick-tree\n *\n */\nexport class RowHeightCache<TRow> {\n /**\n * Tree Array stores the cumulative information of the row heights to perform efficient\n * range queries and updates. Currently the tree is initialized to the base row\n * height instead of the detail row height.\n */\n private treeArray: number[] = [];\n\n /**\n * Clear the Tree array.\n */\n clearCache(): void {\n this.treeArray = [];\n }\n\n /**\n * Initialize the Fenwick tree with row Heights.\n */\n initCache(details: {\n rows: TRow[];\n rowHeight: number | 'auto' | ((row: TRow) => number);\n detailRowHeight: number | ((row: TRow, index: number) => number);\n externalVirtual: boolean | undefined;\n indexOffset: number;\n rowCount: number;\n rowExpansions: Set<TRow>;\n }): void {\n const {\n rows,\n rowHeight,\n detailRowHeight,\n externalVirtual,\n indexOffset,\n rowCount,\n rowExpansions\n } = details;\n const isFn = typeof rowHeight === 'function';\n const isDetailFn = typeof detailRowHeight === 'function';\n\n if (rowHeight === 'auto' || (!isFn && isNaN(rowHeight))) {\n throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n valid number or function value: (${rowHeight}) when 'scrollbarV' is enabled.`);\n }\n\n // Add this additional guard in case detailRowHeight is set to 'auto' as it wont work.\n if (!isDetailFn && isNaN(detailRowHeight)) {\n throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n valid number or function value: (${detailRowHeight}) when 'scrollbarV' is enabled.`);\n }\n\n const n = externalVirtual ? rowCount : rows.length;\n this.treeArray = new Array(n);\n\n for (let i = 0; i < n; ++i) {\n this.treeArray[i] = 0;\n }\n\n for (let i = 0; i < n; ++i) {\n const row = rows[i];\n let currentRowHeight = isFn ? rowHeight(row) : rowHeight;\n\n // Add the detail row height to the already expanded rows.\n // This is useful for the table that goes through a filter or sort.\n const expanded = rowExpansions.has(row);\n if (row && expanded) {\n currentRowHeight += isDetailFn ? detailRowHeight(row, indexOffset + i) : detailRowHeight;\n }\n\n this.update(i, currentRowHeight);\n }\n }\n\n /**\n * Given the ScrollY position i.e. sum, provide the rowIndex\n * that is present in the current view port. Below handles edge cases.\n */\n getRowIndex(scrollY: number): number {\n if (scrollY === 0) {\n return 0;\n }\n return this.calcRowIndex(scrollY);\n }\n\n /**\n * When a row is expanded or rowHeight is changed, update the height. This can\n * be utilized in future when Angular Data table supports dynamic row heights.\n */\n update(atRowIndex: number, byRowHeight: number): void {\n if (!this.treeArray.length) {\n throw new Error(`Update at index ${atRowIndex} with value ${byRowHeight} failed:\n Row Height cache not initialized.`);\n }\n\n const n = this.treeArray.length;\n atRowIndex |= 0;\n\n while (atRowIndex < n) {\n this.treeArray[atRowIndex] += byRowHeight;\n atRowIndex |= atRowIndex + 1;\n }\n }\n\n /**\n * Range Sum query from 1 to the rowIndex\n */\n query(atIndex: number): number {\n if (!this.treeArray.length) {\n throw new Error(`query at index ${atIndex} failed: Fenwick tree array not initialized.`);\n }\n\n let sum = 0;\n atIndex |= 0;\n\n while (atIndex >= 0) {\n sum += this.treeArray[atIndex];\n atIndex = (atIndex & (atIndex + 1)) - 1;\n }\n\n return sum;\n }\n\n /**\n * Find the total height between 2 row indexes\n */\n queryBetween(atIndexA: number, atIndexB: number): number {\n return this.query(atIndexB) - this.query(atIndexA - 1);\n }\n\n /**\n * Given the ScrollY position i.e. sum, provide the rowIndex\n * that is present in the current view port.\n */\n private calcRowIndex(sum: number): number {\n if (!this.treeArray.length) {\n return 0;\n }\n\n let pos = -1;\n const dataLength = this.treeArray.length;\n\n // Get the highest bit for the block size.\n const highestBit = Math.pow(2, dataLength.toString(2).length - 1);\n\n for (let blockSize = highestBit; blockSize !== 0; blockSize >>= 1) {\n const nextPos = pos + blockSize;\n if (nextPos < dataLength && sum >= this.treeArray[nextPos]) {\n sum -= this.treeArray[nextPos];\n pos = nextPos;\n }\n }\n\n return pos + 1;\n }\n}\n","export const selectRows = <TRow>(selected: TRow[], row: TRow, comparefn: any) => {\n const selectedIndex = comparefn(row, selected);\n\n if (selectedIndex > -1) {\n selected.splice(selectedIndex, 1);\n } else {\n selected.push(row);\n }\n\n return selected;\n};\n\nexport const selectRowsBetween = <TRow>(\n rows: (TRow | undefined)[],\n index: number,\n prevIndex: number\n): TRow[] => {\n const reverse = index < prevIndex;\n const rangeRows: TRow[] = [];\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const greater = i >= prevIndex && i <= index;\n const lesser = i <= prevIndex && i >= index;\n\n let range: { start: number; end: number };\n if (reverse) {\n range = {\n start: index,\n end: prevIndex\n };\n } else {\n range = {\n start: prevIndex,\n end: index + 1\n };\n }\n\n if ((reverse && lesser) || (!reverse && greater)) {\n if (i >= range.start && i <= range.end && row) {\n rangeRows.push(row);\n }\n }\n }\n\n return rangeRows;\n};\n","import { computed } from '@angular/core';\n\nimport type { NgxDatatableConfig } from '../ngx-datatable.config';\nimport type { DatatableComponent } from './datatable.component';\n\ntype AllRequired<T> = T extends (...args: any[]) => any\n ? T\n : { [K in keyof T]-?: AllRequired<NonNullable<T[K]>> };\n\n/** @internal */\nexport class DatatableConfiguration {\n readonly configuration = computed<AllRequired<NgxDatatableConfig>>(() => {\n const configuration = this.globalConfiguration;\n\n return {\n ...configuration,\n defaultColumnWidth: configuration.defaultColumnWidth ?? 150,\n rowHeight: this.datatable.rowHeight(),\n headerHeight: this.datatable.headerHeight(),\n footerHeight: this.datatable.footerHeight() ?? 0,\n cssClasses: {\n sortAscending: 'datatable-icon-up',\n sortDescending: 'datatable-icon-down',\n sortUnset: 'datatable-icon-sort-unset',\n pagerLeftArrow: 'datatable-icon-left',\n pagerRightArrow: 'datatable-icon-right',\n pagerPrevious: 'datatable-icon-prev',\n pagerNext: 'datatable-icon-skip',\n treeStatusLoading: 'icon datatable-icon-collapse',\n treeStatusExpanded: 'icon datatable-icon-down',\n treeStatusCollapsed: 'icon datatable-icon-up',\n ...configuration.cssClasses,\n ...this.datatable.cssClasses()\n },\n messages: {\n emptyMessage: 'No data to display',\n totalMessage: 'total',\n selectedMessage: 'selected',\n ariaFirstPageMessage: 'go to first page',\n ariaPageNMessage: 'page',\n ariaPreviousPageMessage: 'go to previous page',\n ariaNextPageMessage: 'go to next page',\n ariaLastPageMessage: 'go to last page',\n ariaRowCheckboxMessage: 'Select row',\n ariaHeaderCheckboxMessage: 'Select all rows',\n ariaGroupHeaderCheckboxMessage: 'Select row group',\n ariaLoadingMessage: 'Loading',\n ...configuration.messages,\n ...this.datatable.messages()\n }\n };\n });\n\n constructor(\n private readonly datatable: DatatableComponent,\n private readonly globalConfiguration: NgxDatatableConfig\n ) {}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output\n} from '@angular/core';\n\nimport { Group, GroupContext, Row } from '../../types/public.types';\nimport { DatatableConfiguration } from '../datatable-configuration';\nimport { DatatableGroupHeaderDirective } from './body-group-header.directive';\n\n@Component({\n selector: 'datatable-group-wrapper',\n imports: [NgTemplateOutlet],\n template: `\n @let groupHeader = this.groupHeader();\n @if (groupHeader && groupHeader.template()) {\n <div role=\"row\" class=\"datatable-group-header\" [style.height.px]=\"groupHeaderRowHeight()\">\n <div role=\"cell\" class=\"datatable-group-cell\" [attr.aria-colspan]=\"allColumnsColspan()\">\n @if (groupHeader.checkboxable()) {\n <div>\n <label class=\"datatable-checkbox\">\n <input\n #select\n type=\"checkbox\"\n [attr.aria-label]=\"configuration().messages.ariaGroupHeaderCheckboxMessage\"\n [checked]=\"checked()\"\n [indeterminate]=\"indeterminate()\"\n (change)=\"onCheckboxChange(select.checked)\"\n />\n </label>\n </div>\n }\n <ng-template\n [ngTemplateOutlet]=\"groupHeader.template()\"\n [ngTemplateOutletContext]=\"context()\"\n />\n </div>\n </div>\n }\n @if (expanded()) {\n <ng-content />\n }\n `,\n styleUrl: './body-group-wrapper.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-group-wrapper',\n role: 'presentation'\n }\n})\nexport class DataTableGroupWrapperComponent<TRow extends Row = any> {\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n readonly groupHeader = input.required<DatatableGroupHeaderDirective | undefined>();\n readonly groupHeaderRowHeight = input.required<number>();\n readonly group = input.required<Group<TRow>>();\n readonly groupedRows = input<Group<TRow>[]>();\n readonly allColumnsColspan = input.required<number>();\n readonly selected = input.required<TRow[]>();\n readonly disabled = input<boolean>();\n readonly rowIndex = input.required<number>();\n readonly expanded = input(false, { transform: booleanAttribute });\n readonly groupSelectedChange = output<boolean>();\n\n readonly context = computed<GroupContext<TRow>>(() => {\n return {\n group: this.group(),\n expanded: this.expanded(),\n rowIndex: this.rowIndex()\n };\n });\n readonly selectedRowsOfGroup = computed(() => {\n const groupValue = this.group().value;\n return this.selected().filter(row => groupValue.includes(row));\n });\n readonly checked = computed(\n () => this.selectedRowsOfGroup().length === this.group().value.length\n );\n readonly indeterminate = computed(() => this.selectedRowsOfGroup().length > 0 && !this.checked());\n\n onCheckboxChange(groupSelected: boolean): void {\n this.groupSelectedChange.emit(groupSelected);\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DoCheck,\n ElementRef,\n HostListener,\n inject,\n input,\n KeyValueDiffers,\n output,\n signal\n} from '@angular/core';\n\nimport { Row, RowDetailContext, RowOrGroup, ScrollToRowOptions } from '../../types/public.types';\nimport { DatatableRowDetailDirective } from '../row-detail/row-detail.directive';\n\n@Component({\n selector: 'datatable-row-wrapper',\n imports: [NgTemplateOutlet],\n template: `\n <ng-content />\n @let rowDetailTemplate = rowDetail()?.template();\n @if (rowDetailTemplate && expanded()) {\n <div class=\"datatable-row-detail\" [style.height.px]=\"detailsRowHeight()\">\n <ng-template [ngTemplateOutlet]=\"rowDetailTemplate\" [ngTemplateOutletContext]=\"context()\" />\n </div>\n }\n `,\n styleUrl: './body-row-wrapper.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-row-wrapper'\n }\n})\nexport class DataTableRowWrapperComponent<TRow extends Row = any> implements DoCheck {\n private rowDiffer = inject(KeyValueDiffers).find({}).create<keyof RowOrGroup<TRow>, any>();\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly rowDetail = input<DatatableRowDetailDirective>();\n readonly detailRowHeightFn = input.required<(row?: TRow, index?: number) => number>();\n readonly row = input.required<TRow>();\n readonly disabled = input<boolean>();\n readonly rowContextmenu = output<{\n event: MouseEvent;\n row: RowOrGroup<TRow>;\n }>();\n\n readonly rowIndex = input.required<number>();\n\n readonly expanded = input(false, { transform: booleanAttribute });\n readonly checkRowPropertyChanges = input(true, { transform: booleanAttribute });\n\n readonly detailsRowHeight = computed(() => this.detailRowHeightFn()(this.row(), this.rowIndex()));\n readonly context = computed<RowDetailContext<TRow>>(() => {\n this.rowDiffedCount(); // This allows us to get re-evaluated when the row was mutated internally.\n return {\n row: this.row(),\n expanded: this.expanded(),\n rowIndex: this.rowIndex(),\n disabled: this.disabled()\n };\n });\n\n // This counter will be incremented every time the row object is mutated.\n readonly rowDiffedCount = signal(0);\n\n ngDoCheck(): void {\n if (!this.checkRowPropertyChanges()) {\n return;\n }\n const row = this.row();\n if (this.rowDiffer.diff(row)) {\n this.rowDiffedCount.update(count => count + 1);\n }\n }\n\n scrollIntoView(options?: ScrollToRowOptions): void {\n this.elementRef.nativeElement.scrollIntoView({\n behavior: options?.behavior,\n block: options?.block ?? 'start'\n });\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextmenu($event: MouseEvent): void {\n this.rowContextmenu.emit({ event: $event, row: this.row() });\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DoCheck,\n ElementRef,\n inject,\n input,\n linkedSignal,\n output,\n signal\n} from '@angular/core';\n\nimport { CellActiveEvent, RowIndex, TableColumnInternal } from '../../types/internal.types';\nimport { ActivateEvent, CellContext, Row, RowOrGroup, TreeStatus } from '../../types/public.types';\nimport { TableColumn } from '../../types/table-column.type';\nimport { toPublicColumn } from '../../utils/column-helper';\nimport { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER } from '../../utils/keys';\nimport { DatatableConfiguration } from '../datatable-configuration';\n\n@Component({\n selector: 'datatable-body-cell',\n imports: [NgTemplateOutlet],\n template: `\n @let column = this.column();\n @let row = this.row();\n <div class=\"datatable-body-cell-label\" [style.margin-left.px]=\"calcLeftMargin(column, row)\">\n @let displayCheck = this.displayCheck();\n @if (column.checkboxable && (!displayCheck || displayCheck(row, publicColumn(), value()))) {\n <label class=\"datatable-checkbox\">\n <input\n type=\"checkbox\"\n [attr.aria-label]=\"configuration().messages.ariaRowCheckboxMessage\"\n [disabled]=\"disabled()\"\n [checked]=\"isSelected()\"\n (click)=\"onCheckboxChange($event)\"\n />\n </label>\n }\n @if (column.isTreeColumn) {\n @if (!column.treeToggleTemplate) {\n @let treeStatus = this.treeStatus() ?? 'collapsed';\n <button\n class=\"datatable-tree-button\"\n type=\"button\"\n [disabled]=\"treeStatus === 'disabled'\"\n [attr.aria-label]=\"treeStatus\"\n (click)=\"onTreeAction()\"\n >\n <span>\n @if (treeStatus === 'loading') {\n <i [class]=\"configuration().cssClasses.treeStatusLoading\"></i>\n }\n @if (treeStatus === 'collapsed') {\n <i [class]=\"configuration().cssClasses.treeStatusCollapsed\"></i>\n }\n @if (treeStatus === 'expanded' || treeStatus === 'disabled') {\n <i [class]=\"configuration().cssClasses.treeStatusExpanded\"></i>\n }\n </span>\n </button>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"column.treeToggleTemplate\"\n [ngTemplateOutletContext]=\"{ cellContext: cellContext() }\"\n />\n }\n }\n\n @if (!column.cellTemplate) {\n @if (column.bindAsUnsafeHtml) {\n <span [title]=\"sanitizedValue()\" [innerHTML]=\"value()\"> </span>\n } @else {\n <span [title]=\"sanitizedValue()\">{{ value() }}</span>\n }\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"column.cellTemplate\"\n [ngTemplateOutletContext]=\"cellContext()\"\n />\n }\n </div>\n `,\n styleUrl: './body-cell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-body-cell',\n '[class]': 'columnCssClasses()',\n '[class.active]': 'isFocused() && !disabled()',\n '[class.row-disabled]': 'disabled()',\n '(focus)': 'onFocus()',\n '(blur)': 'onBlur()',\n '(click)': 'onClick($event)',\n '(dblclick)': 'onDblClick($event)',\n '(keydown)': 'onKeyDown($event)'\n }\n})\nexport class DataTableBodyCellComponent<TRow extends Row = any> implements DoCheck {\n private _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n\n readonly displayCheck = input<(row: TRow, column: TableColumn, value: any) => boolean>();\n\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly group = input<TRow[]>();\n\n readonly rowHeight = input<number>(0);\n\n readonly isSelected = input(false, { transform: booleanAttribute });\n\n readonly rowIndex = input<RowIndex>();\n\n readonly column = input.required<TableColumnInternal>();\n\n readonly row = input.required<TRow>();\n\n readonly treeStatus = input<TreeStatus | undefined>('collapsed');\n\n readonly expanded = input(false, { transform: booleanAttribute });\n\n readonly activate = output<CellActiveEvent<TRow>>();\n\n readonly treeAction = output<TRow>();\n\n protected readonly publicColumn = computed(() => toPublicColumn(this.column()));\n\n protected readonly columnCssClasses = computed(() => {\n const column = this.column();\n if (!column.cellClass) {\n return [];\n }\n if (typeof column.cellClass === 'string') {\n return column.cellClass;\n }\n return column.cellClass({\n row: this.row(),\n group: this.group(),\n column: this.publicColumn(),\n value: this.value(),\n rowHeight: this.rowHeight()\n });\n });\n\n protected readonly sanitizedValue = computed(() => {\n const value = this.value();\n return value !== null && value !== undefined ? this.stripHtml(value) : value;\n });\n readonly value = linkedSignal(() => this.getComputedValue());\n protected readonly cellContext = computed<CellContext<TRow>>(() => {\n return {\n onCheckboxChangeFn: (event: Event) => this.onCheckboxChange(event),\n activateFn: (event: ActivateEvent<TRow>) => this.activate.emit(event),\n row: this.row(),\n group: this.group(),\n value: this.value(),\n column: this.publicColumn(),\n rowHeight: this.rowHeight(),\n isSelected: this.isSelected(),\n rowIndex: this.rowIndex()?.index ?? 0,\n rowInGroupIndex: this.rowIndex()?.indexInGroup,\n treeStatus: this.treeStatus() ?? 'collapsed',\n disabled: this.disabled(),\n expanded: this.expanded(),\n onTreeAction: () => this.onTreeAction()\n };\n });\n\n protected readonly isFocused = signal(false);\n\n ngDoCheck(): void {\n const value = this.getComputedValue();\n if (value !== this.value()) {\n this.value.set(value);\n }\n }\n\n focus(): void {\n this._element.focus({ preventScroll: true });\n }\n\n private getComputedValue(): any {\n let value = '';\n const column = this.column();\n const row = this.row();\n if (!row || column.prop == undefined) {\n value = '';\n } else {\n const val = column.$$valueGetter(row, column.prop);\n const userPipe = column.pipe;\n\n if (userPipe) {\n value = userPipe.transform(val);\n } else if (value !== undefined) {\n value = val;\n }\n }\n return value;\n }\n\n protected onFocus(): void {\n this.isFocused.set(true);\n }\n\n protected onBlur(): void {\n this.isFocused.set(false);\n }\n\n protected onClick(event: MouseEvent): void {\n this.activate.emit({\n type: 'click',\n event,\n row: this.row(),\n group: this.group(),\n rowHeight: this.rowHeight(),\n column: this.publicColumn(),\n value: this.value(),\n cellElement: this._element\n });\n }\n\n protected onDblClick(event: MouseEvent): void {\n this.activate.emit({\n type: 'dblclick',\n event,\n row: this.row(),\n group: this.group(),\n rowHeight: this.rowHeight(),\n column: this.publicColumn(),\n value: this.value(),\n cellElement: this._element\n });\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n const key = event.key;\n const isTargetCell = event.target === this._element;\n\n const isAction =\n key === ENTER ||\n key === ARROW_DOWN ||\n key === ARROW_UP ||\n key === ARROW_LEFT ||\n key === ARROW_RIGHT;\n\n if (isAction && isTargetCell) {\n event.preventDefault();\n event.stopPropagation();\n\n this.activate.emit({\n type: 'keydown',\n event,\n row: this.row(),\n group: this.group(),\n rowHeight: this.rowHeight(),\n column: this.publicColumn(),\n value: this.value(),\n cellElement: this._element\n });\n }\n }\n\n onCheckboxChange(event: Event): void {\n this.activate.emit({\n type: 'checkbox',\n event,\n row: this.row(),\n group: this.group(),\n rowHeight: this.rowHeight(),\n column: this.publicColumn(),\n value: this.value(),\n cellElement: this._element,\n treeStatus: 'collapsed'\n });\n }\n\n stripHtml(html: string): string {\n if (!html.replace) {\n return html;\n }\n return html.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n\n protected onTreeAction() {\n this.treeAction.emit(this.row());\n }\n\n calcLeftMargin(column: TableColumnInternal, row: RowOrGroup<TRow>): number {\n const levelIndent = column.treeLevelIndent ?? 50;\n return column.isTreeColumn ? (row as TRow).level! * levelIndent : 0;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DoCheck,\n ElementRef,\n HostListener,\n inject,\n input,\n KeyValueDiffer,\n KeyValueDiffers,\n output,\n viewChildren\n} from '@angular/core';\n\nimport { CellActiveEvent, RowIndex, TableColumnInternal } from '../../types/internal.types';\nimport { ActivateEvent, Row, RowOrGroup, TreeStatus } from '../../types/public.types';\nimport { TableColumn } from '../../types/table-column.type';\nimport { columnGroupWidths, columnsByPin, columnsByPinArr } from '../../utils/column';\nimport { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER } from '../../utils/keys';\nimport { DataTableBodyCellComponent } from './body-cell.component';\n\n@Component({\n selector: 'datatable-body-row',\n imports: [DataTableBodyCellComponent],\n template: `\n @for (colGroup of _columnsByPin(); track colGroup.type) {\n @if (colGroup.columns.length) {\n <div\n class=\"datatable-row-group\"\n [class]=\"'datatable-row-' + colGroup.type\"\n [style.grid-column]=\"'span ' + colGroup.columns.length\"\n [class.row-disabled]=\"disabled()\"\n >\n @for (column of colGroup.columns; track column.$$id) {\n <datatable-body-cell\n role=\"cell\"\n tabindex=\"-1\"\n [row]=\"row()\"\n [group]=\"group()\"\n [expanded]=\"expanded()\"\n [isSelected]=\"isSelected()\"\n [rowIndex]=\"rowIndex()\"\n [column]=\"column\"\n [rowHeight]=\"rowHeight()\"\n [displayCheck]=\"displayCheck()\"\n [disabled]=\"disabled()\"\n [treeStatus]=\"treeStatus()\"\n (activate)=\"onActivate($event, column)\"\n (treeAction)=\"onTreeAction()\"\n />\n }\n </div>\n }\n }\n `,\n styleUrl: './body-row.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-body-row',\n role: 'row',\n tabindex: '-1',\n '[class]': 'cssClass()',\n '[class.active]': 'isSelected()',\n '[class.datatable-row-odd]': 'innerRowIndex() % 2 !== 0',\n '[class.datatable-row-even]': 'innerRowIndex() % 2 === 0',\n '[class.row-disabled]': 'disabled()',\n '[style.height.px]': 'rowHeight()'\n }\n})\nexport class DataTableBodyRowComponent<TRow extends Row = any> implements DoCheck {\n private cd = inject(ChangeDetectorRef);\n _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private _rowDiffer: KeyValueDiffer<keyof RowOrGroup<TRow>, any> = inject(KeyValueDiffers)\n .find({})\n .create();\n\n readonly columns = input.required<TableColumnInternal[]>();\n readonly expanded = input<boolean>();\n readonly rowClass = input<(row: TRow) => string | Record<string, boolean>>();\n readonly row = input.required<TRow>();\n readonly group = input<TRow[]>();\n readonly isSelected = input<boolean>();\n readonly rowIndex = input.required<RowIndex>();\n readonly displayCheck = input<(row: TRow, column: TableColumn, value?: any) => boolean>();\n readonly treeStatus = input<TreeStatus | undefined>('collapsed');\n\n readonly disabled = input<boolean>();\n readonly checkRowPropertyChanges = input(true, { transform: booleanAttribute });\n\n protected readonly cssClass = computed(() => {\n const rowClass = this.rowClass();\n return rowClass ? rowClass(this.row()) : [];\n });\n\n readonly rowHeight = input.required<number>();\n\n readonly activate = output<ActivateEvent<TRow>>();\n readonly treeAction = output<void>();\n\n readonly _columnGroupWidths = computed(() => {\n const colsByPin = columnsByPin(this.columns());\n return columnGroupWidths(colsByPin, this.columns());\n });\n readonly _columnsByPin = computed(() => {\n return columnsByPinArr(this.columns());\n });\n private readonly cells = viewChildren(DataTableBodyCellComponent);\n\n ngDoCheck(): void {\n if (!this.checkRowPropertyChanges()) {\n return;\n }\n if (this._rowDiffer.diff(this.row())) {\n this.cd.markForCheck();\n }\n }\n\n onActivate(event: CellActiveEvent<TRow>, column: TableColumnInternal): void {\n this.activate.emit({\n ...event,\n rowElement: this._element,\n cellIndex: this.columns().indexOf(column),\n renderedCellIndex: this.cells().findIndex(cell => cell.column() === column)\n });\n }\n\n focus(): void {\n this._element.focus({ preventScroll: true });\n }\n\n focusCell(index: number): void {\n this.cells()[index]?.focus();\n }\n\n scrollIntoView(): void {\n this._element.scrollIntoView({ block: 'nearest' });\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n const key = event.key;\n const isTargetRow = event.target === this._element;\n\n const isAction =\n key === ENTER ||\n key === ARROW_DOWN ||\n key === ARROW_UP ||\n key === ARROW_LEFT ||\n key === ARROW_RIGHT;\n\n const isCtrlA = event.key === 'a' && (event.ctrlKey || event.metaKey);\n\n if ((isAction && isTargetRow) || isCtrlA) {\n event.preventDefault();\n event.stopPropagation();\n\n this.activate.emit({\n type: 'keydown',\n event,\n row: this.row(),\n rowElement: this._element\n });\n }\n }\n\n @HostListener('mouseenter', ['$event'])\n onMouseenter(event: MouseEvent): void {\n this.activate.emit({\n type: 'mouseenter',\n event,\n row: this.row(),\n rowElement: this._element\n });\n }\n\n onTreeAction() {\n this.treeAction.emit();\n }\n\n /** Returns the row index, or if in a group, the index within a group. */\n protected readonly innerRowIndex = computed(() => {\n const rowIndex = this.rowIndex();\n return rowIndex?.indexInGroup ?? rowIndex?.index ?? 0;\n });\n}\n","import { Directive } from '@angular/core';\n\nimport { Row } from '../../types/public.types';\n\n@Directive({\n selector: '[ngx-datatable-body-row]'\n})\nexport class DatatableBodyRowDirective {\n static ngTemplateContextGuard<TRow extends Row = any>(\n directive: DatatableBodyRowDirective,\n context: unknown\n ): context is {\n row: TRow;\n groupedRows: TRow[];\n index: number;\n indexInGroup?: number;\n disabled: boolean;\n } {\n return true;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n numberAttribute,\n input\n} from '@angular/core';\n\nimport { TableColumnInternal } from '../../../types/internal.types';\n\n@Component({\n selector: 'ghost-loader',\n imports: [NgTemplateOutlet],\n templateUrl: './ghost-loader.component.html',\n styleUrl: './ghost-loader.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DataTableGhostLoaderComponent {\n readonly columns = input.required<TableColumnInternal[]>();\n readonly pageSize = input.required<number, unknown>({ transform: numberAttribute });\n readonly rowHeight = input.required<number | 'auto' | ((row?: any) => number)>();\n readonly ghostBodyHeight = input<number, unknown>(undefined, { transform: numberAttribute });\n\n protected readonly ghostRows = computed(() =>\n Array.from({ length: this.pageSize() }, (_, index) => index)\n );\n\n protected readonly rowHeightComputed = () => {\n const rowHeight = this.rowHeight();\n if (typeof rowHeight === 'function') {\n // If rowHeight is a function, we cannot determine a fixed height here.\n return 'auto';\n }\n return rowHeight === 'auto' ? 'auto' : rowHeight + 'px';\n };\n}\n","<div class=\"ghost-loader ghost-cell-container\" [style.height]=\"ghostBodyHeight()\">\n @for (item of ghostRows(); track item) {\n <div class=\"ghost-element datatable-body-row\" [style.height]=\"rowHeightComputed()\">\n @for (col of columns(); track col) {\n <div class=\"ghost-cell datatable-body-cell\" [style.width.px]=\"col.width()\">\n @if (!col.ghostCellTemplate) {\n <div class=\"line ghost-cell-strip\"></div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"col.ghostCellTemplate\" />\n }\n </div>\n }\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n OnDestroy,\n OnInit,\n input,\n booleanAttribute,\n output\n} from '@angular/core';\n\nimport { ScrollContainerDirective } from '../../directives/scroll-container.directive';\nimport { ScrollToRowOptions } from '../../types/public.types';\n\nexport interface ScrollEventInternal {\n direction: string;\n scrollYPos: number;\n scrollXPos: number;\n}\n\n@Component({\n selector: 'datatable-scroller',\n template: ` <ng-content /> `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-scroll',\n '[style.height.px]': 'scrollHeight()'\n }\n})\nexport class ScrollerComponent implements OnInit, OnDestroy {\n private scrollContainer = inject(ScrollContainerDirective);\n\n readonly scrollbarV = input(false, {\n transform: booleanAttribute\n });\n readonly scrollbarH = input(false, {\n transform: booleanAttribute\n });\n readonly scrollHeight = input<number>();\n\n readonly scroll = output<ScrollEventInternal>();\n\n scrollYPos = 0;\n scrollXPos = 0;\n prevScrollYPos = 0;\n prevScrollXPos = 0;\n\n private _removeScrollListener?: () => void;\n\n get scrollTop(): number {\n return this.scrollContainer.scrollTop;\n }\n\n ngOnInit(): void {\n // manual bind so we don't always listen\n if (this.scrollbarV() || this.scrollbarH()) {\n this._removeScrollListener = this.scrollContainer.listenToScroll(this.onScrolled.bind(this));\n }\n }\n\n ngOnDestroy(): void {\n this._removeScrollListener?.();\n this._removeScrollListener = undefined;\n }\n\n setOffset(offsetY: number): void {\n this.scrollContainer.setScrollTop(offsetY);\n }\n\n scrollTo(top: number, options?: ScrollToRowOptions): void {\n this.scrollContainer.scrollTo(top, options);\n }\n\n onScrolled(event: Event): void {\n const dom = event.currentTarget as Element;\n this.scrollYPos = dom.scrollTop;\n this.scrollXPos = dom.scrollLeft;\n this.updateOffset();\n }\n\n updateOffset(): void {\n let direction: string;\n if (this.scrollYPos < this.prevScrollYPos) {\n direction = 'down';\n } else {\n direction = 'up';\n }\n\n this.scroll.emit({\n direction,\n scrollYPos: this.scrollYPos,\n scrollXPos: this.scrollXPos\n });\n\n this.prevScrollYPos = this.scrollYPos;\n this.prevScrollXPos = this.scrollXPos;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, TemplateRef } from '@angular/core';\n\nimport { TableColumnInternal } from '../../../types/internal.types';\nimport { DataTableBodyRowComponent } from '../body-row.component';\n\nconst defaultSumFunc = (cells: any[]): any => {\n const cellsWithValues = cells.filter(cell => !!cell);\n\n if (!cellsWithValues.length) {\n return null;\n }\n if (cellsWithValues.some(cell => typeof cell !== 'number')) {\n return null;\n }\n\n return cellsWithValues.reduce((res, cell) => res + cell);\n};\n\nconst noopSumFunc = (cells: any[]): void => {\n return;\n};\n\n@Component({\n selector: 'datatable-summary-row',\n imports: [DataTableBodyRowComponent, NgTemplateOutlet],\n template: `\n @let template = this.template();\n @if (template) {\n <div class=\"datatable-body-row\" role=\"row\" [style.height.px]=\"rowHeight()\">\n <div class=\"datatable-body-cell\" role=\"cell\" [attr.aria-colspan]=\"allColumnsColspan()\">\n <ng-container [ngTemplateOutlet]=\"template\" />\n </div>\n </div>\n } @else {\n @let summaryRow = this.summaryRow();\n @let _internalColumns = this._internalColumns();\n @if (summaryRow && _internalColumns.length) {\n <datatable-body-row\n ariaRowCheckboxMessage=\"\"\n [columns]=\"_internalColumns\"\n [rowHeight]=\"rowHeight()\"\n [row]=\"summaryRow\"\n [rowIndex]=\"{ index: -1 }\"\n />\n }\n }\n `,\n styleUrl: './summary-row.component.scss',\n host: {\n class: 'datatable-summary-row'\n }\n})\nexport class DataTableSummaryRowComponent {\n readonly rows = input.required<any[]>();\n readonly columns = input.required<TableColumnInternal[]>();\n readonly allColumnsColspan = input.required<number>();\n\n readonly rowHeight = input.required<number>();\n readonly template = input<TemplateRef<void>>();\n\n protected readonly _internalColumns = computed(() => {\n return this.columns().map(col => ({\n ...col,\n cellTemplate: col.summaryTemplate\n }));\n });\n protected readonly summaryRow = computed(() => this.computeSummaryRowValues());\n\n private computeSummaryRowValues() {\n if (!this.columns().length || !this.rows().length) {\n return undefined;\n }\n const summaryRow: any = {};\n this.columns()\n .filter(col => !col.summaryTemplate && col.prop)\n .forEach(col => {\n const cellsFromSingleColumn = this.rows().map(row => row[col.prop!]);\n const sumFunc = this.getSummaryFunction(col);\n\n summaryRow[col.prop!] = col.pipe\n ? col.pipe.transform(sumFunc(cellsFromSingleColumn))\n : sumFunc(cellsFromSingleColumn);\n });\n\n return summaryRow;\n }\n\n private getSummaryFunction(column: TableColumnInternal): (a: any[]) => any {\n if (column.summaryFunc === undefined) {\n return defaultSumFunc;\n } else if (column.summaryFunc === null) {\n return noopSumFunc;\n } else {\n return column.summaryFunc;\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Input,\n input,\n model,\n OnChanges,\n OnInit,\n output,\n OutputEmitterRef,\n signal,\n SimpleChanges,\n TemplateRef,\n TrackByFunction,\n untracked,\n viewChildren,\n viewChild\n} from '@angular/core';\n\nimport { RowLocation, TableColumnInternal } from '../../types/internal.types';\nimport {\n ActivateEvent,\n DetailToggleEvents,\n DragEventData,\n Group,\n GroupToggleEvents,\n Row,\n RowOrGroup,\n ScrollEvent,\n ScrollToRowOptions,\n SelectionType\n} from '../../types/public.types';\nimport { TableColumn } from '../../types/table-column.type';\nimport { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ENTER } from '../../utils/keys';\nimport { RowHeightCache } from '../../utils/row-height-cache';\nimport { selectRows, selectRowsBetween } from '../../utils/selection';\nimport { DatatableConfiguration } from '../datatable-configuration';\nimport { DatatableRowDetailDirective } from '../row-detail/row-detail.directive';\nimport { DatatableGroupHeaderDirective } from './body-group-header.directive';\nimport { DataTableGroupWrapperComponent } from './body-group-wrapper.component';\nimport { DatatableRowDefInternalDirective } from './body-row-def.component';\nimport { DataTableRowWrapperComponent } from './body-row-wrapper.component';\nimport { DataTableBodyRowComponent } from './body-row.component';\nimport { DatatableBodyRowDirective } from './body-row.directive';\nimport { DataTableGhostLoaderComponent } from './ghost-loader/ghost-loader.component';\nimport { ScrollerComponent } from './scroller.component';\nimport { DataTableSummaryRowComponent } from './summary/summary-row.component';\n\n@Component({\n selector: 'datatable-body',\n imports: [\n DataTableGhostLoaderComponent,\n ScrollerComponent,\n DataTableSummaryRowComponent,\n DataTableRowWrapperComponent,\n DatatableRowDefInternalDirective,\n DataTableBodyRowComponent,\n NgTemplateOutlet,\n DatatableBodyRowDirective,\n DataTableGroupWrapperComponent\n ],\n template: `\n @if (loadingIndicator()) {\n <div class=\"custom-loading-indicator-wrapper\">\n <div class=\"custom-loading-content\">\n <ng-content select=\"[loading-indicator]\" />\n </div>\n </div>\n }\n @let scrollbarV = this.scrollbarV();\n @let columns = this.columns();\n @let bodyHeight = this._bodyHeight();\n @let rows = this.rows();\n @let rowCount = this.rowCount();\n @if (ghostLoadingIndicator() && (!rowCount || !virtualization() || !scrollbarV)) {\n <ghost-loader\n class=\"ghost-overlay\"\n [columns]=\"columns\"\n [pageSize]=\"pageSize()\"\n [rowHeight]=\"configuration().rowHeight\"\n [ghostBodyHeight]=\"bodyHeight\"\n />\n }\n @if (rows.length) {\n <datatable-scroller\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH()\"\n [scrollHeight]=\"scrollHeight()\"\n (scroll)=\"onBodyScroll($event)\"\n >\n @if ((summaryRow() || summaryRowTemplate()) && summaryPosition() === 'top') {\n <datatable-summary-row\n [class.sticky]=\"summaryRowTemplate()\"\n [rowHeight]=\"summaryHeight()\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [allColumnsColspan]=\"allColumnsColspan()\"\n [template]=\"summaryRowTemplate()\"\n />\n }\n <ng-template\n #bodyRow\n let-row=\"row\"\n let-index=\"index\"\n let-indexInGroup=\"indexInGroup\"\n let-groupedRows=\"groupedRows\"\n let-disabled=\"disabled\"\n ngx-datatable-body-row\n >\n @let absoluteIndex = indexes().first + index;\n <datatable-row-wrapper\n [attr.hidden]=\"\n ghostLoadingIndicator() && (!rowCount || !virtualization() || !scrollbarV)\n ? true\n : null\n \"\n [rowDetail]=\"rowDetail()\"\n [detailRowHeightFn]=\"detailRowHeightFn()\"\n [row]=\"row\"\n [disabled]=\"disabled\"\n [expanded]=\"getRowExpanded(row)\"\n [rowIndex]=\"absoluteIndex\"\n [checkRowPropertyChanges]=\"checkRowPropertyChanges()\"\n (rowContextmenu)=\"rowContextmenu.emit($event)\"\n >\n <datatable-body-row\n #rowElement\n [disabled]=\"disabled\"\n [isSelected]=\"getRowSelected(row)\"\n [columns]=\"columns\"\n [rowHeight]=\"getRowHeight(row)\"\n [row]=\"row\"\n [group]=\"groupedRows\"\n [rowIndex]=\"{ index: absoluteIndex, indexInGroup: indexInGroup }\"\n [expanded]=\"getRowExpanded(row)\"\n [rowClass]=\"rowClass()\"\n [displayCheck]=\"displayCheck()\"\n [treeStatus]=\"row?.treeStatus\"\n [draggable]=\"rowDraggable()\"\n [checkRowPropertyChanges]=\"checkRowPropertyChanges()\"\n (treeAction)=\"onTreeAction(row)\"\n (activate)=\"onActivate($event, absoluteIndex, indexInGroup)\"\n (drop)=\"drop($event, row, rowElement)\"\n (dragover)=\"dragOver($event, row)\"\n (dragenter)=\"dragEnter($event, row, rowElement)\"\n (dragleave)=\"dragLeave($event, row, rowElement)\"\n (dragstart)=\"drag($event, row, rowElement)\"\n (dragend)=\"dragEnd($event, row)\"\n />\n </datatable-row-wrapper>\n </ng-template>\n\n <div class=\"datatable-row-render-wrapper\" [style.transform]=\"renderOffset()\">\n @for (group of rowsToRender(); track rowTrackingFn(i, group); let i = $index) {\n @let absoluteIndex = indexes().first + i;\n @if (!group && ghostLoadingIndicator()) {\n <ghost-loader\n [columns]=\"columns\"\n [pageSize]=\"1\"\n [rowHeight]=\"configuration().rowHeight\"\n />\n } @else if (group) {\n @let disableRowCheck = this.disableRowCheck();\n @let disabled = isRow(group) && disableRowCheck && disableRowCheck(group);\n @let rowDefTemplate = this.rowDefTemplate();\n @if (rowDefTemplate) {\n <ng-container\n *rowDefInternal=\"\n {\n template: rowDefTemplate,\n rowTemplate: bodyRow,\n row: group,\n index: i\n };\n disabled: disabled\n \"\n />\n } @else {\n @if (isRow(group)) {\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{\n row: group,\n index: i,\n disabled\n }\"\n />\n }\n }\n\n @if (isGroup(group)) {\n <datatable-group-wrapper\n [group]=\"group\"\n [attr.hidden]=\"\n ghostLoadingIndicator() && (!rowCount || !virtualization() || !scrollbarV)\n ? true\n : null\n \"\n [groupHeader]=\"groupHeader()\"\n [groupHeaderRowHeight]=\"getGroupHeaderRowHeight(group, absoluteIndex)\"\n [disabled]=\"disabled\"\n [expanded]=\"getGroupExpanded(group)\"\n [rowIndex]=\"absoluteIndex\"\n [selected]=\"selected()\"\n [allColumnsColspan]=\"allColumnsColspan()\"\n (groupSelectedChange)=\"groupSelectedChange($event, group)\"\n >\n @for (row of group.value; track rowTrackingFn($index, row)) {\n @let disabled = disableRowCheck && disableRowCheck(row);\n <ng-container\n [ngTemplateOutlet]=\"bodyRow\"\n [ngTemplateOutletContext]=\"{\n row,\n groupedRows: group?.value,\n index: i,\n indexInGroup: $index,\n disabled\n }\"\n />\n }\n </datatable-group-wrapper>\n }\n }\n }\n </div>\n </datatable-scroller>\n @if ((summaryRow() || summaryRowTemplate()) && summaryPosition() === 'bottom') {\n <datatable-summary-row\n [rowHeight]=\"summaryHeight()\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [allColumnsColspan]=\"allColumnsColspan()\"\n [template]=\"summaryRowTemplate()\"\n />\n }\n }\n @if (!rows?.length && !loadingIndicator() && !ghostLoadingIndicator()) {\n <datatable-scroller\n class=\"datatable-empty-scroller\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH()\"\n [scrollHeight]=\"scrollHeight()\"\n (scroll)=\"onBodyScroll($event)\"\n >\n <div role=\"row\" class=\"datatable-empty-row\">\n <div role=\"cell\" class=\"datatable-empty-cell\" [attr.aria-colspan]=\"allColumnsColspan()\">\n <ng-content select=\"[empty-content]\" />\n </div>\n </div>\n </datatable-scroller>\n }\n `,\n styleUrl: './body.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-body'\n }\n})\nexport class DataTableBodyComponent<TRow extends Row = any> implements OnInit, OnChanges {\n cd = inject(ChangeDetectorRef);\n destroyRef = inject(DestroyRef);\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n\n readonly rowDefTemplate = input<TemplateRef<any>>();\n readonly scrollbarV = input(false, { transform: booleanAttribute });\n readonly scrollbarH = input<boolean>();\n readonly loadingIndicator = input<boolean>();\n readonly ghostLoadingIndicator = input<boolean>();\n readonly externalPaging = input<boolean>();\n readonly offsetX = model.required<number>();\n readonly selectionType = input<SelectionType>();\n readonly selected = model<TRow[]>([]);\n readonly rowIdentity = input.required<(x: RowOrGroup<TRow>) => unknown>();\n readonly rowDetail = input<DatatableRowDetailDirective>();\n readonly groupHeader = input<DatatableGroupHeaderDirective>();\n readonly selectCheck = input<(value: TRow, index: number, array: TRow[]) => boolean>();\n readonly displayCheck = input<(row: TRow, column: TableColumn, value?: any) => boolean>();\n readonly trackByProp = input<keyof TRow>();\n readonly rowClass = input<(row: TRow) => string | Record<string, boolean>>();\n readonly groupedRows = input<Group<TRow>[]>();\n // TODO: Find a better way to handle default expansion state with signal input\n // eslint-disable-next-line @angular-eslint/prefer-signals\n @Input() groupExpansionDefault?: boolean;\n readonly virtualization = input<boolean>();\n readonly summaryRow = input<boolean>();\n readonly summaryPosition = input.required<string>();\n readonly summaryHeight = input.required<number>();\n readonly summaryRowTemplate = input<TemplateRef<void>>();\n readonly rowDraggable = input<boolean>();\n readonly rowDragEvents = input.required<OutputEmitterRef<DragEventData>>();\n readonly disableRowCheck = input<(row: TRow) => boolean | undefined>();\n readonly checkRowPropertyChanges = input(true, { transform: booleanAttribute });\n\n readonly pageSize = input.required<number>();\n\n readonly rows = input.required<(TRow | undefined)[]>();\n\n readonly columns = input.required<TableColumnInternal[]>();\n\n readonly offset = input<number>(0);\n\n readonly rowCount = input<number>(0);\n\n readonly bodyHeight = input<string | number>();\n readonly verticalScrollVisible = input(false);\n\n readonly scroll = output<ScrollEvent>();\n readonly page = output<number>();\n readonly activate = output<ActivateEvent<TRow>>();\n readonly rowContextmenu = output<{\n event: MouseEvent;\n row: RowOrGroup<TRow>;\n }>();\n readonly treeAction = output<{ row: TRow }>();\n\n private readonly scroller = viewChild(ScrollerComponent);\n private readonly rowWrappers = viewChildren(DataTableRowWrapperComponent);\n private readonly rowComponents =\n viewChildren<DataTableBodyRowComponent<TRow>>(DataTableBodyRowComponent);\n\n /**\n * Returns if selection is enabled.\n */\n get selectEnabled(): boolean {\n return !!this.selectionType();\n }\n\n protected readonly allColumnsColspan = computed(() => Math.max(1, this.columns().length));\n\n /**\n * Property that would calculate the height of scroll bar\n * based on the row heights cache for virtual scroll and virtualization. Other scenarios\n * calculate scroll height automatically (as height will be undefined).\n */\n readonly scrollHeight = computed(() => {\n if (this.rowHeightsCache() && this.scrollbarV() && this.virtualization() && this.rowCount()) {\n return this.rowHeightsCache().query(this.rowCount() - 1);\n }\n // avoid TS7030: Not all code paths return a value.\n return undefined;\n });\n\n readonly detailRowHeightFn = computed(() => {\n const rowDetail = this.rowDetail();\n if (!rowDetail) {\n return () => 0;\n }\n const rowHeight = rowDetail.rowHeight();\n return typeof rowHeight === 'function' ? rowHeight : () => rowHeight;\n });\n\n readonly rowsToRender = computed(() => {\n return this.updateRows();\n });\n readonly rowHeightsCache = computed(() => this.computeRowHeightsCache());\n readonly offsetY = signal(0);\n readonly indexes = computed(() => this.computeIndexes());\n private readonly pendingFocus = signal<{ location: RowLocation; cellIndex?: number } | undefined>(\n undefined\n );\n rowTrackingFn: TrackByFunction<RowOrGroup<TRow> | undefined>;\n readonly rowExpansions = signal<TRow[]>([]);\n readonly groupExpansions = signal<Group<TRow>[]>([]);\n\n readonly _bodyHeight = computed(() => {\n if (this.scrollbarV()) {\n return this.bodyHeight() + 'px';\n } else {\n return 'auto';\n }\n });\n _offsetEvent = -1;\n\n private _draggedRow?: RowOrGroup<TRow>;\n private _draggedRowElement?: HTMLElement;\n\n /**\n * Creates an instance of DataTableBodyComponent.\n */\n constructor() {\n // declare fn here so we can get access to the `this` property\n this.rowTrackingFn = (index, row) => {\n if (this.ghostLoadingIndicator()) {\n return index;\n }\n const trackByProp = this.trackByProp();\n if (trackByProp && row && this.isRow(row)) {\n return row[trackByProp];\n } else if (row && this.isGroup(row)) {\n return row.key ?? index;\n } else {\n return row ?? index;\n }\n };\n effect(() => this.defaultGroupExpansionEffect());\n effect(() => this.focusPendingRow());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bodyHeight || changes.rows || changes.rowCount || changes.pageSize) {\n if (changes.pageSize) {\n this._offsetEvent = -1;\n this.updatePage('up');\n this.updatePage('down');\n }\n }\n }\n\n /**\n * Called after the constructor, initializing input properties\n */\n ngOnInit(): void {\n const rowDetail = this.rowDetail();\n if (rowDetail) {\n const listener = rowDetail.toggle.subscribe(event => this.rowToggleStateChange(event));\n this.destroyRef.onDestroy(() => listener.unsubscribe());\n }\n\n const groupHeader = this.groupHeader();\n if (groupHeader) {\n const listener = groupHeader.toggle.subscribe(event => {\n // Remove default expansion state once user starts manual toggle.\n this.groupExpansionDefault = false;\n this.groupToggleStateChange(event);\n });\n this.destroyRef.onDestroy(() => listener.unsubscribe());\n }\n }\n\n private defaultGroupExpansionEffect(): void {\n if (\n this.groupedRows() &&\n untracked(() => this.groupExpansions().length) === 0 &&\n this.groupExpansionDefault\n ) {\n this.groupExpansions.set([...(this.groupedRows() ?? [])]);\n }\n }\n\n private groupToggleStateChange({ type, value }: GroupToggleEvents<TRow>) {\n if (type === 'group') {\n this.toggleGroupExpansion(value);\n }\n if (type === 'all') {\n this.toggleAllGroups(value);\n }\n\n // Refresh rows after toggle\n this.cd.markForCheck();\n }\n\n private rowToggleStateChange({ type, value }: DetailToggleEvents<TRow>) {\n if (type === 'row') {\n this.toggleRowExpansion(value);\n }\n if (type === 'all') {\n this.toggleAllRows(value);\n }\n\n // Refresh rows after toggle\n this.cd.markForCheck();\n }\n\n /**\n * Updates the Y offset given a new offset.\n */\n updateOffsetY(offset?: number): void {\n // scroller is missing on empty table\n const scroller = this.scroller();\n if (!scroller) {\n return;\n }\n\n const virtualization = this.virtualization();\n if (this.scrollbarV() && virtualization && offset) {\n // First get the row Index that we need to move to.\n const rowIndex = this.pageSize() * offset;\n offset = this.rowHeightsCache().query(rowIndex - 1);\n } else if (this.scrollbarV() && !virtualization) {\n offset = 0;\n }\n\n scroller.setOffset(offset ?? 0);\n }\n\n /**\n * Body was scrolled, this is mainly useful for\n * when a user is server-side pagination via virtual scroll.\n */\n onBodyScroll(event: any): void {\n const scrollYPos: number = event.scrollYPos;\n const scrollXPos: number = event.scrollXPos;\n\n // if scroll change, trigger update\n // this is mainly used for header cell positions\n if (this.offsetY() !== scrollYPos || this.offsetX() !== scrollXPos) {\n this.scroll.emit({\n offsetY: scrollYPos,\n offsetX: scrollXPos\n });\n }\n\n this.offsetY.set(scrollYPos);\n this.offsetX.set(scrollXPos);\n\n this.updatePage(event.direction);\n this.cd.detectChanges();\n }\n\n private focusPendingRow(): void {\n const pendingFocus = this.pendingFocus();\n if (!pendingFocus) {\n return;\n }\n\n const row = this.getRenderedRow(pendingFocus.location);\n if (row) {\n this.focusRenderedRow(row, pendingFocus.cellIndex);\n this.pendingFocus.set(undefined);\n }\n }\n\n /**\n * Updates the page given a direction.\n */\n updatePage(direction: string): void {\n let offset = this.indexes().first / this.pageSize();\n const scrollInBetween = !Number.isInteger(offset);\n if (direction === 'up') {\n offset = Math.ceil(offset);\n } else if (direction === 'down') {\n offset = Math.floor(offset);\n }\n\n if (direction !== undefined && !isNaN(offset) && offset !== this._offsetEvent) {\n this._offsetEvent = offset;\n // if scroll was done by mouse drag make sure previous row and next row data is also fetched if its not fetched\n if (scrollInBetween && this.scrollbarV() && this.virtualization() && this.externalPaging()) {\n const upRow = this.rows()[this.indexes().first - 1];\n if (!upRow && direction === 'up') {\n this.page.emit(offset - 1);\n }\n\n const downRow = this.rows()[this.indexes().first + this.pageSize()];\n if (!downRow && direction === 'down') {\n this.page.emit(offset + 1);\n }\n }\n this.page.emit(offset);\n }\n }\n\n /**\n * Updates the rows in the view port\n */\n updateRows(): (RowOrGroup<TRow> | undefined)[] {\n const { first, last } = this.indexes();\n // if grouprowsby has been specified treat row paging\n // parameters as group paging parameters ie if limit 10 has been\n // specified treat it as 10 groups rather than 10 rows\n const groupedRows = this.groupedRows();\n const rows = groupedRows\n ? groupedRows.slice(first, Math.min(last, groupedRows.length))\n : this.rows().slice(first, Math.min(last, this.rowCount()));\n\n rows.length = last - first;\n return rows;\n }\n\n scrollToIndex(index: number, options?: ScrollToRowOptions): void {\n if (this.virtualization()) {\n const scroller = this.scroller();\n if (!scroller) {\n return;\n }\n\n const cache = this.rowHeightsCache();\n const rowTop = cache.query(index - 1);\n const rowBottom = cache.query(index);\n const rowHeight = rowBottom - rowTop;\n // virtualization always provides a numeric bodyHeight\n const viewportHeight = this.bodyHeight() as number;\n const currentScrollTop = scroller.scrollTop;\n const block = options?.block ?? 'start';\n\n let top: number;\n switch (block) {\n case 'center':\n top = rowTop - Math.max(0, (viewportHeight - rowHeight) / 2);\n break;\n case 'end':\n top = rowBottom - viewportHeight;\n break;\n case 'nearest':\n if (rowTop < currentScrollTop) {\n top = rowTop;\n } else if (rowBottom > currentScrollTop + viewportHeight) {\n top = rowBottom - viewportHeight;\n } else {\n top = currentScrollTop;\n }\n break;\n case 'start':\n default:\n top = rowTop;\n break;\n }\n\n scroller.scrollTo(Math.max(0, top), options);\n } else {\n this.rowWrappers()[index]?.scrollIntoView(options);\n }\n }\n\n /**\n * Get the row height\n */\n getRowHeight(row: RowOrGroup<TRow>): number {\n // if its a function return it\n const rowHeight = this.configuration().rowHeight;\n if (typeof rowHeight === 'function') {\n return rowHeight(row);\n }\n\n return rowHeight as number;\n }\n\n getGroupHeaderRowHeight = (row?: any, index?: any): number => {\n const groupHeader = this.groupHeader();\n if (!groupHeader) {\n return 0;\n }\n const rowHeightValue = groupHeader?.rowHeight();\n const rowHeight = rowHeightValue === 0 ? this.configuration().rowHeight : rowHeightValue;\n return typeof rowHeight === 'function' ? rowHeight(row, index) : (rowHeight as number);\n };\n\n /**\n * Calculates the offset of the rendered rows.\n * As virtual rows are not shown, we have to move all rendered rows\n * by the total size of previous non-rendered rows.\n * If each row has a size of 10px and the first 10 rows are not rendered due to scroll,\n * then we have a renderOffset of 100px.\n */\n readonly renderOffset = computed(() => {\n if (this.scrollbarV() && this.virtualization()) {\n return `translateY(${this.rowHeightsCache().query(this.indexes().first - 1)}px)`;\n } else {\n return '';\n }\n });\n\n /**\n * Updates the index of the rows in the viewport\n */\n computeIndexes(): { first: number; last: number } {\n let first = 0;\n let last = this.rowCount();\n\n if (this.scrollbarV()) {\n if (this.virtualization()) {\n // Calculation of the first and last indexes will be based on where the\n // scrollY position would be at. The last index would be the one\n // that shows up inside the view port the last.\n const height = parseInt(this._bodyHeight(), 10);\n first = this.rowHeightsCache().getRowIndex(this.offsetY());\n last = this.rowHeightsCache().getRowIndex(height + this.offsetY()) + 1;\n }\n } else {\n // The server is handling paging and will pass an array that begins with the\n // element at a specified offset. first should always be 0 with external paging.\n if (!this.externalPaging()) {\n first = Math.max(this.offset() * this.pageSize(), 0);\n }\n last = Math.min(first + this.pageSize(), this.rowCount());\n }\n\n return { first, last };\n }\n\n /**\n * Refreshes the full Row Height cache. Should be used\n * when the entire row array state has changed.\n */\n computeRowHeightsCache(): RowHeightCache<TRow> {\n const cache = new RowHeightCache<TRow>();\n if (!this.scrollbarV() || (this.scrollbarV() && !this.virtualization())) {\n return cache;\n }\n\n // Initialize the tree only if there are rows inside the tree.\n if (this.rows().length) {\n cache.initCache({\n rows: this.rows() as TRow[], // TODO: RowHeightCache does not support grouping\n rowHeight: this.configuration().rowHeight,\n detailRowHeight: this.detailRowHeightFn(),\n externalVirtual: this.scrollbarV() && this.externalPaging(),\n indexOffset: this.externalPaging() ? this.offset() * this.pageSize() : 0,\n rowCount: this.rowCount(),\n rowExpansions: new Set<TRow>(this.rowDetail() ? this.rowExpansions() : [])\n });\n }\n return cache;\n }\n\n /**\n * Toggle the Expansion of the row i.e. if the row is expanded then it will\n * collapse and vice versa. Note that the expanded status is stored as\n * a part of the row object itself as we have to preserve the expanded row\n * status in case of sorting and filtering of the row set.\n */\n toggleRowExpansion(row: TRow): void {\n const rowExpandedIdx = this.getExpandedIdx(row, this.rowExpansions());\n const expanded = rowExpandedIdx > -1;\n\n // Update the toggled row and update thive nevere heights in the cache.\n if (expanded) {\n this.rowExpansions.update(expansions => {\n expansions.splice(rowExpandedIdx, 1);\n return [...expansions];\n });\n } else {\n this.rowExpansions.update(expansions => [...expansions, row]);\n }\n }\n\n toggleGroupExpansion(row: Group<TRow>): void {\n const groupExpandedIdx = this.getExpandedIdx(row, this.groupExpansions());\n const expanded = groupExpandedIdx > -1;\n\n // Update the toggled row and update thive nevere heights in the cache.\n if (expanded) {\n this.groupExpansions.update(expansions => {\n expansions.splice(groupExpandedIdx, 1);\n return [...expansions];\n });\n } else {\n this.groupExpansions.update(expansions => [...expansions, row]);\n }\n }\n\n /**\n * Expand/Collapse all the rows no matter what their state is.\n */\n toggleAllRows(expanded: boolean): void {\n // TODO requires fixing. This still does not work with groups.\n this.rowExpansions.set(expanded ? [...(this.rows() as any)] : []);\n }\n\n /**\n * Expand/Collapse all the groups no matter what their state is.\n */\n toggleAllGroups(expanded: boolean): void {\n this.groupExpansions.set(expanded ? [...this.groupedRows()!] : []);\n }\n\n /**\n * Returns if the row was expanded and set default row expansion when row expansion is empty\n */\n getRowExpanded(row: TRow): boolean {\n return this.getExpandedIdx(row, this.rowExpansions()) > -1;\n }\n\n getGroupExpanded(group: Group<TRow>): boolean {\n return this.getExpandedIdx(group, this.groupExpansions()) > -1;\n }\n\n getExpandedIdx(row: RowOrGroup<TRow>, expanded: RowOrGroup<TRow>[]): number {\n if (!expanded?.length) {\n return -1;\n }\n\n const rowId = this.rowIdentity()(row);\n return expanded.findIndex(r => {\n const id = this.rowIdentity()(r);\n return id === rowId;\n });\n }\n\n onTreeAction(row: TRow) {\n this.treeAction.emit({ row });\n }\n\n dragOver(event: DragEvent, dropRow: RowOrGroup<TRow>) {\n event.preventDefault();\n this.rowDragEvents().emit({\n event,\n srcElement: this._draggedRowElement!,\n eventType: 'dragover',\n dragRow: this._draggedRow,\n dropRow\n });\n }\n\n drag(event: DragEvent, dragRow: RowOrGroup<TRow>, rowComponent: DataTableBodyRowComponent<TRow>) {\n this._draggedRow = dragRow;\n this._draggedRowElement = rowComponent._element;\n this.rowDragEvents().emit({\n event,\n srcElement: this._draggedRowElement,\n eventType: 'dragstart',\n dragRow\n });\n }\n\n drop(event: DragEvent, dropRow: RowOrGroup<TRow>, rowComponent: DataTableBodyRowComponent<TRow>) {\n event.preventDefault();\n this.rowDragEvents().emit({\n event,\n srcElement: this._draggedRowElement!,\n targetElement: rowComponent._element,\n eventType: 'drop',\n dragRow: this._draggedRow,\n dropRow\n });\n }\n\n dragEnter(\n event: DragEvent,\n dropRow: RowOrGroup<TRow>,\n rowComponent: DataTableBodyRowComponent<TRow>\n ) {\n event.preventDefault();\n this.rowDragEvents().emit({\n event,\n srcElement: this._draggedRowElement!,\n targetElement: rowComponent._element,\n eventType: 'dragenter',\n dragRow: this._draggedRow,\n dropRow\n });\n }\n\n dragLeave(\n event: DragEvent,\n dropRow: RowOrGroup<TRow>,\n rowComponent: DataTableBodyRowComponent<TRow>\n ) {\n event.preventDefault();\n this.rowDragEvents().emit({\n event,\n srcElement: this._draggedRowElement!,\n targetElement: rowComponent._element,\n eventType: 'dragleave',\n dragRow: this._draggedRow,\n dropRow\n });\n }\n\n dragEnd(event: DragEvent, dragRow: RowOrGroup<TRow>) {\n event.preventDefault();\n this.rowDragEvents().emit({\n event,\n srcElement: this._draggedRowElement!,\n eventType: 'dragend',\n dragRow\n });\n this._draggedRow = undefined;\n this._draggedRowElement = undefined;\n }\n\n prevIndex?: number;\n\n selectRow(event: Event, index: number, row: TRow): void {\n if (!this.selectEnabled) {\n return;\n }\n\n const chkbox = this.selectionType() === 'checkbox';\n const multi = this.selectionType() === 'multi';\n const multiClick = this.selectionType() === 'multiClick';\n let selected: TRow[];\n\n // TODO: this code needs cleanup. Casting it to KeyboardEvent is not correct as it could also be other types.\n if (multi || chkbox || multiClick) {\n if ((event as KeyboardEvent).shiftKey && this.prevIndex !== undefined) {\n const rangeSelection = selectRowsBetween(this.rows(), index, this.prevIndex);\n selected = [...this.selected()];\n for (const rangeRow of rangeSelection) {\n if (this.getRowSelectedIdx(rangeRow, selected) < 0) {\n selected.push(rangeRow);\n }\n }\n } else if (\n (event as KeyboardEvent).key === 'a' &&\n ((event as KeyboardEvent).ctrlKey || (event as KeyboardEvent).metaKey)\n ) {\n // select all rows except dummy rows which are added for ghostloader in case of virtual scroll\n selected = this.rows().filter(rowItem => !!rowItem);\n } else if (\n (event as KeyboardEvent).ctrlKey ||\n (event as KeyboardEvent).metaKey ||\n multiClick ||\n chkbox\n ) {\n selected = selectRows([...this.selected()], row, this.getRowSelectedIdx.bind(this));\n } else {\n selected = selectRows([], row, this.getRowSelectedIdx.bind(this));\n }\n } else {\n selected = selectRows([], row, this.getRowSelectedIdx.bind(this));\n }\n\n const selectCheck = this.selectCheck();\n if (typeof selectCheck === 'function') {\n selected = selected.filter(selectCheck.bind(this));\n }\n\n if (typeof this.disableRowCheck() === 'function') {\n selected = selected.filter(rowData => !this.disableRowCheck()!(rowData));\n }\n\n this.selected.set(selected);\n this.prevIndex = index;\n }\n\n onActivate(modelObject: ActivateEvent<TRow>, index: number, indexInGroup?: number): void {\n const { type, event, row } = modelObject;\n const chkbox = this.selectionType() === 'checkbox';\n const select =\n (!chkbox && (type === 'click' || type === 'dblclick')) || (chkbox && type === 'checkbox');\n\n if (select) {\n this.selectRow(event, index, row);\n } else if (type === 'keydown') {\n if ((event as KeyboardEvent).key === ENTER) {\n this.selectRow(event, index, row);\n } else if (\n (event as KeyboardEvent).key === 'a' &&\n ((event as KeyboardEvent).ctrlKey || (event as KeyboardEvent).metaKey)\n ) {\n this.selectRow(event, 0, row); // The row property is ignored in this case. So we can pass anything.\n } else {\n this.onKeyboardFocus(modelObject, index, indexInGroup);\n }\n }\n this.activate.emit(modelObject);\n }\n\n groupSelectedChange(selected: boolean, group: Group<TRow>): void {\n const selectedSet = new Set(this.selected());\n if (selected) {\n group.value.forEach(row => selectedSet.add(row));\n } else {\n group.value.forEach(row => selectedSet.delete(row));\n }\n this.selected.set(Array.from(selectedSet));\n }\n\n onKeyboardFocus(modelObject: ActivateEvent<TRow>, index: number, indexInGroup?: number): void {\n const { key } = modelObject.event as KeyboardEvent;\n const shouldFocus =\n key === ARROW_UP || key === ARROW_DOWN || key === ARROW_RIGHT || key === ARROW_LEFT;\n\n if (shouldFocus) {\n const isCellSelection = this.selectionType() === 'cell';\n const disableRowCheck = this.disableRowCheck();\n if (typeof disableRowCheck === 'function') {\n const isRowDisabled = disableRowCheck(modelObject.row);\n if (isRowDisabled) {\n return;\n }\n }\n if (!isCellSelection) {\n this.focusRow(index, key, indexInGroup);\n } else if (isCellSelection && modelObject.renderedCellIndex !== undefined) {\n this.focusCell(index, key, modelObject.renderedCellIndex, indexInGroup);\n }\n }\n }\n\n focusRow(index: number, key: string, indexInGroup?: number): void {\n this.moveFocus({ outerIndex: index, innerIndex: indexInGroup }, key);\n }\n\n focusCell(index: number, key: string, cellIndex: number, indexInGroup?: number): void {\n if (key === ARROW_LEFT) {\n this.getRenderedRow({ outerIndex: index, innerIndex: indexInGroup })?.focusCell(\n cellIndex - 1\n );\n } else if (key === ARROW_RIGHT) {\n this.getRenderedRow({ outerIndex: index, innerIndex: indexInGroup })?.focusCell(\n cellIndex + 1\n );\n } else if (key === ARROW_UP || key === ARROW_DOWN) {\n this.moveFocus({ outerIndex: index, innerIndex: indexInGroup }, key, cellIndex);\n }\n }\n\n private moveFocus(current: RowLocation, key: string, cellIndex?: number): void {\n if (this.pendingFocus()) {\n return;\n }\n\n const target = this.getAdjacentRowLocation(current, key);\n if (!target) {\n this.pendingFocus.set(undefined);\n return;\n }\n\n const row = this.getRenderedRow(target);\n if (row) {\n this.pendingFocus.set(undefined);\n row.scrollIntoView();\n this.focusRenderedRow(row, cellIndex);\n return;\n }\n\n this.pendingFocus.set({ location: target, cellIndex });\n this.scrollToIndex(target.outerIndex, { block: 'nearest' });\n }\n\n private getAdjacentRowLocation(current: RowLocation, key: string): RowLocation | undefined {\n if (key !== ARROW_UP && key !== ARROW_DOWN) {\n return undefined;\n }\n\n const step = key === ARROW_UP ? -1 : 1;\n const groups = this.groupedRows();\n if (!groups) {\n const outerIndex = current.outerIndex + step;\n return outerIndex >= 0 && outerIndex < this.rowCount() ? { outerIndex } : undefined;\n }\n\n if (current.innerIndex === undefined) {\n return undefined;\n }\n\n const group = groups[current.outerIndex];\n if (!group) {\n return undefined;\n }\n\n const innerIndex = current.innerIndex + step;\n if (innerIndex >= 0 && innerIndex < group.value.length) {\n return { outerIndex: current.outerIndex, innerIndex };\n }\n\n for (let outerIndex = current.outerIndex + step; groups[outerIndex]; outerIndex += step) {\n const adjacentGroup = groups[outerIndex];\n if (adjacentGroup.value.length && this.getGroupExpanded(adjacentGroup)) {\n return {\n outerIndex,\n innerIndex: key === ARROW_UP ? adjacentGroup.value.length - 1 : 0\n };\n }\n }\n\n return undefined;\n }\n\n private getRenderedRow(location: RowLocation): DataTableBodyRowComponent<TRow> | undefined {\n return this.rowComponents().find(row => {\n const rowIndex = row.rowIndex();\n return (\n rowIndex.index === location.outerIndex && rowIndex.indexInGroup === location.innerIndex\n );\n });\n }\n\n private focusRenderedRow(row: DataTableBodyRowComponent<TRow>, cellIndex?: number): void {\n if (cellIndex === undefined) {\n row.focus();\n } else {\n row.focusCell(cellIndex);\n }\n }\n\n getRowSelected(row: TRow): boolean {\n return this.getRowSelectedIdx(row, this.selected()) > -1;\n }\n\n getRowSelectedIdx(row: TRow, selected: any[]): number {\n if (!selected?.length) {\n return -1;\n }\n\n const rowId = this.rowIdentity()(row);\n return selected.findIndex(r => {\n const id = this.rowIdentity()(r);\n return id === rowId;\n });\n }\n protected isGroup(row: RowOrGroup<TRow>[]): row is Group<TRow>[];\n\n protected isGroup(row: RowOrGroup<TRow>): row is Group<TRow>;\n\n protected isGroup(row: RowOrGroup<TRow> | RowOrGroup<TRow>[]): boolean {\n return !!this.groupedRows();\n }\n\n protected isRow(row: RowOrGroup<TRow> | undefined): row is TRow {\n return !this.groupedRows();\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\n\nimport { DatatableConfiguration } from '../datatable-configuration';\n\n@Component({\n selector: 'datatable-progress',\n template: `\n <div\n class=\"progress-linear\"\n role=\"progressbar\"\n [attr.aria-label]=\"configuration().messages.ariaLoadingMessage\"\n >\n <div class=\"container\">\n <div class=\"bar\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProgressBarComponent {\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\n\nimport { Page } from '../../types/internal.types';\nimport { DATATABLE_COMPONENT_TOKEN } from '../../utils/table-token';\nimport { DatatableConfiguration } from '../datatable-configuration';\n\n/**\n * Use this component to construct custom table footer with standard pagination.\n *\n * It must be used inside the `ngx-datatable-footer`\n *\n * @example\n * ```html\n *\n * <ngx-datatable>\n * ...\n * <ngx-datatable-footer>\n * <ng-template>\n * <app-custom-content />\n * <ngx-datatable-pager />\n * </ng-template>\n * </ngx-datatable-footer>\n * </ngx-datatable>\n * ```\n */\n@Component({\n selector: 'ngx-datatable-pager',\n template: `\n <ul class=\"pager\">\n <li>\n <button\n type=\"button\"\n class=\"page-button\"\n [disabled]=\"!canPrevious()\"\n [attr.aria-label]=\"configuration().messages.ariaFirstPageMessage\"\n (click)=\"selectPage(1)\"\n >\n <i [class]=\"pagerPreviousIcon()\"></i>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"page-button\"\n [disabled]=\"!canPrevious()\"\n [attr.aria-label]=\"configuration().messages.ariaPreviousPageMessage\"\n (click)=\"prevPage()\"\n >\n <i [class]=\"pagerLeftArrowIcon()\"></i>\n </button>\n </li>\n @for (pg of pages(); track pg.number) {\n <li class=\"pages\">\n <button\n type=\"button\"\n class=\"page-button\"\n [class.active]=\"pg.number === page()\"\n [attr.aria-label]=\"configuration().messages.ariaPageNMessage + ' ' + pg.number\"\n (click)=\"selectPage(pg.number)\"\n >\n {{ pg.text }}\n </button>\n </li>\n }\n <li>\n <button\n type=\"button\"\n class=\"page-button\"\n [disabled]=\"!canNext()\"\n [attr.aria-label]=\"configuration().messages.ariaNextPageMessage\"\n (click)=\"nextPage()\"\n >\n <i [class]=\"pagerRightArrowIcon()\"></i>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"page-button\"\n [disabled]=\"!canNext()\"\n [attr.aria-label]=\"configuration().messages.ariaLastPageMessage\"\n (click)=\"selectPage(totalPages())\"\n >\n <i [class]=\"pagerNextIcon()\"></i>\n </button>\n </li>\n </ul>\n `,\n styleUrl: './pager.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-pager'\n }\n})\nexport class DatatablePagerComponent {\n // We cannot inject the footer directly as it is not part of the injector when used in a template.\n // But the table always is.\n // Ideally we can one day fetch those attributes from a global state, but for now this is fine.\n private datatable = inject(DATATABLE_COMPONENT_TOKEN);\n\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n\n protected readonly page = computed(() => this.datatable._footerComponent()!.curPage());\n protected readonly pageSize = computed(() => this.datatable._footerComponent()!.pageSize());\n protected readonly count = computed(\n () =>\n this.datatable._footerComponent()!.groupCount() ??\n this.datatable._footerComponent()!.rowCount()\n );\n protected readonly pagerNextIcon = computed(() =>\n this.datatable._footerComponent()!.pagerNextIcon()\n );\n protected readonly pagerRightArrowIcon = computed(() =>\n this.datatable._footerComponent()!.pagerRightArrowIcon()\n );\n protected readonly pagerLeftArrowIcon = computed(() =>\n this.datatable._footerComponent()!.pagerLeftArrowIcon()\n );\n protected readonly pagerPreviousIcon = computed(() =>\n this.datatable._footerComponent()!.pagerPreviousIcon()\n );\n\n protected readonly totalPages = computed(() => {\n return Math.max((this.pageSize() < 1 ? 1 : Math.ceil(this.count() / this.pageSize())) || 0, 1);\n });\n\n protected readonly pages = computed(() => {\n const pages: Page[] = [];\n let startPage = 1;\n let endPage = this.totalPages();\n const maxSize = 5;\n const isMaxSized = maxSize < this.totalPages();\n\n const page = this.page();\n\n if (isMaxSized) {\n startPage = page - Math.floor(maxSize / 2);\n endPage = page + Math.floor(maxSize / 2);\n\n if (startPage < 1) {\n startPage = 1;\n endPage = Math.min(startPage + maxSize - 1, this.totalPages());\n } else if (endPage > this.totalPages()) {\n startPage = Math.max(this.totalPages() - maxSize + 1, 1);\n endPage = this.totalPages();\n }\n }\n\n for (let num = startPage; num <= endPage; num++) {\n pages.push({\n number: num,\n text: num.toString()\n });\n }\n\n return pages;\n });\n\n protected readonly canPrevious = computed(() => this.page() > 1);\n\n protected readonly canNext = computed(() => this.page() < this.totalPages());\n\n protected prevPage(): void {\n this.selectPage(this.page() - 1);\n }\n\n protected nextPage(): void {\n this.selectPage(this.page() + 1);\n }\n\n protected selectPage(page: number): void {\n if (page > 0 && page <= this.totalPages() && page !== this.page()) {\n this.datatable._footerComponent()!.page.emit({ page });\n }\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n Signal\n} from '@angular/core';\n\nimport { FooterContext, PagerPageEvent } from '../../types/public.types';\nimport { DatatableConfiguration } from '../datatable-configuration';\nimport { DatatableFooterDirective } from './footer.directive';\nimport { DatatablePagerComponent } from './pager.component';\n\n@Component({\n selector: 'datatable-footer',\n imports: [NgTemplateOutlet, DatatablePagerComponent],\n template: `\n <div\n class=\"datatable-footer-inner\"\n [class.selected-count]=\"selectedMessage()\"\n [style.height.px]=\"configuration().footerHeight\"\n >\n @let footerTemplate = this.footerTemplate()?.template();\n @if (footerTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"footerTemplate\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n } @else {\n <div class=\"page-count\">\n @if (selectedMessage()) {\n <span>\n {{ selectedCount().toLocaleString() }}\n {{ configuration().messages.selectedMessage }} /\n </span>\n }\n {{ rowCount().toLocaleString() }} {{ configuration().messages.totalMessage }}\n </div>\n @if (isVisible()) {\n <ngx-datatable-pager />\n }\n }\n </div>\n `,\n styleUrl: './footer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-footer'\n }\n})\nexport class DataTableFooterComponent {\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n readonly rowCount = input.required<number>();\n readonly groupCount = input.required<number | undefined>();\n readonly pageSize = input.required<number>();\n readonly offset = input.required<number>();\n readonly pagerLeftArrowIcon = input<string | undefined>();\n readonly pagerRightArrowIcon = input<string | undefined>();\n readonly pagerPreviousIcon = input<string | undefined>();\n readonly pagerNextIcon = input<string | undefined>();\n readonly footerTemplate = input<DatatableFooterDirective | undefined>();\n\n readonly selectedCount = input(0);\n readonly selectedMessage = input(false);\n\n readonly page = output<PagerPageEvent>();\n\n protected readonly isVisible = computed(() => this.rowCount() / this.pageSize() > 1);\n readonly curPage = computed(() => this.offset() + 1);\n protected readonly templateContext: Signal<FooterContext> = computed(() => ({\n rowCount: this.rowCount(),\n pageSize: this.pageSize(),\n selectedCount: this.selectedCount(),\n curPage: this.curPage(),\n offset: this.offset()\n }));\n}\n","import { Directive } from '@angular/core';\n\nimport { FooterContext } from '../../types/public.types';\n\n@Directive({\n selector: '[ngx-datatable-footer-template]'\n})\nexport class DataTableFooterTemplateDirective {\n static ngTemplateContextGuard(\n directive: DataTableFooterTemplateDirective,\n context: unknown\n ): context is FooterContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, input, contentChild, computed } from '@angular/core';\n\nimport { FooterContext } from '../../types/public.types';\nimport { DataTableFooterTemplateDirective } from './footer-template.directive';\n\n@Directive({\n selector: 'ngx-datatable-footer'\n})\nexport class DatatableFooterDirective {\n readonly _templateInput = input<TemplateRef<FooterContext>>(undefined, { alias: 'template' });\n\n private readonly _templateQuery = contentChild(DataTableFooterTemplateDirective, {\n read: TemplateRef\n });\n\n readonly template = computed(() => this._templateInput() ?? this._templateQuery());\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n ElementRef,\n effect,\n inject,\n input,\n numberAttribute,\n OnDestroy,\n output,\n signal,\n DOCUMENT\n} from '@angular/core';\n\nimport { TableColumnInternal } from '../types/internal.types';\n\nexport interface DragEvent {\n initialX: number;\n initialY: number;\n currentX: number;\n currentY: number;\n element: HTMLElement;\n model?: TableColumnInternal;\n}\n\n@Directive({\n selector: '[datatableDraggable]',\n host: {\n '[class.draggable]': 'enabled()',\n '[class.dragging]': 'isDragging()',\n '[class.longpress]': 'isLongPressing()'\n }\n})\nexport class DatatableDraggableDirective implements OnDestroy {\n private document = inject(DOCUMENT);\n readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n readonly dragModel = input<TableColumnInternal>();\n readonly dragStartDelay = input(0, { transform: numberAttribute });\n readonly enabled = input(true, { transform: booleanAttribute, alias: 'datatableDraggable' });\n readonly dragMove = output<DragEvent>();\n readonly dragEnd = output<DragEvent>();\n readonly dragStart = output<DragEvent>();\n\n private timeoutId?: number;\n private touchId?: number;\n private readonly startX = signal<number | undefined>(undefined);\n private readonly startY = signal<number | undefined>(undefined);\n private currentX?: number;\n private currentY?: number;\n protected readonly isLongPressing = computed(\n () => this.dragStartDelay() !== 0 && this.isDragging()\n );\n protected readonly isDragging = computed(() => this.startX() !== undefined);\n private removePointerListeners?: () => void;\n\n constructor() {\n effect(() => {\n if (this.enabled()) {\n this.element.addEventListener('mousedown', this.mousedown);\n this.element.addEventListener('touchstart', this.touchstart);\n this.element.addEventListener('contextmenu', this.contextmenu);\n this.removePointerListeners = () => {\n this.element.removeEventListener('mousedown', this.mousedown);\n this.element.removeEventListener('touchstart', this.touchstart);\n this.element.removeEventListener('contextmenu', this.contextmenu);\n };\n } else {\n this.removePointerListeners?.();\n this.removePointerListeners = undefined;\n }\n });\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeoutId);\n this.removePointerListeners?.();\n }\n\n protected readonly mousedown = (event: MouseEvent): void => {\n if (!this.enabled()) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n\n this.document.addEventListener('mouseup', this.ending);\n this.delay(this.dragStartDelay()).then(() => {\n this.document.addEventListener('mousemove', this.mousemove);\n this.starting(event.clientX, event.clientY);\n this.setDragging(true);\n });\n };\n\n private mousemove = (event: MouseEvent): void => this.moving(event.clientX, event.clientY);\n\n // Prevent context menu on long-press drag. Since we don't call preventDefault() on\n // touchstart to allow click events (sorting), the browser would show a context menu\n // after a long press. We prevent this when dragging is active.\n private contextmenu = (event: MouseEvent): void => {\n if (this.isDragging()) {\n event.preventDefault();\n }\n };\n\n protected readonly touchstart = (event: TouchEvent): void => {\n if (!this.enabled()) {\n return;\n }\n event.stopPropagation();\n const touch = event.touches.item(0)!;\n this.touchId = touch.identifier;\n\n this.document.addEventListener('touchend', this.ending);\n this.delay(this.dragStartDelay()).then(() => {\n if (this.touchId === touch.identifier) {\n this.document.addEventListener('touchmove', this.touchmove, { passive: false });\n this.starting(touch.clientX, touch.clientY);\n this.setDragging(true);\n }\n });\n };\n\n private touchmove = (event: TouchEvent): void => {\n const touchMove = this.findTouch(event);\n if (touchMove) {\n // Prevent scrolling and other default touch behaviors during drag\n event.preventDefault();\n this.moving(touchMove.clientX, touchMove.clientY);\n }\n };\n\n private starting(clientX: number, clientY: number): void {\n this.startX.set(clientX);\n this.startY.set(clientY);\n this.currentX = clientX;\n this.currentY = clientY;\n this.dragStart.emit(this.dragEvent());\n }\n\n private moving(clientX: number, clientY: number): void {\n this.currentX = clientX;\n this.currentY = clientY;\n this.dragMove.emit(this.dragEvent());\n }\n\n private ending = (): void => {\n const dragged = this.isDragging();\n const dragEvent = dragged ? this.dragEvent() : undefined;\n this.document.removeEventListener('mousemove', this.mousemove);\n this.document.removeEventListener('touchmove', this.touchmove);\n this.document.removeEventListener('mouseup', this.ending);\n this.document.removeEventListener('touchend', this.ending);\n this.touchId = undefined;\n this.startX.set(undefined);\n this.startY.set(undefined);\n clearTimeout(this.timeoutId);\n // This function is also called if the long press was aborted before the delay.\n // In that case, we don't want to emit dragEnd.\n if (dragged) {\n this.setDragging(false);\n this.dragEnd.emit(dragEvent!);\n }\n };\n\n private dragEvent(): DragEvent {\n return {\n initialX: this.startX()!,\n initialY: this.startY()!,\n currentX: this.currentX!,\n currentY: this.currentY!,\n element: this.element,\n model: this.dragModel()\n };\n }\n\n private setDragging(dragging: boolean): void {\n const model = this.dragModel();\n if (model) {\n model.dragging = dragging;\n }\n }\n\n private findTouch(event: TouchEvent): Touch | undefined {\n return Array.from(event.touches).find(touch => touch.identifier === this.touchId);\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise(resolve => (this.timeoutId = window.setTimeout(() => resolve(), ms)));\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostListener,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n input,\n output,\n computed,\n booleanAttribute\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport {\n DragEvent,\n DatatableDraggableDirective\n} from '../../directives/datatable-draggable.directive';\nimport {\n InnerSortEvent,\n SortableTableColumnInternal,\n TableColumnInternal\n} from '../../types/internal.types';\nimport {\n HeaderCellContext,\n SelectionType,\n SortDirection,\n SortPropDir,\n SortType\n} from '../../types/public.types';\nimport { toPublicColumn } from '../../utils/column-helper';\nimport { nextSortDir } from '../../utils/sort';\nimport { DatatableConfiguration } from '../datatable-configuration';\n\n@Component({\n selector: 'datatable-header-cell',\n imports: [NgTemplateOutlet, DatatableDraggableDirective],\n template: `\n <div class=\"datatable-header-cell-template-wrap\">\n @if (isTarget()) {\n <ng-template\n [ngTemplateOutlet]=\"targetMarkerTemplate()!\"\n [ngTemplateOutletContext]=\"targetMarkerContext()\"\n />\n }\n @if (isCheckboxable()) {\n <label class=\"datatable-checkbox\">\n <input\n type=\"checkbox\"\n [attr.aria-label]=\"configuration().messages.ariaHeaderCheckboxMessage\"\n [checked]=\"allRowsSelected()\"\n (change)=\"select.emit()\"\n />\n </label>\n }\n @let column = this.column();\n @if (column.headerTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.headerTemplate\"\n [ngTemplateOutletContext]=\"cellContext()\"\n />\n } @else {\n <span class=\"datatable-header-cell-wrapper\">\n <span class=\"datatable-header-cell-label draggable\" (click)=\"onSort()\">\n {{ name() }}\n </span>\n </span>\n }\n <span aria-hidden=\"true\" [class]=\"sortClass()\" (click)=\"onSort()\"> </span>\n </div>\n @if (showResizeHandle()) {\n <span\n class=\"resize-handle\"\n datatableDraggable\n (dragStart)=\"onMousedown()\"\n (dragMove)=\"move($event)\"\n (dragEnd)=\"onMouseup()\"\n ></span>\n }\n `,\n styleUrl: './header-cell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-header-cell',\n '[attr.resizeable]': 'showResizeHandle()',\n '[attr.title]': 'name()',\n '[attr.tabindex]': 'column().sortable ? 0 : -1',\n '[attr.aria-sort]': 'ariaSort()',\n '[class]': 'columnCssClasses()',\n '[class.sortable]': 'column().sortable',\n '[class.resizeable]': 'showResizeHandle()',\n '[class.sort-active]': 'sortDir()',\n '[class.sort-asc]': 'sortDir() === \"asc\"',\n '[class.sort-desc]': 'sortDir() === \"desc\"'\n }\n})\nexport class DataTableHeaderCellComponent implements OnInit, OnDestroy {\n private element = inject(ElementRef).nativeElement;\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n\n readonly sortType = input.required<SortType>();\n\n readonly isTarget = input<boolean>();\n readonly showResizeHandle = input<boolean | undefined>(true);\n readonly targetMarkerTemplate = input<TemplateRef<any>>();\n readonly targetMarkerContext = input<any>();\n readonly enableClearingSortState = input(false);\n readonly allRowsSelected = input(false, { transform: booleanAttribute });\n readonly selectionType = input<SelectionType>();\n readonly column = input.required<TableColumnInternal>();\n readonly sorts = input<SortPropDir[]>([]);\n\n readonly sort = output<InnerSortEvent>();\n readonly select = output<void>();\n readonly columnContextmenu = output<{\n event: MouseEvent;\n column: TableColumnInternal;\n }>();\n readonly resize = output<{ width: number; column: TableColumnInternal }>();\n readonly resizing = output<{ width: number; column: TableColumnInternal }>();\n\n protected readonly columnCssClasses = computed(() => {\n const column = this.column();\n if (!column.headerClass) {\n return [];\n }\n if (typeof column.headerClass === 'string') {\n return column.headerClass;\n }\n return column.headerClass({ column: toPublicColumn(column) });\n });\n\n protected readonly name = computed(() => {\n // guaranteed to have a value by setColumnDefaults() in column-helper.ts\n return this.column().headerTemplate === undefined ? this.column().name : undefined;\n });\n\n protected readonly isCheckboxable = computed(() => this.column().headerCheckboxable);\n\n protected readonly sortClass = computed<string | undefined>(() =>\n this.calcSortClass(this.sortDir())\n );\n protected readonly sortDir = computed<SortDirection | undefined>(() => {\n return this.calcSortDir(this.sorts());\n });\n\n protected readonly ariaSort = computed(() => {\n if (!this.column().sortable) {\n return null;\n }\n switch (this.sortDir()) {\n case 'asc':\n return 'ascending';\n case 'desc':\n return 'descending';\n default:\n return 'none';\n }\n });\n\n protected readonly cellContext = computed<HeaderCellContext>(() => {\n return {\n column: toPublicColumn(this.column()),\n sortDir: this.sortDir(),\n sortFn: () => this.onSort(),\n allRowsSelected: this.allRowsSelected(),\n selectFn: () => this.select.emit()\n };\n });\n\n private initialWidth?: number;\n private subscription?: Subscription;\n\n @HostListener('contextmenu', ['$event'])\n onContextmenu($event: MouseEvent): void {\n this.columnContextmenu.emit({ event: $event, column: this.column() });\n if (this.column().draggable) {\n $event.preventDefault();\n }\n }\n\n @HostListener('keydown.enter')\n enter(): void {\n this.onSort();\n }\n\n ngOnInit() {\n // If there is already a default sort then start the counter with 1.\n if (this.sortDir()) {\n this.totalSortStatesApplied = 1;\n }\n }\n\n ngOnDestroy() {\n this.destroySubscription();\n }\n\n calcSortDir(sorts: SortPropDir[]): any {\n if (sorts && this.column()) {\n const sort = sorts.find((s: any) => s.prop === this.column().prop);\n\n if (sort) {\n return sort.dir;\n }\n }\n }\n // Counter to reset sort once user sort asc and desc.\n private totalSortStatesApplied = 0;\n onSort(): void {\n if (!this.column().sortable) {\n return;\n }\n\n this.totalSortStatesApplied++;\n let newValue = nextSortDir(this.sortType(), this.sortDir());\n // User has done both direction sort so we reset the next sort.\n if (this.enableClearingSortState() && this.totalSortStatesApplied === 3) {\n newValue = undefined;\n this.totalSortStatesApplied = 0;\n }\n this.sort.emit({\n column: this.column() as SortableTableColumnInternal<any>,\n prevValue: this.sortDir(),\n newValue\n });\n }\n\n calcSortClass(sortDir: SortDirection | undefined): string | undefined {\n if (!this.cellContext().column.sortable) {\n return undefined;\n }\n\n const base = 'sort-btn';\n\n switch (sortDir) {\n case 'asc':\n return `${base} sort-asc ${this.configuration().cssClasses.sortAscending}`;\n case 'desc':\n return `${base} sort-desc ${this.configuration().cssClasses.sortDescending}`;\n default:\n return `${base} ${this.configuration().cssClasses.sortUnset}`;\n }\n }\n\n protected onMousedown(): void {\n this.initialWidth = this.element.clientWidth;\n }\n\n protected onMouseup(): void {\n this.resize.emit({ width: this.element.clientWidth, column: this.column() });\n }\n\n protected move({ currentX, initialX }: DragEvent): void {\n this.resizing.emit({\n width: this.initialWidth! + (currentX - initialX),\n column: this.column()\n });\n }\n\n private destroySubscription(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = undefined;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DOCUMENT,\n ElementRef,\n inject,\n input,\n output,\n signal,\n TemplateRef,\n viewChildren\n} from '@angular/core';\n\nimport {\n DatatableDraggableDirective,\n DragEvent\n} from '../../directives/datatable-draggable.directive';\nimport {\n ColumnResizeEventInternal,\n InnerSortEvent,\n ReorderEventInternal,\n SortableTableColumnInternal,\n TableColumnInternal\n} from '../../types/internal.types';\nimport {\n Row,\n SelectionType,\n SortDirection,\n SortEvent,\n SortPropDir,\n SortType\n} from '../../types/public.types';\nimport { columnsByPinArr } from '../../utils/column';\nimport { toPublicColumn } from '../../utils/column-helper';\nimport { DatatableConfiguration } from '../datatable-configuration';\nimport { DataTableHeaderCellComponent } from './header-cell.component';\n\n@Component({\n selector: 'datatable-header',\n imports: [DataTableHeaderCellComponent, DatatableDraggableDirective],\n template: `\n <div role=\"row\" class=\"datatable-header-inner\">\n @for (colGroup of columnGroups(); track colGroup.type) {\n @if (colGroup.columns.length) {\n <div\n class=\"datatable-row-group\"\n [class]=\"'datatable-row-' + colGroup.type\"\n [style.grid-column]=\"'span ' + colGroup.columns.length\"\n >\n @for (column of colGroup.columns; track column.$$id) {\n <datatable-header-cell\n role=\"columnheader\"\n dragStartDelay=\"500\"\n [datatableDraggable]=\"reorderable() && column.draggable\"\n [dragModel]=\"column\"\n [isTarget]=\"targetColumn() === column\"\n [targetMarkerTemplate]=\"targetMarkerTemplate()\"\n [targetMarkerContext]=\"targetMarkerContext()\"\n [column]=\"column\"\n [showResizeHandle]=\"lastColumnId() !== column.$$id && column.resizeable\"\n [sortType]=\"sortType()\"\n [sorts]=\"sorts()\"\n [selectionType]=\"selectionType()\"\n [allRowsSelected]=\"allRowsSelected()\"\n [enableClearingSortState]=\"enableClearingSortState()\"\n (dragStart)=\"onDragStart($event)\"\n (dragMove)=\"onDragMove($event)\"\n (dragEnd)=\"onDragEnd($event)\"\n (resize)=\"onColumnResized($event)\"\n (resizing)=\"onColumnResizing($event)\"\n (sort)=\"onSort($event)\"\n (select)=\"select.emit($event)\"\n (columnContextmenu)=\"columnContextmenu.emit($event)\"\n />\n }\n </div>\n }\n }\n </div>\n `,\n styleUrl: './header.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-header',\n '[style.height.px]': 'configuration().headerHeight'\n }\n})\nexport class DataTableHeaderComponent {\n private readonly document = inject(DOCUMENT);\n protected readonly configuration = inject(DatatableConfiguration).configuration;\n private readonly headerCells = viewChildren(DataTableHeaderCellComponent, { read: ElementRef });\n\n readonly lastColumnId = computed(() => this.columns().at(-1)?.$$id);\n\n readonly scrollbarH = input<boolean>();\n readonly dealsWithGroup = input<boolean>();\n readonly targetMarkerTemplate = input<TemplateRef<unknown>>();\n readonly enableClearingSortState = input(false);\n readonly sorts = input.required<SortPropDir[]>();\n readonly sortType = input.required<SortType>();\n readonly allRowsSelected = input<boolean>();\n readonly selectionType = input<SelectionType>();\n readonly reorderable = input<boolean>();\n readonly verticalScrollVisible = input(false);\n\n readonly columns = input.required<TableColumnInternal[]>();\n\n readonly sort = output<SortEvent>();\n readonly reorder = output<ReorderEventInternal>();\n readonly resize = output<ColumnResizeEventInternal>();\n readonly resizing = output<ColumnResizeEventInternal>();\n readonly select = output<void>();\n readonly columnContextmenu = output<{\n event: MouseEvent;\n column: TableColumnInternal;\n }>();\n\n readonly columnGroups = computed(() => {\n return columnsByPinArr(this.columns());\n });\n private readonly renderedColumns = computed(() =>\n this.columnGroups().flatMap(group => group.columns)\n );\n\n private dragInitialIndex?: number;\n private dragTargetIndex?: number;\n readonly targetColumn = signal<TableColumnInternal | undefined>(undefined);\n readonly targetMarkerContext = signal<{ class: string } | undefined>(undefined);\n\n onColumnResized({ width, column }: { width: number; column: TableColumnInternal }): void {\n this.resize.emit(this.makeResizeEvent(width, column));\n }\n\n onColumnResizing({ width, column }: { width: number; column: TableColumnInternal }): void {\n this.resizing.emit(this.makeResizeEvent(width, column));\n }\n\n private makeResizeEvent(\n width: number,\n column: TableColumnInternal<Row>\n ): ColumnResizeEventInternal {\n if (column.minWidth && width <= column.minWidth) {\n width = column.minWidth;\n } else if (column.maxWidth && width >= column.maxWidth) {\n width = column.maxWidth;\n }\n return {\n column,\n prevValue: column.width(),\n newValue: width\n };\n }\n\n onDragStart({ model }: DragEvent): void {\n this.dragInitialIndex = model ? this.renderedColumns().indexOf(model) : undefined;\n }\n\n onDragMove(event: DragEvent): void {\n const targetIndex = this.getDragTargetIndex(event);\n if (targetIndex !== this.dragTargetIndex) {\n if (this.dragTargetIndex !== undefined) {\n this.targetColumn.set(undefined);\n this.targetMarkerContext.set(undefined);\n }\n\n if (targetIndex !== undefined && this.dragInitialIndex !== undefined) {\n this.targetColumn.set(this.renderedColumns()[targetIndex]);\n if (this.dragInitialIndex !== targetIndex) {\n this.targetMarkerContext.set({\n class: `targetMarker ${this.dragInitialIndex > targetIndex ? 'dragFromRight' : 'dragFromLeft'}`\n });\n }\n }\n this.dragTargetIndex = targetIndex;\n }\n\n event.element.style.transform = `translateX(${event.currentX - event.initialX}px)`;\n }\n\n onDragEnd(event: DragEvent): void {\n event.element.style.transform = '';\n\n const targetIndex = this.getDragTargetIndex(event);\n if (this.dragTargetIndex !== undefined) {\n this.targetColumn.set(undefined);\n this.targetMarkerContext.set(undefined);\n }\n\n if (event.model && this.dragInitialIndex !== undefined && targetIndex !== undefined) {\n this.reorder.emit({\n prevValue: this.dragInitialIndex,\n newValue: targetIndex,\n column: event.model\n });\n }\n\n this.dragInitialIndex = undefined;\n this.dragTargetIndex = undefined;\n }\n\n private getDragTargetIndex({ currentX, currentY, element }: DragEvent): number | undefined {\n const elementsAtPoint = this.document.elementsFromPoint(currentX, currentY);\n const index = this.headerCells().findIndex(\n cell => cell.nativeElement !== element && elementsAtPoint.includes(cell.nativeElement)\n );\n return index === -1 ? undefined : index;\n }\n\n onSort({ column, prevValue, newValue }: InnerSortEvent): void {\n // if we are dragging don't sort!\n if (column.dragging) {\n return;\n }\n\n const sorts = this.calcNewSorts(column, prevValue, newValue);\n this.sort.emit({\n sorts,\n column: toPublicColumn(column),\n prevValue,\n newValue\n });\n }\n\n calcNewSorts(\n column: SortableTableColumnInternal,\n prevValue: SortDirection | undefined,\n newValue: SortDirection | undefined\n ): SortPropDir[] {\n let idx = 0;\n\n const sorts = this.sorts().map((s, i) => {\n s = { ...s };\n if (s.prop === column.prop) {\n idx = i;\n }\n return s;\n });\n\n if (newValue === undefined) {\n sorts.splice(idx, 1);\n } else if (prevValue) {\n sorts[idx].dir = newValue;\n } else {\n if (this.sortType() === 'single') {\n sorts.splice(0, this.sorts().length);\n }\n\n sorts.push({ dir: newValue, prop: column.prop });\n }\n\n return sorts;\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { RowDetailContext } from '../../types/public.types';\n\n@Directive({\n selector: '[ngx-datatable-row-detail-template]'\n})\nexport class DatatableRowDetailTemplateDirective {\n static ngTemplateContextGuard(\n directive: DatatableRowDetailTemplateDirective,\n context: unknown\n ): context is RowDetailContext {\n return true;\n }\n}\n","import { computed, contentChild, Directive, input, output, TemplateRef } from '@angular/core';\n\nimport { DetailToggleEvents, Row, RowDetailContext } from '../../types/public.types';\nimport { DatatableRowDetailTemplateDirective } from './row-detail-template.directive';\n\n@Directive({\n selector: 'ngx-datatable-row-detail'\n})\nexport class DatatableRowDetailDirective<TRow extends Row = any> {\n /**\n * The detail row height is required especially\n * when virtual scroll is enabled.\n */\n readonly rowHeight = input<number | ((row?: TRow, index?: number) => number)>(0);\n\n /**\n * Template used to render the detail row.\n */\n readonly _templateInput = input<TemplateRef<RowDetailContext<TRow>>>(undefined, {\n alias: 'template'\n });\n\n readonly _templateQuery = contentChild(DatatableRowDetailTemplateDirective, {\n read: TemplateRef\n });\n\n readonly template = computed<TemplateRef<RowDetailContext<TRow>> | undefined>(() => {\n return this._templateInput() ?? this._templateQuery();\n });\n\n /**\n * Row detail row visbility was toggled.\n */\n readonly toggle = output<DetailToggleEvents<TRow>>();\n\n /**\n * Toggle the expansion of the row\n */\n toggleExpandRow(row: TRow): void {\n this.toggle.emit({\n type: 'row',\n value: row\n });\n }\n\n /**\n * API method to expand all the rows.\n */\n expandAllRows(): void {\n this.toggle.emit({\n type: 'all',\n value: true\n });\n }\n\n /**\n * API method to collapse all the rows.\n */\n collapseAllRows(): void {\n this.toggle.emit({\n type: 'all',\n value: false\n });\n }\n}\n","import {\n AfterViewInit,\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChild,\n contentChild,\n contentChildren,\n DoCheck,\n effect,\n ElementRef,\n inject,\n input,\n IterableDiffer,\n IterableDiffers,\n linkedSignal,\n model,\n numberAttribute,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n untracked,\n viewChild\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ScrollContainerDirective } from '../directives/scroll-container.directive';\nimport {\n NGX_DATATABLE_CONFIG,\n NgxDatatableConfig,\n NgxDatatableCssClasses,\n NgxDatatableMessages\n} from '../ngx-datatable.config';\nimport { ScrollbarHelper } from '../services/scrollbar-helper.service';\nimport {\n ColumnResizeEventInternal,\n ReorderEventInternal,\n TableColumnInternal\n} from '../types/internal.types';\nimport {\n ActivateEvent,\n ColumnMode,\n ColumnResizeEvent,\n ContextMenuEvent,\n DragEventData,\n Group,\n PageEvent,\n PagerPageEvent,\n ReorderEvent,\n Row,\n RowOrGroup,\n ScrollEvent,\n ScrollToRowOptions,\n SelectionType,\n SortEvent,\n SortPropDir,\n SortType,\n TreeStatus\n} from '../types/public.types';\nimport { TableColumn } from '../types/table-column.type';\nimport {\n columnGroupWidths,\n columnsByPin,\n columnsByPinArr,\n gridColumnTemplate\n} from '../utils/column';\nimport { toInternalColumn, toPublicColumn } from '../utils/column-helper';\nimport { adjustColumnWidths, forceFillColumnWidths } from '../utils/math';\nimport { numberOrUndefinedAttribute } from '../utils/number-or-undefined-attribute';\nimport { sortGroupedRows, sortRows } from '../utils/sort';\nimport { DATATABLE_COMPONENT_TOKEN } from '../utils/table-token';\nimport { expandToRow, groupRowsByParents, optionalGetterForProp } from '../utils/tree';\nimport { DatatableGroupHeaderDirective } from './body/body-group-header.directive';\nimport { DatatableRowDefDirective } from './body/body-row-def.component';\nimport { DataTableBodyComponent } from './body/body.component';\nimport { ProgressBarComponent } from './body/progress-bar.component';\nimport { DatatableSummaryRowDirective } from './body/summary/summary-row.directive';\nimport { DataTableColumnDirective } from './columns/column.directive';\nimport { DatatableConfiguration } from './datatable-configuration';\nimport { DataTableFooterComponent } from './footer/footer.component';\nimport { DatatableFooterDirective } from './footer/footer.directive';\nimport { DataTableHeaderComponent } from './header/header.component';\nimport { DatatableRowDetailDirective } from './row-detail/row-detail.directive';\n\n@Component({\n selector: 'ngx-datatable',\n imports: [\n ScrollContainerDirective,\n DataTableHeaderComponent,\n DataTableBodyComponent,\n DataTableFooterComponent,\n ProgressBarComponent\n ],\n templateUrl: './datatable.component.html',\n styleUrl: './datatable.component.scss',\n providers: [\n {\n provide: DATATABLE_COMPONENT_TOKEN,\n useExisting: DatatableComponent\n },\n {\n provide: DatatableConfiguration,\n useFactory: () => inject(DatatableComponent).datatableConfiguration\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'ngx-datatable',\n '[class.fixed-header]': '_isFixedHeader()',\n '[class.fixed-row]': 'rowHeight() !== \"auto\"',\n '[class.scroll-vertical]': 'scrollbarV()',\n '[class.virtualized]': 'virtualization()',\n '[class.scroll-horz]': 'scrollbarH()',\n '[class.selectable]': 'selectionType() !== undefined',\n '[class.checkbox-selection]': 'selectionType() === \"checkbox\"',\n '[class.cell-selection]': 'selectionType() === \"cell\"',\n '[class.single-selection]': 'selectionType() === \"single\"',\n '[class.multi-selection]': 'selectionType() === \"multi\"',\n '[class.multi-click-selection]': 'selectionType() === \"multiClick\"',\n '[class.horizontal-overflow]': '_innerWidth() < totalColumnGroupWidths()'\n }\n})\nexport class DatatableComponent<TRow extends Row = any>\n implements DoCheck, AfterViewInit, OnDestroy\n{\n private scrollbarHelper = inject(ScrollbarHelper);\n private cd = inject(ChangeDetectorRef);\n element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n rowDiffer: IterableDiffer<TRow | undefined> = inject(IterableDiffers).find([]).create();\n private readonly globalConfiguration: NgxDatatableConfig =\n inject(NGX_DATATABLE_CONFIG, { optional: true }) ??\n // This is the old injection token for backward compatibility.\n inject<NgxDatatableConfig>('configuration' as any, { optional: true }) ??\n {};\n readonly datatableConfiguration = new DatatableConfiguration(this, this.globalConfiguration);\n protected readonly configuration = this.datatableConfiguration.configuration;\n\n /**\n * Template for the target marker of drag target columns.\n */\n readonly targetMarkerTemplate = input<TemplateRef<unknown>>();\n\n /**\n * Rows that are displayed in the table.\n */\n readonly rows = input<(TRow | undefined)[] | null | undefined>();\n\n /**\n * This attribute allows the user to set the name of the column to group the data with\n */\n readonly groupRowsBy = input<keyof TRow>();\n\n /**\n * This attribute allows the user to set a grouped array in the following format:\n * [\n * {groupid=1} [\n * {id=1 name=\"test1\"},\n * {id=2 name=\"test2\"},\n * {id=3 name=\"test3\"}\n * ]},\n * {groupid=2>[\n * {id=4 name=\"test4\"},\n * {id=5 name=\"test5\"},\n * {id=6 name=\"test6\"}\n * ]}\n * ]\n */\n readonly groupedRows = input<Group<TRow>[]>();\n\n /**\n * Columns to be displayed.\n */\n readonly columns = input<TableColumn[]>();\n\n /**\n * List of row objects that should be\n * represented as selected in the grid.\n * Default value: `[]`\n */\n readonly selected = model<TRow[]>([]);\n\n /**\n * Enable vertical scrollbars\n */\n readonly scrollbarV = input(false, { transform: booleanAttribute });\n\n /**\n * Enable vertical scrollbars dynamically on demand.\n * Property `scrollbarV` needs to be set `true` too.\n * Width that is gained when no scrollbar is needed\n * is added to the inner table width.\n */\n readonly scrollbarVDynamic = input(false, { transform: booleanAttribute });\n\n /**\n * Enable horz scrollbars\n */\n readonly scrollbarH = input(false, { transform: booleanAttribute });\n\n /**\n * Height of each row. When virtual scrolling is disabled, use `'auto'` for\n * fluid heights. With virtual scrolling enabled, provide a number or a\n * function that calculates each row's height.\n */\n readonly rowHeight = input<number | 'auto' | ((row: TRow) => number)>(\n this.globalConfiguration.rowHeight ?? 30\n );\n\n /**\n * Column width distribution mode. `standard` uses configured widths, `flex`\n * uses the flex-grow algorithm, and `force` distributes space proportionally.\n */\n readonly columnMode = input<ColumnMode | keyof typeof ColumnMode>('standard');\n\n /**\n * The minimum header height in pixels.\n * Pass a falsey for no header\n */\n readonly headerHeight = input<number | 'auto'>(this.globalConfiguration.headerHeight ?? 30);\n\n /**\n * The minimum footer height in pixels.\n * Pass falsey for no footer\n */\n readonly footerHeight = input(this.globalConfiguration.footerHeight ?? 0, {\n transform: numberAttribute\n });\n\n /**\n * If the table should use external paging\n * otherwise its assumed that all data is preloaded.\n */\n readonly externalPaging = input(false, { transform: booleanAttribute });\n\n /**\n * If the table should use external sorting or\n * the built-in basic sorting.\n */\n readonly externalSorting = input(false, { transform: booleanAttribute });\n\n /**\n * The page size to be shown.\n * Default value: `undefined`\n */\n readonly limit = input(undefined, {\n transform: numberOrUndefinedAttribute\n });\n\n /**\n * The total count of all rows.\n * Default value: `0`\n */\n readonly count = input(0, { transform: numberAttribute });\n\n /**\n * The current offset ( page - 1 ) shown.\n * Default value: `0`\n */\n readonly offset = model<number>(0);\n\n /**\n * Show the linear loading bar.\n * Default value: `false`\n */\n readonly loadingIndicator = input(false, { transform: booleanAttribute });\n\n /**\n * Show ghost loaders on each cell.\n * Default value: `false`\n */\n readonly ghostLoadingIndicator = input(false, { transform: booleanAttribute });\n\n /**\n * Type of row selection. Options are:\n *\n * - `single`\n * - `multi`\n * - `checkbox`\n * - `multiClick`\n * - `cell`\n *\n * For no selection pass a `falsey`.\n * Default value: `undefined`\n */\n readonly selectionType = input<SelectionType>();\n\n /**\n * Enable/Disable ability to re-order columns\n * by dragging them.\n */\n readonly reorderable = input(true, { transform: booleanAttribute });\n\n /**\n * Swap columns on re-order columns or\n * move them.\n */\n readonly swapColumns = input(true, { transform: booleanAttribute });\n\n /**\n * Sorting mode. In `single` mode, sorting a new column replaces existing\n * sorts; in `multi` mode, it adds an additional column sort.\n */\n readonly sortType = input<SortType>('single');\n\n /**\n * Array of sorted columns by property and type.\n * Default value: `[]`\n */\n readonly sorts = model<SortPropDir[]>([]);\n\n /**\n * CSS class overrides for sort and pager icons.\n */\n readonly cssClasses = input<Partial<NgxDatatableCssClasses>>({});\n\n /**\n * Message overrides for localization\n *\n * @defaultValue\n * ```\n * {\n * emptyMessage: 'No data to display',\n * totalMessage: 'total',\n * selectedMessage: 'selected',\n * ariaFirstPageMessage: 'go to first page',\n * ariaPreviousPageMessage: 'go to previous page',\n * ariaPageNMessage: 'page',\n * ariaNextPageMessage: 'go to next page',\n * ariaLastPageMessage: 'go to last page',\n * ariaRowCheckboxMessage: 'Select row',\n * ariaHeaderCheckboxMessage: 'Select all rows',\n * ariaGroupHeaderCheckboxMessage: 'Select row group',\n * ariaLoadingMessage: 'Loading'\n * }\n * ```\n */\n readonly messages = input<Partial<NgxDatatableMessages>>({});\n\n /**\n * A function which is called with the row and should return either:\n * - a string: `\"class-1 class-2`\n * - a Record<string, boolean>: `{ 'class-1': true, 'class-2': false }`\n */\n readonly rowClass = input<(row: TRow) => string | Record<string, boolean>>();\n\n /**\n * A boolean/function you can use to check whether you want\n * to select a particular row based on a criteria. Example:\n *\n * (selection) => {\n * return selection !== 'Ethel Price';\n * }\n */\n readonly selectCheck = input<(value: TRow, index: number, array: TRow[]) => boolean>();\n\n /**\n * A function you can use to check whether you want\n * to show the checkbox for a particular row based on a criteria. Example:\n *\n * (row, column, value) => {\n * return row.name !== 'Ethel Price';\n * }\n */\n readonly displayCheck = input<(row: TRow, column: TableColumn, value?: any) => boolean>();\n\n /**\n * A boolean you can use to set the detault behaviour of rows and groups\n * whether they will start expanded or not. If ommited the default is NOT expanded.\n *\n */\n readonly groupExpansionDefault = input(false, { transform: booleanAttribute });\n\n /**\n * Property to which you can use for custom tracking of rows.\n * Example: 'name'\n */\n readonly trackByProp = input<keyof TRow>();\n\n /**\n * Property to which you can use for determining select all\n * rows on current page or not.\n */\n readonly selectAllRowsOnPage = input(false, { transform: booleanAttribute });\n\n /**\n * A flag for row virtualization on / off\n */\n readonly virtualization = input(true, { transform: booleanAttribute });\n\n /**\n * Tree from relation\n */\n readonly treeFromRelation = input<string>();\n\n /**\n * Tree to relation\n */\n readonly treeToRelation = input<string>();\n\n /**\n * A flag for switching summary row on / off\n */\n readonly summaryRow = input(false, { transform: booleanAttribute });\n\n /**\n * A height of summary row\n */\n readonly summaryHeight = input(30, { transform: numberAttribute });\n\n /**\n * A property holds a summary row position: top/bottom\n */\n readonly summaryPosition = input('top');\n\n /**\n * A function you can use to check whether you want\n * to disable a row. Example:\n *\n * (row) => {\n * return row.name !== 'Ethel Price';\n * }\n */\n readonly disableRowCheck = input<(row: TRow) => boolean>();\n\n /**\n * A flag to enable drag behavior of native HTML5 drag and drop API on rows.\n * If set to true, {@link rowDragEvents} will emit dragstart and dragend events.\n */\n readonly rowDraggable = input(false, { transform: booleanAttribute });\n\n /**\n * A flag to controll behavior of sort states.\n * By default sort on column toggles between ascending and descending without getting removed.\n * Set true to clear sorting of column after performing ascending and descending sort on that column.\n */\n readonly enableClearingSortState = input(false, { transform: booleanAttribute });\n\n /**\n * Controls whether the datatable runs an {@link IterableDiffer} against the\n * `rows` input on every change detection cycle to detect additions, removals\n * and reorderings that happen in-place on the same array reference.\n *\n * Enabled by default. Set to `false` as a performance optimization when you\n * always pass a new `rows` array reference on updates.\n */\n readonly checkRowListChanges = input(true, { transform: booleanAttribute });\n\n /**\n * Controls whether each rendered row runs a {@link KeyValueDiffer} against\n * its row object on every change detection cycle to detect in-place property\n * mutations (e.g. `row.name = 'new'` without replacing the row reference).\n *\n * Enabled by default. Set to `false` as a performance optimization when row\n * objects are treated as immutable.\n */\n readonly checkRowPropertyChanges = input(true, { transform: booleanAttribute });\n\n /**\n * Body was scrolled typically in a `scrollbarV:true` scenario.\n */\n readonly scroll = output<ScrollEvent>();\n\n /**\n * A cell or row was focused via keyboard or mouse click.\n */\n readonly activate = output<ActivateEvent<TRow>>();\n\n /**\n * The table was paged either triggered by the pager or the body scroll.\n */\n readonly page = output<PageEvent>();\n\n /**\n * Columns were re-ordered.\n */\n readonly reorder = output<ReorderEvent>();\n\n /**\n * Column was resized.\n */\n readonly resize = output<ColumnResizeEvent>();\n\n /**\n * The context menu was invoked on the table.\n * type indicates whether the header or the body was clicked.\n * content contains either the column or the row that was clicked.\n */\n readonly tableContextmenu = output<ContextMenuEvent<TRow>>();\n\n /**\n * A row was expanded ot collapsed for tree\n */\n readonly treeAction = output<{ row: TRow; rowIndex: number }>();\n\n /**\n * Emits HTML5 native drag events.\n * Only emits dragenter, dragover, drop events by default.\n * Set {@link rowDraggable} to true for dragstart and dragend.\n */\n readonly rowDragEvents = output<DragEventData>();\n\n /**\n * Column templates gathered from `ContentChildren`\n * if described in your markup.\n */\n readonly columnTemplates =\n contentChildren<DataTableColumnDirective<TRow>>(DataTableColumnDirective);\n\n /**\n * Row Detail templates gathered from the ContentChild\n */\n @ContentChild(DatatableRowDetailDirective)\n rowDetail?: DatatableRowDetailDirective;\n\n /**\n * Group Header templates gathered from the ContentChild\n */\n @ContentChild(DatatableGroupHeaderDirective)\n groupHeader?: DatatableGroupHeaderDirective;\n\n /**\n * Custom summary row template gathered from the ContentChild\n */\n readonly summaryRowDirective = contentChild(DatatableSummaryRowDirective);\n\n /**\n * Footer template gathered from the ContentChild\n * @internal\n */\n readonly _footer = contentChild(DatatableFooterDirective);\n\n private readonly _bodyComponent =\n viewChild.required<DataTableBodyComponent<TRow & { treeStatus?: TreeStatus }>>(\n DataTableBodyComponent\n );\n\n private readonly _headerElement = viewChild(DataTableHeaderComponent, {\n read: ElementRef<HTMLElement>\n });\n\n /**\n * The `role=\"table\"` element. This is the css-grid that owns both the\n * horizontal and vertical scroll (Option A: single scroll container).\n */\n private readonly _scrollContainer = viewChild.required(ScrollContainerDirective);\n\n /** @internal */\n readonly _rowDefTemplate = contentChild(DatatableRowDefDirective, {\n read: TemplateRef\n });\n\n /**\n * Returns if all rows are selected.\n */\n readonly allRowsSelected = computed(() => {\n const selected = this.selected();\n let allRowsSelected = selected.length === this.rows()?.length;\n\n if (this.selectAllRowsOnPage()) {\n const { first, last } = this._bodyComponent().indexes();\n const rowsOnPage = last - first;\n allRowsSelected = selected.length === rowsOnPage;\n }\n\n return !!(selected && this.rows()?.length !== 0 && allRowsSelected);\n });\n\n readonly _innerWidth = computed(() => this.dimensions().width);\n readonly pageSize = computed(() => this.calcPageSize());\n private readonly viewportRowCount = computed(() => {\n const size = Math.ceil(this.bodyHeight() / (this.rowHeight() as number));\n return Math.max(size, 0);\n });\n readonly _isFixedHeader = computed(() => {\n const headerHeight: number | string = this.headerHeight();\n return typeof headerHeight === 'string' ? (headerHeight as string) !== 'auto' : true;\n });\n readonly bodyHeight = computed(() => {\n if (this.scrollbarV()) {\n let height = this.dimensions().height;\n const headerElement = this._headerElement();\n if (headerElement) {\n height = height - headerElement.nativeElement.getBoundingClientRect().height;\n }\n return height - this.footerHeight();\n }\n return 0;\n });\n readonly rowCount = computed(() => this.calcRowCount());\n /** This counter is increased, when the rowDiffer detects a change. This will cause an update of _internalRows. */\n private readonly _rowDiffCount = signal(0);\n\n _offsetX = 0;\n readonly _internalRows = computed(() => {\n this._rowDiffCount(); // to trigger recalculation when row differ detects a change\n let rows = this.rows()?.slice() ?? [];\n\n const sorts = this.sorts();\n if (sorts.length && !this.externalSorting()) {\n rows = sortRows(rows, this._internalColumns(), this.sorts());\n }\n\n if (this.treeFromRelation() && this.treeToRelation()) {\n rows = groupRowsByParents(\n rows,\n optionalGetterForProp(this.treeFromRelation()),\n optionalGetterForProp(this.treeToRelation())\n );\n }\n\n if (this.ghostLoadingIndicator() && this.scrollbarV() && !this.externalPaging()) {\n const ghostRowCount = Math.max(this.viewportRowCount() - rows.length, 1);\n for (let i = 0; i < ghostRowCount; i++) {\n rows.push(undefined);\n }\n }\n\n return rows;\n });\n\n readonly _internalGroupedRows = computed(() => {\n let groupedRows = this.groupedRows();\n const groupRowsBy = this.groupRowsBy();\n\n if (!groupedRows && groupRowsBy) {\n this._rowDiffCount(); // to trigger recalculation when row differ detects a change\n groupedRows = this.groupArrayBy(this.rows() ?? [], groupRowsBy);\n }\n\n if (!groupedRows) {\n // return here to prevent subscription to sorts when no grouping\n return undefined;\n }\n\n const sorts = this.sorts();\n if (sorts.length && !this.externalSorting()) {\n if (groupedRows?.length) {\n groupedRows = sortGroupedRows(\n groupedRows,\n this._internalColumns(),\n sorts,\n sorts.find(sortColumns => sortColumns.prop === groupRowsBy)\n );\n }\n }\n\n return groupedRows;\n });\n\n // TODO: consider removing internal modifications of the columns.\n // This requires a different strategy for certain properties like width.\n readonly _internalColumns = linkedSignal(() =>\n toInternalColumn(\n this.columnTemplates().length\n ? this.columnTemplates().map(c => c.column())\n : (this.columns() ?? []),\n this._defaultColumnWidth\n )\n );\n\n /**\n * The shared `grid-template-columns` definition for the combined css-grid.\n * It is exposed once as a custom property on the scroll container so the\n * header and every body row align to the same column tracks via `var()`,\n * instead of each row binding its own (identical) template string.\n */\n readonly _gridTemplateColumns = computed(() =>\n gridColumnTemplate(columnsByPinArr(this._internalColumns()))\n );\n\n /**\n * Computed signal that returns the corrected offset value.\n * It ensures the offset is within valid bounds based on rowCount and pageSize.\n */\n readonly correctedOffset = computed(() => {\n const offset = this.offset();\n const rowCount = this.rowCount();\n const pageSize = this.pageSize();\n return Math.max(Math.min(offset, Math.ceil(rowCount / pageSize) - 1), 0);\n });\n\n readonly totalColumnGroupWidths = computed(() => {\n const colsByPin = columnsByPin(this._internalColumns());\n return columnGroupWidths(colsByPin, this._internalColumns()).total;\n });\n\n _subscriptions: Subscription[] = [];\n _defaultColumnWidth = this.globalConfiguration.defaultColumnWidth ?? 150;\n /**\n * To have this available for all components.\n * The Footer itself is not available in the injection context in templates,\n * so we need to get if from here until we have a state service.\n */\n readonly _footerComponent = viewChild(DataTableFooterComponent);\n protected verticalScrollVisible = false;\n private readonly dimensions = signal<Pick<DOMRect, 'width' | 'height'>>(\n { height: 0, width: 0 },\n { equal: (a, b) => a.width === b.width && a.height === b.height }\n );\n\n /** Re-measures the table whenever the host element's size changes. */\n private resizeObserver?: ResizeObserver;\n\n /** Pending debounce timer for the {@link resizeObserver} callback. */\n private resizeDebounce?: ReturnType<typeof setTimeout>;\n\n constructor() {\n effect(() => this.recalculateColumns());\n\n afterNextRender(() => {\n this.resizeObserver = new ResizeObserver(entries => {\n const borderBox = entries[entries.length - 1]?.borderBoxSize?.[0];\n if (!borderBox) {\n return;\n }\n clearTimeout(this.resizeDebounce);\n this.resizeDebounce = setTimeout(() => {\n this.dimensions.set({ width: borderBox.inlineSize, height: borderBox.blockSize });\n }, 5);\n });\n this.resizeObserver.observe(this.element);\n this.dimensions.set(this.element.getBoundingClientRect());\n });\n }\n\n /*\n * Lifecycle hook that is called when Angular dirty checks a directive.\n */\n ngDoCheck(): void {\n const rowDiffers = this.checkRowListChanges() ? this.rowDiffer.diff(this.rows()) : null;\n if (rowDiffers || this.disableRowCheck()) {\n this._rowDiffCount.update(count => count + 1);\n this.cd.markForCheck();\n }\n }\n\n /**\n * Lifecycle hook that is called after a component's\n * view has been fully initialized.\n */\n ngAfterViewInit(): void {\n // emit page for virtual server-side kickoff\n if (this.externalPaging() && this.scrollbarV()) {\n queueMicrotask(() =>\n this.page.emit({\n count: this.count(),\n pageSize: this.pageSize(),\n limit: this.limit(),\n offset: 0,\n sorts: this.sorts()\n })\n );\n }\n }\n\n /**\n * This will be used when displaying or selecting rows.\n * when tracking/comparing them, we'll use the value of this fn,\n *\n * (`fn(x) === fn(y)` instead of `x === y`)\n */\n readonly rowIdentity = input<(x: RowOrGroup<TRow>) => unknown>(x => {\n if (this.groupRowsBy()) {\n // each group in groupedRows are stored as {key, value: [rows]},\n // where key is the groupRowsBy index\n return (x as Group<TRow>).key ?? x;\n } else {\n return x;\n }\n });\n\n /**\n * Creates a map with the data grouped by the user choice of grouping index\n *\n * @param originalArray the original array passed via parameter\n * @param groupBy the key of the column to group the data by\n */\n groupArrayBy(originalArray: (TRow | undefined)[], groupBy: keyof TRow) {\n // create a map to hold groups with their corresponding results\n const map = new Map<TRow[keyof TRow], TRow[]>();\n let i = 0;\n\n originalArray.forEach(item => {\n if (!item) {\n // skip undefined items\n return;\n }\n\n const key = item[groupBy];\n const value = map.get(key);\n if (!value) {\n map.set(key, [item]);\n } else {\n value.push(item);\n }\n i++;\n });\n\n const addGroup = (key: TRow[keyof TRow], value: TRow[]) => ({ key, value });\n\n // convert map back to a simple array of objects\n return Array.from(map, x => addGroup(x[0], x[1]));\n }\n\n /**\n * @deprecated No-op. Dimensions are kept current by a `ResizeObserver` on the\n * host element; this will be removed in a future release.\n */\n recalculate(): void {}\n\n /**\n * @deprecated No-op. The `window:resize` listener was replaced by a\n * `ResizeObserver`; this will be removed in a future release.\n */\n onWindowResize(): void {}\n\n /**\n * Recalulcates the column widths based on column width\n * distribution mode and scrollbar offsets.\n */\n recalculateColumns(\n forceIdx = -1,\n allowBleed: boolean = this.scrollbarH()\n ): TableColumnInternal[] {\n let width = this._innerWidth();\n const columns = this._internalColumns();\n if (!width) {\n return [];\n }\n this.verticalScrollVisible = this._scrollContainer().verticalScrollVisible;\n if (this.scrollbarV() || this.scrollbarVDynamic()) {\n width = width - (this.verticalScrollVisible ? this.scrollbarHelper.width : 0);\n }\n\n // TODO: this is a temporary workaround to avoid signal writes in a computed.\n // Later, a computed adjustedWidth has to be added to the internal column to avoid this.\n untracked(() => {\n if (this.columnMode() === 'force') {\n forceFillColumnWidths(\n columns,\n width,\n forceIdx,\n allowBleed,\n this._defaultColumnWidth,\n this.scrollbarHelper.width\n );\n } else if (this.columnMode() === 'flex') {\n adjustColumnWidths(columns, width);\n }\n });\n\n return columns;\n }\n\n /**\n * @deprecated No-op. Dimensions are kept current by a `ResizeObserver` on the\n * host element; this will be removed in a future release.\n */\n recalculateDims(): void {}\n\n /**\n * Body triggered a page event.\n */\n onBodyPage(offset: number): void {\n // Avoid pagination caming from body events like scroll when the table\n // has no virtualization and the external paging is enable.\n // This means, let's the developer handle pagination by my him(her) self\n if (this.externalPaging() && !this.virtualization()) {\n return;\n }\n\n this.offset.set(offset);\n\n if (!isNaN(this.correctedOffset())) {\n this.page.emit({\n count: this.count(),\n pageSize: this.pageSize(),\n limit: this.limit(),\n offset: this.correctedOffset(),\n sorts: this.sorts()\n });\n }\n }\n\n /**\n * The body triggered a scroll event.\n */\n onBodyScroll(event: ScrollEvent): void {\n this._offsetX = event.offsetX;\n this.scroll.emit(event);\n }\n\n /**\n * The footer triggered a page event.\n */\n onFooterPage(event: PagerPageEvent) {\n this.offset.set(event.page - 1);\n this._bodyComponent().updateOffsetY(this.correctedOffset());\n\n this.page.emit({\n count: this.count(),\n pageSize: this.pageSize(),\n limit: this.limit(),\n offset: this.correctedOffset(),\n sorts: this.sorts()\n });\n\n if (this.selectAllRowsOnPage()) {\n this.selected.set([]);\n }\n }\n\n /**\n * Recalculates the sizes of the page\n */\n calcPageSize(): number {\n if (this.scrollbarV() && this.virtualization()) {\n return this.viewportRowCount();\n }\n\n // if limit is passed, we are paging\n const limit = this.limit();\n if (limit !== undefined) {\n return limit;\n }\n\n // otherwise use row length\n return this._internalRows().length;\n }\n\n /**\n * Calculates the row count.\n */\n calcRowCount(): number {\n if (!this.externalPaging()) {\n const groupedRows = this._internalGroupedRows();\n if (groupedRows) {\n return groupedRows.length;\n } else {\n return this._internalRows().length;\n }\n }\n\n return this.count();\n }\n\n /**\n * The header triggered a contextmenu event.\n */\n onColumnContextmenu({ event, column }: { event: MouseEvent; column: TableColumnInternal }): void {\n this.tableContextmenu.emit({\n event,\n type: 'header',\n content: toPublicColumn(column)\n });\n }\n\n /**\n * The body triggered a contextmenu event.\n */\n onRowContextmenu({ event, row }: { event: MouseEvent; row: RowOrGroup<TRow> }): void {\n this.tableContextmenu.emit({ event, type: 'body', content: row });\n }\n\n /**\n * The header triggered a column resize event.\n */\n onColumnResize({ column, newValue, prevValue }: ColumnResizeEventInternal): void {\n /* Safari/iOS 10.2 workaround */\n if (column === undefined) {\n return;\n }\n\n const idx = this._internalColumns().indexOf(column);\n const cols = this._internalColumns();\n cols[idx].width.set(newValue);\n // set this so we can force the column\n // width distribution to be to this value\n cols[idx].$$oldWidth = newValue;\n this.recalculateColumns(idx);\n\n this.resize.emit({\n column: toPublicColumn(column),\n newValue,\n prevValue\n });\n }\n\n onColumnResizing({ column, newValue }: ColumnResizeEventInternal): void {\n if (column === undefined) {\n return;\n }\n column.width.set(newValue);\n column.$$oldWidth = newValue;\n const idx = this._internalColumns().indexOf(column);\n this.recalculateColumns(idx);\n }\n\n /**\n * The header triggered a column re-order event.\n */\n onColumnReorder(event: ReorderEventInternal): void {\n const { column, newValue, prevValue } = event;\n const cols = this._internalColumns().map(c => ({ ...c }));\n const prevCol = cols[newValue];\n if (column.frozenLeft !== prevCol.frozenLeft || column.frozenRight !== prevCol.frozenRight) {\n return;\n }\n\n if (this.swapColumns()) {\n cols[newValue] = column;\n cols[prevValue] = prevCol;\n } else {\n if (newValue > prevValue) {\n const movedCol = cols[prevValue];\n for (let i = prevValue; i < newValue; i++) {\n cols[i] = cols[i + 1];\n }\n cols[newValue] = movedCol;\n } else {\n const movedCol = cols[prevValue];\n for (let i = prevValue; i > newValue; i--) {\n cols[i] = cols[i - 1];\n }\n cols[newValue] = movedCol;\n }\n }\n\n this._internalColumns.set(cols);\n\n this.reorder.emit({ ...event, column: toPublicColumn(event.column) });\n }\n\n /**\n * The header triggered a column sort event.\n */\n onColumnSort(event: SortEvent): void {\n // clean selected rows\n if (this.selectAllRowsOnPage()) {\n this.selected.set([]);\n }\n\n this.sorts.set(event.sorts);\n\n // Always go to first page when sorting to see the newly sorted data\n this.offset.set(0);\n this._bodyComponent().updateOffsetY(this.correctedOffset());\n // Emit the page object with updated offset value\n this.page.emit({\n count: this.count(),\n pageSize: this.pageSize(),\n limit: this.limit(),\n offset: this.correctedOffset(),\n sorts: this.sorts()\n });\n }\n\n /**\n * Toggle all row selection\n */\n onHeaderSelect(): void {\n if (this.selectAllRowsOnPage()) {\n // before we splice, chk if we currently have all selected\n const { first, last } = this._bodyComponent().indexes();\n const allSelected = this.selected().length === last - first;\n\n // do the opposite here\n if (!allSelected) {\n this.selected.set(\n this._internalRows()\n .slice(first, last)\n .filter(row => !!row) as TRow[]\n );\n } else {\n this.selected.set([]);\n }\n } else {\n let relevantRows: TRow[];\n const disableRowCheckFn = this.disableRowCheck();\n if (disableRowCheckFn) {\n relevantRows = (this.rows() ?? []).filter(\n (row => row && !disableRowCheckFn(row)) as (row: TRow | undefined) => row is TRow\n );\n } else {\n relevantRows = (this.rows() ?? []).filter(row => !!row);\n }\n // before we splice, chk if we currently have all selected\n const allSelected = this.selected().length === relevantRows.length;\n // do the opposite here\n if (!allSelected) {\n this.selected.set(relevantRows);\n } else {\n this.selected.set([]);\n }\n }\n }\n\n /**\n * A row was expanded or collapsed for tree\n */\n onTreeAction(event: { row: TRow }) {\n const row = event.row;\n // TODO: For duplicated items this will not work\n const treeToRel = this.treeToRelation();\n const rowIndex = (this.rows() ?? []).findIndex(\n r => r && r[treeToRel!] === event.row[treeToRel!]\n );\n this._rowDiffCount.update(v => v + 1);\n this.treeAction.emit({ row, rowIndex });\n }\n\n ngOnDestroy() {\n this.resizeObserver?.disconnect();\n clearTimeout(this.resizeDebounce);\n this._subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n\n scrollToRow(row: TRow, options?: ScrollToRowOptions): void {\n if (!this.scrollbarV()) {\n throw new Error('Vertical scrolling is not enabled.');\n }\n\n // TODO: We could / should add support for all those cases below.\n if (this._internalGroupedRows()?.length) {\n throw new Error('Scrolling is not supported with grouped rows.');\n }\n\n if (this.limit()) {\n throw new Error('Scrolling is not supported with limit');\n }\n\n if (this.treeFromRelation() && this.treeToRelation()) {\n this.scrollToRowTree(row, options);\n return;\n }\n\n const index = this._internalRows().indexOf(row);\n if (index === -1) {\n throw new Error(`Row not found: ${row}`);\n }\n\n // Here we have ensured, that we have only one page and the row exists.\n // Now we just need to scroll to that row.\n this._bodyComponent().scrollToIndex(index, options);\n }\n\n private scrollToRowTree(row: TRow, options?: ScrollToRowOptions, afterExpand = false): void {\n const index = this._internalRows().indexOf(row);\n\n if (index !== -1) {\n this._bodyComponent().scrollToIndex(index, options);\n return;\n }\n\n if (afterExpand) {\n throw new Error(`Row not found: ${row}`);\n }\n\n expandToRow(\n row,\n this.rows() ?? [],\n optionalGetterForProp(this.treeFromRelation()),\n optionalGetterForProp(this.treeToRelation())\n );\n this._rowDiffCount.update(v => v + 1);\n // We need a setTimeout to wait until the DOM was updated\n setTimeout(() => this.scrollToRowTree(row, options, true));\n }\n}\n","<div class=\"datatable-wrapper\">\n <div\n datatableScrollContainer\n role=\"table\"\n class=\"datatable-grid\"\n [style.--ngx-datatable-grid-template-columns]=\"_gridTemplateColumns()\"\n [style.scroll-padding-block-start.px]=\"_isFixedHeader() ? headerHeight() : null\"\n >\n @if (headerHeight()) {\n <datatable-header\n role=\"rowgroup\"\n [sorts]=\"sorts()\"\n [sortType]=\"sortType()\"\n [scrollbarH]=\"scrollbarH()\"\n [dealsWithGroup]=\"_internalGroupedRows() !== undefined\"\n [columns]=\"_internalColumns()\"\n [reorderable]=\"reorderable()\"\n [targetMarkerTemplate]=\"targetMarkerTemplate()\"\n [allRowsSelected]=\"allRowsSelected()\"\n [selectionType]=\"selectionType()\"\n [verticalScrollVisible]=\"verticalScrollVisible\"\n [enableClearingSortState]=\"enableClearingSortState()\"\n (sort)=\"onColumnSort($event)\"\n (resize)=\"onColumnResize($event)\"\n (resizing)=\"onColumnResizing($event)\"\n (reorder)=\"onColumnReorder($event)\"\n (select)=\"onHeaderSelect()\"\n (columnContextmenu)=\"onColumnContextmenu($event)\"\n />\n }\n <datatable-body\n tabindex=\"0\"\n role=\"rowgroup\"\n [groupedRows]=\"_internalGroupedRows()\"\n [rows]=\"_internalRows()\"\n [groupExpansionDefault]=\"groupExpansionDefault()\"\n [scrollbarV]=\"scrollbarV()\"\n [scrollbarH]=\"scrollbarH()\"\n [virtualization]=\"virtualization()\"\n [loadingIndicator]=\"loadingIndicator()\"\n [ghostLoadingIndicator]=\"ghostLoadingIndicator()\"\n [externalPaging]=\"externalPaging()\"\n [rowCount]=\"rowCount()\"\n [offset]=\"correctedOffset()\"\n [trackByProp]=\"trackByProp()\"\n [columns]=\"_internalColumns()\"\n [pageSize]=\"pageSize()\"\n [offsetX]=\"_offsetX\"\n [rowDetail]=\"rowDetail\"\n [groupHeader]=\"groupHeader\"\n [bodyHeight]=\"bodyHeight()\"\n [selectionType]=\"selectionType()\"\n [rowIdentity]=\"rowIdentity()\"\n [rowClass]=\"rowClass()\"\n [selectCheck]=\"selectCheck()\"\n [displayCheck]=\"displayCheck()\"\n [summaryRow]=\"summaryRow()\"\n [summaryHeight]=\"summaryHeight()\"\n [summaryPosition]=\"summaryPosition()\"\n [summaryRowTemplate]=\"summaryRowDirective()?.template\"\n [verticalScrollVisible]=\"verticalScrollVisible\"\n [disableRowCheck]=\"disableRowCheck()\"\n [checkRowPropertyChanges]=\"checkRowPropertyChanges()\"\n [rowDraggable]=\"rowDraggable()\"\n [rowDragEvents]=\"rowDragEvents\"\n [rowDefTemplate]=\"_rowDefTemplate()\"\n [(selected)]=\"selected\"\n (page)=\"onBodyPage($event)\"\n (activate)=\"activate.emit($event)\"\n (rowContextmenu)=\"onRowContextmenu($event)\"\n (scroll)=\"onBodyScroll($event)\"\n (treeAction)=\"onTreeAction($event)\"\n >\n <ng-content select=\"[loading-indicator]\" ngProjectAs=\"[loading-indicator]\">\n <datatable-progress />\n </ng-content>\n <ng-content select=\"[empty-content]\" ngProjectAs=\"[empty-content]\">\n <div class=\"empty-row\" [innerHTML]=\"configuration().messages.emptyMessage\"></div>\n </ng-content>\n </datatable-body>\n </div>\n @if (footerHeight()) {\n <datatable-footer\n [rowCount]=\"_internalGroupedRows() !== undefined ? _internalRows().length : rowCount()\"\n [groupCount]=\"_internalGroupedRows() !== undefined ? rowCount() : undefined\"\n [pageSize]=\"pageSize()\"\n [offset]=\"correctedOffset()\"\n [footerTemplate]=\"_footer()\"\n [pagerLeftArrowIcon]=\"configuration().cssClasses.pagerLeftArrow\"\n [pagerRightArrowIcon]=\"configuration().cssClasses.pagerRightArrow\"\n [pagerPreviousIcon]=\"configuration().cssClasses.pagerPrevious\"\n [selectedCount]=\"selected().length\"\n [selectedMessage]=\"!!selectionType()\"\n [pagerNextIcon]=\"configuration().cssClasses.pagerNext\"\n (page)=\"onFooterPage($event)\"\n />\n }\n</div>\n","import { booleanAttribute, Directive, effect, ElementRef, inject, input } from '@angular/core';\n\n/**\n * Row Disable Directive\n * Use this to disable/enable all children elements\n * Usage:\n * To disable\n * \t\t<div [disabled]=\"true\" disable-row >\n * \t\t</div>\n * To enable\n * \t<div [disabled]=\"false\" disable-row >\n * \t\t</div>\n */\n@Directive({\n selector: '[disable-row]'\n})\nexport class DisableRowDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly disabled = input(false, {\n transform: booleanAttribute\n });\n\n constructor() {\n effect(() => {\n if (this.disabled()) {\n this.disableAllElements();\n }\n });\n }\n\n private disableAllElements() {\n const hostElement = this.elementRef?.nativeElement;\n if (!hostElement) {\n return;\n }\n Array.from(hostElement.querySelectorAll<HTMLElement>('*')).forEach(child => {\n child.setAttribute('disabled', '');\n });\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DatatableGroupHeaderTemplateDirective } from './components/body/body-group-header-template.directive';\nimport { DatatableGroupHeaderDirective } from './components/body/body-group-header.directive';\nimport {\n DatatableRowDefComponent,\n DatatableRowDefDirective\n} from './components/body/body-row-def.component';\nimport { DatatableSummaryRowDirective } from './components/body/summary/summary-row.directive';\nimport { DataTableColumnCellDirective } from './components/columns/column-cell.directive';\nimport { DataTableColumnGhostCellDirective } from './components/columns/column-ghost-cell.directive';\nimport { DataTableColumnHeaderDirective } from './components/columns/column-header.directive';\nimport { DataTableColumnDirective } from './components/columns/column.directive';\nimport { DataTableColumnCellTreeToggle } from './components/columns/tree.directive';\nimport { DatatableComponent } from './components/datatable.component';\nimport { DataTableFooterTemplateDirective } from './components/footer/footer-template.directive';\nimport { DatatableFooterDirective } from './components/footer/footer.directive';\nimport { DatatablePagerComponent } from './components/footer/pager.component';\nimport { DatatableRowDetailTemplateDirective } from './components/row-detail/row-detail-template.directive';\nimport { DatatableRowDetailDirective } from './components/row-detail/row-detail.directive';\nimport { DisableRowDirective } from './directives/disable-row.directive';\nimport { NgxDatatableConfig, providedNgxDatatableConfig } from './ngx-datatable.config';\n\n@NgModule({\n imports: [\n DataTableFooterTemplateDirective,\n DatatableComponent,\n DataTableColumnDirective,\n DatatableRowDetailDirective,\n DatatableGroupHeaderDirective,\n DatatableRowDetailTemplateDirective,\n DataTableColumnHeaderDirective,\n DataTableColumnCellDirective,\n DataTableColumnGhostCellDirective,\n DataTableColumnCellTreeToggle,\n DatatableFooterDirective,\n DatatablePagerComponent,\n DatatableGroupHeaderTemplateDirective,\n DisableRowDirective,\n DatatableRowDefComponent,\n DatatableRowDefDirective,\n DatatableSummaryRowDirective\n ],\n exports: [\n DatatableComponent,\n DatatableRowDetailDirective,\n DatatableGroupHeaderDirective,\n DatatableRowDetailTemplateDirective,\n DataTableColumnDirective,\n DataTableColumnHeaderDirective,\n DataTableColumnCellDirective,\n DataTableColumnGhostCellDirective,\n DataTableColumnCellTreeToggle,\n DataTableFooterTemplateDirective,\n DatatableFooterDirective,\n DatatablePagerComponent,\n DatatableGroupHeaderTemplateDirective,\n DisableRowDirective,\n DatatableRowDefComponent,\n DatatableRowDefDirective,\n DatatableSummaryRowDirective\n ]\n})\nexport class NgxDatatableModule {\n /**\n * Configure global configuration via NgxDatatableConfig\n * @param configuration\n */\n static forRoot(configuration: NgxDatatableConfig): ModuleWithProviders<NgxDatatableModule> {\n return {\n ngModule: NgxDatatableModule,\n providers: [providedNgxDatatableConfig(configuration)]\n };\n }\n}\n","import { TableColumn, TableColumnProp } from './table-column.type';\n\nexport interface SortPropDir {\n dir: SortDirection | 'desc' | 'asc';\n prop: TableColumnProp;\n}\n\n/**\n * @deprecated The constant `SortDirection` should no longer be used. Instead use the value directly:\n * ```\n * // old\n * const sortDir: SortDirection = SortDirection.asc;\n * // new\n * const sortDir: SortDirection = 'asc';\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SortDirection = {\n asc: 'asc',\n desc: 'desc'\n} as const;\n\nexport type SortDirection = (typeof SortDirection)[keyof typeof SortDirection];\n\n/** @deprecated See {@link DatatableComponent.sort} */\nexport interface SortEvent {\n column: TableColumn;\n prevValue: SortDirection | undefined;\n newValue: SortDirection | undefined;\n sorts: SortPropDir[];\n}\n\n/**\n * @deprecated The constant `SortType` should no longer be used. Instead use the value directly:\n * ```\n * // old\n * const sortType: SortType = SortType.single;\n * // new\n * const sortType: SortType = 'single';\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SortType = {\n single: 'single',\n multi: 'multi'\n} as const;\n\nexport type SortType = (typeof SortType)[keyof typeof SortType];\n\n/**\n * @deprecated The constant `ColumnMode` should no longer be used. Instead use the value directly:\n * ```\n * // old\n * <ngx-datatable [columnMode]=\"ColumnMode.force\"></ngx-datatable>\n * // new\n * <ngx-datatable [columnMode]=\"'force'\"></ngx-datatable>\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ColumnMode = {\n standard: 'standard',\n flex: 'flex',\n force: 'force'\n} as const;\n\nexport type ColumnMode = (typeof ColumnMode)[keyof typeof ColumnMode];\n\nexport type TreeStatus = 'collapsed' | 'expanded' | 'loading' | 'disabled';\n\nexport interface ActivateEvent<TRow> {\n type: 'checkbox' | 'click' | 'dblclick' | 'keydown' | 'mouseenter';\n event: Event;\n row: TRow;\n group?: TRow[];\n rowHeight?: number;\n column?: TableColumn;\n value?: any;\n cellElement?: HTMLElement;\n treeStatus?: TreeStatus;\n /** Index of the cell in the originally supplied column order. */\n cellIndex?: number;\n /**\n * Index of the cell in rendered order.\n * The order of columns may differ from the supplied order when frozen left/right is used.\n */\n renderedCellIndex?: number;\n rowElement: HTMLElement;\n}\n\nexport interface HeaderCellContext {\n column: TableColumn;\n sortDir: SortDirection | 'asc' | 'desc' | undefined;\n sortFn: () => void;\n allRowsSelected?: boolean;\n selectFn: () => void;\n}\n\nexport interface GroupContext<TRow extends Row = any> {\n group: Group<TRow>;\n expanded: boolean;\n rowIndex: number;\n}\n\nexport interface CellContext<TRow extends Row = any> {\n onCheckboxChangeFn: (event: Event) => void;\n activateFn: (event: ActivateEvent<TRow>) => void;\n row: TRow;\n group?: TRow[];\n value: any;\n column: TableColumn;\n rowHeight: number;\n isSelected?: boolean;\n rowIndex: number;\n rowInGroupIndex?: number;\n treeStatus?: TreeStatus;\n disabled?: boolean;\n onTreeAction: () => void;\n expanded?: boolean;\n}\n\nexport interface FooterContext {\n rowCount: number;\n pageSize: number;\n selectedCount: number;\n curPage: number;\n offset: number;\n}\n\n/**\n * @deprecated The constant `ContextmenuType` should no longer be used. Instead use the value directly:\n * ```\n * // old\n * const contextmenuType: ContextmenuType = ContextmenuType.header;\n * // new\n * const contextmenuType: ContextmenuType = 'header';\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ContextmenuType = {\n header: 'header',\n body: 'body'\n} as const;\n\nexport type ContextmenuType = (typeof ContextmenuType)[keyof typeof ContextmenuType];\n\n/** A Group row */\nexport interface Group<TRow> {\n /** The value by which to rows are grouped. */\n key: TRow[keyof TRow];\n /** All rows that are part of the group. */\n value: TRow[];\n}\n\n/** Type for either a row or a group */\nexport type RowOrGroup<TRow> = TRow | Group<TRow>;\n\nexport interface RowDetailContext<TRow extends Row = any> {\n row: TRow;\n expanded: boolean;\n rowIndex: number;\n disabled?: boolean;\n}\n\n/**\n * Consumer provided rows should extend this interface\n * to get access to implicit row properties which are set by the datatable if required.\n */\nexport interface Row {\n [key: TableColumnProp]: any;\n treeStatus?: TreeStatus;\n level?: number;\n}\n\nexport interface ReorderEvent {\n column: TableColumn;\n prevValue: number;\n newValue: number;\n}\n\nexport interface PageEvent {\n count: number;\n pageSize: number;\n /** @deprecated Use {@link pageSize} instead. */\n limit: number | undefined;\n offset: number;\n sorts: SortPropDir[];\n}\n\nexport interface PagerPageEvent {\n page: number;\n}\n\nexport interface ColumnResizeEvent {\n column: TableColumn;\n prevValue: number;\n newValue: number;\n}\n\nexport interface ScrollEvent {\n offsetY: number;\n offsetX: number;\n}\n\nexport interface GroupToggleEvent<TRow> {\n type: 'group';\n value: Group<TRow>;\n}\n\nexport interface AllGroupsToggleEvent {\n type: 'all';\n value: boolean;\n}\n\nexport type GroupToggleEvents<TRow> = GroupToggleEvent<TRow> | AllGroupsToggleEvent;\n\nexport interface DetailToggleEvent<TRow> {\n type: 'row';\n value: TRow;\n}\n\nexport interface AllDetailToggleEvent {\n type: 'all';\n value: boolean;\n}\n\nexport type DetailToggleEvents<TRow> = DetailToggleEvent<TRow> | AllDetailToggleEvent;\n\n/**\n * @deprecated The constant `SelectionType` should no longer be used. Instead use the value directly:\n * ```\n * // old\n * <ngx-datatable [selectionType]=\"SelectionType.multi\"></ngx-datatable>\n * // new\n * <ngx-datatable [selectionType]=\"'multi'\"></ngx-datatable>\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const SelectionType = {\n single: 'single',\n multi: 'multi',\n multiClick: 'multiClick',\n cell: 'cell',\n checkbox: 'checkbox'\n} as const;\n\nexport type SelectionType = (typeof SelectionType)[keyof typeof SelectionType];\n\nexport interface ContextMenuEventBody<TRow> {\n event: MouseEvent;\n type: 'body';\n content: RowOrGroup<TRow>;\n}\n\nexport interface ContextMenuEvenHeader {\n event: MouseEvent;\n type: 'header';\n content: TableColumn;\n}\n\nexport type ContextMenuEvent<TRow> = ContextMenuEventBody<TRow> | ContextMenuEvenHeader;\n\nexport interface ScrollToRowOptions {\n behavior?: ScrollBehavior;\n block?: ScrollLogicalPosition;\n}\n\nexport type DragEventType =\n 'drag' | 'dragend' | 'dragenter' | 'dragleave' | 'dragover' | 'dragstart' | 'drop';\n\nexport interface DragEventData {\n event: DragEvent;\n srcElement: HTMLElement;\n targetElement?: HTMLElement;\n eventType: DragEventType;\n dragRow: any;\n dropRow?: any;\n}\n","/*\n * Public API Surface of ngx-datatable\n */\n\n// components\nexport * from './lib/ngx-datatable.module';\nexport * from './lib/components/datatable.component';\nexport * from './lib/components/body/body-group-header.directive';\nexport * from './lib/components/body/body-group-header-template.directive';\nexport * from './lib/components/footer/footer.directive';\nexport * from './lib/components/footer/footer-template.directive';\nexport * from './lib/components/footer/pager.component';\nexport * from './lib/components/columns/column.directive';\nexport * from './lib/components/columns/column-header.directive';\nexport * from './lib/components/columns/column-cell.directive';\nexport * from './lib/components/columns/column-ghost-cell.directive';\nexport * from './lib/components/columns/tree.directive';\nexport * from './lib/components/row-detail/row-detail.directive';\nexport * from './lib/components/row-detail/row-detail-template.directive';\nexport * from './lib/components/body/body-row-def.component';\nexport * from './lib/components/body/summary/summary-row.directive';\n\n// directives\nexport * from './lib/directives/disable-row.directive';\n\n// types\nexport * from './lib/types/public.types';\nexport * from './lib/types/table-column.type';\n\nexport {\n providedNgxDatatableConfig,\n type NgxDatatableConfig,\n type NgxDatatableMessages,\n type NgxDatatableCssClasses\n} from './lib/ngx-datatable.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}