@swimlane/ngx-datatable 22.0.0-alpha.0 → 22.0.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.
|
@@ -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","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\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/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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"}
|