@swimlane/ngx-datatable 22.0.0 → 24.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/assets/app.css +8 -3
- package/fesm2022/swimlane-ngx-datatable.mjs +4056 -4791
- package/fesm2022/swimlane-ngx-datatable.mjs.map +1 -1
- package/package.json +9 -8
- package/themes/_ghost.scss +16 -20
- package/themes/_rows.scss +4 -5
- package/themes/bootstrap.css +41 -35
- package/themes/bootstrap.scss +70 -35
- package/themes/dark.css +35 -24
- package/themes/dark.scss +41 -28
- package/themes/material.css +128 -111
- package/themes/material.scss +128 -100
- package/types/swimlane-ngx-datatable.d.ts +1302 -0
- package/index.d.ts +0 -1695
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swimlane-ngx-datatable.mjs","sources":["../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-header-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-header.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column-prop-getters.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/tree.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-header.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-cell.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/tree.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/services/column-changes.service.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-ghost-cell.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/row-detail/row-detail-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/row-detail/row-detail.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/scroller.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/row-height-cache.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/keys.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/public.types.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/events.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/draggable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row-def.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/table-token.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row-wrapper.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/summary/summary-row.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/ghost-loader/ghost-loader.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/ghost-loader/ghost-loader.component.html","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/selection.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/services/scrollbar-helper.service.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/long-press.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/sort.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/header/header-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/orderable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/header/header.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/throttle.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/math.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/pager.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/visibility.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/progress-bar.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/camel-case.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/id.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column-helper.ts","../../../../projects/swimlane/ngx-datatable/src/lib/ngx-datatable.config.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/datatable.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/datatable.component.html","../../../../projects/swimlane/ngx-datatable/src/lib/directives/disable-row.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/ngx-datatable.module.ts","../../../../projects/swimlane/ngx-datatable/src/public-api.ts","../../../../projects/swimlane/ngx-datatable/src/swimlane-ngx-datatable.ts"],"sourcesContent":["import { Directive } from '@angular/core';\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 } from '@angular/core';\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 { ContentChild, Directive, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { DatatableGroupHeaderTemplateDirective } from './body-group-header-template.directive';\nimport { Group, GroupContext, GroupToggleEvents, Row } from '../../types/public.types';\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 @Input() rowHeight: 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 @Input() checkboxable = false;\n\n @Input('template')\n _templateInput?: TemplateRef<GroupContext<TRow>>;\n\n @ContentChild(DatatableGroupHeaderTemplateDirective, { read: TemplateRef, static: true })\n _templateQuery?: TemplateRef<GroupContext<TRow>>;\n\n get template(): TemplateRef<GroupContext<TRow>> | undefined {\n return this._templateInput || this._templateQuery;\n }\n\n /**\n * Track toggling of group visibility\n */\n @Output() toggle: EventEmitter<GroupToggleEvents<TRow>> = new EventEmitter();\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 { 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 function 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 function 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.indexOf('.') !== -1) {\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 function 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 function 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 function 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 split = path.split('.');\n\n if (split.length) {\n for (let i = 0; i < split.length; i++) {\n current = current[split[i]];\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","import { getterForProp } from './column-prop-getters';\nimport { TableColumnProp } from '../types/table-column.type';\nimport { Row } from '../types/public.types';\n\nexport type OptionalValueGetter = ((row: any) => any) | undefined;\nexport function 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: This algorithm will fail if there is a deadlock of relationship\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 function 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 rootNodes = treeRows.reduce((root, node) => {\n const fromValue = from(node.row);\n const parent = uniqIDs.get(fromValue);\n if (parent) {\n node.row.level = parent.row.level! + 1; // TODO: should be reflected by type, that level is defined\n node.parent = parent;\n parent.children.push(node);\n } else {\n node.row.level = 0;\n root.push(node);\n }\n return root;\n }, [] as TreeNode<TRow>[]);\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","import { Directive } from '@angular/core';\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';\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, 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 { Injectable } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * service to make DatatableComponent aware of changes to\n * input bindings of DataTableColumnDirective\n */\n@Injectable()\nexport class ColumnChangesService {\n private columnInputChanges = new Subject<void>();\n\n get columnInputChanges$(): Observable<void> {\n return this.columnInputChanges.asObservable();\n }\n\n onInputChange(): void {\n this.columnInputChanges.next(undefined);\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 {\n booleanAttribute,\n ContentChild,\n Directive,\n inject,\n Input,\n numberAttribute,\n OnChanges,\n PipeTransform,\n TemplateRef\n} from '@angular/core';\nimport { DataTableColumnHeaderDirective } from './column-header.directive';\nimport { DataTableColumnCellDirective } from './column-cell.directive';\nimport { DataTableColumnCellTreeToggle } from './tree.directive';\nimport { ColumnChangesService } from '../../services/column-changes.service';\nimport { TableColumn, TableColumnProp } from '../../types/table-column.type';\nimport { DataTableColumnGhostCellDirective } from './column-ghost-cell.directive';\nimport { CellContext, HeaderCellContext, Row } from '../../types/public.types';\n\n@Directive({\n selector: 'ngx-datatable-column'\n})\nexport class DataTableColumnDirective<TRow extends Row> implements TableColumn, OnChanges {\n private columnChangesService = inject(ColumnChangesService);\n @Input() name?: string;\n @Input() prop?: TableColumnProp;\n @Input({ transform: booleanAttribute }) bindAsUnsafeHtml?: boolean;\n @Input({ transform: booleanAttribute }) frozenLeft?: boolean;\n @Input({ transform: booleanAttribute }) frozenRight?: boolean;\n @Input({ transform: numberAttribute }) flexGrow?: number;\n @Input({ transform: booleanAttribute }) resizeable?: boolean;\n @Input() comparator?: (\n valueA: any,\n valueB: any,\n rowA: TRow,\n rowB: TRow,\n sortDir: 'desc' | 'asc'\n ) => number;\n @Input() pipe?: PipeTransform;\n @Input({ transform: booleanAttribute }) sortable?: boolean;\n @Input({ transform: booleanAttribute }) draggable?: boolean;\n @Input({ transform: booleanAttribute }) canAutoResize?: boolean;\n @Input({ transform: numberAttribute }) minWidth?: number;\n @Input({ transform: numberAttribute }) width?: number;\n @Input({ transform: numberAttribute }) maxWidth?: number;\n @Input({ transform: booleanAttribute }) checkboxable?: boolean;\n @Input({ transform: booleanAttribute }) headerCheckboxable?: boolean;\n @Input() headerClass?:\n | string\n | ((data: { column: TableColumn }) => string | Record<string, boolean>);\n @Input() cellClass?:\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 @Input({ transform: booleanAttribute }) isTreeColumn?: boolean;\n @Input() treeLevelIndent?: number;\n @Input() summaryFunc?: (cells: any[]) => any;\n @Input() summaryTemplate?: TemplateRef<any>;\n\n @Input('cellTemplate')\n _cellTemplateInput?: TemplateRef<CellContext<TRow>>;\n\n @ContentChild(DataTableColumnCellDirective, { read: TemplateRef, static: true })\n _cellTemplateQuery?: TemplateRef<CellContext<TRow>>;\n\n get cellTemplate(): TemplateRef<CellContext<TRow>> | undefined {\n return this._cellTemplateInput || this._cellTemplateQuery;\n }\n\n @Input('headerTemplate')\n _headerTemplateInput?: TemplateRef<HeaderCellContext>;\n\n @ContentChild(DataTableColumnHeaderDirective, { read: TemplateRef, static: true })\n _headerTemplateQuery?: TemplateRef<HeaderCellContext>;\n\n get headerTemplate(): TemplateRef<HeaderCellContext> | undefined {\n return this._headerTemplateInput || this._headerTemplateQuery;\n }\n\n @Input('treeToggleTemplate')\n _treeToggleTemplateInput?: TemplateRef<any>;\n\n @ContentChild(DataTableColumnCellTreeToggle, { read: TemplateRef, static: true })\n _treeToggleTemplateQuery?: TemplateRef<any>;\n\n get treeToggleTemplate(): TemplateRef<any> | undefined {\n return this._treeToggleTemplateInput || this._treeToggleTemplateQuery;\n }\n\n @Input('ghostCellTemplate')\n _ghostCellTemplateInput?: TemplateRef<void>;\n\n @ContentChild(DataTableColumnGhostCellDirective, { read: TemplateRef, static: true })\n _ghostCellTemplateQuery?: TemplateRef<void>;\n\n get ghostCellTemplate(): TemplateRef<void> | undefined {\n return this._ghostCellTemplateInput || this._ghostCellTemplateQuery;\n }\n\n private isFirstChange = true;\n\n ngOnChanges() {\n if (this.isFirstChange) {\n this.isFirstChange = false;\n } else {\n this.columnChangesService.onInputChange();\n }\n }\n}\n","import { Directive } from '@angular/core';\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 { ContentChild, Directive, EventEmitter, Input, Output, TemplateRef } from '@angular/core';\nimport { DatatableRowDetailTemplateDirective } from './row-detail-template.directive';\nimport { DetailToggleEvents, Row, RowDetailContext } from '../../types/public.types';\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 @Input() rowHeight: number | ((row?: TRow, index?: number) => number) = 0;\n\n @Input('template')\n _templateInput?: TemplateRef<RowDetailContext<TRow>>;\n\n @ContentChild(DatatableRowDetailTemplateDirective, { read: TemplateRef, static: true })\n _templateQuery?: TemplateRef<RowDetailContext<TRow>>;\n\n get template(): TemplateRef<RowDetailContext<TRow>> | undefined {\n return this._templateInput || this._templateQuery;\n }\n\n /**\n * Row detail row visbility was toggled.\n */\n @Output() toggle = new EventEmitter<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 { ContentChild, Directive, Input, TemplateRef } from '@angular/core';\nimport { DataTableFooterTemplateDirective } from './footer-template.directive';\nimport { FooterContext } from '../../types/public.types';\n\n@Directive({\n selector: 'ngx-datatable-footer'\n})\nexport class DatatableFooterDirective {\n @Input('template')\n _templateInput?: TemplateRef<FooterContext>;\n\n @ContentChild(DataTableFooterTemplateDirective, { read: TemplateRef })\n _templateQuery?: TemplateRef<FooterContext>;\n\n get template(): TemplateRef<FooterContext> | undefined {\n return this._templateInput || this._templateQuery;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from '@angular/core';\n\n@Component({\n selector: 'datatable-scroller',\n template: ` <ng-content></ng-content> `,\n host: {\n class: 'datatable-scroll'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ScrollerComponent implements OnInit, OnDestroy {\n private renderer = inject(Renderer2);\n\n @Input() scrollbarV?: boolean;\n @Input() scrollbarH?: boolean;\n\n @HostBinding('style.height.px')\n @Input()\n scrollHeight?: number;\n\n @HostBinding('style.width.px')\n @Input()\n scrollWidth?: number;\n\n @Output() scroll: EventEmitter<any> = new EventEmitter();\n\n scrollYPos = 0;\n scrollXPos = 0;\n prevScrollYPos = 0;\n prevScrollXPos = 0;\n element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n parentElement?: HTMLElement;\n\n private _scrollEventListener: any = null;\n\n ngOnInit(): void {\n // manual bind so we don't always listen\n if (this.scrollbarV || this.scrollbarH) {\n const renderer = this.renderer;\n this.parentElement = renderer.parentNode(this.element);\n this._scrollEventListener = this.onScrolled.bind(this);\n this.parentElement?.addEventListener('scroll', this._scrollEventListener);\n }\n }\n\n ngOnDestroy(): void {\n if (this._scrollEventListener) {\n this.parentElement?.removeEventListener('scroll', this._scrollEventListener);\n this._scrollEventListener = null;\n }\n }\n\n setOffset(offsetY: number): void {\n if (this.parentElement) {\n this.parentElement.scrollTop = offsetY;\n }\n }\n\n onScrolled(event: MouseEvent): void {\n const dom: Element = <Element>event.currentTarget;\n requestAnimationFrame(() => {\n this.scrollYPos = dom.scrollTop;\n this.scrollXPos = dom.scrollLeft;\n this.updateOffset();\n });\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 {\n ColumnGroupWidth,\n PinnedColumns,\n TableColumnGroup,\n TableColumnInternal\n} from '../types/internal.types';\n\n/**\n * Returns the columns by pin.\n */\nexport function 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 function 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 function columnTotalWidth(columns?: TableColumnInternal[]) {\n return columns?.reduce((total, column) => total + column.width, 0) ?? 0;\n}\n\nexport function 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 * 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 {\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 * @param rows The array of rows which contain the expanded status.\n * @param rowHeight The row height.\n * @param detailRowHeight The detail row height.\n */\n initCache(details: any): 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 (!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 = rowHeight;\n if (isFn) {\n currentRowHeight = rowHeight(row);\n }\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 if (isDetailFn) {\n const index = indexOffset + i;\n currentRowHeight += detailRowHeight(row, index);\n } else {\n currentRowHeight += detailRowHeight;\n }\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 enum Keys {\n up = 'ArrowUp',\n down = 'ArrowDown',\n return = 'Enter',\n escape = 'Escape',\n left = 'ArrowLeft',\n right = 'ArrowRight'\n}\n","import { TableColumn, TableColumnProp } from './table-column.type';\n\nexport interface SortPropDir {\n dir: SortDirection | 'desc' | 'asc';\n prop: TableColumnProp;\n}\n\nexport enum SortDirection {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport interface SortEvent {\n column: TableColumn;\n prevValue: SortDirection | undefined;\n newValue: SortDirection | undefined;\n sorts: SortPropDir[];\n}\n\nexport enum SortType {\n single = 'single',\n multi = 'multi'\n}\n\nexport enum ColumnMode {\n standard = 'standard',\n flex = 'flex',\n force = 'force'\n}\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 cellIndex?: 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\nexport enum ContextmenuType {\n header = 'header',\n body = 'body'\n}\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\nexport enum SelectionType {\n single = 'single',\n multi = 'multi',\n multiClick = 'multiClick',\n cell = 'cell',\n checkbox = 'checkbox'\n}\n\nexport interface SelectEvent<TRow> {\n selected: TRow[];\n}\n\nexport interface ContextMenuEventBody<TRow> {\n event: MouseEvent;\n type: ContextmenuType.body;\n content: RowOrGroup<TRow>;\n}\n\nexport interface ContextMenuEvenHeader {\n event: MouseEvent;\n type: ContextmenuType.header;\n content: TableColumn;\n}\n\nexport type ContextMenuEvent<TRow> = ContextMenuEventBody<TRow> | ContextMenuEvenHeader;\n\nexport type DragEventType =\n | 'drag'\n | 'dragend'\n | 'dragenter'\n | 'dragleave'\n | 'dragover'\n | 'dragstart'\n | '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","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n inject,\n Input,\n Output\n} from '@angular/core';\n\nimport { Keys } from '../../utils/keys';\nimport {\n ActivateEvent,\n CellContext,\n Row,\n RowOrGroup,\n SortDirection,\n SortPropDir,\n TreeStatus\n} from '../../types/public.types';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CellActiveEvent, RowIndex, TableColumnInternal } from '../../types/internal.types';\n\n@Component({\n selector: 'datatable-body-cell',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"datatable-body-cell-label\" [style.margin-left.px]=\"calcLeftMargin(column, row)\">\n @if (column.checkboxable && (!displayCheck || displayCheck(row, column, value))) {\n <label class=\"datatable-checkbox\">\n <input\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"isSelected\"\n (click)=\"onCheckboxChange($event)\"\n />\n </label>\n } @if (column.isTreeColumn) { @if (!column.treeToggleTemplate) {\n <button\n class=\"datatable-tree-button\"\n [disabled]=\"treeStatus === 'disabled'\"\n (click)=\"onTreeAction()\"\n [attr.aria-label]=\"treeStatus\"\n >\n <span>\n @if (treeStatus === 'loading') {\n <i class=\"icon datatable-icon-collapse\"></i>\n } @if (treeStatus === 'collapsed') {\n <i class=\"icon datatable-icon-up\"></i>\n } @if (treeStatus === 'expanded' || treeStatus === 'disabled') {\n <i class=\"icon datatable-icon-down\"></i>\n }\n </span>\n </button>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"column.treeToggleTemplate\"\n [ngTemplateOutletContext]=\"{ cellContext: cellContext }\"\n >\n </ng-template>\n } } @if (!column.cellTemplate) { @if (column.bindAsUnsafeHtml) {\n <span [title]=\"sanitizedValue\" [innerHTML]=\"value\"> </span>\n } @else {\n <span [title]=\"sanitizedValue\">{{ value }}</span>\n } } @else {\n <ng-template [ngTemplateOutlet]=\"column.cellTemplate\" [ngTemplateOutletContext]=\"cellContext\">\n </ng-template>\n }\n </div>\n `,\n styleUrl: './body-cell.component.scss',\n imports: [NgTemplateOutlet]\n})\nexport class DataTableBodyCellComponent<TRow extends Row = any> implements DoCheck {\n private cd = inject(ChangeDetectorRef);\n\n @Input() displayCheck?: (row: TRow, column: TableColumnInternal, value: any) => boolean;\n\n @Input() set disabled(value: boolean | undefined) {\n this.cellContext.disabled = value;\n this._disabled = value;\n }\n\n get disabled(): boolean | undefined {\n return this._disabled;\n }\n\n @Input() set group(group: TRow[] | undefined) {\n this._group = group;\n this.cellContext.group = group;\n this.checkValueUpdates();\n this.cd.markForCheck();\n }\n\n get group() {\n return this._group;\n }\n\n @Input() set rowHeight(val: number) {\n this._rowHeight = val;\n this.cellContext.rowHeight = val;\n this.checkValueUpdates();\n this.cd.markForCheck();\n }\n\n get rowHeight() {\n return this._rowHeight;\n }\n\n @Input() set isSelected(val: boolean | undefined) {\n this._isSelected = val;\n this.cellContext.isSelected = val;\n this.cd.markForCheck();\n }\n\n get isSelected(): boolean | undefined {\n return this._isSelected;\n }\n\n @Input() set expanded(val: boolean | undefined) {\n this._expanded = val;\n this.cellContext.expanded = val;\n this.cd.markForCheck();\n }\n\n get expanded(): boolean | undefined {\n return this._expanded;\n }\n\n @Input() set rowIndex(val: RowIndex) {\n this._rowIndex = val;\n this.cellContext.rowIndex = val?.index;\n this.cellContext.rowInGroupIndex = val?.indexInGroup;\n this.checkValueUpdates();\n this.cd.markForCheck();\n }\n\n get rowIndex(): RowIndex {\n return this._rowIndex;\n }\n\n @Input() set column(column: TableColumnInternal) {\n this._column = column;\n this.cellContext.column = column;\n this.checkValueUpdates();\n this.cd.markForCheck();\n }\n\n get column(): TableColumnInternal {\n return this._column;\n }\n\n @Input() set row(row: TRow) {\n this._row = row;\n this.cellContext.row = row;\n this.checkValueUpdates();\n this.cd.markForCheck();\n }\n\n get row(): TRow {\n return this._row;\n }\n\n @Input() set sorts(val: SortPropDir[]) {\n this._sorts = val;\n this.sortDir = this.calcSortDir(val);\n }\n\n get sorts(): SortPropDir[] {\n return this._sorts;\n }\n\n @Input() set treeStatus(status: TreeStatus | undefined) {\n if (\n status !== 'collapsed' &&\n status !== 'expanded' &&\n status !== 'loading' &&\n status !== 'disabled'\n ) {\n this._treeStatus = 'collapsed';\n } else {\n this._treeStatus = status;\n }\n this.cellContext.treeStatus = this._treeStatus;\n this.checkValueUpdates();\n this.cd.markForCheck();\n }\n\n get treeStatus(): TreeStatus | undefined {\n return this._treeStatus;\n }\n\n @Output() activate = new EventEmitter<CellActiveEvent<TRow>>();\n\n @Output() treeAction: EventEmitter<any> = new EventEmitter();\n\n @HostBinding('class')\n get columnCssClasses(): string {\n let cls = 'datatable-body-cell';\n if (this.column.cellClass) {\n if (typeof this.column.cellClass === 'string') {\n cls += ' ' + this.column.cellClass;\n } else if (typeof this.column.cellClass === 'function') {\n const res = this.column.cellClass({\n row: this.row,\n group: this.group,\n column: this.column,\n value: this.value,\n rowHeight: this.rowHeight\n });\n\n if (typeof res === 'string') {\n cls += ' ' + res;\n } else if (typeof res === 'object') {\n const keys = Object.keys(res);\n for (const k of keys) {\n if (res[k] === true) {\n cls += ` ${k}`;\n }\n }\n }\n }\n }\n if (!this.sortDir) {\n cls += ' sort-active';\n }\n if (this.isFocused && !this._disabled) {\n cls += ' active';\n }\n if (this.sortDir === SortDirection.asc) {\n cls += ' sort-asc';\n }\n if (this.sortDir === SortDirection.desc) {\n cls += ' sort-desc';\n }\n if (this._disabled) {\n cls += ' row-disabled';\n }\n\n return cls;\n }\n\n @HostBinding('style.width.px')\n get width(): number {\n return this.column.width;\n }\n\n @HostBinding('style.minWidth.px')\n get minWidth(): number | undefined {\n return this.column.minWidth;\n }\n\n @HostBinding('style.maxWidth.px')\n get maxWidth(): number | undefined {\n return this.column.maxWidth;\n }\n\n @HostBinding('style.height')\n get height(): string | number {\n const height = this.rowHeight;\n if (isNaN(height)) {\n return height;\n }\n return height + 'px';\n }\n\n sanitizedValue!: string;\n value: any;\n sortDir?: SortDirection;\n isFocused = false;\n\n cellContext: CellContext<TRow>;\n\n private _isSelected?: boolean;\n private _sorts!: SortPropDir[];\n private _column!: TableColumnInternal;\n private _row!: TRow;\n private _group?: TRow[];\n private _rowHeight!: number;\n private _rowIndex!: RowIndex;\n private _expanded?: boolean;\n private _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private _treeStatus?: TreeStatus;\n private _disabled?: boolean;\n\n constructor() {\n this.cellContext = {\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.column,\n rowHeight: this.rowHeight,\n isSelected: this.isSelected,\n rowIndex: this.rowIndex?.index,\n rowInGroupIndex: this.rowIndex?.indexInGroup,\n treeStatus: this.treeStatus,\n disabled: this._disabled,\n onTreeAction: () => this.onTreeAction()\n };\n }\n\n ngDoCheck(): void {\n this.checkValueUpdates();\n }\n\n checkValueUpdates(): void {\n let value = '';\n\n if (!this.row || !this.column || this.column.prop == undefined) {\n value = '';\n } else {\n const val = this.column.$$valueGetter(this.row, this.column.prop);\n const userPipe = this.column.pipe;\n\n if (userPipe) {\n value = userPipe.transform(val);\n } else if (value !== undefined) {\n value = val;\n }\n }\n\n if (this.value !== value) {\n this.value = value;\n this.cellContext.value = value;\n this.cellContext.disabled = this._disabled;\n this.sanitizedValue = value !== null && value !== undefined ? this.stripHtml(value) : value;\n this.cd.markForCheck();\n }\n }\n\n @HostListener('focus')\n onFocus(): void {\n this.isFocused = true;\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.isFocused = false;\n }\n\n @HostListener('click', ['$event'])\n 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.column,\n value: this.value,\n cellElement: this._element\n });\n }\n\n @HostListener('dblclick', ['$event'])\n 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.column,\n value: this.value,\n cellElement: this._element\n });\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n const key = event.key;\n const isTargetCell = event.target === this._element;\n\n const isAction =\n key === Keys.return ||\n key === Keys.down ||\n key === Keys.up ||\n key === Keys.left ||\n key === Keys.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.column,\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.column,\n value: this.value,\n cellElement: this._element,\n treeStatus: 'collapsed'\n });\n }\n\n calcSortDir(sorts: SortPropDir[]): SortDirection | undefined {\n if (!sorts) {\n return undefined;\n }\n\n const sort = sorts.find(s => s.prop === this.column.prop);\n\n return sort?.dir as SortDirection;\n }\n\n stripHtml(html: string): string {\n if (!html.replace) {\n return html;\n }\n return html.replace(/<\\/?[^>]+(>|$)/g, '');\n }\n\n onTreeAction() {\n this.treeAction.emit(this.row);\n }\n\n calcLeftMargin(column: TableColumnInternal, row: RowOrGroup<TRow>): number {\n const levelIndent = column.treeLevelIndent != null ? column.treeLevelIndent : 50;\n return column.isTreeColumn ? (row as TRow).level! * levelIndent : 0;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n inject,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n OnChanges,\n Output,\n SimpleChanges\n} from '@angular/core';\n\nimport { columnGroupWidths, columnsByPin, columnsByPinArr } from '../../utils/column';\nimport { Keys } from '../../utils/keys';\nimport { ActivateEvent, Row, RowOrGroup, TreeStatus } from '../../types/public.types';\nimport {\n CellActiveEvent,\n ColumnGroupWidth,\n PinnedColumns,\n RowIndex,\n TableColumnInternal\n} from '../../types/internal.types';\nimport { DataTableBodyCellComponent } from './body-cell.component';\n\n@Component({\n selector: 'datatable-body-row',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (colGroup of _columnsByPin; track colGroup.type) { @if (colGroup.columns.length) {\n <div\n class=\"datatable-row-{{ colGroup.type }} datatable-row-group\"\n [style.width.px]=\"_columnGroupWidths[colGroup.type]\"\n [class.row-disabled]=\"disabled\"\n >\n @for (column of colGroup.columns; track column.$$id; let ii = $index) {\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, ii)\"\n (treeAction)=\"onTreeAction()\"\n >\n </datatable-body-cell>\n }\n </div>\n } }\n `,\n styleUrl: './body-row.component.scss',\n imports: [DataTableBodyCellComponent]\n})\nexport class DataTableBodyRowComponent<TRow extends Row = any> implements DoCheck, OnChanges {\n private cd = inject(ChangeDetectorRef);\n\n @Input() set columns(val: TableColumnInternal[]) {\n this._columns = val;\n this.recalculateColumns(val);\n }\n\n get columns(): TableColumnInternal[] {\n return this._columns;\n }\n\n @Input() set innerWidth(val: number) {\n if (this._columns) {\n const colByPin = columnsByPin(this._columns);\n this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);\n }\n\n this._innerWidth = val;\n this.recalculateColumns();\n }\n\n get innerWidth(): number {\n return this._innerWidth;\n }\n\n @Input() expanded?: boolean;\n @Input() rowClass?: (row: TRow) => string | Record<string, boolean>;\n @Input() row!: TRow;\n @Input() group?: TRow[];\n @Input() isSelected?: boolean;\n @Input() rowIndex!: RowIndex;\n @Input() displayCheck?: (row: TRow, column: TableColumnInternal, value?: any) => boolean;\n @Input() treeStatus?: TreeStatus = 'collapsed';\n @Input() verticalScrollVisible = false;\n\n @Input() disabled?: boolean;\n\n @HostBinding('class')\n get cssClass() {\n let cls = 'datatable-body-row';\n if (this.isSelected) {\n cls += ' active';\n }\n if (this.innerRowIndex % 2 !== 0) {\n cls += ' datatable-row-odd';\n }\n if (this.innerRowIndex % 2 === 0) {\n cls += ' datatable-row-even';\n }\n if (this.disabled) {\n cls += ' row-disabled';\n }\n\n if (this.rowClass) {\n const res = this.rowClass(this.row);\n if (typeof res === 'string') {\n cls += ` ${res}`;\n } else if (typeof res === 'object') {\n const keys = Object.keys(res);\n for (const k of keys) {\n if (res[k] === true) {\n cls += ` ${k}`;\n }\n }\n }\n }\n\n return cls;\n }\n\n @HostBinding('style.height.px')\n @Input()\n rowHeight!: number;\n\n @HostBinding('style.width.px')\n get columnsTotalWidths(): number {\n return this._columnGroupWidths.total;\n }\n\n @Output() activate: EventEmitter<ActivateEvent<TRow>> = new EventEmitter();\n @Output() treeAction: EventEmitter<any> = new EventEmitter();\n\n _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n _columnGroupWidths!: ColumnGroupWidth;\n _columnsByPin!: PinnedColumns[];\n _columns!: TableColumnInternal[];\n _innerWidth!: number;\n\n private _rowDiffer: KeyValueDiffer<keyof RowOrGroup<TRow>, any> = inject(KeyValueDiffers)\n .find({})\n .create();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.verticalScrollVisible) {\n this.recalculateColumns();\n }\n }\n\n ngDoCheck(): void {\n if (this._rowDiffer.diff(this.row)) {\n this.cd.markForCheck();\n }\n }\n\n onActivate(event: CellActiveEvent<TRow>, index: number): void {\n this.activate.emit({ ...event, rowElement: this._element, cellIndex: index });\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 === Keys.return ||\n key === Keys.down ||\n key === Keys.up ||\n key === Keys.left ||\n key === Keys.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 recalculateColumns(val: TableColumnInternal<TRow>[] = this.columns): void {\n this._columns = val;\n const colsByPin = columnsByPin(this._columns);\n this._columnsByPin = columnsByPinArr(this._columns);\n this._columnGroupWidths = columnGroupWidths(colsByPin, this._columns);\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 private get innerRowIndex(): number {\n return this.rowIndex?.indexInGroup ?? this.rowIndex?.index ?? 0;\n }\n}\n","/**\n * Extracts the position (x, y coordinates) from a MouseEvent or TouchEvent.\n *\n * @param {MouseEvent | TouchEvent} event - The event object from which to extract the position. Can be either a MouseEvent or a TouchEvent.\n * @return {{ x: number, y: number }} An object containing the x and y coordinates of the event relative to the viewport.\n */\nexport function getPositionFromEvent(event: MouseEvent | TouchEvent): {\n clientX: number;\n clientY: number;\n screenX: number;\n screenY: number;\n} {\n return event instanceof MouseEvent ? (event as MouseEvent) : (event.changedTouches[0] as Touch);\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DraggableDragEvent, TableColumnInternal } from '../types/internal.types';\nimport { getPositionFromEvent } from '../utils/events';\n\n/**\n * Draggable Directive for Angular2\n *\n * Inspiration:\n * https://github.com/AngularClass/angular2-examples/blob/master/rx-draggable/directives/draggable.ts\n * http://stackoverflow.com/questions/35662530/how-to-implement-drag-and-drop-in-angular2\n *\n */\n@Directive({\n selector: '[draggable]'\n})\nexport class DraggableDirective implements OnDestroy, OnChanges {\n @Input() dragEventTarget: any;\n @Input() dragModel!: TableColumnInternal;\n @Input({ transform: booleanAttribute }) dragX = true;\n @Input({ transform: booleanAttribute }) dragY = true;\n\n @Output() dragStart: EventEmitter<DraggableDragEvent> = new EventEmitter();\n @Output() dragging: EventEmitter<DraggableDragEvent> = new EventEmitter();\n @Output() dragEnd: EventEmitter<DraggableDragEvent> = new EventEmitter();\n\n element = inject(ElementRef).nativeElement;\n isDragging = false;\n subscription?: Subscription;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.dragEventTarget &&\n changes.dragEventTarget.currentValue &&\n this.dragModel.dragging\n ) {\n this.onMousedown(changes.dragEventTarget.currentValue);\n }\n }\n\n ngOnDestroy(): void {\n this._destroySubscription();\n }\n\n onMouseup(event: MouseEvent | TouchEvent): void {\n if (!this.isDragging) {\n return;\n }\n\n this.isDragging = false;\n this.element.classList.remove('dragging');\n\n if (this.subscription) {\n this._destroySubscription();\n this.dragEnd.emit({\n event,\n element: this.element,\n model: this.dragModel\n });\n }\n }\n\n onMousedown(event: MouseEvent | TouchEvent): void {\n const isMouse = event instanceof MouseEvent;\n // we only want to drag the inner header text\n const isDragElm = (<HTMLElement>event.target).classList.contains('draggable');\n\n if (isDragElm && (this.dragX || this.dragY)) {\n event.preventDefault();\n this.isDragging = true;\n\n const mouseDownPos = getPositionFromEvent(event);\n\n const mouseup = fromEvent<MouseEvent | TouchEvent>(\n document,\n isMouse ? 'mouseup' : 'touchend'\n );\n this.subscription = mouseup.subscribe(ev => this.onMouseup(ev));\n\n const mouseMoveSub = fromEvent<MouseEvent | TouchEvent>(\n document,\n isMouse ? 'mousemove' : 'touchmove'\n )\n .pipe(takeUntil(mouseup))\n .subscribe(ev => this.move(ev, mouseDownPos));\n\n this.subscription.add(mouseMoveSub);\n\n this.dragStart.emit({\n event,\n element: this.element,\n model: this.dragModel\n });\n }\n }\n\n move(event: MouseEvent | TouchEvent, mouseDownPos: { clientX: number; clientY: number }): void {\n if (!this.isDragging) {\n return;\n }\n\n const { clientX, clientY } = getPositionFromEvent(event);\n const x = clientX - mouseDownPos.clientX;\n const y = clientY - mouseDownPos.clientY;\n\n if (this.dragX) {\n this.element.style.left = `${x}px`;\n }\n if (this.dragY) {\n this.element.style.top = `${y}px`;\n }\n\n this.element.classList.add('dragging');\n\n this.dragging.emit({\n event,\n element: this.element,\n model: this.dragModel\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 Component,\n Directive,\n inject,\n InjectionToken,\n Injector,\n Input,\n OnInit,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RowOrGroup } from '../../types/public.types';\n\n/**\n * This component is passed as ng-template and rendered by BodyComponent.\n * BodyComponent uses rowDefInternal to first inject actual row template.\n * This component will render that actual row template.\n */\n@Component({\n selector: 'datatable-row-def',\n template: `@if (rowDef.rowDefInternal.rowTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"rowDef.rowDefInternal.rowTemplate\"\n [ngTemplateOutletContext]=\"rowContext\"\n />\n }`,\n imports: [NgTemplateOutlet]\n})\nexport class DatatableRowDefComponent {\n rowDef = inject(RowDefToken);\n rowContext = {\n ...this.rowDef.rowDefInternal,\n disabled: this.rowDef.rowDefInternalDisabled\n };\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 @Input() rowDefInternal!: RowDefContext;\n @Input() rowDefInternalDisabled?: 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: RowDefToken,\n useValue: this\n }\n ]\n })\n }\n );\n }\n}\nconst RowDefToken = new InjectionToken<DatatableRowDefInternalDirective>('RowDef');\ntype RowDefContext = {\n template: TemplateRef<unknown>;\n rowTemplate: TemplateRef<unknown>;\n row: RowOrGroup<unknown>;\n index: number;\n};\n","import { InjectionToken } from '@angular/core';\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 DatatableComponentToken = new InjectionToken<DatatableComponent>(\n 'DatatableComponentToken'\n);\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostListener,\n inject,\n Input,\n IterableDiffer,\n IterableDiffers,\n KeyValueDiffer,\n KeyValueDiffers,\n OnChanges,\n OnInit,\n Output,\n signal,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DatatableComponentToken } from '../../utils/table-token';\nimport { Group, GroupContext, Row, RowDetailContext, RowOrGroup } from '../../types/public.types';\nimport { DatatableGroupHeaderDirective } from './body-group-header.directive';\nimport { DatatableRowDetailDirective } from '../row-detail/row-detail.directive';\n\n@Component({\n selector: 'datatable-row-wrapper',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (isGroup(row) && groupHeader?.template) {\n <div\n class=\"datatable-group-header\"\n [style.height.px]=\"groupHeaderRowHeight\"\n [style.width.px]=\"innerWidth\"\n >\n <div class=\"datatable-group-cell\">\n @if (groupHeader!.checkboxable) {\n <div>\n <label class=\"datatable-checkbox\">\n <input\n #select\n type=\"checkbox\"\n [checked]=\"selectedGroupRows().length === row.value.length\"\n (change)=\"onCheckboxChange(select.checked, row)\"\n />\n </label>\n </div>\n }\n <ng-template\n [ngTemplateOutlet]=\"groupHeader!.template!\"\n [ngTemplateOutletContext]=\"context\"\n >\n </ng-template>\n </div>\n </div>\n } @if ((groupHeader?.template && expanded) || !groupHeader || !groupHeader.template) {\n <ng-content> </ng-content>\n } @if (rowDetail?.template && expanded) {\n <div [style.height.px]=\"detailRowHeight\" class=\"datatable-row-detail\">\n <ng-template [ngTemplateOutlet]=\"rowDetail!.template!\" [ngTemplateOutletContext]=\"context\">\n </ng-template>\n </div>\n }\n `,\n host: {\n class: 'datatable-row-wrapper'\n },\n styleUrl: './body-row-wrapper.component.scss',\n imports: [NgTemplateOutlet]\n})\nexport class DataTableRowWrapperComponent<TRow extends Row = any>\n implements DoCheck, OnInit, OnChanges\n{\n @ViewChild('select') checkBoxInput!: ElementRef<HTMLInputElement>;\n @Input() innerWidth!: number;\n @Input() rowDetail?: DatatableRowDetailDirective;\n @Input() groupHeader?: DatatableGroupHeaderDirective;\n @Input() offsetX!: number;\n @Input() detailRowHeight!: number;\n @Input() groupHeaderRowHeight!: number;\n @Input() row!: RowOrGroup<TRow>;\n @Input() groupedRows?: Group<TRow>[];\n @Input() selected!: TRow[];\n @Input() disabled?: boolean;\n @Output() rowContextmenu = new EventEmitter<{\n event: MouseEvent;\n row: RowOrGroup<TRow>;\n }>(false);\n\n @Input() rowIndex!: number;\n\n selectedGroupRows = signal<TRow[]>([]);\n\n @Input({ transform: booleanAttribute }) expanded = false;\n\n context!: RowDetailContext<TRow> | GroupContext<TRow>;\n\n private rowDiffer: KeyValueDiffer<keyof RowOrGroup<TRow>, any> = inject(KeyValueDiffers)\n .find({})\n .create();\n private iterableDiffers = inject(IterableDiffers);\n private selectedRowsDiffer!: IterableDiffer<TRow>;\n private tableComponent = inject(DatatableComponentToken);\n private cd = inject(ChangeDetectorRef);\n\n ngOnInit(): void {\n this.selectedRowsDiffer = this.iterableDiffers.find(this.selected ?? []).create();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['row']) {\n // this component renders either a group header or a row. Never both.\n if (this.isGroup(this.row)) {\n this.context = {\n group: this.row,\n expanded: this.expanded,\n rowIndex: this.rowIndex\n };\n } else {\n this.context = {\n row: this.row,\n expanded: this.expanded,\n rowIndex: this.rowIndex,\n disabled: this.disabled\n };\n }\n }\n if (changes['rowIndex']) {\n this.context.rowIndex = this.rowIndex;\n }\n if (changes['expanded']) {\n this.context.expanded = this.expanded;\n }\n }\n\n ngDoCheck(): void {\n if (this.rowDiffer.diff(this.row)) {\n if ('group' in this.context) {\n this.context.group = this.row as Group<TRow>;\n } else {\n this.context.row = this.row as TRow;\n }\n this.cd.markForCheck();\n }\n // When groupheader is used with chechbox we use iterableDiffer\n // on currently selected rows to check if it is modified\n // if any of the row of this group is not present in `selected` rows array\n // mark group header checkbox state as indeterminate\n if (\n this.isGroup(this.row) &&\n this.groupHeader?.checkboxable &&\n this.selectedRowsDiffer.diff(this.selected)\n ) {\n const thisRow = this.row;\n const selectedRows = this.selected.filter(row =>\n thisRow.value.find((item: TRow) => item === row)\n );\n if (this.checkBoxInput) {\n if (selectedRows.length && selectedRows.length !== this.row.value.length) {\n this.checkBoxInput.nativeElement.indeterminate = true;\n } else {\n this.checkBoxInput.nativeElement.indeterminate = false;\n }\n }\n this.selectedGroupRows.set(selectedRows);\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextmenu($event: MouseEvent): void {\n this.rowContextmenu.emit({ event: $event, row: this.row });\n }\n\n onCheckboxChange(groupSelected: boolean, group: Group<TRow>): void {\n // First remove all rows of this group from `selected`\n this.selected = [\n ...this.selected.filter(row => !group.value.find((item: TRow) => item === row))\n ];\n // If checkbox is checked then add all rows of this group in `selected`\n if (groupSelected) {\n this.selected = [...this.selected, ...group.value];\n }\n // Update `selected` of DatatableComponent with newly evaluated `selected`\n this.tableComponent.selected = [...this.selected];\n // Emit select event with updated values\n this.tableComponent.onBodySelect({\n selected: this.selected\n });\n }\n\n isGroup(row: RowOrGroup<TRow>): row is Group<TRow> {\n return !!this.groupHeader;\n }\n}\n","import { Component, Input, OnChanges } from '@angular/core';\nimport { DataTableBodyRowComponent } from '../body-row.component';\nimport { TableColumnInternal } from '../../../types/internal.types';\n\nfunction 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\nfunction noopSumFunc(cells: any[]): void {\n return;\n}\n\n@Component({\n selector: 'datatable-summary-row',\n template: `\n @if (summaryRow && _internalColumns) {\n <datatable-body-row\n tabindex=\"-1\"\n [innerWidth]=\"innerWidth\"\n [columns]=\"_internalColumns\"\n [rowHeight]=\"rowHeight\"\n [row]=\"summaryRow\"\n [rowIndex]=\"{ index: -1 }\"\n >\n </datatable-body-row>\n }\n `,\n host: {\n class: 'datatable-summary-row'\n },\n imports: [DataTableBodyRowComponent]\n})\nexport class DataTableSummaryRowComponent implements OnChanges {\n @Input() rows!: any[];\n @Input() columns!: TableColumnInternal[];\n\n @Input() rowHeight!: number;\n @Input() innerWidth!: number;\n\n _internalColumns!: TableColumnInternal[];\n summaryRow: any = {};\n\n ngOnChanges() {\n if (!this.columns.length || !this.rows.length) {\n return;\n }\n this.updateInternalColumns();\n this.updateValues();\n }\n\n private updateInternalColumns() {\n this._internalColumns = this.columns.map(col => ({\n ...col,\n cellTemplate: col.summaryTemplate\n }));\n }\n\n private updateValues() {\n this.summaryRow = {};\n\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 this.summaryRow[col.prop!] = col.pipe\n ? col.pipe.transform(sumFunc(cellsFromSingleColumn))\n : sumFunc(cellsFromSingleColumn);\n });\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 {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n Input,\n numberAttribute\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { TableColumnInternal } from '../../../types/internal.types';\n\n@Component({\n selector: `ghost-loader`,\n templateUrl: `./ghost-loader.component.html`,\n styleUrls: [`./ghost-loader.component.scss`],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet]\n})\nexport class DataTableGhostLoaderComponent {\n @Input() columns!: TableColumnInternal[];\n @Input({ transform: numberAttribute }) pageSize!: number;\n @Input() rowHeight!: number | 'auto' | ((row?: any) => number);\n @Input({ transform: numberAttribute }) ghostBodyHeight?: number;\n @Input({ transform: booleanAttribute }) cellMode = false;\n}\n","<div [style.height.px]=\"ghostBodyHeight\" class=\"ghost-loader ghost-cell-container\">\n @for (item of [].constructor(pageSize); track item) {\n <div [style.height.px]=\"rowHeight\" class=\"ghost-element\" [class.datatable-body-row]=\"cellMode\">\n @for (col of columns; track col) {\n <div class=\"ghost-cell\" [class.datatable-body-cell]=\"cellMode\" [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\"></ng-template>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { Directive } from '@angular/core';\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","export function 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 function selectRowsBetween<TRow>(\n selected: TRow[],\n rows: (TRow | undefined)[],\n index: number,\n prevIndex: number\n): TRow[] {\n const reverse = index < prevIndex;\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: 0, end: 0 };\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 in the positive range to be added to `selected`, and\n // not already in the selected array, add it\n if (i >= range.start && i <= range.end && row) {\n selected.push(row);\n }\n }\n }\n\n return selected;\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n signal,\n TemplateRef,\n TrackByFunction,\n ViewChild\n} from '@angular/core';\nimport { ScrollerComponent } from './scroller.component';\nimport { columnGroupWidths, columnsByPin } from '../../utils/column';\nimport { RowHeightCache } from '../../utils/row-height-cache';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DatatableGroupHeaderDirective } from './body-group-header.directive';\nimport { DatatableRowDetailDirective } from '../row-detail/row-detail.directive';\nimport { DataTableBodyRowComponent } from './body-row.component';\nimport { ColumnGroupWidth, TableColumnInternal } from '../../types/internal.types';\nimport {\n ActivateEvent,\n DragEventData,\n Group,\n Row,\n RowOrGroup,\n ScrollEvent,\n SelectEvent,\n SelectionType\n} from '../../types/public.types';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { DatatableRowDefInternalDirective } from './body-row-def.component';\nimport { DataTableRowWrapperComponent } from './body-row-wrapper.component';\nimport { DataTableSummaryRowComponent } from './summary/summary-row.component';\nimport { DataTableGhostLoaderComponent } from './ghost-loader/ghost-loader.component';\nimport { DatatableBodyRowDirective } from './body-row.directive';\nimport { selectRows, selectRowsBetween } from '../../utils/selection';\nimport { Keys } from '../../utils/keys';\n\n@Component({\n selector: 'datatable-body',\n template: `\n @if (loadingIndicator) {\n <div class=\"custom-loading-indicator-wrapper\">\n <div class=\"custom-loading-content\">\n <ng-content select=\"[loading-indicator]\"></ng-content>\n </div>\n </div>\n }\n @if (ghostLoadingIndicator && (!rowCount || !virtualization || !scrollbarV)) {\n <ghost-loader\n class=\"ghost-overlay\"\n [columns]=\"columns\"\n [pageSize]=\"pageSize\"\n [rowHeight]=\"rowHeight\"\n [ghostBodyHeight]=\"bodyHeight\"\n >\n </ghost-loader>\n }\n @if (rows.length) {\n <datatable-scroller\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [scrollHeight]=\"scrollHeight()\"\n [scrollWidth]=\"columnGroupWidths?.total\"\n (scroll)=\"onBodyScroll($event)\"\n >\n @if (summaryRow && summaryPosition === 'top') {\n <datatable-summary-row\n [rowHeight]=\"summaryHeight\"\n [innerWidth]=\"innerWidth\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n >\n </datatable-summary-row>\n }\n <ng-template\n ngx-datatable-body-row\n #bodyRow\n let-row=\"row\"\n let-index=\"index\"\n let-indexInGroup=\"indexInGroup\"\n let-groupedRows=\"groupedRows\"\n let-disabled=\"disabled\"\n >\n <datatable-body-row\n role=\"row\"\n tabindex=\"-1\"\n #rowElement\n [disabled]=\"disabled\"\n [isSelected]=\"getRowSelected(row)\"\n [innerWidth]=\"innerWidth\"\n [columns]=\"columns\"\n [rowHeight]=\"getRowHeight(row)\"\n [row]=\"row\"\n [group]=\"groupedRows\"\n [rowIndex]=\"{ index: index, indexInGroup: indexInGroup }\"\n [expanded]=\"getRowExpanded(row)\"\n [rowClass]=\"rowClass\"\n [displayCheck]=\"displayCheck\"\n [treeStatus]=\"row?.treeStatus\"\n [draggable]=\"rowDraggable\"\n [verticalScrollVisible]=\"verticalScrollVisible\"\n (treeAction)=\"onTreeAction(row)\"\n (activate)=\"onActivate($event, index)\"\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-body-row>\n </ng-template>\n\n <div [style.transform]=\"renderOffset()\">\n @for (group of rowsToRender(); track rowTrackingFn(i, group); let i = $index) {\n @if (!group && ghostLoadingIndicator) {\n <ghost-loader cellMode [columns]=\"columns\" [pageSize]=\"1\" [rowHeight]=\"rowHeight\" />\n } @else if (group) {\n @let disabled = isRow(group) && disableRowCheck && disableRowCheck(group);\n <!-- $any(group) is needed as the typing is broken and the feature as well. See #147. -->\n <!-- FIXME: This has to be revisited and fixed. -->\n <datatable-row-wrapper\n [attr.hidden]=\"\n ghostLoadingIndicator && (!rowCount || !virtualization || !scrollbarV)\n ? true\n : null\n \"\n [groupedRows]=\"groupedRows\"\n [innerWidth]=\"innerWidth\"\n [style.width]=\"groupedRows ? columnGroupWidths.total : undefined\"\n [rowDetail]=\"rowDetail\"\n [groupHeader]=\"groupHeader\"\n [offsetX]=\"offsetX\"\n [detailRowHeight]=\"getDetailRowHeight(group && $any(group)[i], i)\"\n [groupHeaderRowHeight]=\"getGroupHeaderRowHeight(group && $any(group)[i], i)\"\n [row]=\"group\"\n [disabled]=\"disabled\"\n [expanded]=\"getRowExpanded(group)\"\n [rowIndex]=\"indexes().first + i\"\n [selected]=\"selected\"\n (rowContextmenu)=\"rowContextmenu.emit($event)\"\n >\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: indexes().first + i,\n disabled\n }\"\n ></ng-container>\n }\n }\n\n @if (isGroup(group)) {\n <!-- The row typecast is due to angular compiler acting weird. It is obvious that it is of type TRow, but the compiler does not understand. -->\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: indexes().first + i,\n indexInGroup: $index,\n disabled\n }\"\n ></ng-container>\n }\n }\n </datatable-row-wrapper>\n }\n }\n </div>\n </datatable-scroller>\n @if (summaryRow && summaryPosition === 'bottom') {\n <datatable-summary-row\n role=\"row\"\n [rowHeight]=\"summaryHeight\"\n [innerWidth]=\"innerWidth\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n >\n </datatable-summary-row>\n }\n }\n @if (!rows?.length && !loadingIndicator && !ghostLoadingIndicator) {\n <datatable-scroller\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [scrollHeight]=\"scrollHeight()\"\n [style.width]=\"scrollbarH ? columnGroupWidths?.total + 'px' : '100%'\"\n (scroll)=\"onBodyScroll($event)\"\n >\n <ng-content select=\"[empty-content]\"></ng-content>\n </datatable-scroller>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'datatable-body'\n },\n styleUrl: './body.component.scss',\n imports: [\n DataTableGhostLoaderComponent,\n ScrollerComponent,\n DataTableSummaryRowComponent,\n DataTableRowWrapperComponent,\n DatatableRowDefInternalDirective,\n DataTableBodyRowComponent,\n DraggableDirective,\n NgTemplateOutlet,\n DatatableBodyRowDirective\n ]\n})\nexport class DataTableBodyComponent<TRow extends Row = any> implements OnInit, OnDestroy {\n cd = inject(ChangeDetectorRef);\n\n @Input() rowDefTemplate?: TemplateRef<any>;\n @Input() scrollbarV?: boolean;\n @Input() scrollbarH?: boolean;\n @Input() loadingIndicator?: boolean;\n @Input() ghostLoadingIndicator?: boolean;\n @Input() externalPaging?: boolean;\n @Input() rowHeight!: number | 'auto' | ((row?: any) => number);\n @Input() offsetX!: number;\n @Input() selectionType?: SelectionType;\n @Input() selected: any[] = [];\n @Input() rowIdentity!: (x: RowOrGroup<TRow>) => unknown;\n @Input() rowDetail?: DatatableRowDetailDirective;\n @Input() groupHeader?: DatatableGroupHeaderDirective;\n @Input() selectCheck?: (value: TRow, index: number, array: TRow[]) => boolean;\n @Input() displayCheck?: (row: TRow, column: TableColumnInternal, value?: any) => boolean;\n @Input() trackByProp?: string;\n @Input() rowClass?: (row: TRow) => string | Record<string, boolean>;\n @Input() groupedRows?: Group<TRow>[];\n @Input() groupExpansionDefault?: boolean;\n @Input() innerWidth!: number;\n @Input() groupRowsBy?: keyof TRow;\n @Input() virtualization?: boolean;\n @Input() summaryRow?: boolean;\n @Input() summaryPosition!: string;\n @Input() summaryHeight!: number;\n @Input() rowDraggable?: boolean;\n @Input() rowDragEvents!: EventEmitter<DragEventData>;\n @Input() disableRowCheck?: (row: TRow) => boolean | undefined;\n\n @Input() set pageSize(val: number) {\n if (val !== this._pageSize) {\n this._pageSize = val;\n this.recalcLayout();\n\n // Emits the page event if page size has been changed\n this._offsetEvent = -1;\n this.updatePage('up');\n this.updatePage('down');\n }\n }\n\n get pageSize(): number {\n return this._pageSize;\n }\n\n @Input() set rows(val: (TRow | undefined)[]) {\n if (val !== this._rows) {\n this._rows = val;\n this.recalcLayout();\n }\n }\n\n get rows(): (TRow | undefined)[] {\n return this._rows;\n }\n\n @Input() set columns(val: TableColumnInternal[]) {\n if (val !== this._columns) {\n this._columns = val;\n this.updateColumnGroupWidths();\n }\n }\n\n get columns(): any[] {\n return this._columns;\n }\n\n @Input() set offset(val: number) {\n if (val !== this._offset) {\n this._offset = val;\n if (!this.scrollbarV || (this.scrollbarV && !this.virtualization)) {\n this.recalcLayout();\n }\n }\n }\n\n get offset(): number {\n return this._offset;\n }\n\n @Input() set rowCount(val: number) {\n if (val !== this._rowCount) {\n this._rowCount = val;\n this.recalcLayout();\n }\n }\n\n get rowCount(): number {\n return this._rowCount;\n }\n\n @HostBinding('style.width')\n get bodyWidth(): string {\n if (this.scrollbarH) {\n return this.innerWidth + 'px';\n } else {\n return '100%';\n }\n }\n\n @Input()\n @HostBinding('style.height')\n set bodyHeight(val: number | string) {\n if (this.scrollbarV) {\n this._bodyHeight = val + 'px';\n } else {\n this._bodyHeight = 'auto';\n }\n\n this.recalcLayout();\n }\n\n get bodyHeight() {\n return this._bodyHeight;\n }\n\n @Input() verticalScrollVisible = false;\n\n @Output() scroll = new EventEmitter<ScrollEvent>();\n @Output() page = new EventEmitter<number>();\n @Output() activate = new EventEmitter<ActivateEvent<TRow>>();\n @Output() select = new EventEmitter<SelectEvent<TRow>>();\n @Output() rowContextmenu = new EventEmitter<{ event: MouseEvent; row: RowOrGroup<TRow> }>(false);\n @Output() treeAction: EventEmitter<{ row: TRow }> = new EventEmitter();\n\n @ViewChild(ScrollerComponent) scroller!: ScrollerComponent;\n\n /**\n * Returns if selection is enabled.\n */\n get selectEnabled(): boolean {\n return !!this.selectionType;\n }\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 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 rowsToRender = computed(() => {\n return this.updateRows();\n });\n rowHeightsCache = signal(new RowHeightCache());\n offsetY = 0;\n indexes = signal<{ first: number; last: number }>({ first: 0, last: 0 });\n columnGroupWidths!: ColumnGroupWidth;\n rowTrackingFn: TrackByFunction<RowOrGroup<TRow> | undefined>;\n listener: any;\n rowExpansions: any[] = [];\n\n _rows!: (TRow | undefined)[];\n _bodyHeight!: string;\n _columns!: TableColumnInternal[];\n _rowCount!: number;\n _offset!: number;\n _pageSize!: number;\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 if (this.trackByProp && row) {\n return (row as any)[this.trackByProp];\n } else {\n return row;\n }\n };\n }\n\n /**\n * Called after the constructor, initializing input properties\n */\n ngOnInit(): void {\n if (this.rowDetail) {\n this.listener = this.rowDetail.toggle.subscribe(\n ({ type, value }: { type: string; value: any }) => this.toggleStateChange(type, value)\n );\n }\n\n if (this.groupHeader) {\n this.listener = this.groupHeader.toggle.subscribe(\n ({ type, value }: { type: string; value: any }) => {\n // Remove default expansion state once user starts manual toggle.\n this.groupExpansionDefault = false;\n this.toggleStateChange(type, value);\n }\n );\n }\n }\n\n private toggleStateChange(type: string, value: any) {\n if (type === 'group' || type === 'row') {\n this.toggleRowExpansion(value);\n }\n if (type === 'all') {\n this.toggleAllRows(value);\n }\n\n // Refresh rows after toggle\n // Fixes #883\n this.updateIndexes();\n this.cd.markForCheck();\n }\n\n /**\n * Called once, before the instance is destroyed.\n */\n ngOnDestroy(): void {\n if (this.rowDetail || this.groupHeader) {\n this.listener.unsubscribe();\n }\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 if (!this.scroller) {\n return;\n }\n\n if (this.scrollbarV && this.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 && !this.virtualization) {\n offset = 0;\n }\n\n this.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 = scrollYPos;\n this.offsetX = scrollXPos;\n\n this.updateIndexes();\n this.updatePage(event.direction);\n this.cd.detectChanges();\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 rows = this.groupedRows\n ? this.groupedRows.slice(first, Math.min(last, this.groupedRows.length))\n : this.rows.slice(first, Math.min(last, this.rowCount));\n\n rows.length = last - first;\n return rows;\n }\n\n /**\n * Get the row height\n */\n getRowHeight(row: RowOrGroup<TRow>): number {\n // if its a function return it\n if (typeof this.rowHeight === 'function') {\n return this.rowHeight(row);\n }\n\n return this.rowHeight as number;\n }\n\n /**\n * @param group the group with all rows\n */\n getGroupHeight(group: Group<TRow>): number {\n let rowHeight = 0;\n\n if (group.value) {\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let index = 0; index < group.value.length; index++) {\n rowHeight += this.getRowAndDetailHeight(group.value[index]);\n }\n }\n\n return rowHeight;\n }\n\n /**\n * Calculate row height based on the expanded state of the row.\n */\n getRowAndDetailHeight(row: TRow): number {\n let rowHeight = this.getRowHeight(row);\n const expanded = this.getRowExpanded(row);\n\n // Adding detail row height if its expanded.\n if (expanded) {\n rowHeight += this.getDetailRowHeight(row);\n }\n\n return rowHeight;\n }\n\n /**\n * Get the height of the detail row.\n */\n getDetailRowHeight = (row?: TRow, index?: number): number => {\n if (!this.rowDetail) {\n return 0;\n }\n const rowHeight = this.rowDetail.rowHeight;\n return typeof rowHeight === 'function' ? rowHeight(row, index) : (rowHeight as number);\n };\n\n getGroupHeaderRowHeight = (row?: any, index?: any): number => {\n if (!this.groupHeader) {\n return 0;\n }\n const rowHeight =\n this.groupHeader?.rowHeight === 0 ? this.rowHeight : this.groupHeader?.rowHeight;\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 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 updateIndexes(): void {\n let first = 0;\n let last = 0;\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 } else {\n // If virtual rows are not needed\n // We render all in one go\n first = 0;\n last = this.rowCount;\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 this.indexes.set({ 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 refreshRowHeightCache(): void {\n if (!this.scrollbarV || (this.scrollbarV && !this.virtualization)) {\n return;\n }\n\n // clear the previous row height cache if already present.\n // this is useful during sorts, filters where the state of the\n // rows array is changed.\n this.rowHeightsCache().clearCache();\n\n // Initialize the tree only if there are rows inside the tree.\n if (this.rows.length) {\n const rowExpansions = new Set<TRow>();\n if (this.rowDetail) {\n for (const row of this.rows) {\n if (row && this.getRowExpanded(row)) {\n rowExpansions.add(row);\n }\n }\n }\n\n this.rowHeightsCache().initCache({\n rows: this.rows,\n rowHeight: this.rowHeight,\n detailRowHeight: this.getDetailRowHeight,\n externalVirtual: this.scrollbarV && this.externalPaging,\n indexOffset: this.indexes().first,\n rowCount: this.rowCount,\n rowExpansions\n });\n this.rowHeightsCache.set(Object.create(this.rowHeightsCache()));\n }\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.getRowExpandedIdx(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.splice(rowExpandedIdx, 1);\n } else {\n this.rowExpansions.push(row);\n }\n\n // If the detailRowHeight is auto --> only in case of non-virtualized scroll\n if (this.scrollbarV && this.virtualization) {\n this.refreshRowHeightCache();\n }\n }\n\n /**\n * Expand/Collapse all the rows no matter what their state is.\n */\n toggleAllRows(expanded: boolean): void {\n // clear prev expansions\n this.rowExpansions = [];\n\n const rows = this.groupedRows ?? this.rows;\n if (expanded) {\n for (const row of rows) {\n this.rowExpansions.push(row);\n }\n }\n\n if (this.scrollbarV) {\n // Refresh the full row heights cache since every row was affected.\n this.recalcLayout();\n }\n }\n\n /**\n * Recalculates the table\n */\n recalcLayout(): void {\n this.refreshRowHeightCache();\n this.updateIndexes();\n }\n\n /**\n * Returns if the row was expanded and set default row expansion when row expansion is empty\n */\n getRowExpanded(row: RowOrGroup<TRow>): boolean {\n if (this.rowExpansions.length === 0 && this.groupExpansionDefault) {\n for (const group of this.groupedRows!) {\n this.rowExpansions.push(group);\n }\n }\n\n return this.getRowExpandedIdx(row, this.rowExpansions) > -1;\n }\n\n getRowExpandedIdx(row: RowOrGroup<TRow>, expanded: RowOrGroup<TRow>[]): number {\n if (!expanded || !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 updateColumnGroupWidths() {\n const colsByPin = columnsByPin(this._columns);\n this.columnGroupWidths = columnGroupWidths(colsByPin, this._columns);\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 === SelectionType.checkbox;\n const multi = this.selectionType === SelectionType.multi;\n const multiClick = this.selectionType === 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) {\n selected = selectRowsBetween([], this.rows, index, this.prevIndex!);\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 if (typeof this.selectCheck === 'function') {\n selected = selected.filter(this.selectCheck.bind(this));\n }\n\n if (typeof this.disableRowCheck === 'function') {\n selected = selected.filter(rowData => !this.disableRowCheck!(rowData));\n }\n\n this.selected.splice(0, this.selected.length);\n this.selected.push(...selected);\n\n this.prevIndex = index;\n\n this.select.emit({\n selected\n });\n }\n\n onActivate(model: ActivateEvent<TRow>, index: number): void {\n const { type, event, row } = model;\n const chkbox = this.selectionType === 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 === Keys.return) {\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(model);\n }\n }\n this.activate.emit(model);\n }\n\n onKeyboardFocus(model: ActivateEvent<TRow>): void {\n const { key } = model.event as KeyboardEvent;\n const shouldFocus =\n key === Keys.up || key === Keys.down || key === Keys.right || key === Keys.left;\n\n if (shouldFocus) {\n const isCellSelection = this.selectionType === SelectionType.cell;\n if (typeof this.disableRowCheck === 'function') {\n const isRowDisabled = this.disableRowCheck(model.row);\n if (isRowDisabled) {\n return;\n }\n }\n if (!model.cellElement || !isCellSelection) {\n this.focusRow(model.rowElement, key);\n } else if (isCellSelection && model.cellIndex !== undefined) {\n this.focusCell(model.cellElement, model.rowElement, key, model.cellIndex);\n }\n }\n }\n\n focusRow(rowElement: HTMLElement, key: Keys): void {\n const nextRowElement = this.getPrevNextRow(rowElement, key);\n if (nextRowElement) {\n nextRowElement.focus();\n }\n }\n\n getPrevNextRow(rowElement: HTMLElement, key: Keys): any {\n const parentElement = rowElement.parentElement;\n\n if (parentElement) {\n let focusElement: Element | null = null;\n if (key === Keys.up) {\n focusElement = parentElement.previousElementSibling;\n } else if (key === Keys.down) {\n focusElement = parentElement.nextElementSibling;\n }\n\n if (focusElement && focusElement.children.length) {\n return focusElement.children[0];\n }\n }\n }\n\n focusCell(cellElement: HTMLElement, rowElement: HTMLElement, key: Keys, cellIndex: number): void {\n let nextCellElement: Element | null = null;\n\n if (key === Keys.left) {\n nextCellElement = cellElement.previousElementSibling;\n } else if (key === Keys.right) {\n nextCellElement = cellElement.nextElementSibling;\n } else if (key === Keys.up || key === Keys.down) {\n const nextRowElement = this.getPrevNextRow(rowElement, key);\n if (nextRowElement) {\n const children = nextRowElement.getElementsByClassName('datatable-body-cell');\n if (children.length) {\n nextCellElement = children[cellIndex];\n }\n }\n }\n\n if (\n nextCellElement &&\n 'focus' in nextCellElement &&\n typeof nextCellElement.focus === 'function'\n ) {\n nextCellElement.focus();\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 || !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\n protected isGroup(row: RowOrGroup<TRow>[]): row is Group<TRow>[];\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 { DOCUMENT, inject, Injectable } from '@angular/core';\n\n/**\n * Gets the width of the scrollbar. Nesc for windows\n * http://stackoverflow.com/a/13382873/888165\n */\n@Injectable({ providedIn: 'root' })\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 booleanAttribute,\n Directive,\n EventEmitter,\n Input,\n numberAttribute,\n OnDestroy,\n Output,\n signal\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { TableColumnInternal } from '../types/internal.types';\n\n@Directive({\n selector: '[long-press]',\n host: {\n '(touchstart)': 'onMouseDown($event)',\n '(mousedown)': 'onMouseDown($event)',\n '[class.press]': 'pressing()',\n '[class.longpress]': 'isLongPressing()'\n }\n})\nexport class LongPressDirective implements OnDestroy {\n @Input({ transform: booleanAttribute }) pressEnabled = true;\n @Input() pressModel!: TableColumnInternal;\n @Input({ transform: numberAttribute }) duration = 500;\n\n @Output() longPressStart = new EventEmitter<{\n event: MouseEvent | TouchEvent;\n model: TableColumnInternal;\n }>();\n @Output() longPressEnd = new EventEmitter<{ model: TableColumnInternal }>();\n\n pressing = signal(false);\n isLongPressing = signal(false);\n timeout: any;\n\n subscription?: Subscription;\n\n onMouseDown(event: MouseEvent | TouchEvent): void {\n const isMouse = event instanceof MouseEvent;\n\n // don't do right/middle clicks\n if (!this.pressEnabled || (isMouse && event.button !== 0)) {\n return;\n }\n\n // don't start drag if its on resize handle\n const target = event.target as HTMLElement;\n if (target.classList.contains('resize-handle')) {\n return;\n }\n\n this.pressing.set(true);\n this.isLongPressing.set(false);\n\n const mouseup = fromEvent(document, isMouse ? 'mouseup' : 'touchend');\n this.subscription = mouseup.subscribe(() => this.endPress());\n\n this.timeout = setTimeout(() => {\n this.isLongPressing.set(true);\n this.longPressStart.emit({\n event,\n model: this.pressModel\n });\n }, this.duration);\n }\n\n endPress(): void {\n clearTimeout(this.timeout);\n this.isLongPressing.set(false);\n this.pressing.set(false);\n this._destroySubscription();\n\n this.longPressEnd.emit({\n model: this.pressModel\n });\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeout);\n this._destroySubscription();\n }\n\n private _destroySubscription(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = undefined;\n }\n }\n}\n","import { getterForProp } from './column-prop-getters';\nimport { Group, SortDirection, SortPropDir, SortType } from '../types/public.types';\nimport { TableColumnProp } from '../types/table-column.type';\nimport { SortableTableColumnInternal, TableColumnInternal } from '../types/internal.types';\n\n/**\n * Gets the next sort direction\n */\nexport function nextSortDir(\n sortType: SortType,\n current: SortDirection | 'desc' | 'asc' | undefined\n): SortDirection | undefined {\n if (sortType === SortType.single) {\n if (current === SortDirection.asc) {\n return SortDirection.desc;\n } else {\n return SortDirection.asc;\n }\n } else {\n if (!current) {\n return SortDirection.asc;\n } else if (current === SortDirection.asc) {\n return SortDirection.desc;\n } else if (current === SortDirection.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 function 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 function sortRows<TRow>(\n rows: TRow[],\n columns: TableColumnInternal[],\n dirs: SortPropDir[]\n): TRow[] {\n if (!rows) {\n return [];\n }\n if (!dirs || !dirs.length || !columns) {\n return [...rows];\n }\n\n const temp = [...rows];\n const cols = columns.reduce((obj, col) => {\n if (col.sortable) {\n obj[col.prop] = col.comparator;\n }\n return obj;\n }, {} as Record<TableColumnProp, SortableTableColumnInternal['comparator']>);\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 const prop = dir.prop;\n return {\n prop,\n dir: dir.dir,\n valueGetter: getterForProp(prop),\n compareFn: cols[prop]\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 !== SortDirection.desc\n ? cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir)\n : -cachedDir.compareFn(propA, propB, rowA, rowB, cachedDir.dir);\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 function 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, [\n {\n dir: sortOnGroupHeader.dir,\n prop: 'key'\n }\n ]);\n }\n return groupedRows.map(group => ({ ...group, value: sortRows(group.value, columns, dirs) }));\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n TemplateRef\n} from '@angular/core';\nimport { nextSortDir } from '../../utils/sort';\nimport {\n HeaderCellContext,\n SelectionType,\n SortDirection,\n SortPropDir,\n SortType\n} from '../../types/public.types';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { InnerSortEvent, TableColumnInternal } from '../../types/internal.types';\nimport { fromEvent, Subscription, takeUntil } from 'rxjs';\nimport { getPositionFromEvent } from '../../utils/events';\n\n@Component({\n selector: 'datatable-header-cell',\n template: `\n <div class=\"datatable-header-cell-template-wrap\">\n @if (isTarget) {\n <ng-template\n [ngTemplateOutlet]=\"targetMarkerTemplate!\"\n [ngTemplateOutletContext]=\"targetMarkerContext\"\n >\n </ng-template>\n } @if (isCheckboxable) {\n <label class=\"datatable-checkbox\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected\" (change)=\"select.emit()\" />\n </label>\n } @if (column.headerTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"column.headerTemplate\"\n [ngTemplateOutletContext]=\"cellContext\"\n >\n </ng-template>\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 (click)=\"onSort()\" [class]=\"sortClass\"> </span>\n </div>\n @if (column.resizeable) {\n <span\n class=\"resize-handle\"\n (mousedown)=\"onMousedown($event)\"\n (touchstart)=\"onMousedown($event)\"\n ></span>\n }\n `,\n host: {\n 'class': 'datatable-header-cell',\n '[attr.resizeable]': 'column.resizeable'\n },\n styleUrl: './header-cell.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet]\n})\nexport class DataTableHeaderCellComponent implements OnInit, OnDestroy {\n private cd = inject(ChangeDetectorRef);\n\n @Input() sortType!: SortType;\n @Input() sortAscendingIcon?: string;\n @Input() sortDescendingIcon?: string;\n @Input() sortUnsetIcon?: string;\n\n @Input() isTarget?: boolean;\n @Input() targetMarkerTemplate?: TemplateRef<any>;\n @Input() targetMarkerContext: any;\n @Input() enableClearingSortState = false;\n\n _allRowsSelected?: boolean;\n\n @Input() set allRowsSelected(value) {\n this._allRowsSelected = value;\n this.cellContext.allRowsSelected = value;\n }\n get allRowsSelected() {\n return this._allRowsSelected;\n }\n\n @Input() selectionType?: SelectionType;\n\n @Input() set column(column: TableColumnInternal) {\n this._column = column;\n this.cellContext.column = column;\n this.cd.markForCheck();\n }\n\n get column(): TableColumnInternal {\n return this._column;\n }\n\n @HostBinding('style.height.px')\n @Input()\n headerHeight!: number;\n\n @Input() set sorts(val: SortPropDir[]) {\n this._sorts = val;\n this.sortDir = this.calcSortDir(val);\n this.cellContext.sortDir = this.sortDir;\n this.sortClass = this.calcSortClass(this.sortDir);\n this.cd.markForCheck();\n }\n\n get sorts(): SortPropDir[] {\n return this._sorts;\n }\n\n @Output() sort = new EventEmitter<InnerSortEvent>();\n @Output() select = new EventEmitter<void>();\n @Output() columnContextmenu = new EventEmitter<{\n event: MouseEvent;\n column: TableColumnInternal;\n }>(false);\n @Output() resize = new EventEmitter<{ width: number; column: TableColumnInternal }>();\n @Output() resizing = new EventEmitter<{ width: number; column: TableColumnInternal }>();\n\n @HostBinding('class')\n get columnCssClasses(): string {\n let cls = 'datatable-header-cell';\n\n if (this.column.sortable) {\n cls += ' sortable';\n }\n if (this.column.resizeable) {\n cls += ' resizeable';\n }\n if (this.column.headerClass) {\n if (typeof this.column.headerClass === 'string') {\n cls += ' ' + this.column.headerClass;\n } else if (typeof this.column.headerClass === 'function') {\n const res = this.column.headerClass({\n column: this.column\n });\n\n if (typeof res === 'string') {\n cls += ' ' + res;\n } else if (typeof res === 'object') {\n const keys = Object.keys(res);\n for (const k of keys) {\n if (res[k] === true) {\n cls += ` ${k}`;\n }\n }\n }\n }\n }\n\n const sortDir = this.sortDir;\n if (sortDir) {\n cls += ` sort-active sort-${sortDir}`;\n }\n\n return cls;\n }\n\n @HostBinding('attr.title')\n get name(): string | undefined {\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 @HostBinding('style.minWidth.px')\n get minWidth(): number | undefined {\n return this.column.minWidth;\n }\n\n @HostBinding('style.maxWidth.px')\n get maxWidth(): number | undefined {\n return this.column.maxWidth;\n }\n\n @HostBinding('style.width.px')\n get width(): number {\n return this.column.width;\n }\n\n @HostBinding('tabindex') get tabindex(): number {\n return this.column.sortable ? 0 : -1;\n }\n\n get isCheckboxable(): boolean | undefined {\n return this.column.headerCheckboxable;\n }\n\n sortClass?: string;\n sortDir?: SortDirection;\n\n cellContext: HeaderCellContext;\n\n private _column!: TableColumnInternal;\n private _sorts!: SortPropDir[];\n private element = inject(ElementRef).nativeElement;\n private subscription?: Subscription;\n\n constructor() {\n this.cellContext = {\n column: this.column,\n sortDir: this.sortDir,\n sortFn: () => this.onSort(),\n allRowsSelected: this.allRowsSelected,\n selectFn: () => this.select.emit()\n };\n }\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 this.sortClass = this.calcSortClass(this.sortDir);\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) => {\n return s.prop === this.column.prop;\n });\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,\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 if (sortDir === SortDirection.asc) {\n return `sort-btn sort-asc ${this.sortAscendingIcon ?? 'datatable-icon-up'}`;\n } else if (sortDir === SortDirection.desc) {\n return `sort-btn sort-desc ${this.sortDescendingIcon ?? 'datatable-icon-down'}`;\n } else {\n return `sort-btn ${this.sortUnsetIcon ?? 'datatable-icon-sort-unset'}`;\n }\n }\n\n protected onMousedown(event: MouseEvent | TouchEvent): void {\n const isMouse = event instanceof MouseEvent;\n const initialWidth = this.element.clientWidth;\n const { screenX } = getPositionFromEvent(event);\n event.stopPropagation();\n\n const mouseup = fromEvent<MouseEvent | TouchEvent>(document, isMouse ? 'mouseup' : 'touchend');\n this.subscription = mouseup.subscribe(() => this.onMouseup());\n\n const mouseMoveSub = fromEvent<MouseEvent | TouchEvent>(\n document,\n isMouse ? 'mousemove' : 'touchmove'\n )\n .pipe(takeUntil(mouseup))\n .subscribe((e: MouseEvent | TouchEvent) => this.move(e, initialWidth, screenX));\n\n this.subscription.add(mouseMoveSub);\n }\n\n private onMouseup(): void {\n if (this.subscription && !this.subscription.closed) {\n this.destroySubscription();\n this.resize.emit({ width: this.element.clientWidth, column: this.column });\n }\n }\n\n private move(\n event: MouseEvent | TouchEvent,\n initialWidth: number,\n mouseDownScreenX: number\n ): void {\n const movementX = getPositionFromEvent(event).screenX - mouseDownScreenX;\n const newWidth = initialWidth + movementX;\n this.resizing.emit({ width: newWidth, column: this.column });\n }\n\n private destroySubscription(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n this.subscription = undefined;\n }\n }\n}\n","import {\n AfterContentInit,\n ContentChildren,\n Directive,\n DOCUMENT,\n EventEmitter,\n inject,\n KeyValueChangeRecord,\n KeyValueDiffer,\n KeyValueDiffers,\n OnDestroy,\n Output,\n QueryList\n} from '@angular/core';\nimport { DraggableDirective } from './draggable.directive';\n\nimport {\n DraggableDragEvent,\n ReorderEventInternal,\n TableColumnInternal,\n TargetChangedEvent\n} from '../types/internal.types';\nimport { getPositionFromEvent } from '../utils/events';\n\ninterface OrderPosition {\n left: number;\n right: number;\n index: number;\n element: HTMLElement;\n}\n\n@Directive({\n selector: '[orderable]'\n})\nexport class OrderableDirective implements AfterContentInit, OnDestroy {\n private document = inject(DOCUMENT);\n\n @Output() reorder = new EventEmitter<ReorderEventInternal>();\n @Output() targetChanged = new EventEmitter<TargetChangedEvent>();\n\n @ContentChildren(DraggableDirective, { descendants: true })\n draggables!: QueryList<DraggableDirective>;\n\n positions?: Record<string, OrderPosition>;\n differ: KeyValueDiffer<string, DraggableDirective> = inject(KeyValueDiffers).find({}).create();\n lastDraggingIndex?: number;\n\n ngAfterContentInit(): void {\n // HACK: Investigate Better Way\n this.updateSubscriptions();\n this.draggables.changes.subscribe(this.updateSubscriptions.bind(this));\n }\n\n ngOnDestroy(): void {\n this.draggables.forEach(d => {\n d.dragStart.unsubscribe();\n d.dragging.unsubscribe();\n d.dragEnd.unsubscribe();\n });\n }\n\n updateSubscriptions(): void {\n const diffs = this.differ.diff(this.createMapDiffs());\n\n if (diffs) {\n const subscribe = (record: KeyValueChangeRecord<string, DraggableDirective>) => {\n unsubscribe(record);\n const { currentValue } = record;\n\n if (currentValue) {\n currentValue.dragStart.subscribe(this.onDragStart.bind(this));\n currentValue.dragging.subscribe(this.onDragging.bind(this));\n currentValue.dragEnd.subscribe(this.onDragEnd.bind(this));\n }\n };\n\n const unsubscribe = ({ previousValue }: KeyValueChangeRecord<string, DraggableDirective>) => {\n if (previousValue) {\n previousValue.dragStart.unsubscribe();\n previousValue.dragging.unsubscribe();\n previousValue.dragEnd.unsubscribe();\n }\n };\n\n diffs.forEachAddedItem(subscribe);\n // diffs.forEachChangedItem(subscribe.bind(this));\n diffs.forEachRemovedItem(unsubscribe);\n }\n }\n\n onDragStart(): void {\n this.positions = {};\n\n let i = 0;\n for (const dragger of this.draggables.toArray()) {\n const elm = dragger.element;\n const left = parseInt(elm.offsetLeft.toString(), 0);\n this.positions[dragger.dragModel.$$id] = {\n left,\n right: left + parseInt(elm.offsetWidth.toString(), 0),\n index: i++,\n element: elm\n };\n }\n }\n\n onDragging({ element, model, event }: DraggableDragEvent): void {\n const prevPos = this.positions![model.$$id];\n const target = this.isTarget(model, event);\n\n if (target) {\n if (this.lastDraggingIndex !== target.i) {\n this.targetChanged.emit({\n prevIndex: this.lastDraggingIndex!,\n newIndex: target.i,\n initialIndex: prevPos.index\n });\n this.lastDraggingIndex = target.i;\n }\n } else if (this.lastDraggingIndex !== prevPos.index) {\n this.targetChanged.emit({\n prevIndex: this.lastDraggingIndex!,\n initialIndex: prevPos.index\n });\n this.lastDraggingIndex = prevPos.index;\n }\n }\n\n onDragEnd({ element, model, event }: DraggableDragEvent): void {\n const prevPos = this.positions![model.$$id];\n\n const target = this.isTarget(model, event);\n if (target) {\n this.reorder.emit({\n prevValue: prevPos.index,\n newValue: target.i,\n column: model\n });\n }\n\n this.lastDraggingIndex = undefined;\n element.style.left = 'auto';\n }\n\n isTarget(model: TableColumnInternal, event: MouseEvent | TouchEvent) {\n let i = 0;\n const { clientX, clientY } = getPositionFromEvent(event);\n const targets = this.document.elementsFromPoint(clientX, clientY);\n\n for (const id in this.positions) {\n // current column position which throws event.\n const pos = this.positions[id];\n\n // since we drag the inner span, we need to find it in the elements at the cursor\n if (model.$$id !== id && targets.find((el: any) => el === pos.element)) {\n return {\n pos,\n i\n };\n }\n\n i++;\n }\n }\n\n private createMapDiffs(): Record<string, DraggableDirective> {\n return this.draggables.toArray().reduce((acc, curr) => {\n acc[curr.dragModel.$$id] = curr;\n return acc;\n }, {} as Record<string, DraggableDirective>);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef\n} from '@angular/core';\nimport { columnGroupWidths, columnsByPin, columnsByPinArr } from '../../utils/column';\nimport {\n Row,\n SelectionType,\n SortDirection,\n SortEvent,\n SortPropDir,\n SortType\n} from '../../types/public.types';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { ScrollbarHelper } from '../../services/scrollbar-helper.service';\nimport {\n ColumnResizeEventInternal,\n InnerSortEvent,\n PinnedColumns,\n ReorderEventInternal,\n SortableTableColumnInternal,\n TableColumnInternal,\n TargetChangedEvent\n} from '../../types/internal.types';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { LongPressDirective } from '../../directives/long-press.directive';\nimport { DataTableHeaderCellComponent } from './header-cell.component';\nimport { OrderableDirective } from '../../directives/orderable.directive';\n\n@Component({\n selector: 'datatable-header',\n template: `\n <div\n role=\"row\"\n orderable\n (reorder)=\"onColumnReordered($event)\"\n (targetChanged)=\"onTargetChanged($event)\"\n [style.width.px]=\"_columnGroupWidths.total\"\n class=\"datatable-header-inner\"\n >\n @for (colGroup of _columnsByPin; track colGroup.type) { @if (colGroup.columns.length) {\n <div\n class=\"datatable-row-group\"\n [ngClass]=\"'datatable-row-' + colGroup.type\"\n [ngStyle]=\"_styleByGroup[colGroup.type]\"\n >\n @for (column of colGroup.columns; track column.$$id) {\n <datatable-header-cell\n role=\"columnheader\"\n (resize)=\"onColumnResized($event)\"\n (resizing)=\"onColumnResizing($event)\"\n long-press\n [pressModel]=\"column\"\n [pressEnabled]=\"reorderable && column.draggable\"\n (longPressStart)=\"onLongPressStart($event)\"\n (longPressEnd)=\"onLongPressEnd($event)\"\n draggable\n [dragX]=\"reorderable && column.draggable && column.dragging\"\n [dragY]=\"false\"\n [dragModel]=\"column\"\n [dragEventTarget]=\"dragEventTarget\"\n [headerHeight]=\"headerHeight\"\n [isTarget]=\"column.isTarget\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [targetMarkerContext]=\"column.targetMarkerContext\"\n [column]=\"column\"\n [sortType]=\"sortType\"\n [sorts]=\"sorts\"\n [selectionType]=\"selectionType\"\n [sortAscendingIcon]=\"sortAscendingIcon\"\n [sortDescendingIcon]=\"sortDescendingIcon\"\n [sortUnsetIcon]=\"sortUnsetIcon\"\n [allRowsSelected]=\"allRowsSelected\"\n [enableClearingSortState]=\"enableClearingSortState\"\n (sort)=\"onSort($event)\"\n (select)=\"select.emit($event)\"\n (columnContextmenu)=\"columnContextmenu.emit($event)\"\n >\n </datatable-header-cell>\n }\n </div>\n } }\n </div>\n `,\n host: {\n class: 'datatable-header'\n },\n styleUrl: './header.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n OrderableDirective,\n NgStyle,\n DataTableHeaderCellComponent,\n LongPressDirective,\n DraggableDirective,\n NgClass\n ]\n})\nexport class DataTableHeaderComponent implements OnDestroy, OnChanges {\n private cd = inject(ChangeDetectorRef);\n private scrollbarHelper = inject(ScrollbarHelper);\n\n @Input() sortAscendingIcon?: string;\n @Input() sortDescendingIcon?: string;\n @Input() sortUnsetIcon?: string;\n @Input() scrollbarH?: boolean;\n @Input() dealsWithGroup?: boolean;\n @Input() targetMarkerTemplate?: TemplateRef<unknown>;\n @Input() enableClearingSortState = false;\n\n @Input() set innerWidth(val: number) {\n this._innerWidth = val;\n setTimeout(() => {\n if (this._columns) {\n const colByPin = columnsByPin(this._columns);\n this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);\n this.setStylesByGroup();\n }\n });\n }\n\n get innerWidth(): number {\n return this._innerWidth;\n }\n\n @Input() sorts!: SortPropDir[];\n @Input() sortType!: SortType;\n @Input() allRowsSelected?: boolean;\n @Input() selectionType?: SelectionType;\n @Input() reorderable?: boolean;\n @Input() verticalScrollVisible = false;\n\n dragEventTarget?: MouseEvent | TouchEvent;\n\n @HostBinding('style.height')\n @Input()\n set headerHeight(val: any) {\n if (val !== 'auto') {\n this._headerHeight = `${val}px`;\n } else {\n this._headerHeight = val;\n }\n }\n\n get headerHeight(): any {\n return this._headerHeight;\n }\n\n @Input() set columns(val: TableColumnInternal[]) {\n this._columns = val;\n\n const colsByPin = columnsByPin(val);\n this._columnsByPin = columnsByPinArr(val);\n setTimeout(() => {\n this._columnGroupWidths = columnGroupWidths(colsByPin, val);\n this.setStylesByGroup();\n });\n }\n\n get columns(): any[] {\n return this._columns;\n }\n\n @Input()\n set offsetX(val: number) {\n this._offsetX = val;\n this.setStylesByGroup();\n }\n get offsetX() {\n return this._offsetX;\n }\n\n @Output() sort = new EventEmitter<SortEvent>();\n @Output() reorder = new EventEmitter<ReorderEventInternal>();\n @Output() resize = new EventEmitter<ColumnResizeEventInternal>();\n @Output() resizing = new EventEmitter<ColumnResizeEventInternal>();\n @Output() select = new EventEmitter<void>();\n @Output() columnContextmenu = new EventEmitter<{\n event: MouseEvent;\n column: TableColumnInternal;\n }>(false);\n\n _columnsByPin!: PinnedColumns[];\n _columnGroupWidths: any = {\n total: 100\n };\n _innerWidth!: number;\n _offsetX!: number;\n _columns!: TableColumnInternal[];\n _headerHeight!: string;\n _styleByGroup: {\n left: NgStyle['ngStyle'];\n center: NgStyle['ngStyle'];\n right: NgStyle['ngStyle'];\n } = { left: {}, center: {}, right: {} };\n\n private destroyed = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.verticalScrollVisible) {\n this._styleByGroup.right = this.calcStylesByGroup('right');\n if (!this.destroyed) {\n this.cd.detectChanges();\n }\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n }\n\n onLongPressStart({\n event,\n model\n }: {\n event: MouseEvent | TouchEvent;\n model: TableColumnInternal<Row>;\n }) {\n model.dragging = true;\n this.dragEventTarget = event;\n }\n\n onLongPressEnd({ model }: { model: TableColumnInternal<Row> }) {\n this.dragEventTarget = undefined;\n\n // delay resetting so sort can be\n // prevented if we were dragging\n setTimeout(() => {\n // datatable component creates copies from columns on reorder\n // set dragging to false on new objects\n const column = this._columns.find(c => c.$$id === model.$$id);\n if (column && 'dragging' in column) {\n column.dragging = false;\n }\n }, 5);\n }\n\n @HostBinding('style.width')\n get headerWidth(): string {\n if (this.scrollbarH) {\n const width = this.verticalScrollVisible\n ? this.innerWidth - this.scrollbarHelper.width\n : this.innerWidth;\n return width + 'px';\n }\n\n return '100%';\n }\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 onColumnReordered(event: ReorderEventInternal): void {\n const column = this.getColumn(event.newValue);\n column.isTarget = false;\n column.targetMarkerContext = undefined;\n this.reorder.emit(event);\n }\n\n onTargetChanged({ prevIndex, newIndex, initialIndex }: TargetChangedEvent): void {\n if (prevIndex || prevIndex === 0) {\n const oldColumn = this.getColumn(prevIndex);\n oldColumn.isTarget = false;\n oldColumn.targetMarkerContext = undefined;\n }\n if (newIndex || newIndex === 0) {\n const newColumn = this.getColumn(newIndex);\n newColumn.isTarget = true;\n\n if (initialIndex !== newIndex) {\n newColumn.targetMarkerContext = {\n class: 'targetMarker '.concat(initialIndex > newIndex ? 'dragFromRight' : 'dragFromLeft')\n };\n }\n }\n }\n\n getColumn(index: number): any {\n const leftColumnCount = this._columnsByPin[0].columns.length;\n if (index < leftColumnCount) {\n return this._columnsByPin[0].columns[index];\n }\n\n const centerColumnCount = this._columnsByPin[1].columns.length;\n if (index < leftColumnCount + centerColumnCount) {\n return this._columnsByPin[1].columns[index - leftColumnCount];\n }\n\n return this._columnsByPin[2].columns[index - leftColumnCount - centerColumnCount];\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,\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 if (!this.sorts) {\n this.sorts = [];\n }\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 === 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 setStylesByGroup() {\n this._styleByGroup.left = this.calcStylesByGroup('left');\n this._styleByGroup.center = this.calcStylesByGroup('center');\n this._styleByGroup.right = this.calcStylesByGroup('right');\n if (!this.destroyed) {\n this.cd.detectChanges();\n }\n }\n\n calcStylesByGroup(group: 'center' | 'right' | 'left'): NgStyle['ngStyle'] {\n const widths = this._columnGroupWidths;\n\n if (group === 'center') {\n return {\n transform: `translateX(${this.offsetX * -1}px)`,\n width: `${widths[group]}px`,\n willChange: 'transform'\n };\n }\n\n return {\n width: `${widths[group]}px`\n };\n }\n}\n","/**\n * Throttle a function\n */\nexport function throttle(func: any, wait: number, options?: any) {\n options = options || {};\n let context: any;\n let args: any;\n let result: any;\n let timeout: any = null;\n let previous = 0;\n\n function later() {\n previous = options.leading === false ? 0 : +new Date();\n timeout = null;\n result = func.apply(context, args);\n }\n\n return function (this: any) {\n const now = +new Date();\n\n if (!previous && options.leading === false) {\n previous = now;\n }\n\n const remaining = wait - (now - previous);\n context = this;\n args = arguments;\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n}\n\n/**\n * Throttle decorator\n *\n * class MyClass {\n * throttleable(10)\n * myFn() { ... }\n * }\n */\nexport function throttleable(duration: number, options?: any) {\n return function innerDecorator(target: any, key: PropertyKey, descriptor: PropertyDescriptor) {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: throttle(descriptor.value, duration, options)\n });\n\n return target[key];\n }\n };\n };\n}\n","import { TableColumn, TableColumnProp } from '../types/table-column.type';\nimport { columnsByPin, columnTotalWidth } from './column';\nimport { TableColumnGroup, TableColumnInternal } from '../types/internal.types';\n\n/**\n * Calculates the Total Flex Grow\n */\nexport function getTotalFlexGrow(columns: TableColumn[]) {\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/facebook/fixed-data-table/blob/master/src/FixedDataTableWidthHelper.js\n */\nexport function 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 */\nfunction scaleColumns(colsByGroup: TableColumnGroup, maxWidth: number, totalFlexGrow: number) {\n // calculate total width and flexgrow points for columns that can be resized\n for (const column of Object.values(colsByGroup).flat()) {\n if (column.$$oldWidth) {\n // when manually resized, switch off auto-resize\n column.canAutoResize = false;\n }\n if (!column.canAutoResize) {\n maxWidth -= column.width;\n totalFlexGrow -= column.flexGrow ? column.flexGrow : 0;\n } else {\n column.width = 0;\n }\n }\n\n const hasMinWidth: Record<TableColumnProp, boolean> = {};\n let remainingWidth = maxWidth;\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 Object.values(colsByGroup).flat()) {\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 * widthPerFlexPoint;\n if (column.minWidth !== undefined && newWidth < column.minWidth) {\n remainingWidth += newWidth - column.minWidth;\n column.width = column.minWidth;\n hasMinWidth[column.prop] = true;\n } else {\n column.width = newWidth;\n }\n }\n }\n } while (remainingWidth !== 0);\n\n // Adjust for any remaining offset in computed widths vs maxWidth\n const columns: TableColumnInternal[] = Object.values(colsByGroup).reduce(\n (acc, col) => acc.concat(col),\n []\n );\n\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 += 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 function forceFillColumnWidths(\n allColumns: TableColumnInternal[],\n expectedWidth: number,\n startIdx: number,\n allowBleed: boolean,\n defaultColWidth: number = 150,\n verticalScrollWidth = 0\n) {\n const columnsToResize = allColumns\n .slice(startIdx + 1, allColumns.length)\n .filter(c => c.canAutoResize !== false);\n\n for (const column of columnsToResize) {\n if (!column.$$oldWidth) {\n column.$$oldWidth = column.width;\n }\n }\n\n let additionWidthPerColumn = 0;\n let exceedsWindow = false;\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 = column.$$oldWidth || column.width || defaultColWidth;\n } else {\n const newSize = (column.width || defaultColWidth) + additionWidthPerColumn;\n\n if (column.minWidth && newSize < column.minWidth) {\n column.width = column.minWidth;\n columnsProcessed.push(column);\n } else if (column.maxWidth && newSize > column.maxWidth) {\n column.width = column.maxWidth;\n columnsProcessed.push(column);\n } else {\n column.width = newSize;\n }\n }\n\n column.width = Math.max(0, column.width);\n }\n\n contentWidth = getContentWidth(allColumns, defaultColWidth);\n remainingWidth = expectedWidth - contentWidth;\n removeProcessedColumns(columnsToResize, columnsProcessed);\n } while (remainingWidth > remainingWidthLimit && columnsToResize.length !== 0);\n\n // reset so we don't have stale values\n for (const column of columnsToResize) {\n column.$$oldWidth = 0;\n }\n}\n\n/**\n * Remove the processed columns from the current active columns.\n */\nfunction removeProcessedColumns(columnsToResize: TableColumn[], columnsProcessed: TableColumn[]) {\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 */\nfunction getContentWidth(allColumns: TableColumn[], defaultColWidth: number = 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 {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n Output\n} from '@angular/core';\nimport { PagerPageEvent } from '../../types/public.types';\nimport { Page } from '../../types/internal.types';\nimport { DatatableComponent } from '../datatable.component';\n\n@Component({\n selector: 'datatable-pager',\n template: `\n <ul class=\"pager\">\n <li [class.disabled]=\"!canPrevious()\">\n <a\n role=\"button\"\n [attr.aria-label]=\"messages.ariaFirstPageMessage ?? 'go to first page'\"\n (click)=\"selectPage(1)\"\n >\n <i class=\"{{ pagerPreviousIcon ?? 'datatable-icon-prev' }}\"></i>\n </a>\n </li>\n <li [class.disabled]=\"!canPrevious()\">\n <a\n role=\"button\"\n [attr.aria-label]=\"messages.ariaPreviousPageMessage ?? 'go to previous page'\"\n (click)=\"prevPage()\"\n >\n <i class=\"{{ pagerLeftArrowIcon ?? 'datatable-icon-left' }}\"></i>\n </a>\n </li>\n @for (pg of pages; track pg.number) {\n <li\n [attr.aria-label]=\"(messages.ariaPageNMessage ?? 'page') + ' ' + pg.number\"\n class=\"pages\"\n [class.active]=\"pg.number === page\"\n >\n <a role=\"button\" (click)=\"selectPage(pg.number)\">\n {{ pg.text }}\n </a>\n </li>\n }\n <li [class.disabled]=\"!canNext()\">\n <a\n role=\"button\"\n [attr.aria-label]=\"messages.ariaNextPageMessage ?? 'go to next page'\"\n (click)=\"nextPage()\"\n >\n <i class=\"{{ pagerRightArrowIcon ?? 'datatable-icon-right' }}\"></i>\n </a>\n </li>\n <li [class.disabled]=\"!canNext()\">\n <a\n role=\"button\"\n [attr.aria-label]=\"messages.ariaLastPageMessage ?? 'go to last page'\"\n (click)=\"selectPage(totalPages)\"\n >\n <i class=\"{{ pagerNextIcon ?? 'datatable-icon-skip' }}\"></i>\n </a>\n </li>\n </ul>\n `,\n host: {\n class: 'datatable-pager'\n },\n styleUrl: './pager.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DataTablePagerComponent {\n private dataTable = inject(DatatableComponent, { optional: true });\n\n get messages(): DatatableComponent['messages'] {\n return this.dataTable?.messages ?? {};\n }\n\n @Input() pagerLeftArrowIcon?: string;\n @Input() pagerRightArrowIcon?: string;\n @Input() pagerPreviousIcon?: string;\n @Input() pagerNextIcon?: string;\n\n @Input()\n set size(val: number) {\n this._size = val;\n this.pages = this.calcPages();\n }\n\n get size(): number {\n return this._size;\n }\n\n @Input()\n set count(val: number) {\n this._count = val;\n this.pages = this.calcPages();\n }\n\n get count(): number {\n return this._count;\n }\n\n @Input()\n set page(val: number) {\n this._page = val;\n this.pages = this.calcPages();\n }\n\n get page(): number {\n return this._page;\n }\n\n get totalPages(): number {\n const count = this.size < 1 ? 1 : Math.ceil(this.count / this.size);\n return Math.max(count || 0, 1);\n }\n\n @Output() change: EventEmitter<PagerPageEvent> = new EventEmitter();\n\n _count = 0;\n _page = 1;\n _size = 0;\n pages!: Page[];\n\n canPrevious(): boolean {\n return this.page > 1;\n }\n\n canNext(): boolean {\n return this.page < this.totalPages;\n }\n\n prevPage(): void {\n this.selectPage(this.page - 1);\n }\n\n nextPage(): void {\n this.selectPage(this.page + 1);\n }\n\n selectPage(page: number): void {\n if (page > 0 && page <= this.totalPages && page !== this.page) {\n this.page = page;\n\n this.change.emit({\n page\n });\n }\n }\n\n calcPages(page?: number): Page[] {\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 page = 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: <string>(<any>num)\n });\n }\n\n return pages;\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { DatatableFooterDirective } from './footer.directive';\nimport { PagerPageEvent } from '../../types/public.types';\nimport { DataTablePagerComponent } from './pager.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n@Component({\n selector: 'datatable-footer',\n template: `\n <div\n class=\"datatable-footer-inner\"\n [ngClass]=\"{ 'selected-count': selectedMessage }\"\n [style.height.px]=\"footerHeight\"\n >\n @if (footerTemplate?.template) {\n <ng-template\n [ngTemplateOutlet]=\"footerTemplate!.template!\"\n [ngTemplateOutletContext]=\"{\n rowCount: rowCount,\n pageSize: pageSize,\n selectedCount: selectedCount,\n curPage: curPage,\n offset: offset\n }\"\n >\n </ng-template>\n } @else {\n <div class=\"page-count\">\n @if (selectedMessage) {\n <span> {{ selectedCount?.toLocaleString() }} {{ selectedMessage }} / </span>\n }\n {{ rowCount?.toLocaleString() }} {{ totalMessage }}\n </div>\n @if (isVisible) {\n <datatable-pager\n [pagerLeftArrowIcon]=\"pagerLeftArrowIcon\"\n [pagerRightArrowIcon]=\"pagerRightArrowIcon\"\n [pagerPreviousIcon]=\"pagerPreviousIcon\"\n [pagerNextIcon]=\"pagerNextIcon\"\n [page]=\"curPage\"\n [size]=\"pageSize\"\n [count]=\"rowCount\"\n (change)=\"page.emit($event)\"\n >\n </datatable-pager>\n } }\n </div>\n `,\n host: {\n class: 'datatable-footer'\n },\n styleUrl: './footer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgClass, NgTemplateOutlet, DataTablePagerComponent]\n})\nexport class DataTableFooterComponent {\n @Input() footerHeight!: number;\n @Input() rowCount!: number;\n @Input() pageSize!: number;\n @Input() offset!: number;\n @Input() pagerLeftArrowIcon?: string;\n @Input() pagerRightArrowIcon?: string;\n @Input() pagerPreviousIcon?: string;\n @Input() pagerNextIcon?: string;\n @Input() totalMessage!: string;\n @Input() footerTemplate?: DatatableFooterDirective;\n\n @Input() selectedCount = 0;\n @Input() selectedMessage?: string | boolean;\n\n @Output() page: EventEmitter<PagerPageEvent> = new EventEmitter();\n\n get isVisible(): boolean {\n return this.rowCount / this.pageSize > 1;\n }\n\n get curPage(): number {\n return this.offset + 1;\n }\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\n\n/**\n * Visibility Observer Directive\n *\n * Usage:\n *\n * \t\t<div\n * \t\t\tvisibilityObserver\n * \t\t\t(visible)=\"onVisible($event)\">\n * \t\t</div>\n *\n */\n@Directive({\n selector: '[visibilityObserver]'\n})\nexport class VisibilityDirective implements OnInit, OnDestroy {\n private element = inject(ElementRef);\n private zone = inject(NgZone);\n\n @HostBinding('class.visible')\n isVisible = false;\n\n @Output() visible: EventEmitter<any> = new EventEmitter();\n\n timeout: any;\n\n ngOnInit(): void {\n this.runCheck();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeout);\n }\n\n onVisibilityChange(): void {\n // trigger zone recalc for columns\n this.zone.run(() => {\n this.isVisible = true;\n this.visible.emit(true);\n });\n }\n\n runCheck(): void {\n const check = () => {\n // https://davidwalsh.name/offsetheight-visibility\n const { offsetHeight, offsetWidth } = this.element.nativeElement;\n\n if (offsetHeight && offsetWidth) {\n clearTimeout(this.timeout);\n this.onVisibilityChange();\n } else {\n clearTimeout(this.timeout);\n this.zone.runOutsideAngular(() => {\n this.timeout = setTimeout(() => check(), 50);\n });\n }\n };\n\n this.timeout = setTimeout(() => check());\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'datatable-progress',\n template: `\n <div class=\"progress-linear\" role=\"progressbar\">\n <div class=\"container\">\n <div class=\"bar\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProgressBarComponent {}\n","/**\n * Converts strings from something to camel case\n * http://stackoverflow.com/questions/10425287/convert-dash-separated-string-to-camelcase\n */\nexport function 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, function (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 function deCamelCase(str: string): string {\n return str.replace(/([A-Z])/g, match => ` ${match}`).replace(/^./, match => match.toUpperCase());\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 function id() {\n return ('0000' + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);\n}\n","import { camelCase, deCamelCase } from './camel-case';\nimport { id } from './id';\nimport { getterForProp } from './column-prop-getters';\nimport { TableColumn } from '../types/table-column.type';\nimport { QueryList } from '@angular/core';\nimport { DataTableColumnDirective } from '../components/columns/column.directive';\nimport { TableColumnInternal } from '../types/internal.types';\nimport { Row } from '../types/public.types';\nimport { orderByComparator } from './sort';\n\nexport function toInternalColumn<T extends Row>(\n columns: TableColumn<T>[] | QueryList<DataTableColumnDirective<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 $$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: 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 } as TableColumnInternal; // TS cannot cast here\n });\n}\n\nexport function isNullOrUndefined<T>(value: T | null | undefined): value is null | undefined {\n return value === null || value === undefined;\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}\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}\n\n/**\n * Interface definition for ngx-datatable global configuration\n */\n// TODO those properties should all be required in the interface. Should be changed with signal migration.\nexport interface NgxDatatableConfig {\n messages?: NgxDatatableMessages;\n cssClasses?: NgxDatatableCssClasses;\n headerHeight?: number;\n footerHeight?: number;\n rowHeight?: number;\n defaultColumnWidth?: number;\n}\n\nexport const NGX_DATATABLE_CONFIG = new InjectionToken<NgxDatatableConfig>('ngx-datatable.config');\n\n/**\n * This makes all properties recursively optional.\n *\n * @internal\n */\nexport type AllPartial<T> = { [K in keyof T]?: AllPartial<T[K]> };\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 function providedNgxDatatableConfig(overrides: AllPartial<NgxDatatableConfig>): Provider {\n return {\n provide: NGX_DATATABLE_CONFIG,\n useValue: overrides\n };\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n inject,\n Input,\n KeyValueDiffer,\n KeyValueDiffers,\n numberAttribute,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n signal,\n TemplateRef,\n ViewChild\n} from '@angular/core';\n\nimport { DatatableGroupHeaderDirective } from './body/body-group-header.directive';\n\nimport { Subscription } from 'rxjs';\nimport { groupRowsByParents, optionalGetterForProp } from '../utils/tree';\nimport { TableColumn } from '../types/table-column.type';\nimport { DataTableColumnDirective } from './columns/column.directive';\nimport { DatatableRowDetailDirective } from './row-detail/row-detail.directive';\nimport { DatatableFooterDirective } from './footer/footer.directive';\nimport { DataTableBodyComponent } from './body/body.component';\nimport { DataTableHeaderComponent } from './header/header.component';\nimport { ScrollbarHelper } from '../services/scrollbar-helper.service';\nimport { ColumnChangesService } from '../services/column-changes.service';\nimport { throttleable } from '../utils/throttle';\nimport { adjustColumnWidths, forceFillColumnWidths } from '../utils/math';\nimport { sortGroupedRows, sortRows } from '../utils/sort';\nimport { DatatableRowDefDirective } from './body/body-row-def.component';\nimport { DatatableComponentToken } from '../utils/table-token';\nimport {\n ActivateEvent,\n ColumnMode,\n ColumnResizeEvent,\n ContextMenuEvent,\n ContextmenuType,\n DragEventData,\n Group,\n PageEvent,\n PagerPageEvent,\n ReorderEvent,\n Row,\n RowOrGroup,\n ScrollEvent,\n SelectEvent,\n SelectionType,\n SortEvent,\n SortPropDir,\n SortType,\n TreeStatus\n} from '../types/public.types';\nimport { DataTableFooterComponent } from './footer/footer.component';\nimport { VisibilityDirective } from '../directives/visibility.directive';\nimport { ProgressBarComponent } from './body/progress-bar.component';\nimport { toInternalColumn } from '../utils/column-helper';\nimport {\n ColumnResizeEventInternal,\n ReorderEventInternal,\n TableColumnInternal\n} from '../types/internal.types';\nimport { NGX_DATATABLE_CONFIG, NgxDatatableConfig } from '../ngx-datatable.config';\n\n@Component({\n selector: 'ngx-datatable',\n templateUrl: './datatable.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: ['./datatable.component.scss'],\n host: {\n class: 'ngx-datatable'\n },\n providers: [\n {\n provide: DatatableComponentToken,\n useExisting: DatatableComponent\n },\n ColumnChangesService\n ],\n imports: [\n VisibilityDirective,\n DataTableHeaderComponent,\n DataTableBodyComponent,\n DataTableFooterComponent,\n ProgressBarComponent\n ]\n})\nexport class DatatableComponent<TRow extends Row = any>\n implements OnInit, DoCheck, AfterViewInit, AfterContentInit, OnDestroy\n{\n private scrollbarHelper = inject(ScrollbarHelper);\n private cd = inject(ChangeDetectorRef);\n private columnChangesService = inject(ColumnChangesService);\n private configuration =\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 /**\n * Template for the target marker of drag target columns.\n */\n @Input() targetMarkerTemplate?: TemplateRef<unknown>;\n\n /**\n * Rows that are displayed in the table.\n */\n @Input() set rows(val: (TRow | undefined)[] | null | undefined) {\n this._rows = val ?? [];\n // This will ensure that datatable detects changes on doing like this rows = [...rows];\n this.rowDiffer.diff([] as any);\n if (val) {\n this._internalRows = [...val];\n }\n }\n\n /**\n * Gets the rows.\n */\n get rows(): (TRow | undefined)[] {\n return this._rows;\n }\n\n /**\n * This attribute allows the user to set the name of the column to group the data with\n */\n @Input() set groupRowsBy(val: keyof TRow | undefined) {\n if (val) {\n this._groupRowsBy = val;\n if (this._groupRowsBy) {\n // creates a new array with the data grouped\n this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);\n }\n }\n }\n\n get groupRowsBy() {\n return this._groupRowsBy;\n }\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 @Input() groupedRows?: Group<TRow>[];\n\n /**\n * Columns to be displayed.\n */\n @Input() set columns(val: TableColumn[]) {\n if (val) {\n this._internalColumns = toInternalColumn(val, this._defaultColumnWidth);\n this.recalculateColumns();\n }\n\n this._columns = val;\n }\n\n /**\n * Get the columns.\n */\n get columns(): TableColumn[] {\n return this._columns;\n }\n\n /**\n * List of row objects that should be\n * represented as selected in the grid.\n * Default value: `[]`\n */\n @Input() selected: TRow[] = [];\n\n /**\n * Enable vertical scrollbars\n */\n @Input({ transform: booleanAttribute }) scrollbarV = false;\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 @Input({ transform: booleanAttribute }) scrollbarVDynamic = false;\n\n /**\n * Enable horz scrollbars\n */\n @Input({ transform: booleanAttribute }) scrollbarH = false;\n\n /**\n * The row height; which is necessary\n * to calculate the height for the lazy rendering.\n */\n @Input() rowHeight: number | 'auto' | ((row: TRow) => number) = 30;\n\n /**\n * Type of column width distribution formula.\n * Example: flex, force, standard\n */\n @Input() columnMode: ColumnMode | keyof typeof ColumnMode = ColumnMode.standard;\n\n /**\n * The minimum header height in pixels.\n * Pass a falsey for no header\n */\n @Input({ transform: numberAttribute }) headerHeight = 30;\n\n /**\n * The minimum footer height in pixels.\n * Pass falsey for no footer\n */\n @Input({ transform: numberAttribute }) footerHeight = 0;\n\n /**\n * If the table should use external paging\n * otherwise its assumed that all data is preloaded.\n */\n @Input({ transform: booleanAttribute }) externalPaging = false;\n\n /**\n * If the table should use external sorting or\n * the built-in basic sorting.\n */\n @Input({ transform: booleanAttribute }) externalSorting = false;\n\n /**\n * The page size to be shown.\n * Default value: `undefined`\n */\n @Input({ transform: numberAttribute }) set limit(val: number | undefined) {\n this._limit = val;\n\n // recalculate sizes/etc\n this.recalculate();\n }\n\n /**\n * Gets the limit.\n */\n get limit(): number | undefined {\n return this._limit;\n }\n\n /**\n * The total count of all rows.\n * Default value: `0`\n */\n @Input({ transform: numberAttribute }) set count(val: number) {\n this._count = val;\n\n // recalculate sizes/etc\n this.recalculate();\n }\n\n /**\n * Gets the count.\n */\n get count(): number {\n return this._count;\n }\n\n /**\n * The current offset ( page - 1 ) shown.\n * Default value: `0`\n */\n @Input({ transform: numberAttribute }) set offset(val: number) {\n this._offset = val;\n }\n get offset(): number {\n return Math.max(Math.min(this._offset, Math.ceil(this.rowCount / this.pageSize) - 1), 0);\n }\n\n /**\n * Show the linear loading bar.\n * Default value: `false`\n */\n @Input({ transform: booleanAttribute }) loadingIndicator = false;\n\n /**\n * Show ghost loaders on each cell.\n * Default value: `false`\n */\n @Input({ transform: booleanAttribute }) set ghostLoadingIndicator(val: boolean) {\n this._ghostLoadingIndicator = val;\n if (val && this.scrollbarV && !this.externalPaging) {\n // in case where we don't have predefined total page length\n this.rows = [...this.rows, undefined]; // undefined row will render ghost cell row at the end of the page\n }\n }\n get ghostLoadingIndicator(): boolean {\n return this._ghostLoadingIndicator;\n }\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 @Input() selectionType?: SelectionType;\n\n /**\n * Enable/Disable ability to re-order columns\n * by dragging them.\n */\n @Input({ transform: booleanAttribute }) reorderable = true;\n\n /**\n * Swap columns on re-order columns or\n * move them.\n */\n @Input({ transform: booleanAttribute }) swapColumns = true;\n\n /**\n * The type of sorting\n */\n @Input() sortType: SortType = SortType.single;\n\n /**\n * Array of sorted columns by property and type.\n * Default value: `[]`\n */\n @Input() sorts: SortPropDir[] = [];\n\n /**\n * Css class overrides\n */\n @Input() cssClasses: Partial<Required<NgxDatatableConfig>['cssClasses']> = {};\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 * }\n * ```\n */\n @Input() messages: Partial<Required<NgxDatatableConfig>['messages']> = {};\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 @Input() rowClass?: (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 @Input() selectCheck?: (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 @Input() displayCheck?: (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 @Input({ transform: booleanAttribute }) groupExpansionDefault = false;\n\n /**\n * Property to which you can use for custom tracking of rows.\n * Example: 'name'\n */\n @Input() trackByProp?: string;\n\n /**\n * Property to which you can use for determining select all\n * rows on current page or not.\n */\n @Input({ transform: booleanAttribute }) selectAllRowsOnPage = false;\n\n /**\n * A flag for row virtualization on / off\n */\n @Input({ transform: booleanAttribute }) virtualization = true;\n\n /**\n * Tree from relation\n */\n @Input() treeFromRelation?: string;\n\n /**\n * Tree to relation\n */\n @Input() treeToRelation?: string;\n\n /**\n * A flag for switching summary row on / off\n */\n @Input({ transform: booleanAttribute }) summaryRow = false;\n\n /**\n * A height of summary row\n */\n @Input({ transform: numberAttribute }) summaryHeight = 30;\n\n /**\n * A property holds a summary row position: top/bottom\n */\n @Input() summaryPosition: string = '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 @Input() disableRowCheck?: (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 @Input({ transform: booleanAttribute }) rowDraggable = false;\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 @Input({ transform: booleanAttribute }) enableClearingSortState = false;\n\n /**\n * Body was scrolled typically in a `scrollbarV:true` scenario.\n */\n @Output() scroll: EventEmitter<ScrollEvent> = new EventEmitter();\n\n /**\n * A cell or row was focused via keyboard or mouse click.\n */\n @Output() activate: EventEmitter<ActivateEvent<TRow>> = new EventEmitter();\n\n /**\n * A cell or row was selected.\n */\n @Output() select = new EventEmitter<SelectEvent<TRow>>();\n\n /**\n * Column sort was invoked.\n */\n @Output() sort: EventEmitter<SortEvent> = new EventEmitter();\n\n /**\n * The table was paged either triggered by the pager or the body scroll.\n */\n @Output() page: EventEmitter<PageEvent> = new EventEmitter();\n\n /**\n * Columns were re-ordered.\n */\n @Output() reorder: EventEmitter<ReorderEvent> = new EventEmitter();\n\n /**\n * Column was resized.\n */\n @Output() resize: EventEmitter<ColumnResizeEvent> = new EventEmitter();\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 @Output() tableContextmenu = new EventEmitter<ContextMenuEvent<TRow>>(false);\n\n /**\n * A row was expanded ot collapsed for tree\n */\n @Output() treeAction: EventEmitter<{ row: TRow; rowIndex: number }> = new EventEmitter();\n\n /**\n * Emits HTML5 native drag events.\n * Only emits dragenter, dragover, drop events by default.\n * Set {@link rowDraggble} to true for dragstart and dragend.\n */\n @Output() rowDragEvents: EventEmitter<DragEventData> = new EventEmitter();\n\n /**\n * CSS class applied if the header height if fixed height.\n */\n @HostBinding('class.fixed-header')\n get isFixedHeader(): boolean {\n const headerHeight: number | string = this.headerHeight;\n return typeof headerHeight === 'string' ? <string>headerHeight !== 'auto' : true;\n }\n\n /**\n * CSS class applied to the root element if\n * the row heights are fixed heights.\n */\n @HostBinding('class.fixed-row')\n get isFixedRow(): boolean {\n return this.rowHeight !== 'auto';\n }\n\n /**\n * CSS class applied to root element if\n * vertical scrolling is enabled.\n */\n @HostBinding('class.scroll-vertical')\n get isVertScroll(): boolean {\n return this.scrollbarV;\n }\n\n /**\n * CSS class applied to root element if\n * virtualization is enabled.\n */\n @HostBinding('class.virtualized')\n get isVirtualized(): boolean {\n return this.virtualization;\n }\n\n /**\n * CSS class applied to the root element\n * if the horziontal scrolling is enabled.\n */\n @HostBinding('class.scroll-horz')\n get isHorScroll(): boolean {\n return this.scrollbarH;\n }\n\n /**\n * CSS class applied to root element is selectable.\n */\n @HostBinding('class.selectable')\n get isSelectable(): boolean {\n return this.selectionType !== undefined;\n }\n\n /**\n * CSS class applied to root is checkbox selection.\n */\n @HostBinding('class.checkbox-selection')\n get isCheckboxSelection(): boolean {\n return this.selectionType === SelectionType.checkbox;\n }\n\n /**\n * CSS class applied to root if cell selection.\n */\n @HostBinding('class.cell-selection')\n get isCellSelection(): boolean {\n return this.selectionType === SelectionType.cell;\n }\n\n /**\n * CSS class applied to root if single select.\n */\n @HostBinding('class.single-selection')\n get isSingleSelection(): boolean {\n return this.selectionType === SelectionType.single;\n }\n\n /**\n * CSS class added to root element if mulit select\n */\n @HostBinding('class.multi-selection')\n get isMultiSelection(): boolean {\n return this.selectionType === SelectionType.multi;\n }\n\n /**\n * CSS class added to root element if mulit click select\n */\n @HostBinding('class.multi-click-selection')\n get isMultiClickSelection(): boolean {\n return this.selectionType === SelectionType.multiClick;\n }\n\n /**\n * Column templates gathered from `ContentChildren`\n * if described in your markup.\n */\n @ContentChildren(DataTableColumnDirective)\n columnTemplates!: QueryList<DataTableColumnDirective<TRow>>;\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 * Footer template gathered from the ContentChild\n */\n @ContentChild(DatatableFooterDirective)\n footer?: DatatableFooterDirective;\n\n /**\n * Reference to the body component for manually\n * invoking functions on the body.\n */\n @ViewChild(DataTableBodyComponent)\n bodyComponent!: DataTableBodyComponent<TRow & { treeStatus?: TreeStatus }>;\n\n /**\n * Reference to the header component for manually\n * invoking functions on the header.\n */\n @ViewChild(DataTableHeaderComponent)\n headerComponent!: DataTableHeaderComponent;\n\n @ViewChild(DataTableBodyComponent, { read: ElementRef })\n private bodyElement!: ElementRef<HTMLElement>;\n @ContentChild(DatatableRowDefDirective, {\n read: TemplateRef\n })\n rowDefTemplate?: TemplateRef<any>;\n\n /**\n * Returns if all rows are selected.\n */\n get allRowsSelected(): boolean {\n let allRowsSelected = this.rows && this.selected && this.selected.length === this.rows.length;\n\n if (this.bodyComponent && this.selectAllRowsOnPage) {\n const indexes = this.bodyComponent.indexes;\n const rowsOnPage = indexes().last - indexes().first;\n allRowsSelected = this.selected.length === rowsOnPage;\n }\n\n return this.selected && this.rows && this.rows.length !== 0 && allRowsSelected;\n }\n\n element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n rowDiffer: KeyValueDiffer<TRow, TRow> = inject(KeyValueDiffers).find([]).create();\n _innerWidth: number;\n pageSize: number;\n bodyHeight: number;\n rowCount = 0;\n\n _offsetX = 0;\n _limit: number | undefined;\n _count = 0;\n _offset = 0;\n _rows: (TRow | undefined)[] = [];\n _groupRowsBy?: keyof TRow;\n _internalRows: (TRow | undefined)[] = [];\n _internalColumns!: TableColumnInternal<TRow>[];\n _columns!: TableColumn[];\n _subscriptions: Subscription[] = [];\n _ghostLoadingIndicator = false;\n _defaultColumnWidth?: number;\n protected verticalScrollVisible = false;\n // In case horizontal scroll is enabled\n // the column widths are initially calculated without vertical scroll offset\n // this makes horizontal scroll to appear on load even if columns can fit in view\n // this will be set to true once rows are available and rendered on UI\n private _rowInitDone = signal(false);\n\n constructor() {\n // apply global settings from Module.forRoot\n if (this.configuration) {\n if (this.configuration.messages) {\n this.messages = { ...this.configuration.messages };\n }\n if (this.configuration.cssClasses) {\n this.cssClasses = { ...this.configuration.cssClasses };\n }\n this.headerHeight = this.configuration.headerHeight ?? this.headerHeight;\n this.footerHeight = this.configuration.footerHeight ?? this.footerHeight;\n this.rowHeight = this.configuration.rowHeight ?? this.rowHeight;\n this._defaultColumnWidth = this.configuration.defaultColumnWidth ?? 150;\n }\n }\n\n /**\n * Lifecycle hook that is called after data-bound\n * properties of a directive are initialized.\n */\n ngOnInit(): void {\n // need to call this immediatly to size\n // if the table is hidden the visibility\n // listener will invoke this itself upon show\n this.recalculate();\n }\n\n /**\n * Lifecycle hook that is called after a component's\n * view has been fully initialized.\n */\n ngAfterViewInit(): void {\n // this has to be done to prevent the change detection\n // tree from freaking out because we are readjusting\n if (typeof requestAnimationFrame === 'undefined') {\n return;\n }\n\n requestAnimationFrame(() => {\n this.recalculate();\n\n // emit page for virtual server-side kickoff\n if (this.externalPaging && this.scrollbarV) {\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 * Lifecycle hook that is called after a component's\n * content has been fully initialized.\n */\n ngAfterContentInit() {\n if (this.columnTemplates.length) {\n this.translateColumns(this.columnTemplates);\n }\n this._subscriptions.push(this.columnTemplates.changes.subscribe(v => this.translateColumns(v)));\n this.listenForColumnInputChanges();\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 @Input() rowIdentity: (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 * Translates the templates to the column objects\n */\n translateColumns(val: QueryList<DataTableColumnDirective<TRow>>) {\n if (val) {\n if (val.length) {\n this._internalColumns = toInternalColumn(val, this._defaultColumnWidth);\n this.recalculateColumns();\n if (!this.externalSorting && this.rows?.length) {\n this.sortInternalRows();\n }\n this.cd.markForCheck();\n }\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 * Lifecycle hook that is called when Angular dirty checks a directive.\n */\n ngDoCheck(): void {\n const rowDiffers = this.rowDiffer.diff(this.rows as any);\n if (rowDiffers || this.disableRowCheck) {\n // we don't sort again when ghost loader adds a dummy row\n if (!this.ghostLoadingIndicator && !this.externalSorting && this._internalColumns) {\n this.sortInternalRows();\n } else {\n this._internalRows = [...this.rows];\n }\n\n // auto group by parent on new update\n this._internalRows = groupRowsByParents(\n this._internalRows,\n optionalGetterForProp(this.treeFromRelation),\n optionalGetterForProp(this.treeToRelation)\n );\n\n if (this._groupRowsBy) {\n // If a column has been specified in _groupRowsBy create a new array with the data grouped by that row\n this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy);\n }\n if (rowDiffers) {\n queueMicrotask(() => {\n this._rowInitDone.set(true);\n this.recalculate();\n this.cd.markForCheck();\n });\n }\n\n this.recalculatePages();\n this.cd.markForCheck();\n }\n }\n\n /**\n * Recalc's the sizes of the grid.\n *\n * Updated automatically on changes to:\n *\n * - Columns\n * - Rows\n * - Paging related\n *\n * Also can be manually invoked or upon window resize.\n */\n recalculate(): void {\n this.recalculateDims();\n this.recalculateColumns();\n this.cd.markForCheck();\n }\n\n /**\n * Window resize handler to update sizes.\n */\n @HostListener('window:resize')\n @throttleable(5)\n onWindowResize(): void {\n this.recalculate();\n }\n\n /**\n * Recalulcates the column widths based on column width\n * distribution mode and scrollbar offsets.\n */\n recalculateColumns(\n columns: TableColumnInternal[] = this._internalColumns,\n forceIdx = -1,\n allowBleed: boolean = this.scrollbarH\n ): TableColumn[] | undefined {\n let width = this._innerWidth;\n if (!columns || !width) {\n return undefined;\n }\n const bodyElement = this.bodyElement?.nativeElement;\n this.verticalScrollVisible = bodyElement?.scrollHeight > bodyElement?.clientHeight;\n if (this.scrollbarV || this.scrollbarVDynamic) {\n width =\n width -\n (this.verticalScrollVisible || !this._rowInitDone() ? this.scrollbarHelper.width : 0);\n }\n\n if (this.columnMode === 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 === ColumnMode.flex) {\n adjustColumnWidths(columns, width);\n }\n\n if (this.bodyComponent && this.bodyComponent.columnGroupWidths.total !== width) {\n this.bodyComponent.columns = [...this._internalColumns];\n this.bodyComponent.cd.markForCheck();\n }\n\n if (this.headerComponent && this.headerComponent._columnGroupWidths.total !== width) {\n this.headerComponent.columns = [...this._internalColumns];\n }\n\n return columns;\n }\n\n /**\n * Recalculates the dimensions of the table size.\n * Internally calls the page size and row count calcs too.\n *\n */\n recalculateDims(): void {\n const dims = this.element.getBoundingClientRect();\n this._innerWidth = Math.floor(dims.width);\n\n if (this.scrollbarV) {\n let height = dims.height;\n if (this.headerHeight) {\n height = height - this.headerHeight;\n }\n if (this.footerHeight) {\n height = height - this.footerHeight;\n }\n this.bodyHeight = height;\n }\n\n this.recalculatePages();\n }\n\n /**\n * Recalculates the pages after a update.\n */\n recalculatePages(): void {\n this.pageSize = this.calcPageSize();\n this.rowCount = this.calcRowCount();\n }\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 = offset;\n\n if (!isNaN(this.offset)) {\n this.page.emit({\n count: this.count,\n pageSize: this.pageSize,\n limit: this.limit,\n offset: this.offset,\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 = event.page - 1;\n this.bodyComponent.updateOffsetY(this.offset);\n\n this.page.emit({\n count: this.count,\n pageSize: this.pageSize,\n limit: this.limit,\n offset: this.offset,\n sorts: this.sorts\n });\n\n if (this.selectAllRowsOnPage) {\n this.selected = [];\n this.select.emit({\n selected: this.selected\n });\n }\n }\n\n /**\n * Recalculates the sizes of the page\n */\n calcPageSize(): number {\n // Keep the page size constant even if the row has been expanded.\n // This is because an expanded row is still considered to be a child of\n // the original row. Hence calculation would use rowHeight only.\n if (this.scrollbarV && this.virtualization) {\n const size = Math.ceil(this.bodyHeight / (this.rowHeight as number));\n return Math.max(size, 0);\n }\n\n // if limit is passed, we are paging\n if (this.limit !== undefined) {\n return this.limit;\n }\n\n // otherwise use row length\n if (this.rows) {\n return this.rows.length;\n }\n\n // other empty :(\n return 0;\n }\n\n /**\n * Calculates the row count.\n */\n calcRowCount(): number {\n if (!this.externalPaging) {\n if (this.groupedRows) {\n return this.groupedRows.length;\n } else if (this.treeFromRelation != null && this.treeToRelation != null) {\n return this._internalRows.length;\n } else {\n return this.rows.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: TableColumn }): void {\n this.tableContextmenu.emit({ event, type: ContextmenuType.header, content: column });\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: ContextmenuType.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.map(col => ({ ...col }));\n cols[idx].width = 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(cols, idx);\n this._internalColumns = cols;\n\n this.resize.emit({\n column,\n newValue,\n prevValue\n });\n }\n\n onColumnResizing({ column, newValue }: ColumnResizeEventInternal): void {\n if (column === undefined) {\n return;\n }\n column.width = newValue;\n column.$$oldWidth = newValue;\n const idx = this._internalColumns.indexOf(column);\n this.recalculateColumns(this._internalColumns, 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\n if (this.swapColumns) {\n const prevCol = cols[newValue];\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 = cols;\n\n this.reorder.emit(event);\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 = [];\n this.select.emit({\n selected: this.selected\n });\n }\n\n this.sorts = event.sorts;\n\n // this could be optimized better since it will resort\n // the rows again on the 'push' detection...\n if (this.externalSorting === false) {\n // don't use normal setter so we don't resort\n this.sortInternalRows();\n }\n\n // auto group by parent on new update\n this._internalRows = groupRowsByParents(\n this._internalRows,\n optionalGetterForProp(this.treeFromRelation),\n optionalGetterForProp(this.treeToRelation)\n );\n\n // Always go to first page when sorting to see the newly sorted data\n this.offset = 0;\n this.bodyComponent.updateOffsetY(this.offset);\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.offset,\n sorts: this.sorts\n });\n this.sort.emit(event);\n }\n\n /**\n * Toggle all row selection\n */\n onHeaderSelect(): void {\n if (this.bodyComponent && this.selectAllRowsOnPage) {\n // before we splice, chk if we currently have all selected\n const first = this.bodyComponent.indexes().first;\n const last = this.bodyComponent.indexes().last;\n const allSelected = this.selected.length === last - first;\n\n // remove all existing either way\n this.selected = [];\n\n // do the opposite here\n if (!allSelected) {\n this.selected.push(...this._internalRows.slice(first, last).filter(row => !!row));\n }\n } else {\n let relevantRows: TRow[];\n if (this.disableRowCheck) {\n relevantRows = this.rows.filter(\n (row => row && !this.disableRowCheck!(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 // remove all existing either way\n this.selected = [];\n // do the opposite here\n if (!allSelected) {\n this.selected.push(...relevantRows);\n }\n }\n\n this.select.emit({\n selected: this.selected\n });\n }\n\n /**\n * A row was selected from body\n */\n onBodySelect(event: SelectEvent<TRow>): void {\n this.select.emit(event);\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 rowIndex = this._rows.findIndex(\n r => r && r[this.treeToRelation!] === event.row[this.treeToRelation!]\n );\n this.treeAction.emit({ row, rowIndex });\n }\n\n ngOnDestroy() {\n this._subscriptions.forEach(subscription => subscription.unsubscribe());\n }\n\n /**\n * listen for changes to input bindings of all DataTableColumnDirective and\n * trigger the columnTemplates.changes observable to emit\n */\n private listenForColumnInputChanges(): void {\n this._subscriptions.push(\n this.columnChangesService.columnInputChanges$.subscribe(() => {\n if (this.columnTemplates) {\n this.columnTemplates.notifyOnChanges();\n }\n })\n );\n }\n\n private sortInternalRows(): void {\n // if there are no sort criteria we reset the rows with original rows\n if (!this.sorts || !this.sorts?.length) {\n this._internalRows = this._rows;\n // if there is any tree relation then re-group rows accordingly\n if (this.treeFromRelation && this.treeToRelation) {\n this._internalRows = groupRowsByParents(\n this._internalRows,\n optionalGetterForProp(this.treeFromRelation),\n optionalGetterForProp(this.treeToRelation)\n );\n }\n }\n if (this.groupedRows && this.groupedRows.length) {\n const sortOnGroupHeader = this.sorts?.find(\n sortColumns => sortColumns.prop === this._groupRowsBy\n );\n this.groupedRows = this.groupArrayBy(this._rows, this._groupRowsBy!);\n this.groupedRows = sortGroupedRows(\n this.groupedRows,\n this._internalColumns,\n this.sorts,\n sortOnGroupHeader\n );\n this._internalRows = [...this._internalRows];\n } else {\n this._internalRows = sortRows(this._internalRows, this._internalColumns, this.sorts);\n }\n }\n}\n","<div visibilityObserver (visible)=\"recalculate()\">\n <div role=\"table\">\n @if (headerHeight) {\n <datatable-header\n role=\"rowgroup\"\n [sorts]=\"sorts\"\n [sortType]=\"sortType\"\n [scrollbarH]=\"scrollbarH\"\n [innerWidth]=\"_innerWidth\"\n [offsetX]=\"_offsetX\"\n [dealsWithGroup]=\"groupedRows !== undefined\"\n [columns]=\"_internalColumns\"\n [headerHeight]=\"headerHeight\"\n [reorderable]=\"reorderable\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [sortAscendingIcon]=\"cssClasses.sortAscending\"\n [sortDescendingIcon]=\"cssClasses.sortDescending\"\n [sortUnsetIcon]=\"cssClasses.sortUnset\"\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 </datatable-header>\n }\n <datatable-body\n tabindex=\"0\"\n role=\"rowgroup\"\n [groupRowsBy]=\"groupRowsBy\"\n [groupedRows]=\"groupedRows\"\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 [rowHeight]=\"rowHeight\"\n [rowCount]=\"rowCount\"\n [offset]=\"offset\"\n [trackByProp]=\"trackByProp\"\n [columns]=\"_internalColumns\"\n [pageSize]=\"pageSize\"\n [offsetX]=\"_offsetX\"\n [rowDetail]=\"rowDetail\"\n [groupHeader]=\"groupHeader\"\n [selected]=\"selected\"\n [innerWidth]=\"_innerWidth\"\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 [verticalScrollVisible]=\"verticalScrollVisible\"\n (page)=\"onBodyPage($event)\"\n (activate)=\"activate.emit($event)\"\n (rowContextmenu)=\"onRowContextmenu($event)\"\n (select)=\"onBodySelect($event)\"\n (scroll)=\"onBodyScroll($event)\"\n (treeAction)=\"onTreeAction($event)\"\n [disableRowCheck]=\"disableRowCheck\"\n [rowDraggable]=\"rowDraggable\"\n [rowDragEvents]=\"rowDragEvents\"\n [rowDefTemplate]=\"rowDefTemplate\"\n >\n <ng-content select=\"[loading-indicator]\" ngProjectAs=\"[loading-indicator]\">\n <datatable-progress></datatable-progress>\n </ng-content>\n <ng-content select=\"[empty-content]\" ngProjectAs=\"[empty-content]\">\n <div role=\"row\">\n <div\n role=\"cell\"\n class=\"empty-row\"\n [innerHTML]=\"messages.emptyMessage ?? 'No data to display'\"\n ></div>\n </div>\n </ng-content>\n </datatable-body>\n </div>\n @if (footerHeight) {\n <datatable-footer\n [rowCount]=\"groupedRows !== undefined ? _internalRows.length : rowCount\"\n [pageSize]=\"pageSize\"\n [offset]=\"offset\"\n [footerHeight]=\"footerHeight\"\n [footerTemplate]=\"footer\"\n [totalMessage]=\"messages.totalMessage ?? 'total'\"\n [pagerLeftArrowIcon]=\"cssClasses.pagerLeftArrow\"\n [pagerRightArrowIcon]=\"cssClasses.pagerRightArrow\"\n [pagerPreviousIcon]=\"cssClasses.pagerPrevious\"\n [selectedCount]=\"selected.length\"\n [selectedMessage]=\"!!selectionType && (messages.selectedMessage ?? 'selected')\"\n [pagerNextIcon]=\"cssClasses.pagerNext\"\n (page)=\"onFooterPage($event)\"\n >\n </datatable-footer>\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';\nimport { DataTableFooterTemplateDirective } from './components/footer/footer-template.directive';\nimport { DatatableComponent } from './components/datatable.component';\nimport { DataTableColumnDirective } from './components/columns/column.directive';\nimport { DatatableRowDetailDirective } from './components/row-detail/row-detail.directive';\nimport { DatatableGroupHeaderDirective } from './components/body/body-group-header.directive';\nimport { DatatableRowDetailTemplateDirective } from './components/row-detail/row-detail-template.directive';\nimport { DataTableColumnHeaderDirective } from './components/columns/column-header.directive';\nimport { DataTableColumnCellDirective } from './components/columns/column-cell.directive';\nimport { DataTableColumnGhostCellDirective } from './components/columns/column-ghost-cell.directive';\nimport { DataTableColumnCellTreeToggle } from './components/columns/tree.directive';\nimport { DatatableFooterDirective } from './components/footer/footer.directive';\nimport { DatatableGroupHeaderTemplateDirective } from './components/body/body-group-header-template.directive';\nimport { DisableRowDirective } from './directives/disable-row.directive';\nimport {\n DatatableRowDefComponent,\n DatatableRowDefDirective\n} from './components/body/body-row-def.component';\nimport { AllPartial, 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 DatatableGroupHeaderTemplateDirective,\n DisableRowDirective,\n DatatableRowDefComponent,\n DatatableRowDefDirective\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 DatatableGroupHeaderTemplateDirective,\n DisableRowDirective,\n DatatableRowDefComponent,\n DatatableRowDefDirective\n ]\n})\nexport class NgxDatatableModule {\n /**\n * Configure global configuration via INgxDatatableConfig\n * @param configuration\n */\n static forRoot(\n configuration: AllPartial<NgxDatatableConfig>\n ): ModuleWithProviders<NgxDatatableModule> {\n return {\n ngModule: NgxDatatableModule,\n providers: [providedNgxDatatableConfig(configuration)]\n };\n }\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/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';\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\n// services\nexport * from './lib/services/column-changes.service';\n\n// utilis\nexport * from './lib/utils/column-helper';\n\nexport {\n providedNgxDatatableConfig,\n NgxDatatableConfig,\n NgxDatatableMessages,\n NgxDatatableCssClasses\n} from './lib/ngx-datatable.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["takeUntil"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"swimlane-ngx-datatable.mjs","sources":["../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-header-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-header.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row-def.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-cell.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-ghost-cell.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column-header.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/tree.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/columns/column.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/visibility.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/ngx-datatable.config.ts","../../../../projects/swimlane/ngx-datatable/src/lib/services/scrollbar-helper.service.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/camel-case.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column-prop-getters.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/id.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/sort.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column-helper.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/column.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/math.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/number-or-undefined-attribute.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/table-token.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/throttle.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/tree.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/keys.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/row-height-cache.ts","../../../../projects/swimlane/ngx-datatable/src/lib/utils/selection.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-group-wrapper.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row-wrapper.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/ghost-loader/ghost-loader.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/ghost-loader/ghost-loader.component.html","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/scroller.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/summary/summary-row.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/progress-bar.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/pager.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/footer/footer.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/datatable-draggable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/directives/orderable.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/header/header-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/header/header.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/row-detail/row-detail-template.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/row-detail/row-detail.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/datatable.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/datatable.component.html","../../../../projects/swimlane/ngx-datatable/src/lib/directives/disable-row.directive.ts","../../../../projects/swimlane/ngx-datatable/src/lib/ngx-datatable.module.ts","../../../../projects/swimlane/ngx-datatable/src/lib/types/public.types.ts","../../../../projects/swimlane/ngx-datatable/src/public-api.ts","../../../../projects/swimlane/ngx-datatable/src/swimlane-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 { computed, contentChild, Directive, input, output, TemplateRef } 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 inject,\n InjectionToken,\n Injector,\n input,\n OnInit,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\n\nimport { RowOrGroup } from '../../types/public.types';\n\n/**\n * This component is passed as ng-template and rendered by BodyComponent.\n * BodyComponent uses rowDefInternal to first inject actual row template.\n * This component will render that actual row template.\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})\nexport class DatatableRowDefComponent {\n rowDef = inject(ROW_DEF_TOKEN);\n rowContext = {\n ...this.rowDef.rowDefInternal(),\n disabled: this.rowDef.rowDefInternalDisabled()\n };\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\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 readonly name = input<string>();\n readonly prop = input<TableColumnProp>();\n readonly bindAsUnsafeHtml = input(false, { transform: booleanAttribute });\n readonly frozenLeft = input(false, { transform: booleanAttribute });\n readonly frozenRight = input(false, { transform: booleanAttribute });\n readonly flexGrow = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n readonly resizeable = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n readonly comparator = input<\n ((valueA: any, valueB: any, rowA: TRow, rowB: TRow) => number) | undefined\n >();\n readonly pipe = input<PipeTransform | undefined>();\n readonly sortable = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n readonly draggable = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n readonly canAutoResize = input<boolean, boolean | string | undefined>(undefined, {\n transform: booleanAttribute\n });\n readonly minWidth = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n readonly width = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n readonly maxWidth = input<number, number | string | undefined>(undefined, {\n transform: numberAttribute\n });\n readonly checkboxable = input(false, { transform: booleanAttribute });\n readonly headerCheckboxable = input(false, { transform: booleanAttribute });\n readonly headerClass = input<\n string | ((data: { column: TableColumn }) => string | Record<string, boolean>) | undefined\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 readonly cellTemplateInput = input<TemplateRef<CellContext<TRow>> | undefined>(undefined, {\n alias: 'cellTemplate'\n });\n readonly cellTemplateQuery = contentChild(DataTableColumnCellDirective, { read: TemplateRef });\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 {\n Directive,\n ElementRef,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n output,\n signal\n} from '@angular/core';\n\n/**\n * Visibility Observer Directive\n *\n * Usage:\n *\n * \t\t<div\n * \t\t\tvisibilityObserver\n * \t\t\t(visible)=\"onVisible($event)\">\n * \t\t</div>\n *\n */\n@Directive({\n selector: '[visibilityObserver]',\n host: {\n '[class.visible]': 'isVisible()'\n }\n})\nexport class VisibilityDirective implements OnInit, OnDestroy {\n private element = inject(ElementRef);\n private zone = inject(NgZone);\n\n readonly isVisible = signal(false);\n\n readonly visible = output<boolean>();\n\n timeout?: number;\n\n ngOnInit(): void {\n this.runCheck();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.timeout);\n }\n\n onVisibilityChange(): void {\n // trigger zone recalc for columns\n this.zone.run(() => {\n this.isVisible.set(true);\n this.visible.emit(true);\n });\n }\n\n runCheck(): void {\n const check = (): void => {\n // https://davidwalsh.name/offsetheight-visibility\n const { offsetHeight, offsetWidth } = this.element.nativeElement;\n\n if (offsetHeight && offsetWidth) {\n clearTimeout(this.timeout);\n this.onVisibilityChange();\n } else {\n clearTimeout(this.timeout);\n this.zone.runOutsideAngular(() => {\n this.timeout = window.setTimeout(() => check(), 50);\n });\n }\n };\n\n this.timeout = window.setTimeout(() => check());\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}\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/**\n * Interface definition for ngx-datatable global configuration\n */\n// TODO those properties should all be required in the interface. Should be changed with signal migration.\nexport interface NgxDatatableConfig {\n messages?: NgxDatatableMessages;\n cssClasses?: NgxDatatableCssClasses;\n headerHeight?: number;\n footerHeight?: number;\n rowHeight?: number;\n defaultColumnWidth?: number;\n}\n\nexport const NGX_DATATABLE_CONFIG = new InjectionToken<NgxDatatableConfig>('ngx-datatable.config');\n\n/**\n * This makes all properties recursively optional.\n *\n * @internal\n */\nexport type AllPartial<T> = { [K in keyof T]?: AllPartial<T[K]> };\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: AllPartial<NgxDatatableConfig>): Provider => {\n return {\n provide: NGX_DATATABLE_CONFIG,\n useValue: overrides\n };\n};\n","import { DOCUMENT, inject, Injectable } from '@angular/core';\n\n/**\n * Gets the width of the scrollbar. Nesc for windows\n * http://stackoverflow.com/a/13382873/888165\n */\n@Injectable({ providedIn: 'root' })\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","/**\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 split = path.split('.');\n\n if (split.length) {\n for (let i = 0; i < split.length; i++) {\n current = current[split[i]];\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 {\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\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","import { TableColumnGroup, TableColumnInternal } from '../types/internal.types';\nimport { 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/facebook/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: number = 150,\n verticalScrollWidth = 0\n) => {\n const columnsToResize = allColumns\n .slice(startIdx + 1, allColumns.length)\n .filter(c => c.canAutoResize !== false);\n\n for (const column of columnsToResize) {\n if (!column.$$oldWidth) {\n column.$$oldWidth = column.width();\n }\n }\n\n let additionWidthPerColumn = 0;\n let exceedsWindow = false;\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 // reset so we don't have stale values\n for (const column of columnsToResize) {\n column.$$oldWidth = 0;\n }\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.\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","/**\n * Throttle a function\n */\nexport const throttle = (func: any, wait: number, options?: any) => {\n options ??= {};\n let args: any;\n let result: any;\n let timeout: any = null;\n let previous = 0;\n\n const later = () => {\n previous = options.leading === false ? 0 : +new Date();\n timeout = null;\n result = func(...args);\n };\n\n return (...argsNew: any[]) => {\n const now = +new Date();\n\n if (!previous && options.leading === false) {\n previous = now;\n }\n\n const remaining = wait - (now - previous);\n args = argsNew;\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func(...args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n};\n\n/**\n * Throttle decorator\n *\n * class MyClass {\n * throttleable(10)\n * myFn() { ... }\n * }\n */\nexport const throttleable = (duration: number, options?: any) => {\n return (target: any, key: PropertyKey, descriptor: PropertyDescriptor) => {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function () {\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: throttle(descriptor.value.bind(this), duration, options)\n });\n\n return (this as any)[key];\n }\n };\n };\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: This algorithm will fail if there is a deadlock of relationship\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 rootNodes = treeRows.reduce((root, node) => {\n const fromValue = from(node.row);\n const parent = uniqIDs.get(fromValue);\n if (parent) {\n node.row.level = parent.row.level! + 1; // TODO: should be reflected by type, that level is defined\n node.parent = parent;\n parent.children.push(node);\n } else {\n node.row.level = 0;\n root.push(node);\n }\n return root;\n }, [] as TreeNode<TRow>[]);\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 selected: TRow[],\n rows: (TRow | undefined)[],\n index: number,\n prevIndex: number\n): TRow[] => {\n const reverse = index < prevIndex;\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: 0, end: 0 };\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 in the positive range to be added to `selected`, and\n // not already in the selected array, add it\n if (i >= range.start && i <= range.end && row) {\n selected.push(row);\n }\n }\n }\n\n return selected;\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output\n} from '@angular/core';\n\nimport { Group, GroupContext, Row } from '../../types/public.types';\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\n class=\"datatable-group-header\"\n [style.height.px]=\"groupHeaderRowHeight()\"\n [style.width.px]=\"innerWidth()\"\n >\n <div class=\"datatable-group-cell\">\n @if (groupHeader.checkboxable()) {\n <div>\n <label class=\"datatable-checkbox\">\n <input\n #select\n type=\"checkbox\"\n [attr.aria-label]=\"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 }\n})\nexport class DataTableGroupWrapperComponent<TRow extends Row = any> {\n readonly innerWidth = input.required<number>();\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 selected = input.required<TRow[]>();\n readonly disabled = input<boolean>();\n readonly rowIndex = input.required<number>();\n readonly expanded = input(false, { transform: booleanAttribute });\n readonly ariaGroupHeaderCheckboxMessage = input.required<string>();\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 readonly innerWidth = input.required<number>();\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 ariaGroupHeaderCheckboxMessage = input.required<string>();\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 private rowDiffer = inject(KeyValueDiffers).find({}).create<keyof RowOrGroup<TRow>, any>();\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\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 { NgxDatatableConfig } from '../../ngx-datatable.config';\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';\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]=\"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]=\"cssClasses().treeStatusLoading ?? 'icon datatable-icon-collapse'\"></i>\n }\n @if (treeStatus === 'collapsed') {\n <i [class]=\"cssClasses().treeStatusCollapsed ?? 'icon datatable-icon-up'\"></i>\n }\n @if (treeStatus === 'expanded' || treeStatus === 'disabled') {\n <i [class]=\"cssClasses().treeStatusExpanded ?? 'icon datatable-icon-down'\"></i>\n }\n </span>\n </button>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"column.treeToggleTemplate\"\n [ngTemplateOutletContext]=\"{ cellContext: cellContext() }\"\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 '[style.width.px]': 'column().width()',\n '[style.minWidth.px]': 'column().minWidth',\n '[style.maxWidth.px]': 'column().maxWidth',\n '[style.height]': 'height()',\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 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 ariaRowCheckboxMessage = input.required<string>();\n\n readonly cssClasses = input.required<Partial<Required<NgxDatatableConfig>['cssClasses']>>();\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 height = computed(() => {\n const height = this.rowHeight();\n if (isNaN(height)) {\n return height;\n }\n return height + 'px';\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 private _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n ngDoCheck(): void {\n const value = this.getComputedValue();\n if (value !== this.value()) {\n this.value.set(value);\n }\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 HostBinding,\n HostListener,\n inject,\n input,\n KeyValueDiffer,\n KeyValueDiffers,\n output\n} from '@angular/core';\n\nimport { NgxDatatableConfig } from '../../ngx-datatable.config';\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.width.px]=\"_columnGroupWidths()[colGroup.type]\"\n [class.row-disabled]=\"disabled()\"\n >\n @for (column of colGroup.columns; track column.$$id; let ii = $index) {\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 [ariaRowCheckboxMessage]=\"ariaRowCheckboxMessage()\"\n [cssClasses]=\"cssClasses()\"\n (activate)=\"onActivate($event, ii)\"\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\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 readonly ariaRowCheckboxMessage = input.required<string>();\n\n readonly disabled = input<boolean>();\n readonly cssClasses = input.required<Partial<Required<NgxDatatableConfig>['cssClasses']>>();\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 @HostBinding('style.width.px')\n get columnsTotalWidths(): number {\n return this._columnGroupWidths().total;\n }\n\n readonly activate = output<ActivateEvent<TRow>>();\n readonly treeAction = output<void>();\n\n _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\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\n private _rowDiffer: KeyValueDiffer<keyof RowOrGroup<TRow>, any> = inject(KeyValueDiffers)\n .find({})\n .create();\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>, index: number): void {\n this.activate.emit({ ...event, rowElement: this._element, cellIndex: index });\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 input,\n numberAttribute\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.px]=\"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 booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n Renderer2\n} from '@angular/core';\n\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 '[style.width.px]': 'scrollWidth()'\n }\n})\nexport class ScrollerComponent implements OnInit, OnDestroy {\n private renderer = inject(Renderer2);\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 readonly scrollWidth = input<number>();\n\n readonly scroll = output<ScrollEventInternal>();\n\n scrollYPos = 0;\n scrollXPos = 0;\n prevScrollYPos = 0;\n prevScrollXPos = 0;\n element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n parentElement?: HTMLElement;\n\n private _scrollEventListener: any = null;\n private _scrollRafId: number | null = null;\n\n ngOnInit(): void {\n // manual bind so we don't always listen\n if (this.scrollbarV() || this.scrollbarH()) {\n const renderer = this.renderer;\n this.parentElement = renderer.parentNode(this.element);\n this._scrollEventListener = this.onScrolled.bind(this);\n this.parentElement?.addEventListener('scroll', this._scrollEventListener);\n }\n }\n\n ngOnDestroy(): void {\n if (this._scrollRafId !== null) {\n cancelAnimationFrame(this._scrollRafId);\n this._scrollRafId = null;\n }\n if (this._scrollEventListener) {\n this.parentElement?.removeEventListener('scroll', this._scrollEventListener);\n this._scrollEventListener = null;\n }\n }\n\n setOffset(offsetY: number): void {\n if (this.parentElement) {\n this.parentElement.scrollTop = offsetY;\n }\n }\n\n scrollTo(top: number, options?: ScrollToRowOptions): void {\n if (this.parentElement) {\n this.parentElement.scrollTo({ top, behavior: options?.behavior });\n }\n }\n\n onScrolled(event: MouseEvent): void {\n if (this._scrollRafId !== null) {\n return;\n }\n const dom: Element = event.currentTarget as Element;\n this._scrollRafId = requestAnimationFrame(() => {\n this._scrollRafId = null;\n this.scrollYPos = dom.scrollTop;\n this.scrollXPos = dom.scrollLeft;\n this.updateOffset();\n });\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 { Component, computed, input } 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],\n template: `\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 [cssClasses]=\"{}\"\n />\n }\n `,\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\n readonly rowHeight = input.required<number>();\n readonly innerWidth = input.required<number>();\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 ViewChild,\n viewChildren\n} from '@angular/core';\n\nimport { NgxDatatableConfig } from '../../ngx-datatable.config';\nimport { 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 { columnGroupWidths, columnsByPin } from '../../utils/column';\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 { 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 columnGroupWidths = this.columnGroupWidths();\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]=\"rowHeight()\"\n [ghostBodyHeight]=\"bodyHeight\"\n />\n }\n @if (rows.length) {\n <datatable-scroller\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH()\"\n [scrollHeight]=\"scrollHeight()\"\n [scrollWidth]=\"columnGroupWidths?.total\"\n [class.horizontal-overflow]=\"innerWidth() < (columnGroupWidths?.total ?? 0)\"\n (scroll)=\"onBodyScroll($event)\"\n >\n @if (summaryRow() && summaryPosition() === 'top') {\n <datatable-summary-row\n [rowHeight]=\"summaryHeight()\"\n [innerWidth]=\"innerWidth()\"\n [rows]=\"rows\"\n [columns]=\"columns\"\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 <datatable-row-wrapper\n [attr.hidden]=\"\n ghostLoadingIndicator() && (!rowCount || !virtualization() || !scrollbarV)\n ? true\n : null\n \"\n [innerWidth]=\"innerWidth()\"\n [rowDetail]=\"rowDetail()\"\n [detailRowHeightFn]=\"detailRowHeightFn()\"\n [row]=\"row\"\n [disabled]=\"disabled\"\n [expanded]=\"getRowExpanded(row)\"\n [rowIndex]=\"indexes().first + index\"\n [ariaGroupHeaderCheckboxMessage]=\"ariaGroupHeaderCheckboxMessage()\"\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: index, indexInGroup: indexInGroup }\"\n [expanded]=\"getRowExpanded(row)\"\n [rowClass]=\"rowClass()\"\n [displayCheck]=\"displayCheck()\"\n [treeStatus]=\"row?.treeStatus\"\n [draggable]=\"rowDraggable()\"\n [ariaRowCheckboxMessage]=\"ariaRowCheckboxMessage()\"\n [cssClasses]=\"cssClasses()\"\n [checkRowPropertyChanges]=\"checkRowPropertyChanges()\"\n (treeAction)=\"onTreeAction(row)\"\n (activate)=\"onActivate($event, index)\"\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 [style.transform]=\"renderOffset()\">\n @for (group of rowsToRender(); track rowTrackingFn(i, group); let i = $index) {\n @if (!group && ghostLoadingIndicator()) {\n <ghost-loader [columns]=\"columns\" [pageSize]=\"1\" [rowHeight]=\"rowHeight()\" />\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: indexes().first + 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 [innerWidth]=\"innerWidth()\"\n [style.width]=\"groupedRows() ? columnGroupWidths.total : undefined\"\n [groupHeader]=\"groupHeader()\"\n [groupHeaderRowHeight]=\"getGroupHeaderRowHeight(group, i)\"\n [disabled]=\"disabled\"\n [expanded]=\"getGroupExpanded(group)\"\n [rowIndex]=\"indexes().first + i\"\n [selected]=\"selected()\"\n [ariaGroupHeaderCheckboxMessage]=\"ariaGroupHeaderCheckboxMessage()\"\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: indexes().first + i,\n indexInGroup: $index,\n disabled\n }\"\n />\n }\n </datatable-group-wrapper>\n }\n }\n }\n </div>\n </datatable-scroller>\n @if (summaryRow() && summaryPosition() === 'bottom') {\n <datatable-summary-row\n [rowHeight]=\"summaryHeight()\"\n [innerWidth]=\"innerWidth()\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n />\n }\n }\n @if (!rows?.length && !loadingIndicator() && !ghostLoadingIndicator()) {\n <datatable-scroller\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH()\"\n [scrollHeight]=\"scrollHeight()\"\n [style.width]=\"scrollbarH() ? columnGroupWidths?.total + 'px' : '100%'\"\n (scroll)=\"onBodyScroll($event)\"\n >\n <ng-content select=\"[empty-content]\" />\n </datatable-scroller>\n }\n `,\n styleUrl: './body.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'datatable-body',\n '[style.height]': '_bodyHeight()',\n '[style.width]': '_bodyWidth()'\n }\n})\nexport class DataTableBodyComponent<TRow extends Row = any> implements OnInit, OnChanges {\n cd = inject(ChangeDetectorRef);\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 rowHeight = input.required<number | 'auto' | ((row?: any) => number)>();\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 @Input() groupExpansionDefault?: boolean;\n readonly innerWidth = input.required<number>();\n readonly virtualization = input<boolean>();\n readonly summaryRow = input<boolean>();\n readonly summaryPosition = input.required<string>();\n readonly summaryHeight = input.required<number>();\n readonly rowDraggable = input<boolean>();\n readonly rowDragEvents = input.required<OutputEmitterRef<DragEventData>>();\n readonly disableRowCheck = input<(row: TRow) => boolean | undefined>();\n readonly ariaGroupHeaderCheckboxMessage = input.required<string>();\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 readonly ariaRowCheckboxMessage = input.required<string>();\n readonly cssClasses = input.required<Partial<Required<NgxDatatableConfig>['cssClasses']>>();\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 @ViewChild(ScrollerComponent) scroller!: ScrollerComponent;\n private readonly rowWrappers = viewChildren(DataTableRowWrapperComponent);\n\n /**\n * Returns if selection is enabled.\n */\n get selectEnabled(): boolean {\n return !!this.selectionType();\n }\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 readonly columnGroupWidths = computed(() => {\n const colsByPin = columnsByPin(this.columns());\n return columnGroupWidths(colsByPin, this.columns());\n });\n rowTrackingFn: TrackByFunction<RowOrGroup<TRow> | undefined>;\n destroyRef = inject(DestroyRef);\n readonly rowExpansions = signal<TRow[]>([]);\n readonly groupExpansions = signal<Group<TRow>[]>([]);\n\n _rows!: (TRow | undefined)[];\n readonly _bodyWidth = computed(() => {\n if (this.scrollbarH()) {\n return this.innerWidth() + 'px';\n } else {\n return '100%';\n }\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 }\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 if (!this.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 this.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 /**\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 cache = this.rowHeightsCache();\n const rowTop = cache.query(index - 1);\n const rowBottom = cache.query(index);\n const rowHeight = rowBottom - rowTop;\n const viewportHeight = this.scroller.parentElement?.clientHeight ?? 0;\n const currentScrollTop = this.scroller.parentElement?.scrollTop ?? 0;\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 this.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.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.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.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) {\n selected = selectRowsBetween([], this.rows(), index, this.prevIndex!);\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): 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);\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>): 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 (!modelObject.cellElement || !isCellSelection) {\n this.focusRow(modelObject.rowElement, key);\n } else if (isCellSelection && modelObject.cellIndex !== undefined) {\n this.focusCell(modelObject.cellElement, modelObject.rowElement, key, modelObject.cellIndex);\n }\n }\n }\n\n focusRow(rowElement: HTMLElement, key: string): void {\n const nextRowElement = this.getPrevNextRow(rowElement, key);\n if (nextRowElement) {\n nextRowElement.focus();\n }\n }\n\n getPrevNextRow(rowElement: HTMLElement, key: string): any {\n const parentElement = rowElement.parentElement;\n\n if (parentElement) {\n let focusElement: Element | null = null;\n if (key === ARROW_UP) {\n focusElement = parentElement.previousElementSibling;\n } else if (key === ARROW_DOWN) {\n focusElement = parentElement.nextElementSibling;\n }\n\n if (focusElement?.children.length) {\n return focusElement.children[0];\n }\n }\n }\n\n focusCell(\n cellElement: HTMLElement,\n rowElement: HTMLElement,\n key: string,\n cellIndex: number\n ): void {\n let nextCellElement: Element | null = null;\n\n if (key === ARROW_LEFT) {\n nextCellElement = cellElement.previousElementSibling;\n } else if (key === ARROW_RIGHT) {\n nextCellElement = cellElement.nextElementSibling;\n } else if (key === ARROW_UP || key === ARROW_DOWN) {\n const nextRowElement = this.getPrevNextRow(rowElement, key);\n if (nextRowElement) {\n const children = nextRowElement.getElementsByClassName('datatable-body-cell');\n if (children.length) {\n nextCellElement = children[cellIndex];\n }\n }\n }\n\n if (\n nextCellElement &&\n 'focus' in nextCellElement &&\n typeof nextCellElement.focus === 'function'\n ) {\n nextCellElement.focus();\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 } from '@angular/core';\n\n@Component({\n selector: 'datatable-progress',\n template: `\n <div class=\"progress-linear\" role=\"progressbar\">\n <div class=\"container\">\n <div class=\"bar\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProgressBarComponent {}\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 { DatatableComponent } from '../datatable.component';\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]=\"messages.ariaFirstPageMessage ?? 'go to first page'\"\n (click)=\"selectPage(1)\"\n >\n <i [class]=\"pagerPreviousIcon() ?? 'datatable-icon-prev'\"></i>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"page-button\"\n [disabled]=\"!canPrevious()\"\n [attr.aria-label]=\"messages.ariaPreviousPageMessage ?? 'go to previous page'\"\n (click)=\"prevPage()\"\n >\n <i [class]=\"pagerLeftArrowIcon() ?? 'datatable-icon-left'\"></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]=\"(messages.ariaPageNMessage ?? 'page') + ' ' + 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]=\"messages.ariaNextPageMessage ?? 'go to next page'\"\n (click)=\"nextPage()\"\n >\n <i [class]=\"pagerRightArrowIcon() ?? 'datatable-icon-right'\"></i>\n </button>\n </li>\n <li>\n <button\n type=\"button\"\n class=\"page-button\"\n [disabled]=\"!canNext()\"\n [attr.aria-label]=\"messages.ariaLastPageMessage ?? 'go to last page'\"\n (click)=\"selectPage(totalPages())\"\n >\n <i [class]=\"pagerNextIcon() ?? 'datatable-icon-skip'\"></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 get messages(): ReturnType<DatatableComponent['messages']> {\n return this.datatable?.messages() ?? {};\n }\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 { ChangeDetectionStrategy, Component, computed, input, output, Signal } from '@angular/core';\n\nimport { FooterContext, PagerPageEvent } from '../../types/public.types';\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]=\"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> {{ selectedCount().toLocaleString() }} {{ selectedMessage() }} / </span>\n }\n {{ rowCount().toLocaleString() }} {{ 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 readonly footerHeight = input.required<number>();\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 totalMessage = input.required<string>();\n readonly footerTemplate = input<DatatableFooterDirective | undefined>();\n\n readonly selectedCount = input(0);\n readonly selectedMessage = input<string | boolean | undefined>(undefined);\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 { computed, contentChild, Directive, input, TemplateRef } 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 DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n OnDestroy,\n output,\n signal\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}\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<void>();\n readonly dragStart = output<void>();\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 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.removePointerListeners = () => {\n this.element.removeEventListener('mousedown', this.mousedown);\n this.element.removeEventListener('touchstart', this.touchstart);\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 });\n };\n\n private mousemove = (event: MouseEvent): void => this.moving(event.clientX, event.clientY);\n\n protected readonly touchstart = (event: TouchEvent): void => {\n if (!this.enabled()) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\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 this.document.addEventListener('touchmove', this.touchmove);\n this.starting(touch.clientX, touch.clientY);\n });\n };\n\n private touchmove = (event: TouchEvent): void => {\n const touchMove = this.findTouch(event)!;\n if (touchMove) {\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.dragStart.emit();\n }\n\n private moving(clientX: number, clientY: number): void {\n this.dragMove.emit({\n initialX: this.startX()!,\n initialY: this.startY()!,\n currentX: clientX,\n currentY: clientY\n });\n }\n\n private ending = (): void => {\n const dragged = this.isDragging();\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.dragEnd.emit();\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 {\n AfterContentInit,\n ContentChildren,\n Directive,\n DOCUMENT,\n effect,\n inject,\n KeyValueChangeRecord,\n KeyValueDiffer,\n KeyValueDiffers,\n OnDestroy,\n output,\n OutputRefSubscription,\n QueryList,\n signal\n} from '@angular/core';\nimport { startWith } from 'rxjs';\n\nimport {\n ReorderEventInternal,\n TableColumnInternal,\n TargetChangedEvent\n} from '../types/internal.types';\nimport { DatatableDraggableDirective, DragEvent } from './datatable-draggable.directive';\n\ninterface OrderPosition {\n left: number;\n right: number;\n index: number;\n element: HTMLElement;\n}\n\n@Directive({\n selector: '[orderable]'\n})\nexport class OrderableDirective implements AfterContentInit, OnDestroy {\n private document = inject(DOCUMENT);\n\n readonly reorder = output<ReorderEventInternal>();\n readonly targetChanged = output<TargetChangedEvent>();\n\n // This should be contentChildren() query, but there is an open Angular issue with signal queries (https://github.com/angular/angular/issues/59067)\n // This problem causes the orderable directive to fail because the contentChildren query is resolved too early.\n // At that state, the input is not yet set, resulting in a NG0950 error.\n @ContentChildren(DatatableDraggableDirective, { descendants: true })\n draggablesQueryList!: QueryList<DatatableDraggableDirective>;\n\n readonly draggables = signal<DatatableDraggableDirective[]>([]);\n\n readonly subscriptions = new Map<string, OutputRefSubscription[]>();\n\n positions?: Record<string, OrderPosition>;\n readonly differ: KeyValueDiffer<string, DatatableDraggableDirective> = inject(KeyValueDiffers)\n .find({})\n .create();\n lastDraggingIndex?: number;\n\n constructor() {\n effect(() => {\n const diffMap = this.draggables().reduce(\n (acc, curr) => {\n acc[curr.dragModel()!.$$id] = curr;\n return acc;\n },\n {} as Record<string, DatatableDraggableDirective>\n );\n\n this.updateSubscriptions(diffMap);\n });\n }\n\n ngAfterContentInit(): void {\n this.draggablesQueryList.changes.pipe(startWith(this.draggablesQueryList)).subscribe(() => {\n this.draggables.set(this.draggablesQueryList.toArray());\n });\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(subList => subList.forEach(sub => sub.unsubscribe()));\n }\n\n updateSubscriptions(diffMap: Record<string, DatatableDraggableDirective>): void {\n const differResult = this.differ.diff(diffMap);\n if (!differResult) {\n return;\n }\n differResult.forEachAddedItem(record => this.subscribeToDraggable(record));\n differResult.forEachRemovedItem(record => this.unsubscribeFromDraggable(record));\n }\n\n private subscribeToDraggable = (\n record: KeyValueChangeRecord<string, DatatableDraggableDirective>\n ): void => {\n this.unsubscribeFromDraggable(record);\n const { key, currentValue } = record;\n if (!currentValue) {\n return;\n }\n const subs = this.subscriptions.get(key) ?? [];\n let currentEvent: DragEvent;\n subs.push(\n currentValue.dragStart.subscribe(() => this.onDragStart()),\n currentValue.dragMove.subscribe(e => {\n currentEvent = e;\n this.onDragging(e, currentValue.dragModel()!, currentValue.element);\n }),\n currentValue.dragEnd.subscribe(() =>\n this.onDragEnd(currentEvent!, currentValue.dragModel()!, currentValue.element)\n )\n );\n this.subscriptions.set(key, subs);\n };\n\n private unsubscribeFromDraggable = (\n record: KeyValueChangeRecord<string, DatatableDraggableDirective>\n ): void => {\n const { key, previousValue } = record;\n if (!previousValue) {\n return;\n }\n const subs = this.subscriptions.get(key);\n if (!subs) {\n return;\n }\n subs.forEach(sub => sub.unsubscribe());\n this.subscriptions.delete(key);\n };\n\n onDragStart(): void {\n const positions: Record<string, OrderPosition> = {};\n this.draggables().forEach((draggable, idx) => {\n const elm = draggable.element;\n const left = parseInt(elm.offsetLeft.toString(), 10);\n positions[draggable.dragModel()!.$$id] = {\n left,\n right: left + parseInt(elm.offsetWidth.toString(), 10),\n index: idx,\n element: elm\n };\n });\n this.positions = positions;\n }\n\n onDragging(\n { currentX, currentY, initialX }: DragEvent,\n model: TableColumnInternal,\n element: HTMLElement\n ): void {\n if (!this.positions) {\n return;\n }\n const prevPos = this.positions[model.$$id];\n const target = this.isTarget(model, currentX, currentY);\n if (target) {\n if (this.lastDraggingIndex !== target.index) {\n this.targetChanged.emit({\n prevIndex: this.lastDraggingIndex!,\n newIndex: target.index,\n initialIndex: prevPos.index\n });\n this.lastDraggingIndex = target.index;\n }\n } else if (this.lastDraggingIndex !== prevPos.index) {\n this.targetChanged.emit({\n prevIndex: this.lastDraggingIndex!,\n initialIndex: prevPos.index\n });\n this.lastDraggingIndex = prevPos.index;\n }\n\n requestAnimationFrame(() => (element.style.left = `${currentX - initialX}px`));\n }\n\n onDragEnd(\n { currentX, currentY }: DragEvent,\n model: TableColumnInternal,\n element: HTMLElement\n ): void {\n if (!this.positions) {\n return;\n }\n const prevPos = this.positions[model.$$id];\n const target = this.isTarget(model, currentX, currentY);\n if (target) {\n this.reorder.emit({\n prevValue: prevPos.index,\n newValue: target.index,\n column: model\n });\n }\n this.lastDraggingIndex = undefined;\n element.style.left = 'auto';\n }\n\n isTarget(\n model: TableColumnInternal,\n clientX: number,\n clientY: number\n ): { pos: OrderPosition; index: number } | undefined {\n if (!this.positions) {\n return undefined;\n }\n const elementsAtPoint = this.document.elementsFromPoint(clientX, clientY);\n return Object.entries(this.positions).reduce<{ pos: OrderPosition; index: number } | undefined>(\n (acc, [id, pos], idx) => {\n // since we drag the inner span, we need to find it in the elements at the cursor\n if (!acc && model.$$id !== id && elementsAtPoint.some(el => el === pos.element)) {\n return { pos, index: idx };\n }\n return acc;\n },\n undefined\n );\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n HostListener,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n TemplateRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport {\n DatatableDraggableDirective,\n DragEvent\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';\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]=\"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 [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 '[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 '[style.minWidth.px]': 'column().minWidth',\n '[style.maxWidth.px]': 'column().maxWidth',\n '[style.width.px]': 'column().width()'\n }\n})\nexport class DataTableHeaderCellComponent implements OnInit, OnDestroy {\n readonly sortType = input.required<SortType>();\n readonly sortAscendingIcon = input<string>();\n readonly sortDescendingIcon = input<string>();\n readonly sortUnsetIcon = input<string>();\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 ariaHeaderCheckboxMessage = input.required<string>();\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 return this.calcSortClass(this.sortDir());\n });\n protected readonly sortDir = computed<SortDirection | undefined>(() => {\n return this.calcSortDir(this.sorts());\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 element = inject(ElementRef).nativeElement;\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 if (sortDir === 'asc') {\n return ['sort-btn', 'sort-asc', this.sortAscendingIcon() ?? 'datatable-icon-up'];\n } else if (sortDir === 'desc') {\n return ['sort-btn', 'sort-desc', this.sortDescendingIcon() ?? 'datatable-icon-down'];\n } else {\n return ['sort-btn', this.sortUnsetIcon() ?? 'datatable-icon-sort-unset'];\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 { NgStyle } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n TemplateRef\n} from '@angular/core';\n\nimport { DatatableDraggableDirective } from '../../directives/datatable-draggable.directive';\nimport { OrderableDirective } from '../../directives/orderable.directive';\nimport { ScrollbarHelper } from '../../services/scrollbar-helper.service';\nimport {\n ColumnResizeEventInternal,\n InnerSortEvent,\n ReorderEventInternal,\n SortableTableColumnInternal,\n TableColumnInternal,\n TargetChangedEvent\n} from '../../types/internal.types';\nimport {\n Row,\n SelectionType,\n SortDirection,\n SortEvent,\n SortPropDir,\n SortType\n} from '../../types/public.types';\nimport { columnGroupWidths, columnsByPin, columnsByPinArr } from '../../utils/column';\nimport { toPublicColumn } from '../../utils/column-helper';\nimport { DataTableHeaderCellComponent } from './header-cell.component';\n\n@Component({\n selector: 'datatable-header',\n imports: [OrderableDirective, NgStyle, DataTableHeaderCellComponent, DatatableDraggableDirective],\n template: `\n @let _columnGroupWidths = this._columnGroupWidths();\n <div\n role=\"row\"\n orderable\n class=\"datatable-header-inner\"\n [class.horizontal-overflow]=\"innerWidth() < _columnGroupWidths.total\"\n [style.width.px]=\"_columnGroupWidths.total\"\n (reorder)=\"onColumnReordered($event)\"\n (targetChanged)=\"onTargetChanged($event)\"\n >\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 [ngStyle]=\"_styleByGroup()[colGroup.type]\"\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]=\"column.isTarget\"\n [targetMarkerTemplate]=\"targetMarkerTemplate()\"\n [targetMarkerContext]=\"column.targetMarkerContext\"\n [column]=\"column\"\n [showResizeHandle]=\"lastColumnId() !== column.$$id && column.resizeable\"\n [sortType]=\"sortType()\"\n [sorts]=\"sorts()\"\n [selectionType]=\"selectionType()\"\n [sortAscendingIcon]=\"sortAscendingIcon()\"\n [sortDescendingIcon]=\"sortDescendingIcon()\"\n [sortUnsetIcon]=\"sortUnsetIcon()\"\n [allRowsSelected]=\"allRowsSelected()\"\n [enableClearingSortState]=\"enableClearingSortState()\"\n [ariaHeaderCheckboxMessage]=\"ariaHeaderCheckboxMessage()\"\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]': 'headerHeight()',\n '[style.width]': 'headerWidth()'\n }\n})\nexport class DataTableHeaderComponent {\n private scrollbarHelper = inject(ScrollbarHelper);\n\n readonly lastColumnId = computed(() => this.columns().at(-1)?.$$id);\n\n readonly sortAscendingIcon = input<string>();\n readonly sortDescendingIcon = input<string>();\n readonly sortUnsetIcon = input<string>();\n readonly scrollbarH = input<boolean>();\n readonly dealsWithGroup = input<boolean>();\n readonly targetMarkerTemplate = input<TemplateRef<unknown>>();\n readonly enableClearingSortState = input(false);\n readonly innerWidth = input.required<number>();\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 readonly ariaHeaderCheckboxMessage = input.required<string>();\n\n readonly headerHeight = input.required<'auto' | number>();\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 _columnsByPin = computed(() => {\n return columnsByPinArr(this.columns());\n });\n readonly _columnGroupWidths = computed(() => {\n const colsByPin = columnsByPin(this.columns());\n return columnGroupWidths(colsByPin, this.columns());\n });\n readonly _styleByGroup = computed(() => {\n return {\n left: this.calcStylesByGroup('left'),\n center: this.calcStylesByGroup('center'),\n right: this.calcStylesByGroup('right')\n };\n });\n\n readonly headerWidth = computed(() => {\n if (this.scrollbarH()) {\n const width = this.verticalScrollVisible()\n ? this.innerWidth() - this.scrollbarHelper.width\n : this.innerWidth();\n return width + 'px';\n }\n\n return '100%';\n });\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 onColumnReordered(event: ReorderEventInternal): void {\n const column = this.getColumn(event.newValue);\n column.isTarget = false;\n column.targetMarkerContext = undefined;\n this.reorder.emit(event);\n }\n\n onTargetChanged({ prevIndex, newIndex, initialIndex }: TargetChangedEvent): void {\n if (prevIndex || prevIndex === 0) {\n const oldColumn = this.getColumn(prevIndex);\n oldColumn.isTarget = false;\n oldColumn.targetMarkerContext = undefined;\n }\n if (newIndex || newIndex === 0) {\n const newColumn = this.getColumn(newIndex);\n newColumn.isTarget = true;\n\n if (initialIndex !== newIndex) {\n newColumn.targetMarkerContext = {\n class: 'targetMarker '.concat(initialIndex > newIndex ? 'dragFromRight' : 'dragFromLeft')\n };\n }\n }\n }\n\n getColumn(index: number): any {\n const _columnsByPin = this._columnsByPin();\n const leftColumnCount = _columnsByPin[0].columns.length;\n if (index < leftColumnCount) {\n return _columnsByPin[0].columns[index];\n }\n\n const centerColumnCount = _columnsByPin[1].columns.length;\n if (index < leftColumnCount + centerColumnCount) {\n return _columnsByPin[1].columns[index - leftColumnCount];\n }\n\n return _columnsByPin[2].columns[index - leftColumnCount - centerColumnCount];\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 calcStylesByGroup(group: 'center' | 'right' | 'left'): NgStyle['ngStyle'] {\n const widths = this._columnGroupWidths();\n\n return {\n width: `${widths[group]}px`\n };\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 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 booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChild,\n contentChild,\n contentChildren,\n DoCheck,\n effect,\n ElementRef,\n HostListener,\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 { VisibilityDirective } from '../directives/visibility.directive';\nimport { NGX_DATATABLE_CONFIG, NgxDatatableConfig } 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 SelectEvent,\n SelectionType,\n SortEvent,\n SortPropDir,\n SortType,\n TreeStatus\n} from '../types/public.types';\nimport { TableColumn } from '../types/table-column.type';\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 { throttleable } from '../utils/throttle';\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 { DataTableColumnDirective } from './columns/column.directive';\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 VisibilityDirective,\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 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 }\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 private configuration =\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 /**\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 * The row height; which is necessary\n * to calculate the height for the lazy rendering.\n */\n readonly rowHeight = input<number | 'auto' | ((row: TRow) => number)>(\n this.configuration?.rowHeight ?? 30\n );\n\n /**\n * Type of column width distribution formula.\n * Example: flex, force, standard\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.configuration?.headerHeight ?? 30);\n\n /**\n * The minimum footer height in pixels.\n * Pass falsey for no footer\n */\n readonly footerHeight = input(this.configuration?.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 * The type of sorting\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\n */\n readonly cssClasses = input<Partial<Required<NgxDatatableConfig>['cssClasses']>>(\n this.configuration?.cssClasses ?? {}\n );\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 * }\n * ```\n */\n readonly messages = input<Partial<Required<NgxDatatableConfig>['messages']>>(\n this.configuration?.messages ?? {}\n );\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 * A cell or row was selected.\n * @deprecated Use two-way binding on `selected` instead.\n *\n * Before:\n * ```html\n * <ngx-datatable [selected]=\"mySelection\" (select)=\"onSelect($event)\"></ngx-datatable>\n * ```\n *\n * After:\n * ```html\n * <ngx-datatable [selected]=\"mySelection\" (selectedChange)=\"onSelect({selected: $event})\"></ngx-datatable>\n * <!-- or -->\n * <ngx-datatable [(selected)]=\"mySelection\"></ngx-datatable>\n * ```\n */\n readonly select = output<SelectEvent<TRow>>();\n\n /**\n * Column sort was invoked.\n * @deprecated Use two-way binding on `sorts` instead.\n *\n * Before:\n * ```html\n * <ngx-datatable [sorts]=\"mySorts\" (sort)=\"onSort($event)\"></ngx-datatable>\n * ```\n *\n * After:\n * ```html\n * <ngx-datatable [sorts]=\"mySorts\" (sortsChange)=\"onSort({sorts: $event})\"></ngx-datatable>\n * <!-- or -->\n * <ngx-datatable [(sorts)]=\"mySorts\"></ngx-datatable>\n * ```\n */\n readonly sort = output<SortEvent>();\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 * 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 private readonly _bodyElement = viewChild.required(DataTableBodyComponent, {\n read: ElementRef<HTMLElement>\n });\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 element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n readonly _innerWidth = computed(() => this.dimensions().width);\n readonly pageSize = computed(() => this.calcPageSize());\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 rowDiffer: IterableDiffer<TRow | undefined> = inject(IterableDiffers).find([]).create();\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 // in case where we don't have predefined total page length\n rows.push(undefined); // undefined row will render ghost cell row at the end of the page\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 * 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 _subscriptions: Subscription[] = [];\n _defaultColumnWidth = this.configuration?.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'>>({ height: 0, width: 0 });\n\n constructor() {\n // TODO: This should be a computed signal.\n // Effect to handle recalculate when limit or count changes\n effect(() => {\n // Track limit and count changes\n this.limit();\n this.count();\n // Recalculate without tracking other signals\n untracked(() => this.recalculateDims());\n });\n\n effect(() => this.recalculateColumns());\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 if (rowDiffers) {\n queueMicrotask(() => {\n this.recalculate();\n this.cd.markForCheck();\n });\n }\n\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 // this has to be done to prevent the change detection\n // tree from freaking out because we are readjusting\n if (typeof requestAnimationFrame === 'undefined') {\n return;\n }\n\n requestAnimationFrame(() => {\n this.recalculate();\n\n // emit page for virtual server-side kickoff\n if (this.externalPaging() && this.scrollbarV()) {\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 * Recalc's the sizes of the grid.\n *\n * Updated automatically on changes to:\n *\n * - Columns\n * - Rows\n * - Paging related\n *\n * Also can be manually invoked or upon window resize.\n */\n recalculate(): void {\n this.recalculateDims();\n }\n\n /**\n * Window resize handler to update sizes.\n */\n @HostListener('window:resize')\n @throttleable(5)\n onWindowResize(): void {\n this.recalculate();\n }\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 const { scrollHeight, clientHeight } = this._bodyElement().nativeElement;\n this.verticalScrollVisible = scrollHeight > clientHeight;\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 * Recalculates the dimensions of the table size.\n * Internally calls the page size and row count calcs too.\n *\n */\n recalculateDims(): void {\n const dims = this.element.getBoundingClientRect();\n this.dimensions.set(dims);\n }\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 // Sync header scroll position directly via DOM to avoid Angular CD lag\n const headerEl = this._headerElement()?.nativeElement;\n if (headerEl) {\n headerEl.scrollLeft = event.offsetX;\n }\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 this.select.emit({\n selected: this.selected()\n });\n }\n }\n\n /**\n * Recalculates the sizes of the page\n */\n calcPageSize(): number {\n // Keep the page size constant even if the row has been expanded.\n // This is because an expanded row is still considered to be a child of\n // the original row. Hence calculation would use rowHeight only.\n if (this.scrollbarV() && this.virtualization()) {\n const size = Math.ceil(this.bodyHeight() / (this.rowHeight() as number));\n return Math.max(size, 0);\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 this.select.emit({\n selected: this.selected()\n });\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 this.sort.emit(event);\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 this.select.emit({\n selected: this.selected()\n });\n }\n\n /**\n * A row was selected from body\n */\n onBodySelect(selected: TRow[]): void {\n this.select.emit({ selected });\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._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 microTask here to let Angular update the DOM\n queueMicrotask(() => this.scrollToRowTree(row, options, true));\n }\n}\n","<div visibilityObserver (visible)=\"recalculate()\">\n <div role=\"table\">\n @if (headerHeight()) {\n <datatable-header\n role=\"rowgroup\"\n [sorts]=\"sorts()\"\n [sortType]=\"sortType()\"\n [scrollbarH]=\"scrollbarH()\"\n [innerWidth]=\"_innerWidth()\"\n [dealsWithGroup]=\"_internalGroupedRows() !== undefined\"\n [columns]=\"_internalColumns()\"\n [headerHeight]=\"headerHeight()\"\n [reorderable]=\"reorderable()\"\n [targetMarkerTemplate]=\"targetMarkerTemplate()\"\n [sortAscendingIcon]=\"cssClasses().sortAscending\"\n [sortDescendingIcon]=\"cssClasses().sortDescending\"\n [sortUnsetIcon]=\"cssClasses().sortUnset\"\n [allRowsSelected]=\"allRowsSelected()\"\n [selectionType]=\"selectionType()\"\n [verticalScrollVisible]=\"verticalScrollVisible\"\n [enableClearingSortState]=\"enableClearingSortState()\"\n [ariaHeaderCheckboxMessage]=\"messages().ariaHeaderCheckboxMessage ?? 'Select all rows'\"\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 [rowHeight]=\"rowHeight()\"\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 [innerWidth]=\"_innerWidth()\"\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 [verticalScrollVisible]=\"verticalScrollVisible\"\n [ariaRowCheckboxMessage]=\"messages().ariaRowCheckboxMessage ?? 'Select row'\"\n [ariaGroupHeaderCheckboxMessage]=\"\n messages().ariaGroupHeaderCheckboxMessage ?? 'Select row group'\n \"\n [disableRowCheck]=\"disableRowCheck()\"\n [checkRowPropertyChanges]=\"checkRowPropertyChanges()\"\n [rowDraggable]=\"rowDraggable()\"\n [rowDragEvents]=\"rowDragEvents\"\n [rowDefTemplate]=\"_rowDefTemplate()\"\n [cssClasses]=\"cssClasses()\"\n [(selected)]=\"selected\"\n (page)=\"onBodyPage($event)\"\n (activate)=\"activate.emit($event)\"\n (rowContextmenu)=\"onRowContextmenu($event)\"\n (selectedChange)=\"onBodySelect($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 role=\"row\">\n <div\n role=\"cell\"\n class=\"empty-row\"\n [innerHTML]=\"messages().emptyMessage ?? 'No data to display'\"\n ></div>\n </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 [footerHeight]=\"footerHeight()\"\n [footerTemplate]=\"_footer()\"\n [totalMessage]=\"messages().totalMessage ?? 'total'\"\n [pagerLeftArrowIcon]=\"cssClasses().pagerLeftArrow\"\n [pagerRightArrowIcon]=\"cssClasses().pagerRightArrow\"\n [pagerPreviousIcon]=\"cssClasses().pagerPrevious\"\n [selectedCount]=\"selected().length\"\n [selectedMessage]=\"!!selectionType() && (messages().selectedMessage ?? 'selected')\"\n [pagerNextIcon]=\"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 { 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 { AllPartial, 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 ],\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 ]\n})\nexport class NgxDatatableModule {\n /**\n * Configure global configuration via INgxDatatableConfig\n * @param configuration\n */\n static forRoot(\n configuration: AllPartial<NgxDatatableConfig>\n ): 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 cellIndex?: 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\n/** @deprecated. Use two-way binding instead. See {@link DatatableComponent.select} */\nexport interface SelectEvent<TRow> {\n selected: TRow[];\n}\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'\n | 'dragend'\n | 'dragenter'\n | 'dragleave'\n | 'dragover'\n | 'dragstart'\n | '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';\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\n// utilis\nexport * from './lib/utils/column-helper';\n\nexport {\n providedNgxDatatableConfig,\n NgxDatatableConfig,\n NgxDatatableMessages,\n 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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"}
|