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