{"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/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/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/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-cell.component.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/body-row.component.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/utils/selection.ts","../../../../projects/swimlane/ngx-datatable/src/lib/components/body/selection.component.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/directives/resizeable.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/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  standalone: true\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  standalone: true\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 } from '../../types/public.types';\n\n@Directive({\n  selector: 'ngx-datatable-group-header',\n  standalone: true\n})\nexport class DatatableGroupHeaderDirective<TRow = 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>> {\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): ValueGetter {\n  if (prop == null) {\n    return emptyStringGetter;\n  }\n\n  if (typeof prop === 'number') {\n    return numericIndexGetter;\n  } else {\n    // deep or simple\n    if (prop.indexOf('.') !== -1) {\n      return deepValueGetter;\n    } else {\n      return shallowValueGetter;\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';\n\nexport type OptionalValueGetter = (row: any) => any | undefined;\nexport function optionalGetterForProp(prop: TableColumnProp): OptionalValueGetter {\n  return prop && (row => getterForProp(prop)(row, prop));\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>(\n  rows: TRow[],\n  from?: OptionalValueGetter,\n  to?: OptionalValueGetter\n): TRow[] {\n  if (from && to) {\n    const nodeById = {};\n    const l = rows.length;\n    let node: TreeNode | null = null;\n\n    nodeById[0] = new TreeNode(); // that's the root node\n\n    const uniqIDs = rows.reduce((arr, item) => {\n      const toValue = to(item);\n      if (arr.indexOf(toValue) === -1) {\n        arr.push(toValue);\n      }\n      return arr;\n    }, []);\n\n    for (let i = 0; i < l; i++) {\n      // make TreeNode objects for each item\n      nodeById[to(rows[i])] = new TreeNode(rows[i]);\n    }\n\n    for (let i = 0; i < l; i++) {\n      // link all TreeNode objects\n      node = nodeById[to(rows[i])];\n      let parent = 0;\n      const fromValue = from(node.row);\n      if (!!fromValue && uniqIDs.indexOf(fromValue) > -1) {\n        parent = fromValue;\n      }\n      node.parent = nodeById[parent];\n      node.row['level'] = node.parent.row['level'] + 1;\n      node.parent.children.push(node);\n    }\n\n    let resolvedRows: any[] = [];\n    nodeById[0].flatten(function () {\n      resolvedRows = [...resolvedRows, this.row];\n    }, true);\n\n    return resolvedRows;\n  } else {\n    return rows;\n  }\n}\n\nclass TreeNode {\n  public row: any;\n  public parent: any;\n  public children: any[];\n\n  constructor(row: any | null = null) {\n    if (!row) {\n      row = {\n        level: -1,\n        treeStatus: 'expanded'\n      };\n    }\n    this.row = row;\n    this.parent = null;\n    this.children = [];\n  }\n\n  flatten(f: any, recursive: boolean) {\n    if (this.row['treeStatus'] === 'expanded') {\n      for (let i = 0, l = this.children.length; i < l; i++) {\n        const child = this.children[i];\n        f.apply(child, Array.prototype.slice.call(arguments, 2));\n        if (recursive) {\n          child.flatten.apply(child, arguments);\n        }\n      }\n    }\n  }\n}\n","/**\n * Converts strings from something to camel case\n * http://stackoverflow.com/questions/10425287/convert-dash-separated-string-to-camelcase\n */\nexport 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 { DataTableColumnDirective } from '../components/columns/column.directive';\n\n/**\n * Sets the column defaults\n */\nexport function setColumnDefaults(columns: TableColumn[], defaultColumnWidth = 150) {\n  if (!columns) {\n    return;\n  }\n\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  let treeColumnFound: boolean = false;\n\n  for (const column of columns) {\n    if (!column.$$id) {\n      column.$$id = id();\n    }\n\n    // prop can be numeric; zero is valid not a missing prop\n    // translate name => prop\n    if (isNullOrUndefined(column.prop) && column.name) {\n      column.prop = camelCase(column.name);\n    }\n\n    if (!column.$$valueGetter) {\n      column.$$valueGetter = getterForProp(column.prop);\n    }\n\n    // format props if no name passed\n    if (!isNullOrUndefined(column.prop) && isNullOrUndefined(column.name)) {\n      column.name = deCamelCase(String(column.prop));\n    }\n\n    if (isNullOrUndefined(column.prop) && isNullOrUndefined(column.name)) {\n      column.name = ''; // Fixes IE and Edge displaying `null`\n    }\n\n    if (!('resizeable' in column)) {\n      column.resizeable = true;\n    }\n\n    if (!('sortable' in column)) {\n      column.sortable = true;\n    }\n\n    if (!('draggable' in column)) {\n      column.draggable = true;\n    }\n\n    if (!('canAutoResize' in column)) {\n      column.canAutoResize = true;\n    }\n\n    if (!('width' in column)) {\n      column.width = defaultColumnWidth;\n    }\n\n    if (!('isTreeColumn' in column)) {\n      column.isTreeColumn = false;\n    } else {\n      if (column.isTreeColumn && !treeColumnFound) {\n        // If the first column with isTreeColumn is true found\n        // we mark that treeCoulmn is found\n        treeColumnFound = true;\n      } else {\n        // After that isTreeColumn property for any other column\n        // will be set as false\n        column.isTreeColumn = false;\n      }\n    }\n  }\n}\n\nexport function isNullOrUndefined<T>(value: T | null | undefined): value is null | undefined {\n  return value === null || value === undefined;\n}\n\n/**\n * Translates templates definitions to objects\n */\nexport function translateTemplates<TRow>(\n  templates: DataTableColumnDirective<TRow>[]\n): TableColumn[] {\n  const result: TableColumn[] = [];\n  for (const temp of templates) {\n    const col: TableColumn = {};\n\n    const props = Object.getOwnPropertyNames(temp);\n    for (const prop of props) {\n      col[prop] = temp[prop];\n    }\n\n    if (temp.headerTemplate) {\n      col.headerTemplate = temp.headerTemplate;\n    }\n\n    if (temp.cellTemplate) {\n      col.cellTemplate = temp.cellTemplate;\n    }\n\n    if (temp.ghostCellTemplate) {\n      col.ghostCellTemplate = temp.ghostCellTemplate;\n    }\n\n    if (temp.summaryFunc) {\n      col.summaryFunc = temp.summaryFunc;\n    }\n\n    if (temp.summaryTemplate) {\n      col.summaryTemplate = temp.summaryTemplate;\n    }\n\n    result.push(col);\n  }\n\n  return result;\n}\n","import { Directive } from '@angular/core';\nimport { HeaderCellContext } from '../../types/public.types';\n\n@Directive({\n  selector: '[ngx-datatable-header-template]',\n  standalone: true\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  standalone: true\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  standalone: true\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  standalone: true\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 } from '../../types/public.types';\n\n@Directive({\n  selector: 'ngx-datatable-column',\n  standalone: true\n})\nexport class DataTableColumnDirective<TRow> 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: any;\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>> {\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> {\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> {\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> {\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  standalone: true\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 { RowDetailContext } from '../../types/public.types';\n\n@Directive({\n  selector: 'ngx-datatable-row-detail',\n  standalone: true\n})\nexport class DatatableRowDetailDirective<TRow = 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>> {\n    return this._templateInput || this._templateQuery;\n  }\n\n  /**\n   * Row detail row visbility was toggled.\n   */\n  @Output() toggle: EventEmitter<any> = new EventEmitter();\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, numberAttribute, 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  standalone: true\n})\nexport class DatatableFooterDirective {\n  @Input({ transform: numberAttribute }) footerHeight: number;\n  @Input() totalMessage: string;\n  @Input() selectedMessage: string | boolean;\n  @Input() pagerLeftArrowIcon: string;\n  @Input() pagerRightArrowIcon: string;\n  @Input() pagerPreviousIcon: string;\n  @Input() pagerNextIcon: string;\n\n  @Input('template')\n  _templateInput: TemplateRef<FooterContext>;\n\n  @ContentChild(DataTableFooterTemplateDirective, { read: TemplateRef })\n  _templateQuery: TemplateRef<FooterContext>;\n\n  get template(): TemplateRef<FooterContext> {\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  standalone: true\n})\nexport class ScrollerComponent implements OnInit, OnDestroy {\n  private renderer = inject(Renderer2);\n\n  @Input() scrollbarV = false;\n  @Input() scrollbarH = false;\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(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 if (this.scrollYPos > this.prevScrollYPos) {\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 { TableColumn, TableColumnGroup } from '../types/table-column.type';\nimport { ColumnGroupWidth, PinnedColumns } from '../types/internal.types';\n\n/**\n * Returns the columns by pin.\n */\nexport function columnsByPin(cols: TableColumn[]) {\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(groups: TableColumnGroup, all: TableColumn[]): 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 and their groups\n */\nexport function columnTotalWidth(columns: TableColumn[], prop?: string) {\n  let totalWidth = 0;\n\n  if (columns) {\n    for (const c of columns) {\n      const has = prop && c[prop];\n      const width = has ? c[prop] : c.width;\n      totalWidth = totalWidth + parseFloat(width);\n    }\n  }\n\n  return totalWidth;\n}\n\n/**\n * Calculates the total width of all columns and their groups\n */\nexport function columnsTotalWidth(columns: TableColumn[], prop?: keyof TableColumn) {\n  let totalWidth = 0;\n\n  for (const column of columns) {\n    const has = prop && column[prop];\n    totalWidth = totalWidth + (has ? column[prop] : column.width);\n  }\n\n  return totalWidth;\n}\n\nexport function columnsByPinArr(val: TableColumn[]): 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      rowCount,\n      rowIndexes,\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 = rowIndexes.get(row);\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';\nimport { BehaviorSubject, Observable } from 'rxjs';\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 InnerSortEvent {\n  column: TableColumn;\n  prevValue: SortDirection;\n  newValue: SortDirection;\n}\n\nexport interface SortEvent extends InnerSortEvent {\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: MouseEvent | KeyboardEvent;\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';\n  sortFn: () => void;\n  allRowsSelected: boolean;\n  selectFn: () => void;\n}\n\nexport interface GroupContext<TRow = any> {\n  group: Group<TRow>;\n  expanded: boolean;\n  rowIndex: number;\n}\n\nexport interface CellContext<TRow = 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  treeStatus: TreeStatus;\n  disable$: BehaviorSubject<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 = any> {\n  row: TRow;\n  expanded: boolean;\n  rowIndex: number;\n  disableRow$?: Observable<boolean>;\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  limit: number;\n  offset: number;\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 enum SelectionType {\n  single = 'single',\n  multi = 'multi',\n  multiClick = 'multiClick',\n  cell = 'cell',\n  checkbox = 'checkbox'\n}\n\nexport type DragEventType =\n  | 'drag'\n  | 'dragend'\n  | 'dragenter'\n  | 'dragleave'\n  | 'dragover'\n  | 'dragstart'\n  | 'drop';\n\nexport interface DragEventData {\n  event: DragEvent;\n  srcElement: HTMLElement;\n  targetElement?: HTMLElement;\n  eventType: DragEventType;\n  dragRow: any;\n  dropRow?: any;\n}\n","import { ChangeDetectionStrategy, Component, Input, numberAttribute } from '@angular/core';\nimport { TableColumn } from '../../../types/table-column.type';\nimport { NgTemplateOutlet } from '@angular/common';\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: TableColumn[];\n  @Input({ transform: numberAttribute }) pageSize: number;\n  @Input() rowHeight: number | 'auto' | ((row?: any) => number);\n  @Input({ transform: numberAttribute }) ghostBodyHeight: number;\n}\n","<div [style.height]=\"ghostBodyHeight + 'px'\" class=\"ghost-loader ghost-cell-container\">\n  @for (item of [].constructor(pageSize); track item) {\n    <div [style.height]=\"rowHeight + 'px'\" class=\"ghost-element\">\n      @for (col of columns; track col) {\n        @if (!col.ghostCellTemplate) {\n          <div class=\"line ghost-cell-strip\" [style.width]=\"col?.width + 'px'\"> </div>\n        } @else {\n          <ng-template [ngTemplateOutlet]=\"col.ghostCellTemplate\"> </ng-template>\n        }\n      }\n    </div>\n  }\n</div>\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  OnDestroy,\n  Output,\n  PipeTransform,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\n\nimport { TableColumn } from '../../types/table-column.type';\nimport { Keys } from '../../utils/keys';\nimport { BehaviorSubject } from 'rxjs';\nimport {\n  ActivateEvent,\n  CellContext,\n  RowOrGroup,\n  SortDirection,\n  SortPropDir,\n  TreeStatus\n} from '../../types/public.types';\nimport { DataTableGhostLoaderComponent } from './ghost-loader/ghost-loader.component';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\n\n@Component({\n  selector: 'datatable-body-cell',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (row) {\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]=\"disable$ | async\"\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\n        #cellTemplate\n        [ngTemplateOutlet]=\"column.cellTemplate\"\n        [ngTemplateOutletContext]=\"cellContext\"\n      >\n      </ng-template>\n      }\n    </div>\n    } @else { @if (ghostLoadingIndicator) {\n    <ghost-loader [columns]=\"[column]\" [pageSize]=\"1\"></ghost-loader>\n    } }\n  `,\n  imports: [NgTemplateOutlet, DataTableGhostLoaderComponent, AsyncPipe]\n})\nexport class DataTableBodyCellComponent<TRow extends { level?: number } = any>\n  implements DoCheck, OnDestroy\n{\n  private cd = inject(ChangeDetectorRef);\n\n  @Input() displayCheck: (row: RowOrGroup<TRow>, column: TableColumn, value: any) => boolean;\n\n  _disable$: BehaviorSubject<boolean>;\n  @Input() set disable$(val: BehaviorSubject<boolean>) {\n    this._disable$ = val;\n    this.cellContext.disable$ = val;\n  }\n  get disable$() {\n    return this._disable$;\n  }\n\n  @Input() set group(group: TRow[]) {\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) {\n    this._isSelected = val;\n    this.cellContext.isSelected = val;\n    this.cd.markForCheck();\n  }\n\n  get isSelected(): boolean {\n    return this._isSelected;\n  }\n\n  @Input() set expanded(val: boolean) {\n    this._expanded = val;\n    this.cellContext.expanded = val;\n    this.cd.markForCheck();\n  }\n\n  get expanded(): boolean {\n    return this._expanded;\n  }\n\n  @Input() set rowIndex(val: number) {\n    this._rowIndex = val;\n    this.cellContext.rowIndex = val;\n    this.checkValueUpdates();\n    this.cd.markForCheck();\n  }\n\n  get rowIndex(): number {\n    return this._rowIndex;\n  }\n\n  @Input() set column(column: TableColumn) {\n    this._column = column;\n    this.cellContext.column = column;\n    this.checkValueUpdates();\n    this.cd.markForCheck();\n  }\n\n  get column(): TableColumn {\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) {\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 {\n    return this._treeStatus;\n  }\n\n  @Input() ghostLoadingIndicator = false;\n\n  @Output() activate: EventEmitter<ActivateEvent<TRow>> = new EventEmitter();\n\n  @Output() treeAction: EventEmitter<any> = new EventEmitter();\n\n  @ViewChild('cellTemplate', { read: ViewContainerRef, static: true })\n  cellTemplate: ViewContainerRef;\n\n  @ViewChild('ghostLoaderTemplate', { read: ViewContainerRef, static: true })\n  ghostLoaderTemplate: ViewContainerRef;\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.disable$?.value) {\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.disable$?.value) {\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 {\n    return this.column.minWidth;\n  }\n\n  @HostBinding('style.maxWidth.px')\n  get maxWidth(): number {\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: TableColumn;\n  private _row: TRow;\n  private _group: TRow[];\n  private _rowHeight: number;\n  private _rowIndex: number;\n  private _expanded: boolean;\n  private _element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n  private _treeStatus: TreeStatus;\n\n  constructor() {\n    this.cellContext = {\n      onCheckboxChangeFn: (event: MouseEvent | KeyboardEvent) => 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,\n      treeStatus: this.treeStatus,\n      disable$: this.disable$,\n      onTreeAction: () => this.onTreeAction()\n    };\n  }\n\n  ngDoCheck(): void {\n    this.checkValueUpdates();\n  }\n\n  ngOnDestroy(): void {\n    if (this.cellTemplate) {\n      this.cellTemplate.clear();\n    }\n    if (this.ghostLoaderTemplate) {\n      this.ghostLoaderTemplate.clear();\n    }\n  }\n\n  checkValueUpdates(): void {\n    let value = '';\n\n    if (!this.row || !this.column) {\n      value = '';\n    } else {\n      const val = this.column.$$valueGetter(this.row, this.column.prop);\n      const userPipe: PipeTransform = 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.disable$ = this.disable$;\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: MouseEvent | KeyboardEvent): 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 {\n    if (!sorts) {\n      return;\n    }\n\n    const sort = sorts.find(s => s.prop === this.column.prop);\n\n    if (sort) {\n      return sort.dir as SortDirection;\n    }\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: TableColumn, 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 { BehaviorSubject } from 'rxjs';\nimport { ActivateEvent, RowOrGroup, TreeStatus } from '../../types/public.types';\nimport { AsyncPipe } from '@angular/common';\nimport { TableColumn } from '../../types/table-column.type';\nimport { ColumnGroupWidth, PinnedColumns } 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; let i = $index) {\n    <div\n      class=\"datatable-row-{{ colGroup.type }} datatable-row-group\"\n      [style.width.px]=\"_columnGroupWidths[colGroup.type]\"\n      [class.row-disabled]=\"disable$ ? (disable$ | async) : false\"\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        [disable$]=\"disable$\"\n        [treeStatus]=\"treeStatus\"\n        [ghostLoadingIndicator]=\"ghostLoadingIndicator\"\n        (activate)=\"onActivate($event, ii)\"\n        (treeAction)=\"onTreeAction()\"\n      >\n      </datatable-body-cell>\n      }\n    </div>\n    }\n  `,\n  imports: [DataTableBodyCellComponent, AsyncPipe]\n})\nexport class DataTableBodyRowComponent<TRow = any> implements DoCheck, OnChanges {\n  private cd = inject(ChangeDetectorRef);\n\n  @Input() set columns(val: TableColumn[]) {\n    this._columns = val;\n    this.recalculateColumns(val);\n  }\n\n  get columns(): TableColumn[] {\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: RowOrGroup<TRow>) => string | Record<string, boolean>;\n  @Input() row: TRow;\n  @Input() group: TRow[];\n  @Input() isSelected: boolean;\n  @Input() rowIndex: number;\n  @Input() displayCheck: (row: TRow, column: TableColumn, value?: any) => boolean;\n  @Input() treeStatus?: TreeStatus = 'collapsed';\n  @Input() ghostLoadingIndicator = false;\n  @Input() verticalScrollVisible = false;\n\n  @Input() disable$: BehaviorSubject<boolean>;\n  @Input()\n  set offsetX(val: number) {\n    this._offsetX = val;\n  }\n  get offsetX() {\n    return this._offsetX;\n  }\n\n  @HostBinding('class')\n  get cssClass() {\n    let cls = 'datatable-body-row';\n    if (this.isSelected) {\n      cls += ' active';\n    }\n    if (this.rowIndex % 2 !== 0) {\n      cls += ' datatable-row-odd';\n    }\n    if (this.rowIndex % 2 === 0) {\n      cls += ' datatable-row-even';\n    }\n    if (this.disable$ && this.disable$.value) {\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  _offsetX: number;\n  _columns: TableColumn[];\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: ActivateEvent<TRow>, index: number): void {\n    event.cellIndex = index;\n    event.rowElement = this._element;\n    this.activate.emit(event);\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: TableColumn<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","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 { TableColumn } from '../types/table-column.type';\nimport { DraggableDragEvent } from '../types/internal.types';\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  standalone: true\n})\nexport class DraggableDirective implements OnDestroy, OnChanges {\n  @Input() dragEventTarget: any;\n  @Input() dragModel: TableColumn;\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): 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): void {\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 = { x: event.clientX, y: event.clientY };\n\n      const mouseup = fromEvent(document, 'mouseup');\n      this.subscription = mouseup.subscribe((ev: MouseEvent) => this.onMouseup(ev));\n\n      const mouseMoveSub = fromEvent(document, 'mousemove')\n        .pipe(takeUntil(mouseup))\n        .subscribe((ev: MouseEvent) => 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, mouseDownPos: { x: number; y: number }): void {\n    if (!this.isDragging) {\n      return;\n    }\n\n    const x = event.clientX - mouseDownPos.x;\n    const y = event.clientY - mouseDownPos.y;\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';\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]=\"rowDef\"\n    />\n  }`,\n  imports: [NgTemplateOutlet]\n})\nexport class DatatableRowDefComponent {\n  rowDef = inject(RowDefToken);\n}\n\n@Directive({\n  selector: '[rowDef]',\n  standalone: true\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  standalone: true\n})\nexport class DatatableRowDefInternalDirective implements OnInit {\n  vc = inject(ViewContainerRef);\n\n  @Input() rowDefInternal?: RowDefContext;\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: any;\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  computed,\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 { BehaviorSubject } from 'rxjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DatatableComponentToken } from '../../utils/table-token';\nimport { Group, GroupContext, 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 (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 === group().value.length\"\n              (change)=\"onCheckboxChange(select.checked)\"\n            />\n          </label>\n        </div>\n        }\n        <ng-template\n          [ngTemplateOutlet]=\"groupHeader.template\"\n          [ngTemplateOutletContext]=\"groupContext\"\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]=\"rowContext\">\n      </ng-template>\n    </div>\n    }\n  `,\n  host: {\n    class: 'datatable-row-wrapper'\n  },\n  imports: [NgTemplateOutlet]\n})\nexport class DataTableRowWrapperComponent<TRow = any> implements DoCheck, OnInit, OnChanges {\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() disableCheck: (row: RowOrGroup<TRow>) => boolean;\n  @Input() selected: TRow[];\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  groupContext?: GroupContext<TRow>;\n  rowContext?: RowDetailContext<TRow>;\n  disable$: BehaviorSubject<boolean>;\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  protected group = computed(() => {\n    if (typeof this.row === 'object' && 'value' in this.row) {\n      return this.row;\n    }\n  });\n\n  ngOnInit(): void {\n    if (this.disableCheck) {\n      const isRowDisabled = this.disableCheck(this.row);\n      this.disable$ = new BehaviorSubject(isRowDisabled);\n      this.rowContext.disableRow$ = this.disable$;\n    }\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.groupContext = {\n          group: this.row,\n          expanded: this.expanded,\n          rowIndex: this.rowIndex\n        };\n      } else {\n        this.rowContext = {\n          row: this.row,\n          expanded: this.expanded,\n          rowIndex: this.rowIndex,\n          disableRow$: this.disable$\n        };\n      }\n    }\n    if (changes['rowIndex']) {\n      (this.rowContext ?? this.groupContext).rowIndex = this.rowIndex;\n    }\n    if (changes['expanded']) {\n      (this.groupContext ?? this.rowContext)!.expanded = this.expanded;\n      if (this.rowContext) {\n        this.rowContext.expanded = this.expanded;\n      }\n    }\n  }\n\n  ngDoCheck(): void {\n    if (this.disableCheck) {\n      const isRowDisabled = this.disableCheck(this.row);\n      if (isRowDisabled !== this.disable$.value) {\n        this.disable$.next(isRowDisabled);\n        this.cd.markForCheck();\n      }\n    }\n\n    if (this.rowDiffer.diff(this.row)) {\n      if (this.isGroup(this.row)) {\n        this.groupContext.group = this.row;\n      } else {\n        this.rowContext.row = this.row;\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 (this.groupHeader?.checkboxable && this.selectedRowsDiffer.diff(this.selected)) {\n      const selectedRows = this.selected.filter(row =>\n        this.group()?.value.find(item => item === row)\n      );\n      if (this.checkBoxInput) {\n        if (selectedRows.length && selectedRows.length !== this.group()?.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): void {\n    // First remove all rows of this group from `selected`\n    this.selected = [\n      ...this.selected.filter(row => !this.group().value.find(item => 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, ...this.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, PipeTransform, TemplateRef } from '@angular/core';\nimport { TableColumn, TableColumnProp } from '../../../types/table-column.type';\nimport { DataTableBodyRowComponent } from '../body-row.component';\n\nexport interface ISummaryColumn {\n  summaryFunc?: (cells: any[]) => any;\n  summaryTemplate?: TemplateRef<any>;\n\n  prop?: TableColumnProp;\n  pipe?: PipeTransform;\n}\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 null;\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      [offsetX]=\"offsetX\"\n      [columns]=\"_internalColumns\"\n      [rowHeight]=\"rowHeight\"\n      [row]=\"summaryRow\"\n      [rowIndex]=\"-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: TableColumn[];\n\n  @Input() rowHeight: number;\n  @Input() offsetX: number;\n  @Input() innerWidth: number;\n\n  _internalColumns: ISummaryColumn[];\n  summaryRow: any = {};\n\n  ngOnChanges() {\n    if (!this.columns || !this.rows) {\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)\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: ISummaryColumn): (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","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>(selected: TRow[], rows: TRow[], index: number, prevIndex: number): 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) {\n        selected.push(row);\n      }\n    }\n  }\n\n  return selected;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { selectRows, selectRowsBetween } from '../../utils/selection';\nimport { Keys } from '../../utils/keys';\nimport { ActivateEvent, SelectionType } from '../../types/public.types';\n\n@Component({\n  selector: 'datatable-selection',\n  template: ` <ng-content></ng-content> `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true\n})\nexport class DataTableSelectionComponent<TRow = any> {\n  @Input() rows: TRow[];\n  @Input() selected: TRow[];\n  @Input() selectEnabled: boolean;\n  @Input() selectionType: SelectionType;\n  @Input() rowIdentity: any;\n  @Input() selectCheck: (value: TRow, index: number, array: TRow[]) => boolean;\n  @Input() disableCheck: (row: TRow) => boolean;\n\n  @Output() activate: EventEmitter<ActivateEvent<TRow>> = new EventEmitter();\n  @Output() select: EventEmitter<{ selected: TRow[] }> = new EventEmitter();\n\n  prevIndex: number;\n\n  selectRow(event: KeyboardEvent | MouseEvent, 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    if (multi || chkbox || multiClick) {\n      if (event.shiftKey) {\n        selected = selectRowsBetween([], this.rows, index, this.prevIndex);\n      } else if ((event as KeyboardEvent).key === 'a' && (event.ctrlKey || event.metaKey)) {\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 (event.ctrlKey || event.metaKey || multiClick || chkbox) {\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.disableCheck === 'function') {\n      selected = selected.filter(rowData => !this.disableCheck(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 ((event as KeyboardEvent).key === 'a' && (event.ctrlKey || event.metaKey)) {\n        this.selectRow(event, 0, this.rows[this.rows.length - 1]);\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.disableCheck === 'function') {\n        const isRowDisabled = this.disableCheck(model.row);\n        if (isRowDisabled) {\n          return;\n        }\n      }\n      if (!model.cellElement || !isCellSelection) {\n        this.focusRow(model.rowElement, key);\n      } else if (isCellSelection) {\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;\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;\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","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 { NgStyle } from '@angular/common';\nimport { TableColumn } from '../../types/table-column.type';\nimport { DatatableGroupHeaderDirective } from './body-group-header.directive';\nimport { DatatableRowDetailDirective } from '../row-detail/row-detail.directive';\nimport { DataTableBodyRowComponent } from './body-row.component';\nimport { ColumnGroupWidth } from '../../types/internal.types';\nimport {\n  ActivateEvent,\n  DragEventData,\n  Group,\n  RowOrGroup,\n  ScrollEvent,\n  SelectionType,\n  TreeStatus\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 { DataTableSelectionComponent } from './selection.component';\nimport { DataTableGhostLoaderComponent } from './ghost-loader/ghost-loader.component';\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    <datatable-selection\n      #selector\n      [selected]=\"selected\"\n      [rows]=\"rows\"\n      [selectCheck]=\"selectCheck\"\n      [disableCheck]=\"disableRowCheck\"\n      [selectEnabled]=\"selectEnabled\"\n      [selectionType]=\"selectionType\"\n      [rowIdentity]=\"rowIdentity\"\n      (select)=\"select.emit($event)\"\n      (activate)=\"activate.emit($event)\"\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              [offsetX]=\"offsetX\"\n              [innerWidth]=\"innerWidth\"\n              [rows]=\"rows\"\n              [columns]=\"columns\"\n            >\n            </datatable-summary-row>\n          }\n          @for (group of rowsToRender(); track rowTrackingFn(i, group); let i = $index) {\n            <datatable-row-wrapper\n              #rowWrapper\n              [attr.hidden]=\"\n                ghostLoadingIndicator && (!rowCount || !virtualization || !scrollbarV) ? true : null\n              \"\n              [groupedRows]=\"groupedRows\"\n              [innerWidth]=\"innerWidth\"\n              [ngStyle]=\"rowsStyles()[i]\"\n              [rowDetail]=\"rowDetail\"\n              [groupHeader]=\"groupHeader\"\n              [offsetX]=\"offsetX\"\n              [detailRowHeight]=\"getDetailRowHeight(group && group[i], i)\"\n              [groupHeaderRowHeight]=\"getGroupHeaderRowHeight(group && group[i], i)\"\n              [row]=\"group\"\n              [disableCheck]=\"disableRowCheck\"\n              [expanded]=\"getRowExpanded(group)\"\n              [rowIndex]=\"getRowIndex(group && group[i])\"\n              [selected]=\"selected\"\n              (rowContextmenu)=\"rowContextmenu.emit($event)\"\n            >\n              @if (rowDefTemplate) {\n                <ng-container\n                  *rowDefInternal=\"{\n                    template: rowDefTemplate,\n                    rowTemplate: bodyRow,\n                    row: group,\n                    index: i\n                  }\"\n                />\n              } @else {\n                @if (isRow(group)) {\n                  <datatable-body-row\n                    role=\"row\"\n                    tabindex=\"-1\"\n                    #rowElement\n                    [disable$]=\"rowWrapper.disable$\"\n                    [isSelected]=\"selector.getRowSelected(group)\"\n                    [innerWidth]=\"innerWidth\"\n                    [offsetX]=\"offsetX\"\n                    [columns]=\"columns\"\n                    [rowHeight]=\"getRowHeight(group)\"\n                    [row]=\"group\"\n                    [rowIndex]=\"getRowIndex(group)\"\n                    [expanded]=\"getRowExpanded(group)\"\n                    [rowClass]=\"rowClass\"\n                    [displayCheck]=\"displayCheck\"\n                    [treeStatus]=\"group?.treeStatus\"\n                    [ghostLoadingIndicator]=\"ghostLoadingIndicator\"\n                    [draggable]=\"rowDraggable\"\n                    [verticalScrollVisible]=\"verticalScrollVisible\"\n                    (treeAction)=\"onTreeAction(group)\"\n                    (activate)=\"selector.onActivate($event, indexes().first + i)\"\n                    (drop)=\"drop($event, group, rowElement)\"\n                    (dragover)=\"dragOver($event, group)\"\n                    (dragenter)=\"dragEnter($event, group, rowElement)\"\n                    (dragleave)=\"dragLeave($event, group, rowElement)\"\n                    (dragstart)=\"drag($event, group, rowElement)\"\n                    (dragend)=\"dragEnd($event, group)\"\n                  >\n                  </datatable-body-row>\n                }\n              }\n\n              <ng-template #bodyRow>\n                @if (isRow(group)) {\n                  <datatable-body-row\n                    role=\"row\"\n                    tabindex=\"-1\"\n                    #rowElement\n                    [disable$]=\"rowWrapper.disable$\"\n                    [isSelected]=\"selector.getRowSelected(group)\"\n                    [innerWidth]=\"innerWidth\"\n                    [offsetX]=\"offsetX\"\n                    [columns]=\"columns\"\n                    [rowHeight]=\"getRowHeight(group)\"\n                    [row]=\"group\"\n                    [rowIndex]=\"getRowIndex(group)\"\n                    [expanded]=\"getRowExpanded(group)\"\n                    [rowClass]=\"rowClass\"\n                    [displayCheck]=\"displayCheck\"\n                    [treeStatus]=\"group?.treeStatus\"\n                    [ghostLoadingIndicator]=\"ghostLoadingIndicator\"\n                    [draggable]=\"rowDraggable\"\n                    [verticalScrollVisible]=\"verticalScrollVisible\"\n                    (treeAction)=\"onTreeAction(group)\"\n                    (activate)=\"selector.onActivate($event, indexes().first + i)\"\n                    (drop)=\"drop($event, group, rowElement)\"\n                    (dragover)=\"dragOver($event, group)\"\n                    (dragenter)=\"dragEnter($event, group, rowElement)\"\n                    (dragleave)=\"dragLeave($event, group, rowElement)\"\n                    (dragstart)=\"drag($event, group, rowElement)\"\n                    (dragend)=\"dragEnd($event, group)\"\n                  >\n                  </datatable-body-row>\n                }\n              </ng-template>\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(i, row); let i = $index) {\n                  <datatable-body-row\n                    role=\"row\"\n                    [disable$]=\"rowWrapper.disable$\"\n                    tabindex=\"-1\"\n                    #rowElement\n                    [isSelected]=\"selector.getRowSelected(row)\"\n                    [innerWidth]=\"innerWidth\"\n                    [offsetX]=\"offsetX\"\n                    [columns]=\"columns\"\n                    [rowHeight]=\"getRowHeight(row)\"\n                    [row]=\"row\"\n                    [group]=\"group.value\"\n                    [rowIndex]=\"getRowIndex(row)\"\n                    [expanded]=\"getRowExpanded(row)\"\n                    [rowClass]=\"rowClass\"\n                    [ghostLoadingIndicator]=\"ghostLoadingIndicator\"\n                    [draggable]=\"rowDraggable\"\n                    [verticalScrollVisible]=\"verticalScrollVisible\"\n                    (activate)=\"selector.onActivate($event, i)\"\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                }\n              }\n            </datatable-row-wrapper>\n          }\n          @if (summaryRow && summaryPosition === 'bottom') {\n            <datatable-summary-row\n              role=\"row\"\n              [ngStyle]=\"bottomSummaryRowsStyles()\"\n              [rowHeight]=\"summaryHeight\"\n              [offsetX]=\"offsetX\"\n              [innerWidth]=\"innerWidth\"\n              [rows]=\"rows\"\n              [columns]=\"columns\"\n            >\n            </datatable-summary-row>\n          }\n        </datatable-scroller>\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    </datatable-selection>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class: 'datatable-body'\n  },\n  imports: [\n    DataTableGhostLoaderComponent,\n    DataTableSelectionComponent,\n    ScrollerComponent,\n    DataTableSummaryRowComponent,\n    DataTableRowWrapperComponent,\n    NgStyle,\n    DatatableRowDefInternalDirective,\n    DataTableBodyRowComponent,\n    DraggableDirective\n  ]\n})\nexport class DataTableBodyComponent<TRow extends { treeStatus?: TreeStatus } = any>\n  implements OnInit, OnDestroy\n{\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: any;\n  @Input() rowDetail: DatatableRowDetailDirective;\n  @Input() groupHeader: DatatableGroupHeaderDirective;\n  @Input() selectCheck: (value: TRow, index: number, array: TRow[]) => boolean;\n  @Input() displayCheck: (row: TRow, column: TableColumn, value?: any) => boolean;\n  @Input() trackByProp: string;\n  @Input() rowClass: (row: RowOrGroup<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;\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[]) {\n    if (val !== this._rows) {\n      this._rows = val;\n      this.recalcLayout();\n    }\n  }\n\n  get rows(): TRow[] {\n    return this._rows;\n  }\n\n  @Input() set columns(val: TableColumn[]) {\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        if (!isNaN(this._offset) && this.ghostLoadingIndicator) {\n          this.rows = [];\n        }\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: EventEmitter<ScrollEvent> = new EventEmitter();\n  @Output() page: EventEmitter<number> = new EventEmitter();\n  @Output() activate: EventEmitter<ActivateEvent<TRow>> = new EventEmitter();\n  @Output() select: EventEmitter<{ selected: TRow[] }> = new EventEmitter();\n  @Output() detailToggle: EventEmitter<any> = new EventEmitter();\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>>;\n  listener: any;\n  rowIndexes = new WeakMap<any, any>();\n  rowExpansions: any[] = [];\n\n  _rows: TRow[];\n  _bodyHeight: string;\n  _columns: TableColumn[];\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) {\n        return row[this.trackByProp];\n      } else {\n        const idx = this.getRowIndex(row);\n        return idx;\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>[] {\n    const { first, last } = this.indexes();\n    let rowIndex = first;\n    let idx = 0;\n    const temp: RowOrGroup<TRow>[] = [];\n\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    if (this.groupedRows) {\n      while (rowIndex < last && rowIndex < this.groupedRows.length) {\n        // Add the groups into this page\n        const group = this.groupedRows[rowIndex];\n        this.rowIndexes.set(group, rowIndex);\n\n        if (group.value) {\n          // add indexes for each group item\n          group.value.forEach((g: any, i: number) => {\n            const _idx = `${rowIndex}-${i}`;\n            this.rowIndexes.set(g, _idx);\n          });\n        }\n        temp[idx] = group;\n        idx++;\n\n        // Group index in this context\n        rowIndex++;\n      }\n    } else {\n      while (rowIndex < last && rowIndex < this.rowCount) {\n        const row = this.rows[rowIndex];\n\n        if (row) {\n          // add indexes for each row\n          this.rowIndexes.set(row, rowIndex);\n          temp[idx] = row;\n        } else if (this.ghostLoadingIndicator && this.virtualization) {\n          temp[idx] = undefined;\n        }\n\n        idx++;\n        rowIndex++;\n      }\n    }\n    return temp;\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 styles for the row so that the rows can be moved in 2D space\n   * during virtual scroll inside the DOM.   In the below case the Y position is\n   * manipulated.   As an example, if the height of row 0 is 30 px and row 1 is\n   * 100 px then following styles are generated:\n   *\n   * transform: translate3d(0px, 0px, 0px);    ->  row0\n   * transform: translate3d(0px, 30px, 0px);   ->  row1\n   * transform: translate3d(0px, 130px, 0px);  ->  row2\n   *\n   * Row heights have to be calculated based on the row heights cache as we wont\n   * be able to determine which row is of what height before hand.  In the above\n   * case the positionY of the translate3d for row2 would be the sum of all the\n   * heights of the rows before it (i.e. row0 and row1).\n   *\n   * @returns the CSS3 style to be applied\n   */\n  rowsStyles = computed(() => {\n    const rowsStyles: NgStyle['ngStyle'][] = [];\n    this.rowsToRender().forEach((rows, index) => {\n      const styles: NgStyle['ngStyle'] = {};\n\n      // only add styles for the group if there is a group\n      if (this.groupedRows) {\n        styles.width = this.columnGroupWidths.total;\n      }\n\n      if (this.scrollbarV && this.virtualization) {\n        let idx = 0;\n\n        if (Array.isArray(rows)) {\n          // Get the latest row rowindex in a group\n          const row = rows[rows.length - 1];\n          idx = row ? this.getRowIndex(row) : 0;\n        } else {\n          if (rows) {\n            idx = this.getRowIndex(rows);\n          } else {\n            // When ghost cells are enabled use index to get the position of them\n            idx = this.indexes().first + index;\n          }\n        }\n\n        // const pos = idx * rowHeight;\n        // The position of this row would be the sum of all row heights\n        // until the previous row position.\n        styles.transform = `translateY(${this.rowHeightsCache().query(idx - 1)}px)`;\n      }\n      rowsStyles.push(styles);\n    });\n    return rowsStyles;\n  });\n\n  /**\n   * Calculate bottom summary row offset for scrollbar mode.\n   * For more information about cache and offset calculation\n   * see description for `rowsStyles` signal\n   *\n   * @returns the CSS3 style to be applied\n   */\n  bottomSummaryRowsStyles = computed(() => {\n    if (!this.scrollbarV || !this.rows || !this.rows.length || !this.rowsToRender()) {\n      return null;\n    }\n\n    const pos = this.rowHeightsCache().query(this.rows.length - 1);\n    return {\n      transform: `translateY(${pos}px)`,\n      position: 'absolute'\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 && this.rows.length) {\n      const rowExpansions = new Set<TRow>();\n      if (this.rowDetail) {\n        for (const row of this.rows) {\n          if (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        rowCount: this.rowCount,\n        rowIndexes: this.rowIndexes,\n        rowExpansions\n      });\n      this.rowHeightsCache.set(Object.create(this.rowHeightsCache()));\n    }\n  }\n\n  /**\n   * Gets the index for the view port\n   */\n  getAdjustedViewPortIndex(): number {\n    // Capture the row index of the first row that is visible on the viewport.\n    // If the scroll bar is just below the row which is highlighted then make that as the\n    // first index.\n    const viewPortFirstRowIndex = this.indexes().first;\n\n    if (this.scrollbarV && this.virtualization) {\n      const offsetScroll = this.rowHeightsCache().query(viewPortFirstRowIndex - 1);\n      return offsetScroll <= this.offsetY ? viewPortFirstRowIndex - 1 : viewPortFirstRowIndex;\n    }\n\n    return viewPortFirstRowIndex;\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    // Capture the row index of the first row that is visible on the viewport.\n    const viewPortFirstRowIndex = this.getAdjustedViewPortIndex();\n    const rowExpandedIdx = this.getRowExpandedIdx(row, this.rowExpansions);\n    const expanded = rowExpandedIdx > -1;\n\n    // If the detailRowHeight is auto --> only in case of non-virtualized scroll\n    if (this.scrollbarV && this.virtualization) {\n      const detailRowHeight = this.getDetailRowHeight(row) * (expanded ? -1 : 1);\n      // const idx = this.rowIndexes.get(row) || 0;\n      const idx = this.getRowIndex(row);\n      this.rowHeightsCache().update(idx, detailRowHeight);\n    }\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    this.detailToggle.emit({\n      rows: [row],\n      currentIndex: viewPortFirstRowIndex\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    // Capture the row index of the first row that is visible on the viewport.\n    const viewPortFirstRowIndex = this.getAdjustedViewPortIndex();\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    // Emit all rows that have been expanded.\n    this.detailToggle.emit({\n      rows: rows,\n      currentIndex: viewPortFirstRowIndex\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  /**\n   * Gets the row index given a row\n   */\n  getRowIndex(row: RowOrGroup<TRow>): number {\n    return this.rowIndexes.get(row) || 0;\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  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>): row is TRow {\n    return !this.groupedRows;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\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    outer.parentNode.removeChild(outer);\n\n    return widthNoScroll - widthWithScroll;\n  }\n}\n","import {\n  booleanAttribute,\n  Directive,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  numberAttribute,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { TableColumn } from '../types/table-column.type';\n\n@Directive({\n  selector: '[long-press]',\n  standalone: true\n})\nexport class LongPressDirective implements OnDestroy {\n  @Input({ transform: booleanAttribute }) pressEnabled = true;\n  @Input() pressModel: TableColumn;\n  @Input({ transform: numberAttribute }) duration = 500;\n\n  @Output() longPressStart: EventEmitter<{ event: MouseEvent; model: TableColumn }> =\n    new EventEmitter();\n  @Output() longPressing: EventEmitter<{ event: MouseEvent; model: TableColumn }> =\n    new EventEmitter();\n  @Output() longPressEnd: EventEmitter<{ model: TableColumn }> = new EventEmitter();\n\n  pressing: boolean;\n  isLongPressing: boolean;\n  timeout: any;\n  mouseX: number = 0;\n  mouseY: number = 0;\n\n  subscription: Subscription;\n\n  @HostBinding('class.press')\n  get press(): boolean {\n    return this.pressing;\n  }\n\n  @HostBinding('class.longpress')\n  get isLongPress(): boolean {\n    return this.isLongPressing;\n  }\n\n  @HostListener('mousedown', ['$event'])\n  onMouseDown(event: MouseEvent): void {\n    // don't do right/middle clicks\n    if (event.which !== 1 || !this.pressEnabled) {\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.mouseX = event.clientX;\n    this.mouseY = event.clientY;\n\n    this.pressing = true;\n    this.isLongPressing = false;\n\n    const mouseup = fromEvent(document, 'mouseup');\n    this.subscription = mouseup.subscribe((ev: MouseEvent) => this.onMouseup());\n\n    this.timeout = setTimeout(() => {\n      this.isLongPressing = true;\n      this.longPressStart.emit({\n        event,\n        model: this.pressModel\n      });\n\n      this.subscription.add(\n        fromEvent(document, 'mousemove')\n          .pipe(takeUntil(mouseup))\n          .subscribe((mouseEvent: MouseEvent) => this.onMouseMove(mouseEvent))\n      );\n\n      this.loop(event);\n    }, this.duration);\n\n    this.loop(event);\n  }\n\n  onMouseMove(event: MouseEvent): void {\n    if (this.pressing && !this.isLongPressing) {\n      const xThres = Math.abs(event.clientX - this.mouseX) > 10;\n      const yThres = Math.abs(event.clientY - this.mouseY) > 10;\n\n      if (xThres || yThres) {\n        this.endPress();\n      }\n    }\n  }\n\n  loop(event: MouseEvent): void {\n    if (this.isLongPressing) {\n      this.timeout = setTimeout(() => {\n        this.longPressing.emit({\n          event,\n          model: this.pressModel\n        });\n        this.loop(event);\n      }, 50);\n    }\n  }\n\n  endPress(): void {\n    clearTimeout(this.timeout);\n    this.isLongPressing = false;\n    this.pressing = false;\n    this._destroySubscription();\n\n    this.longPressEnd.emit({\n      model: this.pressModel\n    });\n  }\n\n  onMouseup(): void {\n    this.endPress();\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 {\n  AfterViewInit,\n  booleanAttribute,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  numberAttribute,\n  OnDestroy,\n  Output,\n  Renderer2\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n  selector: '[resizeable]',\n  standalone: true\n})\nexport class ResizeableDirective implements OnDestroy, AfterViewInit {\n  private renderer = inject(Renderer2);\n\n  @HostBinding('class.resizeable') @Input({ transform: booleanAttribute }) resizeEnabled = true;\n  @Input({ transform: numberAttribute }) minWidth: number;\n  @Input({ transform: numberAttribute }) maxWidth: number;\n\n  @Output() resize: EventEmitter<any> = new EventEmitter();\n  @Output() resizing: EventEmitter<any> = new EventEmitter();\n\n  element = inject(ElementRef).nativeElement;\n  subscription: Subscription;\n  private resizeHandle: HTMLElement;\n\n  ngAfterViewInit(): void {\n    const renderer2 = this.renderer;\n    this.resizeHandle = renderer2.createElement('span');\n    if (this.resizeEnabled) {\n      renderer2.addClass(this.resizeHandle, 'resize-handle');\n    } else {\n      renderer2.addClass(this.resizeHandle, 'resize-handle--not-resizable');\n    }\n    renderer2.appendChild(this.element, this.resizeHandle);\n  }\n\n  ngOnDestroy(): void {\n    this._destroySubscription();\n    if (this.renderer.destroyNode) {\n      this.renderer.destroyNode(this.resizeHandle);\n    } else if (this.resizeHandle) {\n      this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle), this.resizeHandle);\n    }\n  }\n\n  onMouseup(): void {\n    if (this.subscription && !this.subscription.closed) {\n      this._destroySubscription();\n      this.resize.emit(this.element.clientWidth);\n    }\n  }\n\n  @HostListener('mousedown', ['$event'])\n  onMousedown(event: MouseEvent): void {\n    const isHandle = (event.target as HTMLElement).classList.contains('resize-handle');\n    const initialWidth = this.element.clientWidth;\n    const mouseDownScreenX = event.screenX;\n\n    if (isHandle) {\n      event.stopPropagation();\n\n      const mouseup = fromEvent(document, 'mouseup');\n      this.subscription = mouseup.subscribe((ev: MouseEvent) => this.onMouseup());\n\n      const mouseMoveSub = fromEvent(document, 'mousemove')\n        .pipe(takeUntil(mouseup))\n        .subscribe((e: MouseEvent) => this.move(e, initialWidth, mouseDownScreenX));\n\n      this.subscription.add(mouseMoveSub);\n    }\n  }\n\n  move(event: MouseEvent, initialWidth: number, mouseDownScreenX: number): void {\n    const movementX = event.screenX - mouseDownScreenX;\n    const newWidth = initialWidth + movementX;\n    this.resizing.emit(newWidth);\n  }\n\n  private _destroySubscription() {\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 { TableColumn } from '../types/table-column.type';\n\n/**\n * Gets the next sort direction\n */\nexport function nextSortDir(\n  sortType: SortType,\n  current: SortDirection | 'desc' | 'asc'\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>(rows: TRow[], columns: TableColumn[], dirs: SortPropDir[]): TRow[] {\n  if (!rows) {\n    return [];\n  }\n  if (!dirs || !dirs.length || !columns) {\n    return [...rows];\n  }\n\n  /**\n   * record the row ordering of results from prior sort operations (if applicable)\n   * this is necessary to guarantee stable sorting behavior\n   */\n  const rowToIndexMap = new Map<any, number>();\n  rows.forEach((row, index) => rowToIndexMap.set(row, index));\n\n  const temp = [...rows];\n  const cols = columns.reduce((obj, col) => {\n    if (col.comparator && typeof col.comparator === 'function') {\n      obj[col.prop] = col.comparator;\n    }\n    return obj;\n  }, {});\n\n  // cache valueGetter and compareFn so that they\n  // do not need to be looked-up in the sort function body\n  const cachedDirs = dirs.map(dir => {\n    const prop = dir.prop;\n    return {\n      prop,\n      dir: dir.dir,\n      valueGetter: getterForProp(prop),\n      compareFn: cols[prop] || orderByComparator\n    };\n  });\n\n  return temp.sort(function (rowA: any, rowB: any) {\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    if (!(rowToIndexMap.has(rowA) && rowToIndexMap.has(rowB))) {\n      return 0;\n    }\n\n    /**\n     * all else being equal, preserve original order of the rows (stable sort)\n     */\n    return rowToIndexMap.get(rowA) < rowToIndexMap.get(rowB) ? -1 : 1;\n  });\n}\n\nexport function sortGroupedRows<TRow>(\n  groupedRows: Group<TRow>[],\n  columns: TableColumn[],\n  dirs: SortPropDir[],\n  sortOnGroupHeader: SortPropDir\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  EventEmitter,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef\n} from '@angular/core';\nimport { TableColumn } from '../../types/table-column.type';\nimport { nextSortDir } from '../../utils/sort';\nimport {\n  HeaderCellContext,\n  InnerSortEvent,\n  SelectionType,\n  SortDirection,\n  SortPropDir,\n  SortType\n} from '../../types/public.types';\nimport { NgTemplateOutlet } from '@angular/common';\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  `,\n  host: {\n    class: 'datatable-header-cell'\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet]\n})\nexport class DataTableHeaderCellComponent implements OnInit {\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: TableColumn) {\n    this._column = column;\n    this.cellContext.column = column;\n    this.cd.markForCheck();\n  }\n\n  get column(): TableColumn {\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: EventEmitter<InnerSortEvent> = new EventEmitter();\n  @Output() select: EventEmitter<void> = new EventEmitter();\n  @Output() columnContextmenu = new EventEmitter<{ event: MouseEvent; column: TableColumn }>(false);\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 {\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 {\n    return this.column.minWidth;\n  }\n\n  @HostBinding('style.maxWidth.px')\n  get maxWidth(): number {\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 {\n    return this.column.headerCheckboxable;\n  }\n\n  sortClass: string;\n  sortDir: SortDirection;\n\n  cellContext: HeaderCellContext;\n\n  private _column: TableColumn;\n  private _sorts: SortPropDir[];\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  }\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  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): string {\n    if (!this.cellContext.column.sortable) {\n      return;\n    }\n    if (sortDir === SortDirection.asc) {\n      return `sort-btn sort-asc ${this.sortAscendingIcon}`;\n    } else if (sortDir === SortDirection.desc) {\n      return `sort-btn sort-desc ${this.sortDescendingIcon}`;\n    } else {\n      return `sort-btn ${this.sortUnsetIcon}`;\n    }\n  }\n}\n","import {\n  AfterContentInit,\n  ContentChildren,\n  Directive,\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';\nimport { DOCUMENT } from '@angular/common';\nimport { TableColumn } from '../types/table-column.type';\nimport {\n  DraggableDragEvent,\n  OrderableReorderEvent,\n  TargetChangedEvent\n} from '../types/internal.types';\n\ninterface OrderPosition {\n  left: number;\n  right: number;\n  index: number;\n  element: HTMLElement;\n}\n\n@Directive({\n  selector: '[orderable]',\n  standalone: true\n})\nexport class OrderableDirective implements AfterContentInit, OnDestroy {\n  private document = inject(DOCUMENT);\n\n  @Output() reorder: EventEmitter<OrderableReorderEvent> = new EventEmitter();\n  @Output() targetChanged: EventEmitter<TargetChangedEvent> = new EventEmitter();\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        prevIndex: prevPos.index,\n        newIndex: target.i,\n        model\n      });\n    }\n\n    this.lastDraggingIndex = undefined;\n    element.style.left = 'auto';\n  }\n\n  isTarget(model: TableColumn, event: MouseEvent) {\n    let i = 0;\n    const x = event.x || event.clientX;\n    const y = event.y || event.clientY;\n    const targets = this.document.elementsFromPoint(x, y);\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(): { [key: string]: DraggableDirective } {\n    return this.draggables.toArray().reduce((acc, curr) => {\n      acc[curr.dragModel.$$id] = curr;\n      return acc;\n    }, {});\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  ColumnResizeEvent,\n  InnerSortEvent,\n  ReorderEvent,\n  SelectionType,\n  SortDirection,\n  SortEvent,\n  SortPropDir,\n  SortType\n} from '../../types/public.types';\nimport { NgStyle } from '@angular/common';\nimport { ScrollbarHelper } from '../../services/scrollbar-helper.service';\nimport { TableColumn } from '../../types/table-column.type';\nimport {\n  OrderableReorderEvent,\n  PinnedColumns,\n  TargetChangedEvent\n} from '../../types/internal.types';\nimport { DraggableDirective } from '../../directives/draggable.directive';\nimport { LongPressDirective } from '../../directives/long-press.directive';\nimport { ResizeableDirective } from '../../directives/resizeable.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) {\n      <div [class]=\"'datatable-row-' + colGroup.type\" [ngStyle]=\"_styleByGroup[colGroup.type]\">\n        @for (column of colGroup.columns; track column.$$id) {\n        <datatable-header-cell\n          role=\"columnheader\"\n          resizeable\n          [resizeEnabled]=\"column.resizeable\"\n          (resize)=\"onColumnResized($event, column)\"\n          (resizing)=\"onColumnResizing($event, column)\"\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  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    OrderableDirective,\n    NgStyle,\n    DataTableHeaderCellComponent,\n    ResizeableDirective,\n    LongPressDirective,\n    DraggableDirective\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;\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: TableColumn[]) {\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: EventEmitter<SortEvent> = new EventEmitter();\n  @Output() reorder: EventEmitter<ReorderEvent> = new EventEmitter();\n  @Output() resize: EventEmitter<ColumnResizeEvent> = new EventEmitter();\n  @Output() resizing: EventEmitter<ColumnResizeEvent> = new EventEmitter();\n  @Output() select: EventEmitter<void> = new EventEmitter();\n  @Output() columnContextmenu = new EventEmitter<{ event: MouseEvent; column: TableColumn }>(false);\n\n  _columnsByPin: PinnedColumns[];\n  _columnGroupWidths: any = {\n    total: 100\n  };\n  _innerWidth: number;\n  _offsetX: number;\n  _columns: TableColumn[];\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({ event, model }: { event: MouseEvent; model: TableColumn }) {\n    model.dragging = true;\n    this.dragEventTarget = event;\n  }\n\n  onLongPressEnd({ model }: { model: TableColumn }) {\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: number, column: TableColumn): void {\n    this.resize.emit(this.makeResizeEvent(width, column));\n  }\n\n  onColumnResizing(width: number, column: TableColumn): void {\n    this.resizing.emit(this.makeResizeEvent(width, column));\n  }\n\n  private makeResizeEvent(width: number, column: TableColumn): ColumnResizeEvent {\n    if (width <= column.minWidth) {\n      width = column.minWidth;\n    } else if (width >= column.maxWidth) {\n      width = column.maxWidth;\n    }\n    return {\n      column,\n      prevValue: column.width,\n      newValue: width\n    };\n  }\n\n  onColumnReordered({ prevIndex, newIndex, model }: OrderableReorderEvent): void {\n    const column = this.getColumn(newIndex);\n    column.isTarget = false;\n    column.targetMarkerContext = undefined;\n    this.reorder.emit({\n      column: model,\n      prevValue: prevIndex,\n      newValue: newIndex\n    });\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: TableColumn,\n    prevValue: SortDirection,\n    newValue: SortDirection\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 this[key];\n      }\n    };\n  };\n}\n","import { TableColumn, TableColumnGroup } from '../types/table-column.type';\nimport { columnsByPin, columnsTotalWidth } from './column';\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: TableColumn[], expectedWidth: number) {\n  const columnsWidth = columnsTotalWidth(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 attr in colsByGroup) {\n    if (attr in colsByGroup) {\n      for (const column of colsByGroup[attr]) {\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  }\n\n  const hasMinWidth = {};\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 attr in colsByGroup) {\n      if (attr in colsByGroup) {\n        for (const column of colsByGroup[attr]) {\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      }\n    }\n  } while (remainingWidth !== 0);\n\n  // Adjust for any remaining offset in computed widths vs maxWidth\n  const columns: TableColumn[] = 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: TableColumn[],\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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PagerPageEvent } from '../../types/public.types';\nimport { Page } from '../../types/internal.types';\n\n@Component({\n  selector: 'datatable-pager',\n  template: `\n    <ul class=\"pager\">\n      <li [class.disabled]=\"!canPrevious()\">\n        <a role=\"button\" aria-label=\"go to first page\" (click)=\"selectPage(1)\">\n          <i class=\"{{ pagerPreviousIcon }}\"></i>\n        </a>\n      </li>\n      <li [class.disabled]=\"!canPrevious()\">\n        <a role=\"button\" aria-label=\"go to previous page\" (click)=\"prevPage()\">\n          <i class=\"{{ pagerLeftArrowIcon }}\"></i>\n        </a>\n      </li>\n      @for (pg of pages; track pg.number) {\n      <li\n        role=\"button\"\n        [attr.aria-label]=\"'page ' + pg.number\"\n        class=\"pages\"\n        [class.active]=\"pg.number === page\"\n      >\n        <a (click)=\"selectPage(pg.number)\">\n          {{ pg.text }}\n        </a>\n      </li>\n      }\n      <li [class.disabled]=\"!canNext()\">\n        <a role=\"button\" aria-label=\"go to next page\" (click)=\"nextPage()\">\n          <i class=\"{{ pagerRightArrowIcon }}\"></i>\n        </a>\n      </li>\n      <li [class.disabled]=\"!canNext()\">\n        <a role=\"button\" aria-label=\"go to last page\" (click)=\"selectPage(totalPages)\">\n          <i class=\"{{ pagerNextIcon }}\"></i>\n        </a>\n      </li>\n    </ul>\n  `,\n  host: {\n    class: 'datatable-pager'\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true\n})\nexport class DataTablePagerComponent {\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) {\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      <datatable-pager\n        [pagerLeftArrowIcon]=\"pagerLeftArrowIcon\"\n        [pagerRightArrowIcon]=\"pagerRightArrowIcon\"\n        [pagerPreviousIcon]=\"pagerPreviousIcon\"\n        [pagerNextIcon]=\"pagerNextIcon\"\n        [page]=\"curPage\"\n        [size]=\"pageSize\"\n        [count]=\"rowCount\"\n        [hidden]=\"!isVisible\"\n        (change)=\"page.emit($event)\"\n      >\n      </datatable-pager>\n      }\n    </div>\n  `,\n  host: {\n    class: 'datatable-footer'\n  },\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: number = 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  standalone: true\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  standalone: true\n})\nexport class ProgressBarComponent {}\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  ViewEncapsulation\n} from '@angular/core';\n\nimport { DatatableGroupHeaderDirective } from './body/body-group-header.directive';\n\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { INgxDatatableConfig } from '../ngx-datatable.module';\nimport { groupRowsByParents, optionalGetterForProp } from '../utils/tree';\nimport { TableColumn } from '../types/table-column.type';\nimport { setColumnDefaults, translateTemplates } from '../utils/column-helper';\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  ContextmenuType,\n  DragEventData,\n  Group,\n  PageEvent,\n  PagerPageEvent,\n  ReorderEvent,\n  RowOrGroup,\n  ScrollEvent,\n  SelectionType,\n  SortEvent,\n  SortPropDir,\n  SortType,\n  TreeStatus\n} from '../types/public.types';\nimport { AsyncPipe } from '@angular/common';\nimport { DataTableFooterComponent } from './footer/footer.component';\nimport { VisibilityDirective } from '../directives/visibility.directive';\nimport { ProgressBarComponent } from './body/progress-bar.component';\n\n@Component({\n  selector: 'ngx-datatable',\n  templateUrl: './datatable.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\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    AsyncPipe,\n    ProgressBarComponent\n  ]\n})\nexport class DatatableComponent<TRow = 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 = inject<INgxDatatableConfig>('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[] | 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[] {\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) {\n    if (val) {\n      this._groupRowsBy = val;\n      if (this._rows && 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 = [...val];\n      setColumnDefaults(this._internalColumns, 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<INgxDatatableConfig['cssClasses']> = {\n    sortAscending: 'datatable-icon-up',\n    sortDescending: 'datatable-icon-down',\n    sortUnset: 'datatable-icon-sort-unset',\n    pagerLeftArrow: 'datatable-icon-left',\n    pagerRightArrow: 'datatable-icon-right',\n    pagerPrevious: 'datatable-icon-prev',\n    pagerNext: 'datatable-icon-skip'\n  };\n\n  /**\n   * Message overrides for localization\n   *\n   * emptyMessage     [default] = 'No data to display'\n   * totalMessage     [default] = 'total'\n   * selectedMessage  [default] = 'selected'\n   */\n  @Input() messages: Partial<INgxDatatableConfig['messages']> = {\n    // Message to show when array is presented\n    // but contains no values\n    emptyMessage: 'No data to display',\n\n    // Footer total message\n    totalMessage: 'total',\n\n    // Footer selected message\n    selectedMessage: 'selected'\n  };\n\n  /**\n   * A function which is called with the row and should return either:\n   * - a string: `\"class-1 class-2`\n   * - a Record<string, boolean>: `{ 'class-1': true, 'class-2': false }`\n   */\n  @Input() rowClass: (row: Group<TRow> | 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: EventEmitter<{ selected: TRow[] }> = new EventEmitter();\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<{\n    event: MouseEvent;\n    type: ContextmenuType;\n    content: TableColumn | RowOrGroup<TRow>;\n  }>(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 = new BehaviorSubject(0);\n  _limit: number | undefined;\n  _count = 0;\n  _offset = 0;\n  _rows: TRow[] | null | undefined;\n  _groupRowsBy: keyof TRow;\n  _internalRows: TRow[];\n  _internalColumns: TableColumn[];\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        });\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: TRow | Group<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      const arr = val.toArray();\n      if (arr.length) {\n        this._internalColumns = translateTemplates(arr);\n        setColumnDefaults(this._internalColumns, 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[], 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      const key = item[groupBy];\n      if (!map.has(key)) {\n        map.set(key, [item]);\n      } else {\n        map.get(key).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._rows && 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: TableColumn[] = this._internalColumns,\n    forceIdx: number = -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      });\n    }\n  }\n\n  /**\n   * The body triggered a scroll event.\n   */\n  onBodyScroll(event: ScrollEvent): void {\n    this._offsetX.next(event.offsetX);\n    this.scroll.emit(event);\n    this.cd.detectChanges();\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    });\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.rows) {\n        return 0;\n      }\n\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 }: ColumnResizeEvent): void {\n    /* Safari/iOS 10.2 workaround */\n    if (column === undefined) {\n      return;\n    }\n\n    let idx: number;\n    const cols = this._internalColumns.map((c, i) => {\n      c = { ...c };\n\n      if (c.$$id === column.$$id) {\n        idx = i;\n        c.width = newValue;\n\n        // set this so we can force the column\n        // width distribution to be to this value\n        c.$$oldWidth = newValue;\n      }\n\n      return c;\n    });\n\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 }: ColumnResizeEvent): 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({ column, newValue, prevValue }: ReorderEvent): void {\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({\n      column,\n      newValue,\n      prevValue\n    });\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    });\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));\n      }\n    } else {\n      let relevantRows;\n      if (this.disableRowCheck) {\n        relevantRows = this.rows.filter(row => !this.disableRowCheck(row));\n      } else {\n        relevantRows = this.rows;\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: { selected: 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[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 | async\"\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 | async\"\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 class=\"empty-row\" [innerHTML]=\"messages.emptyMessage\"></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\"\n      [pagerLeftArrowIcon]=\"cssClasses.pagerLeftArrow\"\n      [pagerRightArrowIcon]=\"cssClasses.pagerRightArrow\"\n      [pagerPreviousIcon]=\"cssClasses.pagerPrevious\"\n      [selectedCount]=\"selected.length\"\n      [selectedMessage]=\"!!selectionType && messages.selectedMessage\"\n      [pagerNextIcon]=\"cssClasses.pagerNext\"\n      (page)=\"onFooterPage($event)\"\n    >\n    </datatable-footer>\n  }\n</div>\n","import { booleanAttribute, Directive, 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  standalone: true\n})\nexport class DisableRowDirective {\n  private element = inject(ElementRef);\n  private _disabled = false;\n  @Input({ transform: booleanAttribute }) set disabled(val: boolean) {\n    this._disabled = val;\n    if (val) {\n      this.disableAllElements();\n    }\n  }\n\n  get disabled() {\n    return this._disabled;\n  }\n\n  disableAllElements() {\n    const el = this.element?.nativeElement;\n    if (!el) {\n      return;\n    }\n    Array.from(el.querySelectorAll('*') as HTMLAllCollection).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 { DataTablePagerComponent } from './components/footer/pager.component';\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';\n\n@NgModule({\n  imports: [\n    DataTableFooterTemplateDirective,\n    DatatableComponent,\n    DataTableColumnDirective,\n    DataTablePagerComponent,\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    DataTablePagerComponent,\n    DatatableGroupHeaderTemplateDirective,\n    DisableRowDirective,\n    DatatableRowDefComponent,\n    DatatableRowDefDirective\n  ]\n})\nexport class NgxDatatableModule {\n  /**\n   * Configure global configuration via INgxDatatableConfig\n   * @param configuration\n   */\n  static forRoot(configuration: INgxDatatableConfig): ModuleWithProviders<NgxDatatableModule> {\n    return {\n      ngModule: NgxDatatableModule,\n      providers: [{ provide: 'configuration', useValue: configuration }]\n    };\n  }\n}\n\n/**\n * Interface definition for INgxDatatableConfig global configuration\n */\nexport interface INgxDatatableConfig {\n  messages?: {\n    emptyMessage: string; // Message to show when array is presented, but contains no values\n    totalMessage: string; // Footer total message\n    selectedMessage: string; // Footer selected message\n  };\n  cssClasses?: {\n    sortAscending: string;\n    sortDescending: string;\n    sortUnset: string;\n    pagerLeftArrow: string;\n    pagerRightArrow: string;\n    pagerPrevious: string;\n    pagerNext: string;\n  };\n  headerHeight?: number;\n  footerHeight?: number;\n  rowHeight?: number;\n  defaultColumnWidth?: number;\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/header/header.component';\nexport * from './lib/components/header/header-cell.component';\nexport * from './lib/components/body/body.component';\nexport * from './lib/components/body/body-cell.component';\nexport * from './lib/components/body/body-row.component';\nexport * from './lib/components/body/progress-bar.component';\nexport * from './lib/components/body/scroller.component';\nexport * from './lib/components/body/body-row-wrapper.component';\nexport * from './lib/components/body/selection.component';\nexport * from './lib/components/body/body-group-header.directive';\nexport * from './lib/components/body/body-group-header-template.directive';\nexport * from './lib/components/body/summary/summary-row.component';\nexport * from './lib/components/footer/footer.component';\nexport * from './lib/components/footer/pager.component';\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/draggable.directive';\nexport * from './lib/directives/long-press.directive';\nexport * from './lib/directives/orderable.directive';\nexport * from './lib/directives/resizeable.directive';\nexport * from './lib/directives/visibility.directive';\nexport * from './lib/directives/disable-row.directive';\n\n// services\nexport * from './lib/services/scrollbar-helper.service';\nexport * from './lib/services/column-changes.service';\n\n// types\nexport * from './lib/types/public.types';\nexport * from './lib/types/table-column.type';\n\n// utils\nexport * from './lib/utils/id';\nexport * from './lib/utils/column';\nexport * from './lib/utils/column-prop-getters';\nexport * from './lib/utils/camel-case';\nexport * from './lib/utils/keys';\nexport * from './lib/utils/math';\nexport * from './lib/utils/selection';\nexport * from './lib/utils/throttle';\nexport * from './lib/utils/sort';\nexport * from './lib/utils/row-height-cache';\nexport * from './lib/utils/column-helper';\nexport * from './lib/utils/tree';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}